fix: compact plan and todo tool header args (#1031)

This commit is contained in:
Charles Packer
2026-02-18 23:31:59 -08:00
committed by GitHub
parent 366c1a39c7
commit f92279c2a5
2 changed files with 57 additions and 0 deletions

View File

@@ -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

View 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");
});
});