fix(acp): clean read tool display content (#30569)

This commit is contained in:
Shoubhit Dash
2026-06-03 19:36:27 +05:30
committed by GitHub
parent e707e416ed
commit 8851e4de2b
5 changed files with 179 additions and 7 deletions

View File

@@ -36,7 +36,37 @@ export const Parameters = Schema.Struct({
}),
})
export const ReadTool = Tool.define(
type Display =
| {
type: "directory"
path: string
entries: string[]
offset: number
totalEntries: number
truncated: boolean
}
| {
type: "file"
path: string
text: string
lineStart: number
lineEnd: number
totalLines: number
truncated: boolean
}
type Metadata = {
preview: string
truncated: boolean
loaded: string[]
display?: Display
}
export const ReadTool = Tool.define<
typeof Parameters,
Metadata,
FSUtil.Service | Instruction.Service | LSP.Service | Reference.Service | Scope.Scope
>(
"read",
Effect.gen(function* () {
const fs = yield* FSUtil.Service
@@ -200,7 +230,7 @@ export const ReadTool = Tool.define(
const run = Effect.fn("ReadTool.execute")(function* (
params: Schema.Schema.Type<typeof Parameters>,
ctx: Tool.Context,
ctx: Tool.Context<Metadata>,
) {
const instance = yield* InstanceState.context
let filepath = params.filePath
@@ -258,6 +288,14 @@ export const ReadTool = Tool.define(
preview: sliced.slice(0, 20).join("\n"),
truncated,
loaded: [] as string[],
display: {
type: "directory" as const,
path: filepath,
entries: sliced,
offset,
totalEntries: items.length,
truncated,
},
},
}
}
@@ -328,6 +366,15 @@ export const ReadTool = Tool.define(
preview: file.raw.slice(0, 20).join("\n"),
truncated,
loaded: loaded.map((item) => item.filepath),
display: {
type: "file" as const,
path: filepath,
text: file.raw.join("\n"),
lineStart: file.offset,
lineEnd: last,
totalLines: file.count,
truncated,
},
},
}
})
@@ -335,7 +382,7 @@ export const ReadTool = Tool.define(
return {
description: DESCRIPTION,
parameters: Parameters,
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context) =>
execute: (params: Schema.Schema.Type<typeof Parameters>, ctx: Tool.Context<Metadata>) =>
run(params, ctx).pipe(Effect.orDie),
}
}),