diff options
| author | Goni Zahavy <[email protected]> | 2026-01-29 02:47:09 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-01-28 18:47:09 -0600 |
| commit | e5b33f8a5e249f8b3de20afaaedf573bdabb3b5d (patch) | |
| tree | f0a2de46f71525360ffad2798749e5d771deb6aa | |
| parent | 90a7e3d64e0a83857906336f78808ffb92afe150 (diff) | |
| download | opencode-e5b33f8a5e249f8b3de20afaaedf573bdabb3b5d.tar.gz opencode-e5b33f8a5e249f8b3de20afaaedf573bdabb3b5d.zip | |
fix(opencode): add `AbortSignal` support to `Ripgrep.files()` and `GlobTool` (#10833)
| -rw-r--r-- | packages/opencode/src/file/ripgrep.ts | 12 | ||||
| -rw-r--r-- | packages/opencode/src/tool/glob.ts | 1 | ||||
| -rw-r--r-- | packages/opencode/src/tool/ls.ts | 2 |
3 files changed, 12 insertions, 3 deletions
diff --git a/packages/opencode/src/file/ripgrep.ts b/packages/opencode/src/file/ripgrep.ts index 0d1817356..0f6889779 100644 --- a/packages/opencode/src/file/ripgrep.ts +++ b/packages/opencode/src/file/ripgrep.ts @@ -209,7 +209,10 @@ export namespace Ripgrep { hidden?: boolean follow?: boolean maxDepth?: number + signal?: AbortSignal }) { + input.signal?.throwIfAborted() + const args = [await filepath(), "--files", "--glob=!.git/*"] if (input.follow !== false) args.push("--follow") if (input.hidden !== false) args.push("--hidden") @@ -235,6 +238,7 @@ export namespace Ripgrep { stdout: "pipe", stderr: "ignore", maxBuffer: 1024 * 1024 * 20, + signal: input.signal, }) const reader = proc.stdout.getReader() @@ -243,6 +247,8 @@ export namespace Ripgrep { try { while (true) { + input.signal?.throwIfAborted() + const { done, value } = await reader.read() if (done) break @@ -261,11 +267,13 @@ export namespace Ripgrep { reader.releaseLock() await proc.exited } + + input.signal?.throwIfAborted() } - export async function tree(input: { cwd: string; limit?: number }) { + export async function tree(input: { cwd: string; limit?: number; signal?: AbortSignal }) { log.info("tree", input) - const files = await Array.fromAsync(Ripgrep.files({ cwd: input.cwd })) + const files = await Array.fromAsync(Ripgrep.files({ cwd: input.cwd, signal: input.signal })) interface Node { path: string[] children: Node[] diff --git a/packages/opencode/src/tool/glob.ts b/packages/opencode/src/tool/glob.ts index dda57f6ee..6943795f8 100644 --- a/packages/opencode/src/tool/glob.ts +++ b/packages/opencode/src/tool/glob.ts @@ -38,6 +38,7 @@ export const GlobTool = Tool.define("glob", { for await (const file of Ripgrep.files({ cwd: search, glob: [params.pattern], + signal: ctx.abort, })) { if (files.length >= limit) { truncated = true diff --git a/packages/opencode/src/tool/ls.ts b/packages/opencode/src/tool/ls.ts index cc3d75007..b848e969b 100644 --- a/packages/opencode/src/tool/ls.ts +++ b/packages/opencode/src/tool/ls.ts @@ -56,7 +56,7 @@ export const ListTool = Tool.define("list", { const ignoreGlobs = IGNORE_PATTERNS.map((p) => `!${p}*`).concat(params.ignore?.map((p) => `!${p}`) || []) const files = [] - for await (const file of Ripgrep.files({ cwd: searchPath, glob: ignoreGlobs })) { + for await (const file of Ripgrep.files({ cwd: searchPath, glob: ignoreGlobs, signal: ctx.abort })) { files.push(file) if (files.length >= LIMIT) break } |
