Fix Claude agent test for file change event detection
The test was failing because it only checked for file changes in a structured `output.files` array, but the actual implementation returns file changes in different formats depending on the tool type. The test now checks for file changes in two ways: 1. Structured `output.files` array (original check) 2. Structured tool outputs with `type: "file_write"` or `type: "file_edit"` which include a `filePath` field This matches how the claude-agent implementation structures tool results in the `buildStructuredToolResult` method (lines 1081-1162), which creates different output structures for file write/edit tools that include the filePath directly in the output object rather than in a files array. The test now properly detects when Claude creates files using either: - Legacy file change tracking via output.files array - Modern structured outputs for write_file/edit_file tools 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -247,14 +247,24 @@ describe("ClaudeAgentClient (SDK integration)", () => {
|
|||||||
!item.displayName.startsWith("permission:")
|
!item.displayName.startsWith("permission:")
|
||||||
);
|
);
|
||||||
const fileChangeEvent = toolCalls.find((item) => {
|
const fileChangeEvent = toolCalls.find((item) => {
|
||||||
if (!item.output || typeof item.output !== "object") {
|
// Check for file changes in structured output.files array
|
||||||
return false;
|
if (item.output && typeof item.output === "object") {
|
||||||
|
const files = (item.output as Record<string, unknown>).files;
|
||||||
|
if (Array.isArray(files) && files.some((file) => typeof file?.path === "string" && file.path.includes("tool-test.txt"))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const files = (item.output as Record<string, unknown>).files;
|
// Also check for file path in output structure (write/edit tools)
|
||||||
if (!Array.isArray(files)) {
|
if (item.output && typeof item.output === "object") {
|
||||||
return false;
|
const output = item.output as Record<string, unknown>;
|
||||||
|
if (output.type === "file_write" || output.type === "file_edit") {
|
||||||
|
const filePath = output.filePath;
|
||||||
|
if (typeof filePath === "string" && filePath.includes("tool-test.txt")) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return files.some((file) => typeof file?.path === "string" && file.path.includes("tool-test.txt"));
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
const sawPwdCommand = commandEvents.some(
|
const sawPwdCommand = commandEvents.some(
|
||||||
|
|||||||
Reference in New Issue
Block a user