From 418cf8529f1f871975e4d6d500549f197e41e747 Mon Sep 17 00:00:00 2001 From: ismeth Date: Sat, 28 Feb 2026 01:43:47 +0100 Subject: [PATCH] fix(glob): use cwd-relative search for ripgrep to fix directory prefix patterns Ripgrep's --glob flag silently returns zero results when the search target is an absolute path and the pattern contains directory prefixes (e.g. 'apps/backend/**/*.ts' with '/project'). This is a known ripgrep behavior where glob matching fails against paths rooted at absolute arguments. Fix by running ripgrep with cwd set to the search path and '.' as the search target, matching how the find backend already operates. Ripgrep then sees relative paths internally, so directory-prefixed globs match correctly. Output paths are resolved back to absolute via resolve(). --- src/tools/glob/cli.ts | 8 ++++---- src/tools/glob/tools.ts | 3 +-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/tools/glob/cli.ts b/src/tools/glob/cli.ts index b621383a..99613338 100644 --- a/src/tools/glob/cli.ts +++ b/src/tools/glob/cli.ts @@ -1,3 +1,4 @@ +import { resolve } from "node:path" import { spawn } from "bun" import { resolveGrepCli, @@ -119,10 +120,9 @@ async function runRgFilesInternal( if (isRg) { const args = buildRgArgs(options) - const paths = options.paths?.length ? options.paths : ["."] - args.push(...paths) + cwd = options.paths?.[0] || "." + args.push(".") command = [cli.path, ...args] - cwd = undefined } else if (isWindows) { command = buildPowerShellCommand(options) cwd = undefined @@ -177,7 +177,7 @@ async function runRgFilesInternal( let filePath: string if (isRg) { - filePath = line + filePath = cwd ? resolve(cwd, line) : line } else if (isWindows) { filePath = line.trim() } else { diff --git a/src/tools/glob/tools.ts b/src/tools/glob/tools.ts index d808377b..cdfa983b 100644 --- a/src/tools/glob/tools.ts +++ b/src/tools/glob/tools.ts @@ -29,12 +29,11 @@ export function createGlobTools(ctx: PluginInput): Record const dir = typeof runtimeCtx.directory === "string" ? runtimeCtx.directory : ctx.directory const searchPath = args.path ? resolve(dir, args.path) : dir - const paths = [searchPath] const result = await runRgFiles( { pattern: args.pattern, - paths, + paths: [searchPath], }, cli )