fix: compact plan and todo tool header args (#1031)
This commit is contained in:
@@ -7,13 +7,19 @@ import {
|
||||
isFileReadTool,
|
||||
isFileWriteTool,
|
||||
isPatchTool,
|
||||
isPlanTool,
|
||||
isShellTool,
|
||||
isTodoTool,
|
||||
} from "./toolNameMapping.js";
|
||||
|
||||
// Small helpers
|
||||
const isRecord = (v: unknown): v is Record<string, unknown> =>
|
||||
typeof v === "object" && v !== null;
|
||||
|
||||
function formatItemCount(count: number): string {
|
||||
return `${String(count)} item${count === 1 ? "" : "s"}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a file path for display (matches Claude Code style):
|
||||
* - Files within cwd: relative path without ./ prefix
|
||||
@@ -280,6 +286,18 @@ export function formatArgsDisplay(
|
||||
return { display, parsed };
|
||||
}
|
||||
|
||||
// Plan tools: only show compact plan item count.
|
||||
if (isPlanTool(toolName) && Array.isArray(parsed.plan)) {
|
||||
display = formatItemCount(parsed.plan.length);
|
||||
return { display, parsed };
|
||||
}
|
||||
|
||||
// Todo tools: only show compact todo item count.
|
||||
if (isTodoTool(toolName) && Array.isArray(parsed.todos)) {
|
||||
display = formatItemCount(parsed.todos.length);
|
||||
return { display, parsed };
|
||||
}
|
||||
|
||||
// Shell/Bash tools: show just the command
|
||||
if (isShellTool(toolName) && parsed.command) {
|
||||
// Handle both string and array command formats
|
||||
|
||||
39
src/tests/cli/formatArgsDisplay.test.ts
Normal file
39
src/tests/cli/formatArgsDisplay.test.ts
Normal file
@@ -0,0 +1,39 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { formatArgsDisplay } from "../../cli/helpers/formatArgsDisplay";
|
||||
|
||||
describe("formatArgsDisplay compact plan/todo headers", () => {
|
||||
test("shows only plan item count for update_plan", () => {
|
||||
const args = JSON.stringify({
|
||||
explanation: "Investigating restart regression",
|
||||
plan: [
|
||||
{ step: "Step 1", status: "pending" },
|
||||
{ step: "Step 2", status: "pending" },
|
||||
{ step: "Step 3", status: "pending" },
|
||||
],
|
||||
});
|
||||
|
||||
expect(formatArgsDisplay(args, "update_plan").display).toBe("3 items");
|
||||
});
|
||||
|
||||
test("handles singular plan item count for UpdatePlan", () => {
|
||||
const args = JSON.stringify({
|
||||
explanation: "One-step fix",
|
||||
plan: [{ step: "Step 1", status: "pending" }],
|
||||
});
|
||||
|
||||
expect(formatArgsDisplay(args, "UpdatePlan").display).toBe("1 item");
|
||||
});
|
||||
|
||||
test("shows only todo item count for TODO tools", () => {
|
||||
const args = JSON.stringify({
|
||||
todos: [
|
||||
{ content: "First", status: "pending" },
|
||||
{ content: "Second", status: "in_progress" },
|
||||
],
|
||||
note: "extra metadata",
|
||||
});
|
||||
|
||||
expect(formatArgsDisplay(args, "TodoWrite").display).toBe("2 items");
|
||||
expect(formatArgsDisplay(args, "write_todos").display).toBe("2 items");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user