Skip to content

Commit 3ca900c

Browse files
fix(readFileTool): fix legacy format detection and test mocks
- Enhance isLegacyReadFileParams to also detect bare 'files' array (real legacy chat data) - Fix batch approval test: add explicit readWithSlice mocks for file content - Fix partial display test: mock fs.readFile to return string for utf8 encoding
1 parent ab777ca commit 3ca900c

2 files changed

Lines changed: 23 additions & 2 deletions

File tree

packages/types/src/tool-params.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,10 @@ export type ReadFileToolParams = ReadFileParams | LegacyReadFileParams
8989
* Type guard to check if params are in legacy format.
9090
*/
9191
export function isLegacyReadFileParams(params: ReadFileToolParams): params is LegacyReadFileParams {
92-
return "_legacyFormat" in params && params._legacyFormat === true
92+
// Detect explicit flag (new code path) or bare `files` array (real legacy chat data)
93+
const hasLegacyFlag = "_legacyFormat" in params && params._legacyFormat === true
94+
const hasFilesArray = "files" in params && Array.isArray((params as unknown as Record<string, unknown>).files)
95+
return hasLegacyFlag || hasFilesArray
9396
}
9497

9598
export interface Coordinate {

src/core/tools/__tests__/readFileTool.spec.ts

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,23 @@ describe("ReadFileTool", () => {
768768
mockedFsReadFile.mockResolvedValueOnce(Buffer.from("file1 content"))
769769
mockedFsReadFile.mockResolvedValueOnce(Buffer.from("file2 content"))
770770

771+
// Override readWithSlice to return content that reflects the actual file data
772+
mockedReadWithSlice
773+
.mockReturnValueOnce({
774+
content: "1 | file1 content",
775+
returnedLines: 1,
776+
totalLines: 1,
777+
wasTruncated: false,
778+
includedRanges: [[1, 1]],
779+
})
780+
.mockReturnValueOnce({
781+
content: "1 | file2 content",
782+
returnedLines: 1,
783+
totalLines: 1,
784+
wasTruncated: false,
785+
includedRanges: [[1, 1]],
786+
})
787+
771788
vi.spyOn(console, "warn").mockImplementation(() => {})
772789

773790
await readFileTool.execute(
@@ -823,7 +840,8 @@ describe("ReadFileTool", () => {
823840
const callbacks = createMockCallbacks()
824841

825842
mockTask.ask.mockResolvedValue({ response: "yesButtonClicked", text: undefined, images: undefined })
826-
mockedFsReadFile.mockResolvedValue(Buffer.from("line1\nline2\nline3\nline4\nline5"))
843+
// fs.readFile with "utf8" encoding returns a string, not a Buffer
844+
mockedFsReadFile.mockResolvedValue("line1\nline2\nline3\nline4\nline5" as any)
827845
vi.spyOn(console, "warn").mockImplementation(() => {})
828846

829847
await readFileTool.execute(

0 commit comments

Comments
 (0)