From 9ef9ff2d6773fefaf26e9bdbd464dac662c23362 Mon Sep 17 00:00:00 2001 From: Lasmar Khalifa Date: Fri, 5 Jun 2026 19:45:34 -0400 Subject: [PATCH] add taskcreate tool use formatter --- .../cogs/agent/providers/claude/tool_use.rb | 17 ++++++++++++++++ .../agent/providers/claude/tool_use_test.rb | 20 +++++++++++++++++++ 2 files changed, 37 insertions(+) diff --git a/lib/roast/cogs/agent/providers/claude/tool_use.rb b/lib/roast/cogs/agent/providers/claude/tool_use.rb index 8b02a7b6..f3443171 100644 --- a/lib/roast/cogs/agent/providers/claude/tool_use.rb +++ b/lib/roast/cogs/agent/providers/claude/tool_use.rb @@ -312,6 +312,23 @@ def format_taskupdate "TASKUPDATE ##{input[:taskId]} → #{input[:status]}" end + # Formats a TaskCreate tool-use line. + # + # Input fields: + # :subject (String) – title of the task to create [required] + # + # Output: "TASKCREATE ", with :subject truncated to + # TRUNCATE_LIMIT chars. + # + # Examples: + # TASKCREATE Run formatter stress test + # TASKCREATE Review multiline edit output in tmp/formatter_st... + # + #: () -> String + def format_taskcreate + "TASKCREATE #{truncate(input[:subject])}" + end + #: () -> String def format_unknown "UNKNOWN [#{name}] #{input.inspect}" diff --git a/test/roast/cogs/agent/providers/claude/tool_use_test.rb b/test/roast/cogs/agent/providers/claude/tool_use_test.rb index a7c1f55e..49b7719e 100644 --- a/test/roast/cogs/agent/providers/claude/tool_use_test.rb +++ b/test/roast/cogs/agent/providers/claude/tool_use_test.rb @@ -378,6 +378,26 @@ class ToolUseTest < ActiveSupport::TestCase assert_equal "TASKUPDATE #1 → completed", output end + # format_taskcreate + + test "format_taskcreate renders the subject" do + tool_use = ToolUse.new(name: :taskcreate, input: { subject: "Run formatter stress test" }) + + output = tool_use.format + + assert_equal "TASKCREATE Run formatter stress test", output + end + + test "format_taskcreate truncates the subject" do + long = "a" * (ToolUse::TRUNCATE_LIMIT + 10) + truncated = "#{"a" * (ToolUse::TRUNCATE_LIMIT - 3)}..." + tool_use = ToolUse.new(name: :taskcreate, input: { subject: long }) + + output = tool_use.format + + assert_equal "TASKCREATE #{truncated}", output + end + test "format calls format_unknown for unknown tool" do tool_use = ToolUse.new(name: :unknown_tool, input: { arg: "value" })