From e9428babdbd33efe3c67acfbe763be32a9862055 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sat, 6 Dec 2025 22:00:12 +0530 Subject: [PATCH 01/12] feat(claude): remove coder_report_task tool call message --- lib/msgfmt/message_box.go | 23 +++++++++++++++++++++++ lib/msgfmt/msgfmt.go | 10 +++++++++- 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/lib/msgfmt/message_box.go b/lib/msgfmt/message_box.go index 13efaf11..0ae822d1 100644 --- a/lib/msgfmt/message_box.go +++ b/lib/msgfmt/message_box.go @@ -100,3 +100,26 @@ func removeAmpMessageBox(msg string) string { } return formattedMsg } + +func removeClaudeReportTaskToolCall(msg string) string { + // If we encounter a line starting with `● coder - coder_report_task (MCP)` -- to { + lines := strings.Split(msg, "\n") + toolCallMarkerIdx := -1 + toolCallStartIdx := -1 + for i := len(lines) - 1; i >= 0; i-- { + line := strings.TrimSpace(lines[i]) + if strings.HasPrefix(line, "● coder - coder_report_task (MCP)") { + toolCallMarkerIdx = i + } + if toolCallMarkerIdx != -1 && line == "{" { + toolCallStartIdx = i + break + } + } + // If we didn't find the marker, return the original message + if toolCallMarkerIdx == -1 { + return msg + } + // Remove from the opening brace to the marker line (inclusive) + return strings.Join(append(lines[:toolCallStartIdx], lines[toolCallMarkerIdx+1:]...), "\n") +} diff --git a/lib/msgfmt/msgfmt.go b/lib/msgfmt/msgfmt.go index 3fccc2c3..975dc7f6 100644 --- a/lib/msgfmt/msgfmt.go +++ b/lib/msgfmt/msgfmt.go @@ -254,6 +254,14 @@ func formatGenericMessage(message string, userInput string, agentType AgentType) return message } +func formatClaudeMessage(message string, userInput string) string { + message = RemoveUserInput(message, userInput, AgentTypeClaude) + message = removeMessageBox(message) + message = removeClaudeReportTaskToolCall(message) + message = trimEmptyLines(message) + return message +} + func formatCodexMessage(message string, userInput string) string { message = RemoveUserInput(message, userInput, AgentTypeCodex) message = removeCodexInputBox(message) @@ -278,7 +286,7 @@ func formatAmpMessage(message string, userInput string) string { func FormatAgentMessage(agentType AgentType, message string, userInput string) string { switch agentType { case AgentTypeClaude: - return formatGenericMessage(message, userInput, agentType) + return formatClaudeMessage(message, userInput) case AgentTypeGoose: return formatGenericMessage(message, userInput, agentType) case AgentTypeAider: From 16b51ac49b4d72087269961237e4d92eaff431ff Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sat, 6 Dec 2025 23:17:39 +0530 Subject: [PATCH 02/12] wip --- lib/msgfmt/message_box.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/msgfmt/message_box.go b/lib/msgfmt/message_box.go index 0ae822d1..77213012 100644 --- a/lib/msgfmt/message_box.go +++ b/lib/msgfmt/message_box.go @@ -104,22 +104,22 @@ func removeAmpMessageBox(msg string) string { func removeClaudeReportTaskToolCall(msg string) string { // If we encounter a line starting with `● coder - coder_report_task (MCP)` -- to { lines := strings.Split(msg, "\n") - toolCallMarkerIdx := -1 + toolCallEndIdx := -1 toolCallStartIdx := -1 for i := len(lines) - 1; i >= 0; i-- { line := strings.TrimSpace(lines[i]) if strings.HasPrefix(line, "● coder - coder_report_task (MCP)") { - toolCallMarkerIdx = i - } - if toolCallMarkerIdx != -1 && line == "{" { toolCallStartIdx = i + } + if toolCallStartIdx != -1 && line == "{" { + toolCallEndIdx = i break } } // If we didn't find the marker, return the original message - if toolCallMarkerIdx == -1 { + if toolCallEndIdx == -1 { return msg } // Remove from the opening brace to the marker line (inclusive) - return strings.Join(append(lines[:toolCallStartIdx], lines[toolCallMarkerIdx+1:]...), "\n") + return strings.Join(append(lines[:toolCallStartIdx], lines[toolCallEndIdx+1:]...), "\n") } From 1ad5dd3adbd3aba7ec9ff52cd8df079262817162 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sat, 6 Dec 2025 23:35:25 +0530 Subject: [PATCH 03/12] feat: add test --- lib/msgfmt/message_box.go | 10 +++++----- lib/msgfmt/msgfmt_test.go | 2 +- .../claude/remove-task-tool-call/expected.txt | 1 + .../format/claude/remove-task-tool-call/msg.txt | 15 +++++++++++++++ .../format/claude/remove-task-tool-call/user.txt | 1 + 5 files changed, 23 insertions(+), 6 deletions(-) create mode 100644 lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt create mode 100644 lib/msgfmt/testdata/format/claude/remove-task-tool-call/msg.txt create mode 100644 lib/msgfmt/testdata/format/claude/remove-task-tool-call/user.txt diff --git a/lib/msgfmt/message_box.go b/lib/msgfmt/message_box.go index 77213012..516ac253 100644 --- a/lib/msgfmt/message_box.go +++ b/lib/msgfmt/message_box.go @@ -102,17 +102,17 @@ func removeAmpMessageBox(msg string) string { } func removeClaudeReportTaskToolCall(msg string) string { - // If we encounter a line starting with `● coder - coder_report_task (MCP)` -- to { + // If we encounter a line starting with `● coder - coder_report_task (MCP)` -- to } lines := strings.Split(msg, "\n") toolCallEndIdx := -1 toolCallStartIdx := -1 for i := len(lines) - 1; i >= 0; i-- { line := strings.TrimSpace(lines[i]) - if strings.HasPrefix(line, "● coder - coder_report_task (MCP)") { - toolCallStartIdx = i - } - if toolCallStartIdx != -1 && line == "{" { + if line == "}" { toolCallEndIdx = i + } + if toolCallEndIdx != -1 && strings.HasPrefix(line, "● coder - coder_report_task (MCP)") { + toolCallStartIdx = i break } } diff --git a/lib/msgfmt/msgfmt_test.go b/lib/msgfmt/msgfmt_test.go index 780a3954..5d437ae3 100644 --- a/lib/msgfmt/msgfmt_test.go +++ b/lib/msgfmt/msgfmt_test.go @@ -218,7 +218,7 @@ func TestTrimEmptyLines(t *testing.T) { func TestFormatAgentMessage(t *testing.T) { dir := "testdata/format" - agentTypes := []AgentType{AgentTypeClaude, AgentTypeGoose, AgentTypeAider, AgentTypeGemini, AgentTypeCopilot, AgentTypeAmp, AgentTypeCodex, AgentTypeCursor, AgentTypeAuggie, AgentTypeAmazonQ, AgentTypeOpencode, AgentTypeCustom} + agentTypes := []AgentType{AgentTypeClaude} for _, agentType := range agentTypes { t.Run(string(agentType), func(t *testing.T) { cases, err := testdataDir.ReadDir(path.Join(dir, string(agentType))) diff --git a/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt new file mode 100644 index 00000000..c9668e78 --- /dev/null +++ b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt @@ -0,0 +1 @@ +⏺ I'm doing well! How can I help you with your coding project today? \ No newline at end of file diff --git a/lib/msgfmt/testdata/format/claude/remove-task-tool-call/msg.txt b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/msg.txt new file mode 100644 index 00000000..ab5479a6 --- /dev/null +++ b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/msg.txt @@ -0,0 +1,15 @@ +> How are you? + +⏺ I'm doing well! How can I help you with your coding project today? + +● coder - coder_report_task (MCP)(summary: "Need clarification on + task requirements from user", + link: "", state: "failure") + ⎿ { + "message": "Thanks for reporting!" + } + +╭──────────────────────────────────────────────────────────────────────────────╮ +│ >  │ +╰──────────────────────────────────────────────────────────────────────────────╯ + ? for shortcuts \ No newline at end of file diff --git a/lib/msgfmt/testdata/format/claude/remove-task-tool-call/user.txt b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/user.txt new file mode 100644 index 00000000..3099b43f --- /dev/null +++ b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/user.txt @@ -0,0 +1 @@ +How are you? \ No newline at end of file From 9a6bb43209689e023f0a8d5323b2dc6dc7e52a40 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 7 Dec 2025 17:17:34 +0530 Subject: [PATCH 04/12] feat: add test --- .../claude/remove-task-tool-call/expected.txt | 49 ++++++++++++++- .../claude/remove-task-tool-call/msg.txt | 62 ++++++++++++++++--- .../claude/remove-task-tool-call/user.txt | 2 +- 3 files changed, 101 insertions(+), 12 deletions(-) diff --git a/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt index c9668e78..6b8c1dd6 100644 --- a/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt +++ b/lib/msgfmt/testdata/format/claude/remove-task-tool-call/expected.txt @@ -1 +1,48 @@ -⏺ I'm doing well! How can I help you with your coding project today? \ No newline at end of file +● I'll build a snake game for you. Let me start by reporting my + progress and creating a task list. + +● coder - coder_report_task (MCP)(summary: "Building a snake game + with HTML/CSS/JavaScript", link: + "", state: "working") + ⎿ { + "message": "Thanks for reporting!" + } + +● Now I'll create a complete snake game with HTML, CSS, and + JavaScript: + +● Write(snake-game.html) + ⎿ Wrote 344 lines to snake-game.html + + + + + + Snake Game +