fix: file references & grep tool for windows (#2980)

This commit is contained in:
Mani Sundararajan
2025-10-05 15:32:07 -04:00
committed by GitHub
parent 9c6192b00d
commit 889c276558
2 changed files with 7 additions and 6 deletions

View File

@@ -47,7 +47,7 @@ import { NamedError } from "../util/error"
import { ulid } from "ulid"
import { spawn } from "child_process"
import { Command } from "../command"
import { $ } from "bun"
import { $, fileURLToPath } from "bun"
import { ConfigMarkdown } from "../config/markdown"
export namespace SessionPrompt {
@@ -589,7 +589,7 @@ export namespace SessionPrompt {
log.info("file", { mime: part.mime })
// have to normalize, symbol search returns absolute paths
// Decode the pathname since URL constructor doesn't automatically decode it
const filepath = decodeURIComponent(url.pathname)
const filepath = fileURLToPath(part.url)
const stat = await Bun.file(filepath).stat()
if (stat.isDirectory()) {
@@ -604,14 +604,14 @@ export namespace SessionPrompt {
end: url.searchParams.get("end"),
}
if (range.start != null) {
const filePath = part.url.split("?")[0]
const filePathURI = part.url.split("?")[0]
let start = parseInt(range.start)
let end = range.end ? parseInt(range.end) : undefined
// some LSP servers (eg, gopls) don't give full range in
// workspace/symbol searches, so we'll try to find the
// symbol in the document to get the full range
if (start === end) {
const symbols = await LSP.documentSymbol(filePath)
const symbols = await LSP.documentSymbol(filePathURI)
for (const symbol of symbols) {
let range: LSP.Range | undefined
if ("range" in symbol) {

View File

@@ -25,6 +25,7 @@ export const GrepTool = Tool.define("grep", {
args.push("--glob", params.include)
}
args.push(searchPath)
args.push("--field-match-separator=|")
const proc = Bun.spawn([rgPath, ...args], {
stdout: "pipe",
@@ -53,11 +54,11 @@ export const GrepTool = Tool.define("grep", {
for (const line of lines) {
if (!line) continue
const [filePath, lineNumStr, ...lineTextParts] = line.split(":")
const [filePath, lineNumStr, ...lineTextParts] = line.split("|")
if (!filePath || !lineNumStr || lineTextParts.length === 0) continue
const lineNum = parseInt(lineNumStr, 10)
const lineText = lineTextParts.join(":")
const lineText = lineTextParts.join("|")
const file = Bun.file(filePath)
const stats = await file.stat().catch(() => null)