diff --git a/packages/server/src/server/agent/providers/claude/sidechain-tracker.ts b/packages/server/src/server/agent/providers/claude/sidechain-tracker.ts index f53bfdcbc2..98cb25d920 100644 --- a/packages/server/src/server/agent/providers/claude/sidechain-tracker.ts +++ b/packages/server/src/server/agent/providers/claude/sidechain-tracker.ts @@ -113,7 +113,7 @@ function formatSubAgentActionLog( export function readClaudeSubagentActionLog( entries: readonly { type?: unknown; message?: { content?: unknown } }[], ): string { - const actionsById = new Map(); + const callsById = new Map(); for (const entry of entries) { const content = entry.type === "assistant" ? entry.message?.content : undefined; if (!Array.isArray(content)) continue; @@ -121,13 +121,18 @@ export function readClaudeSubagentActionLog( if (!isClaudeContentChunk(block) || !isToolUseChunk(block)) continue; const toolName = readTrimmedString(block.name); if (!toolName) continue; - const key = readTrimmedString(block.id) ?? `assistant:${toolName}:${actionsById.size}`; - if (actionsById.has(key)) continue; - const summary = deriveSubAgentActionSummary(toolName, block.input ?? null); - actionsById.set(key, { toolName, ...(summary ? { summary } : {}) }); + const key = readTrimmedString(block.id) ?? `assistant:${toolName}:${callsById.size}`; + if (callsById.has(key)) continue; + callsById.set(key, { toolName, input: block.input ?? null }); } } - return formatSubAgentActionLog([...actionsById.values()].slice(-MAX_SUB_AGENT_LOG_ENTRIES)); + const actions = [...callsById.values()] + .slice(-MAX_SUB_AGENT_LOG_ENTRIES) + .map(({ toolName, input }) => ({ + toolName, + summary: deriveSubAgentActionSummary(toolName, input), + })); + return formatSubAgentActionLog(actions); } export class ClaudeSidechainTracker {