diff --git a/src/services/tools/toolOrchestration.ts b/src/services/tools/toolOrchestration.ts index d82010ce..2416dcbb 100644 --- a/src/services/tools/toolOrchestration.ts +++ b/src/services/tools/toolOrchestration.ts @@ -4,10 +4,11 @@ import { findToolByName, type ToolUseContext } from '../../Tool.js' import type { AssistantMessage, Message } from '../../types/message.js' import { all } from '../../utils/generators.js' import { type MessageUpdateLazy, runToolUse } from './toolExecution.js' -export { +import { DEFAULT_MAX_TOOL_USE_CONCURRENCY, getMaxToolUseConcurrency, } from './toolConcurrency.js' +export { DEFAULT_MAX_TOOL_USE_CONCURRENCY, getMaxToolUseConcurrency } export type MessageUpdate = { message?: Message diff --git a/src/utils/ripgrep.ts b/src/utils/ripgrep.ts index 683da051..0697688a 100644 --- a/src/utils/ripgrep.ts +++ b/src/utils/ripgrep.ts @@ -1,5 +1,6 @@ import type { ChildProcess, ExecFileException } from 'child_process' import { execFile, spawn } from 'child_process' +import { existsSync } from 'fs' import memoize from 'lodash-es/memoize.js' import { homedir } from 'os' import * as path from 'path' @@ -61,6 +62,12 @@ const getRipgrepConfig = memoize((): RipgrepConfig => { ? path.resolve(rgRoot, `${process.arch}-win32`, 'rg.exe') : path.resolve(rgRoot, `${process.arch}-${process.platform}`, 'rg') + // Fall back to system rg when the vendor binary is absent (e.g. npm installs + // that don't ship the vendor/ directory alongside dist/cli.mjs). + if (!existsSync(command)) { + return { mode: 'system', command: 'rg', args: [] } + } + return { mode: 'builtin', command, args: [] } })