@tutti-os/agent-gui 0.0.233 → 0.0.235

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +49 -0
  2. package/dist/{AgentRichTextReadonly-U3XUJYCW.js → AgentRichTextReadonly-CCELQPHE.js} +5 -5
  3. package/dist/agent-conversation/index.d.ts +17 -4
  4. package/dist/agent-conversation/index.js +13 -9
  5. package/dist/agent-conversation/index.js.map +1 -1
  6. package/dist/agent-gui.d.ts +19 -3
  7. package/dist/agent-gui.js +22 -16
  8. package/dist/agent-message-center/index.d.ts +1 -1
  9. package/dist/agent-message-center/index.js +10 -7
  10. package/dist/agent-message-center/index.js.map +1 -1
  11. package/dist/{agentGuiNodeTypes-DW7T--Y8.d.ts → agentGuiNodeTypes-Dgl7kQHA.d.ts} +2 -2
  12. package/dist/agents.d.ts +1 -1
  13. package/dist/app/renderer/agentactivity.css +17 -0
  14. package/dist/{chunk-M6WEFXPL.js → chunk-2MCNNB2P.js} +2 -24
  15. package/dist/chunk-2MCNNB2P.js.map +1 -0
  16. package/dist/{chunk-CQFT3MI5.js → chunk-3YYI6RXA.js} +7 -5
  17. package/dist/{chunk-CQFT3MI5.js.map → chunk-3YYI6RXA.js.map} +1 -1
  18. package/dist/{chunk-EDP4D42H.js → chunk-45KN5Z5F.js} +877 -871
  19. package/dist/chunk-45KN5Z5F.js.map +1 -0
  20. package/dist/{chunk-T57ZZWTC.js → chunk-4HAG3FOY.js} +2 -2
  21. package/dist/{chunk-ZBI6R46N.js → chunk-5DN5N2XS.js} +2 -2
  22. package/dist/{chunk-BCBB4HOV.js → chunk-634MNSI5.js} +2 -2
  23. package/dist/chunk-A4KKC324.js +4768 -0
  24. package/dist/chunk-A4KKC324.js.map +1 -0
  25. package/dist/chunk-ALAGL6VL.js +48 -0
  26. package/dist/chunk-ALAGL6VL.js.map +1 -0
  27. package/dist/{chunk-2STAUA73.js → chunk-AYTUAZE3.js} +5 -2
  28. package/dist/chunk-AYTUAZE3.js.map +1 -0
  29. package/dist/{chunk-SWO67UWQ.js → chunk-CZOZBUIM.js} +7 -7
  30. package/dist/{chunk-SWO67UWQ.js.map → chunk-CZOZBUIM.js.map} +1 -1
  31. package/dist/{chunk-2L2LVSOD.js → chunk-EHNPHZE4.js} +881 -5812
  32. package/dist/chunk-EHNPHZE4.js.map +1 -0
  33. package/dist/{chunk-N5356722.js → chunk-EKQ7UX2B.js} +13 -319
  34. package/dist/chunk-EKQ7UX2B.js.map +1 -0
  35. package/dist/{chunk-ZXEICU6J.js → chunk-KK7YXPTS.js} +3 -1
  36. package/dist/chunk-KK7YXPTS.js.map +1 -0
  37. package/dist/{chunk-WGCDSA7P.js → chunk-MBM7PJIF.js} +27 -506
  38. package/dist/chunk-MBM7PJIF.js.map +1 -0
  39. package/dist/chunk-RMC2MGL4.js +557 -0
  40. package/dist/chunk-RMC2MGL4.js.map +1 -0
  41. package/dist/{chunk-JA6XAKKE.js → chunk-TWF6JXPC.js} +2 -2
  42. package/dist/{chunk-7AYFKNLD.js → chunk-TWMV6YTX.js} +4 -4
  43. package/dist/chunk-VV3YIU5W.js +25 -0
  44. package/dist/chunk-VV3YIU5W.js.map +1 -0
  45. package/dist/{chunk-GLVENTN6.js → chunk-WXLO33YP.js} +2 -2
  46. package/dist/chunk-XWPHTXEM.js +529 -0
  47. package/dist/chunk-XWPHTXEM.js.map +1 -0
  48. package/dist/chunk-YEXRTXTE.js +315 -0
  49. package/dist/chunk-YEXRTXTE.js.map +1 -0
  50. package/dist/{chunk-WMJDOMG6.js → chunk-ZELGKLW5.js} +4 -4
  51. package/dist/composer-projection.d.ts +37 -0
  52. package/dist/composer-projection.js +21 -0
  53. package/dist/composer-projection.js.map +1 -0
  54. package/dist/context-mention-palette/index.js +9 -7
  55. package/dist/conversation-projection.d.ts +551 -0
  56. package/dist/conversation-projection.js +42 -0
  57. package/dist/conversation-projection.js.map +1 -0
  58. package/dist/conversation-rail-projection.js +3 -3
  59. package/dist/i18n/index.d.ts +2 -0
  60. package/dist/i18n/index.js +2 -2
  61. package/dist/index.d.ts +32 -13
  62. package/dist/index.js +22 -16
  63. package/dist/index.js.map +1 -1
  64. package/dist/mention-search.js +7 -5
  65. package/dist/{types-CHAMK2g7.d.ts → types-DtXXsISB.d.ts} +1 -1
  66. package/dist/workbench/contribution.js +4 -4
  67. package/dist/workbench/index.js +4 -4
  68. package/dist/workbench/sessionTitle.js +3 -3
  69. package/dist/workspace-agent-generated-files.d.ts +1 -12
  70. package/dist/workspaceAgentActivityListTypes-BUKNyMbh.d.ts +48 -0
  71. package/dist/{workspaceLinkActions-CzsbvGmC.d.ts → workspaceLinkActions-DxyzMy10.d.ts} +13 -12
  72. package/package.json +29 -15
  73. package/dist/chunk-2L2LVSOD.js.map +0 -1
  74. package/dist/chunk-2STAUA73.js.map +0 -1
  75. package/dist/chunk-EDP4D42H.js.map +0 -1
  76. package/dist/chunk-M6WEFXPL.js.map +0 -1
  77. package/dist/chunk-N5356722.js.map +0 -1
  78. package/dist/chunk-WGCDSA7P.js.map +0 -1
  79. package/dist/chunk-ZXEICU6J.js.map +0 -1
  80. /package/dist/{AgentRichTextReadonly-U3XUJYCW.js.map → AgentRichTextReadonly-CCELQPHE.js.map} +0 -0
  81. /package/dist/{chunk-T57ZZWTC.js.map → chunk-4HAG3FOY.js.map} +0 -0
  82. /package/dist/{chunk-ZBI6R46N.js.map → chunk-5DN5N2XS.js.map} +0 -0
  83. /package/dist/{chunk-BCBB4HOV.js.map → chunk-634MNSI5.js.map} +0 -0
  84. /package/dist/{chunk-JA6XAKKE.js.map → chunk-TWF6JXPC.js.map} +0 -0
  85. /package/dist/{chunk-7AYFKNLD.js.map → chunk-TWMV6YTX.js.map} +0 -0
  86. /package/dist/{chunk-GLVENTN6.js.map → chunk-WXLO33YP.js.map} +0 -0
  87. /package/dist/{chunk-WMJDOMG6.js.map → chunk-ZELGKLW5.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../shared/agentConversation/projection/agentMessageFinalTextProjection.ts","../shared/agentConversation/projection/agentToolGroupingProjection.ts","../shared/agentConversation/projection/agentToolRendererKind.ts","../shared/agentConversation/projection/agentTranscriptPresentation.ts","../shared/agentConversation/projection/agentApprovalProjection.ts","../shared/agentConversation/projection/agentInteractiveProjection.ts","../shared/agentConversation/projection/agentTaskProjection.ts","../shared/agentConversation/projection/agentToolProjection.ts","../shared/agentConversation/projection/agentCollaborationProjection.ts","../shared/pastedTextReferenceProjection.ts","../shared/agentConversation/projection/agentConversationUserProjection.ts","../shared/agentConversation/projection/agentTurnSequenceProjection.ts","../shared/agentConversation/projection/chunkBy.ts","../shared/agentConversation/projection/agentTurnRowProjection.ts","../shared/agentConversation/projection/agentProcessingProjection.ts","../shared/agentConversation/rules/agentPatchMetadata.ts","../shared/agentConversation/projection/agentTurnSummaryFileProjection.ts","../shared/agentConversation/projection/agentTurnSummaryProjection.ts","../shared/agentConversation/projection/agentConversationProjection.ts","../shared/workspaceAgentSystemNoticeSemantics.ts","../shared/workspaceAgentToolCallIdentifiers.ts","../shared/workspaceAgentToolCallLabels.ts","../shared/workspaceAgentToolCallCanonical.ts","../shared/workspaceAgentToolCallAgentActivity.ts","../shared/workspaceAgentToolCallSummary.ts","../shared/workspaceAgentToolCallPresentation.ts","../shared/workspaceAgentToolCallDisplay.ts","../shared/workspaceAgentTimelineProjectionHelpers.ts","../shared/workspaceAgentGoalControlProjection.ts","../shared/workspaceAgentTimelineMessageHelpers.ts","../shared/workspaceAgentTurnErrorProjection.ts","../shared/workspaceAgentTimelineSuppression.ts","../shared/workspaceAgentTimelineCanonical.ts"],"sourcesContent":["import type { WorkspaceAgentSessionDetailViewModel } from \"../../workspaceAgentSessionDetailViewModel\";\nimport type {\n AgentMessageContentVM,\n AgentMessageRowVM\n} from \"../contracts/agentMessageRowVM\";\nimport type { AgentTranscriptRowVM } from \"../contracts/agentTranscriptRowVM\";\n\nexport function projectAgentMessageFinalText(\n rows: readonly AgentTranscriptRowVM[],\n detail: WorkspaceAgentSessionDetailViewModel\n): AgentTranscriptRowVM[] {\n const finalTextTargetKeys = findLatestAssistantFinalTextTargetKeys(\n rows,\n buildAssistantFinalTextEligibleTurnIds(detail)\n );\n return rows.map((row) => {\n if (row.kind !== \"message\") {\n return row;\n }\n\n let changed = false;\n const messages = row.messages.map((message) => {\n const isTurnFinalText =\n row.speaker === \"assistant\" &&\n finalTextTargetKeys.has(messagePresentationTargetKey(row, message));\n const copyText =\n row.speaker === \"user\"\n ? copyTextForUserMessage(message)\n : isTurnFinalText\n ? message.body\n : null;\n if (\n (message.copyText ?? null) === copyText &&\n message.isTurnFinalText === (isTurnFinalText ? true : undefined)\n ) {\n return message;\n }\n changed = true;\n const nextMessage = isTurnFinalText\n ? { ...message, isTurnFinalText: true as const }\n : omitTurnFinalText(message);\n if (copyText) {\n return { ...nextMessage, copyText };\n }\n const { copyText: _copyText, ...withoutCopyText } = nextMessage;\n return withoutCopyText;\n });\n\n return changed ? { ...row, messages } : row;\n });\n}\n\nfunction omitTurnFinalText(\n message: AgentMessageContentVM\n): AgentMessageContentVM {\n const { isTurnFinalText: _isTurnFinalText, ...withoutTurnFinalText } =\n message;\n return withoutTurnFinalText;\n}\n\nfunction buildAssistantFinalTextEligibleTurnIds(\n detail: WorkspaceAgentSessionDetailViewModel\n): ReadonlySet<string> {\n const ids = new Set<string>();\n detail.turns.forEach((turn, index) => {\n if (\n index < detail.turns.length - 1 ||\n isLatestTranscriptTurnSettled(detail)\n ) {\n ids.add(turn.id);\n }\n });\n return ids;\n}\n\nfunction isLatestTranscriptTurnSettled(\n detail: WorkspaceAgentSessionDetailViewModel\n): boolean {\n const latestTranscriptTurnId = detail.turns.at(-1)?.id;\n const canonicalTurn = detail.sessionTurns?.find(\n (turn) => turn.turnId === latestTranscriptTurnId\n );\n const activeTurn = detail.session.activeTurn;\n if (\n activeTurn &&\n activeTurn.turnId === latestTranscriptTurnId &&\n activeTurn.phase !== \"settled\"\n ) {\n return false;\n }\n if (canonicalTurn) {\n return (\n canonicalTurn.phase === \"settled\" &&\n detail.showProcessingIndicator !== true\n );\n }\n const activePhase = activeTurn?.phase ?? \"\";\n return (\n detail.showProcessingIndicator !== true &&\n ![\"submitted\", \"running\", \"waiting\", \"settling\"].includes(activePhase)\n );\n}\n\nfunction findLatestAssistantFinalTextTargetKeys(\n rows: readonly AgentTranscriptRowVM[],\n eligibleTurnIds: ReadonlySet<string>\n): ReadonlySet<string> {\n const targetKeys = new Set<string>();\n const coveredTurnIds = new Set<string>();\n for (let rowIndex = rows.length - 1; rowIndex >= 0; rowIndex -= 1) {\n const row = rows[rowIndex];\n if (\n row?.kind !== \"message\" ||\n row.speaker !== \"assistant\" ||\n coveredTurnIds.has(row.turnId) ||\n !eligibleTurnIds.has(row.turnId)\n ) {\n continue;\n }\n for (\n let messageIndex = row.messages.length - 1;\n messageIndex >= 0;\n messageIndex -= 1\n ) {\n const message = row.messages[messageIndex];\n if (message && isSettledAssistantFinalTextCandidate(message)) {\n targetKeys.add(messagePresentationTargetKey(row, message));\n coveredTurnIds.add(row.turnId);\n break;\n }\n }\n }\n return targetKeys;\n}\n\nfunction messagePresentationTargetKey(\n row: AgentMessageRowVM,\n message: AgentMessageContentVM\n): string {\n return `${row.id}\\u0000${message.id}`;\n}\n\nfunction copyTextForUserMessage(message: AgentMessageContentVM): string | null {\n return isVisibleTextMessage(message) ? message.body : null;\n}\n\nfunction isSettledAssistantFinalTextCandidate(\n message: AgentMessageContentVM\n): boolean {\n return (\n isVisibleTextMessage(message) &&\n message.statusKind !== \"working\" &&\n message.statusKind !== \"waiting\"\n );\n}\n\nfunction isVisibleTextMessage(message: AgentMessageContentVM): boolean {\n return (\n message.body.trim() !== \"\" &&\n message.contentKind !== \"image-grid\" &&\n message.contentKind !== \"collaboration\" &&\n !message.visibleError &&\n !message.systemNotice\n );\n}\n","import type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport type {\n AgentToolGroupEntryVM,\n AgentToolGroupRowVM\n} from \"../contracts/agentToolGroupRowVM\";\nimport type { AgentTurnSequenceItemVM } from \"./agentTurnSequenceProjection\";\n\nconst AVOID_GROUPING_EDITS = false;\n\nexport interface AgentComputedToolGroupVM {\n startIndex: number;\n endIndex: number;\n calls: AgentToolCallVM[];\n entries: AgentToolGroupEntryVM[];\n}\n\nexport interface AgentComputedToolGroupInfoVM {\n groups: Map<number, AgentComputedToolGroupVM>;\n groupedIndices: Set<number>;\n suppressedIndices: Set<number>;\n}\n\nexport function computeAgentToolGroups(\n sequence: readonly AgentTurnSequenceItemVM[],\n {\n avoidGroupingEdits = AVOID_GROUPING_EDITS\n }: {\n avoidGroupingEdits?: boolean;\n }\n): AgentComputedToolGroupInfoVM {\n const groups = new Map<number, AgentComputedToolGroupVM>();\n const groupedIndices = new Set<number>();\n const suppressedIndices = new Set<number>();\n\n let currentCalls: AgentToolCallVM[] = [];\n let currentEntries: AgentToolGroupEntryVM[] = [];\n let currentIndices: number[] = [];\n let pendingBridgeEntries: AgentToolGroupEntryVM[] = [];\n let pendingBridgeIndices: number[] = [];\n let startIndex = -1;\n\n const finalizeGroup = () => {\n if (\n currentCalls.length >= 1 &&\n startIndex >= 0 &&\n currentIndices.length > 0\n ) {\n const endIndex = currentIndices[currentIndices.length - 1] ?? startIndex;\n groups.set(startIndex, {\n startIndex,\n endIndex,\n calls: [...currentCalls],\n entries: [...currentEntries]\n });\n currentIndices.forEach((index) => groupedIndices.add(index));\n }\n currentCalls = [];\n currentEntries = [];\n currentIndices = [];\n pendingBridgeEntries = [];\n pendingBridgeIndices = [];\n startIndex = -1;\n };\n\n for (let index = 0; index < sequence.length; index += 1) {\n const item = sequence[index];\n if (!item) {\n continue;\n }\n if (item.kind === \"tool-call\" && isGroupableToolCall(item.call)) {\n if (avoidGroupingEdits && isEditBoundaryToolCall(item.call)) {\n finalizeGroup();\n continue;\n }\n if (startIndex < 0) {\n startIndex = index;\n }\n if (pendingBridgeEntries.length > 0) {\n currentEntries.push(...pendingBridgeEntries);\n currentIndices.push(...pendingBridgeIndices);\n pendingBridgeEntries = [];\n pendingBridgeIndices = [];\n }\n currentCalls.push(item.call);\n currentEntries.push({ kind: \"tool-call\", call: item.call });\n currentIndices.push(index);\n continue;\n }\n\n if (\n item.kind === \"thinking\" &&\n startIndex >= 0 &&\n currentCalls.length > 0\n ) {\n pendingBridgeEntries.push({ kind: \"thinking\", thinking: item.thinking });\n pendingBridgeIndices.push(index);\n continue;\n }\n\n finalizeGroup();\n }\n\n finalizeGroup();\n\n return {\n groups,\n groupedIndices,\n suppressedIndices\n };\n}\n\nexport function projectAgentToolGroupRowFromGroup(\n turnId: string,\n group: AgentComputedToolGroupVM,\n agentSessionId?: string\n): AgentToolGroupRowVM {\n const firstCallId = group.calls[0]?.id ?? \"unknown\";\n return {\n kind: \"tool-group\",\n id: `tool-group:${turnId}:${group.calls.map((call) => call.id).join(\"+\")}`,\n expansionKey: [\"tool-group\", agentSessionId, turnId, firstCallId]\n .filter(Boolean)\n .join(\":\"),\n turnId,\n grouped: true,\n calls: group.calls,\n summary: summarizeToolCallGroup(group.calls),\n entries: group.entries,\n occurredAtUnixMs:\n group.calls\n .map((call) => call.occurredAtUnixMs ?? 0)\n .reduce((latest, value) => (value > latest ? value : latest), 0) || null\n };\n}\n\nexport function projectAgentSingleToolRow(\n call: AgentToolCallVM,\n turnId = call.turnId\n): AgentToolGroupRowVM {\n return {\n kind: \"tool-group\",\n id: `tool-row:${call.id}`,\n expansionKey: `tool-group:${turnId}:${call.id}`,\n turnId,\n grouped: false,\n calls: [call],\n summary: null,\n entries: [{ kind: \"tool-call\", call }],\n occurredAtUnixMs: call.occurredAtUnixMs\n };\n}\n\nfunction isGroupableToolCall(call: AgentToolCallVM): boolean {\n switch (call.rendererKind) {\n case \"approval\":\n case \"ask-user\":\n case \"plan-enter\":\n case \"plan-exit\":\n case \"task\":\n return false;\n default:\n return true;\n }\n}\n\nfunction isEditBoundaryToolCall(call: AgentToolCallVM): boolean {\n return call.rendererKind === \"edit\" || call.rendererKind === \"write\";\n}\n\nfunction summarizeToolCallGroup(\n calls: readonly AgentToolCallVM[]\n): string | null {\n if (calls.length < 2) {\n return null;\n }\n const changedTargets = dedupeStrings(\n calls\n .filter(\n (call) => call.rendererKind === \"edit\" || call.rendererKind === \"write\"\n )\n .map((call) => summarizeCallTarget(call.compactSummary ?? call.summary))\n .filter((value): value is string => value !== null)\n );\n if (changedTargets.length === 0) {\n return null;\n }\n if (changedTargets.length === 1) {\n return `Changed ${changedTargets[0]}`;\n }\n return `Changed ${changedTargets[0]} and ${changedTargets.length - 1} more files`;\n}\n\nfunction summarizeCallTarget(summary: string): string | null {\n const normalized = summary.trim();\n if (!normalized) {\n return null;\n }\n const firstLine = normalized.split(\"\\n\")[0]?.trim() ?? normalized;\n if (!firstLine) {\n return null;\n }\n const segments = firstLine.split(/[\\\\/]/).filter(Boolean);\n return segments.at(-1) ?? firstLine;\n}\n\nfunction dedupeStrings(values: readonly string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter(Boolean))];\n}\n","import type { AgentAskUserQuestionItemVM } from \"../contracts/agentAskUserQuestionItemVM\";\nimport type { AgentPlanModeItemVM } from \"../contracts/agentPlanModeItemVM\";\nimport type { AgentTaskItemVM } from \"../contracts/agentTaskItemVM\";\nimport type {\n AgentToolCallVM,\n AgentToolRendererKind\n} from \"../contracts/agentToolCallVM\";\nimport { isImageGenerationToolCall } from \"../../imageGenerationTool\";\n\ninterface AgentToolRendererProbe {\n toolName: string | null | undefined;\n displayName?: string | null | undefined;\n callType: string | null | undefined;\n input?: Record<string, unknown> | null;\n output?: Record<string, unknown> | null;\n content?: unknown[] | null;\n metadata?: Record<string, unknown> | null;\n}\n\nexport function resolveAgentToolRendererKind(\n call: AgentToolRendererProbe,\n approval: AgentToolCallVM[\"approval\"] = null,\n askUserQuestion: AgentAskUserQuestionItemVM | null = null,\n planMode: AgentPlanModeItemVM | null = null,\n task: AgentTaskItemVM | null = null\n): AgentToolRendererKind {\n const normalizedToolName = normalizeToolName(call.toolName);\n const normalizedCallType = normalizeCallType(call.callType);\n if (approval) {\n return \"approval\";\n }\n if (askUserQuestion) {\n return \"ask-user\";\n }\n if (normalizedToolName === \"askuserquestion\") {\n return \"ask-user\";\n }\n if (planMode?.kind === \"enter\") {\n return \"plan-enter\";\n }\n if (normalizedToolName === \"enterplanmode\") {\n return \"plan-enter\";\n }\n if (planMode?.kind === \"exit\") {\n return \"plan-exit\";\n }\n if (normalizedToolName === \"exitplanmode\") {\n return \"plan-exit\";\n }\n if (normalizedCallType === \"approval\" || normalizedToolName === \"approval\") {\n return \"approval\";\n }\n if (task) {\n return \"task\";\n }\n if (\n [\"task\", \"subagent\", \"delegatetask\", \"delegateagent\", \"agent\"].includes(\n normalizedToolName\n )\n ) {\n return \"task\";\n }\n if (\n isImageGenerationToolCall({\n toolName: call.toolName,\n displayName: call.displayName,\n content: call.content,\n outputContent: call.output?.content,\n outputSavedPath: call.output?.savedPath ?? call.output?.saved_path,\n inputPrompt: call.input?.prompt\n })\n ) {\n return \"image-generation\";\n }\n switch (normalizedToolName) {\n case \"read\":\n case \"readfile\":\n return \"read\";\n case \"write\":\n case \"writefile\":\n return \"write\";\n case \"edit\":\n case \"editfile\":\n case \"multiedit\":\n return \"edit\";\n case \"bash\":\n case \"shell\":\n case \"exec\":\n case \"execcommand\":\n return \"bash\";\n case \"grep\":\n case \"glob\":\n case \"search\":\n case \"searchfiles\":\n return \"search\";\n case \"websearch\":\n return \"web-search\";\n case \"webfetch\":\n return \"web-fetch\";\n case \"todowrite\":\n return \"todo-write\";\n case \"toolsearch\":\n return \"tool-search\";\n case \"skill\":\n return \"skill\";\n default:\n if (\n normalizedCallType === \"mcp\" ||\n normalizedToolName.startsWith(\"mcp\") ||\n hasMcpMetadata(call.metadata)\n ) {\n return \"mcp\";\n }\n return \"default\";\n }\n}\n\nexport function inferToolCallType(toolName: string | null | undefined): string {\n const normalizedToolName = normalizeToolName(toolName);\n if (normalizedToolName === \"approval\") {\n return \"approval\";\n }\n if (\n [\"askuserquestion\", \"enterplanmode\", \"exitplanmode\"].includes(\n normalizedToolName\n )\n ) {\n return \"interactive\";\n }\n if (normalizedToolName.startsWith(\"mcp\")) {\n return \"mcp\";\n }\n return \"tool\";\n}\n\nexport function isApprovalToolCall(call: {\n toolName: string | null | undefined;\n callType: string | null | undefined;\n}): boolean {\n return (\n normalizeCallType(call.callType) === \"approval\" ||\n normalizeToolName(call.toolName) === \"approval\"\n );\n}\n\nexport function normalizeToolName(value: string | null | undefined): string {\n return (value ?? \"\")\n .replace(/[_\\s-]+/g, \"\")\n .trim()\n .toLowerCase();\n}\n\nfunction hasMcpMetadata(\n metadata: Record<string, unknown> | null | undefined\n): boolean {\n return Boolean(\n stringValue(metadata?.server) ??\n stringValue(metadata?.serverName) ??\n stringValue(metadata?.mcpServer)\n );\n}\n\nfunction normalizeCallType(value: string | null | undefined): string {\n return (value ?? \"\").trim().toLowerCase();\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n","import type { AgentMessageContentVM } from \"../contracts/agentMessageRowVM\";\nimport type { AgentTranscriptPresentationKind } from \"../contracts/agentTranscriptPresentation\";\nimport type { AgentTranscriptRowVM } from \"../contracts/agentTranscriptRowVM\";\n\ntype AgentSystemNoticeVM = NonNullable<AgentMessageContentVM[\"systemNotice\"]>;\n\nexport function resolveAgentTranscriptPresentationKind(\n notice: Pick<AgentSystemNoticeVM, \"command\" | \"commandStatus\"> | null\n): AgentTranscriptPresentationKind {\n if (notice?.command !== \"compact\") {\n return \"content\";\n }\n if (notice.commandStatus === \"running\") {\n return \"specific-progress\";\n }\n if (\n notice.commandStatus === \"completed\" ||\n notice.commandStatus === \"failed\" ||\n notice.commandStatus === \"canceled\"\n ) {\n return \"turn-boundary\";\n }\n return \"content\";\n}\n\nexport function agentTranscriptRowHasPresentationKind(\n row: AgentTranscriptRowVM | undefined,\n presentationKind: AgentTranscriptPresentationKind\n): boolean {\n return Boolean(\n row?.kind === \"message\" &&\n row.messages.some(\n (message) => message.presentationKind === presentationKind\n )\n );\n}\n","import type { WorkspaceAgentSessionDetailToolCall } from \"../../workspaceAgentSessionDetailViewModel\";\nimport { extractAgentMcpToolTarget } from \"../../agentMcpToolTarget\";\nimport { normalizeAgentApprovalPurpose } from \"../agentApprovalPurpose\";\nimport type {\n AgentApprovalItemVM,\n AgentApprovalOptionVM\n} from \"../contracts/agentApprovalItemVM\";\nimport { isExitPlanSwitchModeInput } from \"../exitPlanOptions\";\n\nexport function projectAgentApprovalItem(\n call: WorkspaceAgentSessionDetailToolCall,\n input: Record<string, unknown> | null,\n output: Record<string, unknown> | null\n): AgentApprovalItemVM | null {\n const callType = normalizeToken(call.callType);\n const toolName = normalizeToken(call.toolName);\n if (callType !== \"approval\" && toolName !== \"approval\") {\n return null;\n }\n const requestId =\n stringValue(input?.requestId) ??\n stringValue(call.payload?.requestId) ??\n stringValue(output?.requestId);\n if (!requestId) {\n return null;\n }\n const options = normalizeAgentApprovalOptions(\n input?.options ?? call.payload?.options\n );\n if (isExitPlanSwitchModeInput(input)) {\n return null;\n }\n const mcpTarget = extractAgentMcpToolTarget({\n input,\n payload: call.payload,\n toolName: call.toolName,\n name: call.name\n });\n const approvalPurpose = normalizeAgentApprovalPurpose(\n call.payload?.approvalPurpose\n );\n return {\n kind: \"approval\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n requestId,\n callId: call.id.replace(/^call:/, \"\"),\n ...(approvalPurpose ? { approvalPurpose } : {}),\n title: mcpTarget?.displayName ?? (call.summary.trim() || call.name),\n toolName: call.toolName,\n status: stringValue(call.payload?.status) ?? call.status,\n input,\n options,\n output,\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n}\n\nexport function normalizeAgentApprovalOptions(\n value: unknown\n): AgentApprovalOptionVM[] {\n const values = arrayValue(value) ?? [];\n return values.flatMap((value) => {\n const option = objectValue(value);\n const id = stringValue(option?.optionId) ?? stringValue(option?.id);\n if (!id) {\n return [];\n }\n const label =\n stringValue(option?.name) ??\n stringValue(option?.label) ??\n stringValue(option?.title) ??\n stringValue(option?.kind) ??\n id;\n return [\n {\n id,\n label,\n kind: stringValue(option?.kind) ?? \"\",\n ...(stringValue(option?.description)\n ? { description: stringValue(option?.description) as string }\n : {})\n }\n ];\n });\n}\n\nfunction normalizeToken(value: string | null | undefined): string {\n return (value ?? \"\").trim().toLowerCase();\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction arrayValue(value: unknown): unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n","import type { WorkspaceAgentSessionDetailToolCall } from \"../../workspaceAgentSessionDetailViewModel\";\nimport type { AgentAskUserQuestionItemVM } from \"../contracts/agentAskUserQuestionItemVM\";\nimport type { AgentPlanModeItemVM } from \"../contracts/agentPlanModeItemVM\";\nimport { normalizeAskUserQuestions } from \"../askUserQuestions\";\nimport {\n extractExitPlanKeepPlanningOptionId,\n extractExitPlanModeOptions,\n isExitPlanSwitchModeInput\n} from \"../exitPlanOptions\";\n\nexport function projectAgentAskUserQuestionItem(\n call: WorkspaceAgentSessionDetailToolCall,\n input: Record<string, unknown> | null,\n output: Record<string, unknown> | null\n): AgentAskUserQuestionItemVM | null {\n if (normalizeToolName(call.toolName) !== \"askuserquestion\") {\n return null;\n }\n const questions = normalizeAskUserQuestions(input?.questions);\n if (questions.length === 0) {\n return null;\n }\n const answersByQuestionId = objectValue(output?.answersByQuestionId) ?? {};\n return {\n kind: \"ask-user\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n requestId:\n stringValue(input?.requestId) ??\n stringValue(call.payload?.requestId) ??\n call.id.replace(/^call:/, \"\"),\n title: call.name,\n status: call.status,\n questions: questions.map((question) => ({\n ...question,\n answer: answerForQuestion(question.id, answersByQuestionId, output)\n })),\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n}\n\nexport function projectAgentPlanModeItem(\n call: WorkspaceAgentSessionDetailToolCall,\n input: Record<string, unknown> | null\n): AgentPlanModeItemVM | null {\n if (isExitPlanSwitchModeInput(input)) {\n return {\n itemKind: \"plan-mode\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n requestId:\n stringValue(input?.requestId) ??\n stringValue(call.payload?.requestId) ??\n call.id.replace(/^call:/, \"\"),\n kind: \"exit\",\n title: stringValue(objectValue(input?.toolCall)?.title) ?? call.name,\n status: call.status,\n plan:\n stringValue(input?.plan) ??\n stringValue(call.payload?.plan) ??\n (call.summary.trim() || null),\n filePath:\n stringValue(input?.filePath) ?? stringValue(call.payload?.filePath),\n options: extractExitPlanModeOptions(input),\n ...keepPlanningOption(extractExitPlanKeepPlanningOptionId(input)),\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n }\n const toolName = normalizeToolName(call.toolName);\n if (toolName === \"enterplanmode\") {\n return {\n itemKind: \"plan-mode\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n kind: \"enter\",\n title: call.name,\n status: call.status,\n plan: stringValue(input?.content) ?? (call.summary.trim() || null),\n filePath: stringValue(input?.filePath),\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n }\n if (toolName !== \"exitplanmode\") {\n return null;\n }\n return {\n itemKind: \"plan-mode\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n requestId:\n stringValue(input?.requestId) ??\n stringValue(call.payload?.requestId) ??\n call.id.replace(/^call:/, \"\"),\n kind: \"exit\",\n title: call.name,\n status: call.status,\n plan:\n stringValue(input?.plan) ??\n stringValue(call.payload?.plan) ??\n (call.summary.trim() || null),\n filePath:\n stringValue(input?.filePath) ?? stringValue(call.payload?.filePath),\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n}\n\nfunction answerForQuestion(\n questionId: string,\n answersByQuestionId: Record<string, unknown>,\n output: Record<string, unknown> | null\n): string | string[] | null {\n const responsePayload = objectValue(output?.payload);\n const responseAnswersByQuestionId =\n objectValue(responsePayload?.answersByQuestionId) ?? {};\n const value =\n answersByQuestionId[questionId] ?? responseAnswersByQuestionId[questionId];\n if (Array.isArray(value)) {\n return value.flatMap((item) =>\n typeof item === \"string\" && item.trim() ? [item.trim()] : []\n );\n }\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n const answers =\n arrayValue(output?.answers) ?? arrayValue(responsePayload?.answers);\n return answers && answers.length > 0\n ? answers.filter(\n (item): item is string =>\n typeof item === \"string\" && item.trim().length > 0\n )\n : null;\n}\n\nfunction keepPlanningOption(optionId: string | null): {\n keepPlanningOptionId?: string;\n} {\n return optionId ? { keepPlanningOptionId: optionId } : {};\n}\n\nfunction normalizeToolName(value: string | null | undefined): string {\n return (value ?? \"\")\n .replace(/[_\\s-]+/g, \"\")\n .trim()\n .toLowerCase();\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction arrayValue(value: unknown): unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n","import type { WorkspaceAgentSessionDetailToolCall } from \"../../workspaceAgentSessionDetailViewModel\";\nimport type {\n AgentTaskItemVM,\n AgentTaskStepVM\n} from \"../contracts/agentTaskItemVM\";\nimport type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport { projectAgentApprovalItem } from \"./agentApprovalProjection\";\nimport {\n projectAgentAskUserQuestionItem,\n projectAgentPlanModeItem\n} from \"./agentInteractiveProjection\";\nimport {\n inferToolCallType,\n isApprovalToolCall,\n normalizeToolName,\n resolveAgentToolRendererKind\n} from \"./agentToolRendererKind\";\n\nexport function projectAgentTaskItem(\n call: WorkspaceAgentSessionDetailToolCall,\n input: Record<string, unknown> | null,\n output: Record<string, unknown> | null,\n metadata: Record<string, unknown> | null\n): AgentTaskItemVM | null {\n const toolName = normalizeToolName(call.toolName);\n if (\n ![\"task\", \"subagent\", \"delegatetask\", \"delegateagent\", \"agent\"].includes(\n toolName\n )\n ) {\n return null;\n }\n const claudeToolResponse =\n claudeCodeToolResponse(input) ??\n claudeCodeToolResponse(output) ??\n claudeCodeToolResponse(metadata);\n const steps = normalizeTaskSteps(\n arrayValue(metadata?.steps) ??\n arrayValue(output?.steps) ??\n arrayValue(call.payload?.steps) ??\n [],\n call.turnId ?? \"turn:unknown\"\n );\n return {\n kind: \"task\",\n id: call.id,\n turnId: call.turnId ?? \"turn:unknown\",\n title: call.summary.trim() || call.name,\n status:\n stringValue(metadata?.taskStatus) ??\n stringValue(metadata?.subagentStatus) ??\n call.status,\n prompt:\n stringValue(input?.prompt) ??\n stringValue(input?.description) ??\n stringValue(call.payload?.description) ??\n stringValue(claudeToolResponse?.prompt),\n delegateSessionId:\n stringValue(metadata?.childSessionID) ??\n stringValue(metadata?.child_session_id) ??\n stringValue(metadata?.subagentSessionID) ??\n stringValue(metadata?.subagent_session_id) ??\n stringValue(metadata?.subagentAgentId) ??\n stringValue(metadata?.agentId) ??\n stringValue(claudeToolResponse?.agentId),\n steps,\n result: firstNonEmptyText(output),\n resultMarkdown: firstNonEmptyText(output),\n durationMs:\n numberValue(metadata?.durationMs) ??\n numberValue(output?.durationMs) ??\n numberValue(claudeToolResponse?.totalDurationMs),\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n}\n\nfunction normalizeTaskSteps(\n values: readonly unknown[],\n turnId: string\n): AgentTaskStepVM[] {\n return values.flatMap((value, index) => {\n const step = objectValue(value);\n if (!step) {\n return [];\n }\n const toolName =\n stringValue(step.toolName) ??\n stringValue(step.tool_name) ??\n stringValue(step.name);\n const callType = stringValue(step.callType) ?? stringValue(step.call_type);\n if (isApprovalToolCall({ toolName, callType })) {\n return [];\n }\n const inputPayload =\n objectValue(step.toolInput) ?? objectValue(step.tool_input);\n const outputPayload =\n objectValue(step.toolResult) ?? objectValue(step.tool_result);\n const errorPayload =\n objectValue(step.toolError) ?? objectValue(step.tool_error);\n const payload = objectValue(step.payload);\n const metadata = objectValue(step.metadata);\n const content = arrayValue(step.content);\n const locations = arrayValue(step.locations);\n return [\n {\n id:\n stringValue(step.toolUseId) ??\n stringValue(step.id) ??\n `step-${index + 1}`,\n turnId,\n name: toolName ? humanizeToolLabel(toolName) : `Step ${index + 1}`,\n toolName: toolName ?? null,\n status:\n stringValue(step.status) ??\n stringValue(objectValue(step.toolResult)?.status) ??\n stringValue(objectValue(step.tool_result)?.status),\n summary: firstNonEmptyText(outputPayload, inputPayload) ?? \"\",\n payload: {\n input: inputPayload,\n output: outputPayload,\n error: errorPayload\n },\n tool: projectAgentTaskStepTool({\n id:\n stringValue(step.toolUseId) ??\n stringValue(step.id) ??\n `step-${index + 1}`,\n turnId,\n toolName,\n name: stringValue(step.name),\n callType,\n status:\n stringValue(step.status) ?? stringValue(outputPayload?.status),\n summary: firstNonEmptyText(outputPayload, inputPayload) ?? \"\",\n payload,\n metadata,\n input: inputPayload,\n output: outputPayload,\n error: errorPayload,\n content,\n locations,\n occurredAtUnixMs: numberValue(step.occurredAtUnixMs)\n }),\n occurredAtUnixMs: numberValue(step.occurredAtUnixMs) ?? null\n }\n ];\n });\n}\n\nexport function projectAgentTaskStepTool(step: {\n id: string;\n turnId: string;\n toolName: string | null;\n name: string | null;\n callType: string | null;\n status: string | null;\n summary: string;\n payload: Record<string, unknown> | null;\n metadata: Record<string, unknown> | null;\n input: Record<string, unknown> | null;\n output: Record<string, unknown> | null;\n error: Record<string, unknown> | null;\n content: unknown[] | null;\n locations: unknown[] | null;\n occurredAtUnixMs: number | null;\n}): AgentToolCallVM {\n const call: WorkspaceAgentSessionDetailToolCall = {\n id: `call:${step.id}`,\n turnId: step.turnId,\n name:\n step.name ?? (step.toolName ? humanizeToolLabel(step.toolName) : \"Tool\"),\n toolName: step.toolName,\n callType: step.callType ?? inferToolCallType(step.toolName),\n status: step.status,\n statusKind: normalizeTaskStepStatus(step.status),\n summary: step.summary,\n compactSummary: step.summary || null,\n payload: step.payload,\n occurredAtUnixMs: step.occurredAtUnixMs\n };\n const approval = projectAgentApprovalItem(call, step.input, step.output);\n const askUserQuestion = projectAgentAskUserQuestionItem(\n call,\n step.input,\n step.output\n );\n const planMode = projectAgentPlanModeItem(call, step.input);\n const task = projectAgentTaskItem(\n call,\n step.input,\n step.output,\n step.metadata\n );\n const rendererKind = resolveAgentToolRendererKind(\n {\n toolName: call.toolName,\n displayName: call.name,\n callType: call.callType,\n input: step.input,\n output: step.output,\n content: step.content,\n metadata: step.metadata\n },\n approval,\n askUserQuestion,\n planMode,\n task\n );\n return {\n kind: \"tool-call\",\n ...call,\n turnId: step.turnId,\n compactSummary: call.compactSummary ?? null,\n payload: step.payload,\n toolState: null,\n input: step.input,\n output: step.output,\n error: step.error,\n metadata: step.metadata,\n content: step.content,\n locations: step.locations,\n occurredAtUnixMs: call.occurredAtUnixMs ?? null,\n rendererKind,\n approval,\n planMode,\n askUserQuestion,\n task\n };\n}\n\nfunction humanizeToolLabel(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .replace(/\\s+/g, \" \")\n .trim()\n .replace(/^\\w/, (match) => match.toUpperCase());\n}\n\nfunction stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction numberValue(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction normalizeTaskStepStatus(\n value: string | null\n): AgentToolCallVM[\"statusKind\"] {\n switch ((value ?? \"\").trim().toLowerCase()) {\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"failed\":\n case \"error\":\n case \"errored\":\n return \"failed\";\n case \"waiting\":\n case \"waiting_input\":\n case \"waiting_approval\":\n return \"waiting\";\n case \"running\":\n case \"working\":\n case \"active\":\n return \"working\";\n default:\n return null;\n }\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction arrayValue(value: unknown): unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n\nfunction claudeCodeToolResponse(\n value: Record<string, unknown> | null\n): Record<string, unknown> | null {\n const meta = objectValue(value?._meta);\n const claudeCode = objectValue(meta?.claudeCode);\n return objectValue(claudeCode?.toolResponse);\n}\n\nfunction firstNonEmptyText(\n ...values: Array<Record<string, unknown> | string | null | undefined>\n): string | null {\n for (const value of values) {\n const text = extractText(value);\n if (text) {\n return text;\n }\n }\n return null;\n}\n\nfunction extractText(value: unknown, depth = 0): string | null {\n if (depth > 4) {\n return null;\n }\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n const text = extractText(item, depth + 1);\n if (text) {\n return text;\n }\n }\n return null;\n }\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n for (const key of [\n \"text\",\n \"output\",\n \"summary\",\n \"message\",\n \"patch\",\n \"result\"\n ]) {\n const text = extractText(record[key], depth + 1);\n if (text) {\n return text;\n }\n }\n return extractText(record.content, depth + 1);\n }\n return null;\n}\n","import type { WorkspaceAgentSessionDetailToolCall } from \"../../workspaceAgentSessionDetailViewModel\";\nimport { extractAgentMcpToolTarget } from \"../../agentMcpToolTarget\";\nimport type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport { projectAgentApprovalItem } from \"./agentApprovalProjection\";\nimport {\n projectAgentAskUserQuestionItem,\n projectAgentPlanModeItem\n} from \"./agentInteractiveProjection\";\nimport { projectAgentTaskItem } from \"./agentTaskProjection\";\nimport { resolveAgentToolRendererKind } from \"./agentToolRendererKind\";\n\nexport function projectAgentToolCall(\n call: WorkspaceAgentSessionDetailToolCall\n): AgentToolCallVM {\n const toolState = objectValue(call.payload?.tool_state);\n const input = normalizeStandardACPEnvelope(\n objectValue(call.payload?.input) ?? objectValue(toolState?.input)\n );\n const output = normalizeStandardACPEnvelope(\n objectValue(call.payload?.output) ?? objectValue(toolState?.output)\n );\n const error = normalizeStandardACPEnvelope(\n objectValue(call.payload?.error) ?? objectValue(toolState?.error)\n );\n const metadata = objectValue(call.payload?.metadata);\n const content = arrayValue(call.payload?.content);\n const locations = arrayValue(call.payload?.locations);\n const approval = projectAgentApprovalItem(call, input, output);\n const askUserQuestion = projectAgentAskUserQuestionItem(call, input, output);\n const planMode = projectAgentPlanModeItem(call, input);\n const task = projectAgentTaskItem(call, input, output, metadata);\n const mcpTarget = extractAgentMcpToolTarget({\n input,\n metadata,\n payload: call.payload,\n toolName: call.toolName,\n name: call.name\n });\n const rendererKind = resolveAgentToolRendererKind(\n {\n toolName: call.toolName,\n displayName: call.name,\n callType: call.callType,\n input,\n output,\n content,\n metadata\n },\n approval,\n askUserQuestion,\n planMode,\n task\n );\n const projectedCall: AgentToolCallVM = {\n kind: \"tool-call\",\n ...call,\n turnId: call.turnId ?? \"turn:unknown\",\n name: mcpTarget?.displayName ?? call.name,\n compactSummary: call.compactSummary ?? call.summary,\n payload: call.payload ?? null,\n toolState,\n input,\n output,\n error,\n metadata,\n content,\n locations,\n rendererKind,\n approval,\n askUserQuestion,\n planMode,\n task,\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n if (call.sourceTimelineItems) {\n projectedCall.sourceTimelineItems = call.sourceTimelineItems;\n }\n return projectedCall;\n}\n\nfunction objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nfunction arrayValue(value: unknown): unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n\nfunction normalizeStandardACPEnvelope(\n value: Record<string, unknown> | null\n): Record<string, unknown> | null {\n if (!value) return null;\n const raw = objectValue(value.rawInput) ?? objectValue(value.rawOutput);\n if (!raw) return value;\n const metadata = objectValue(raw.metadata);\n return {\n ...value,\n ...raw,\n ...(metadata?.diff !== undefined ? { diff: metadata.diff } : {}),\n ...(metadata?.files !== undefined ? { files: metadata.files } : {}),\n ...(metadata?.structuredPatch !== undefined\n ? { structuredPatch: metadata.structuredPatch }\n : {}),\n ...(metadata?.detailedContent !== undefined\n ? { detailedContent: metadata.detailedContent }\n : {}),\n ...(metadata?.changes !== undefined ? { changes: metadata.changes } : {}),\n ...(metadata?.exit !== undefined ? { exitCode: metadata.exit } : {})\n };\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"../../workspaceAgentTimelineTypes\";\nimport type { AgentCollaborationVM } from \"../contracts/agentCollaborationVM\";\n\nexport const COLLABORATION_TIMELINE_ITEM_TYPE = \"collaboration\";\n\nexport function isCollaborationTimelineItem(\n item: Pick<WorkspaceAgentActivityTimelineItem, \"itemType\">\n): boolean {\n return (\n item.itemType.trim().toLowerCase() === COLLABORATION_TIMELINE_ITEM_TYPE\n );\n}\n\n/**\n * Pure projection of one durable collaboration message payload into the typed\n * card view model. Returns null when the payload has no run identity, so a\n * malformed row degrades to a plain assistant message instead of a broken\n * card.\n */\nexport function projectAgentCollaborationVM(\n item: Pick<\n WorkspaceAgentActivityTimelineItem,\n \"agentSessionId\" | \"payload\" | \"status\" | \"workspaceId\"\n >\n): AgentCollaborationVM | null {\n const payload = normalizedPayload(item.payload);\n if (!payload) {\n return null;\n }\n const runId = stringField(payload, \"runId\");\n const mode = stringField(payload, \"mode\");\n if (!runId || !mode) {\n return null;\n }\n const status =\n stringField(payload, \"status\") ?? item.status?.trim() ?? \"running\";\n return {\n kind: \"collaboration\",\n runId,\n workspaceId: item.workspaceId?.trim() || null,\n agentSessionId: item.agentSessionId.trim() || null,\n mode,\n status,\n triggerSource: stringField(payload, \"triggerSource\") ?? \"user\",\n triggerReason: stringField(payload, \"triggerReason\"),\n targetSessionId: stringField(payload, \"targetSessionId\"),\n targetAgentTargetId: stringField(payload, \"targetAgentTargetId\"),\n modelPlanId: stringField(payload, \"modelPlanId\"),\n modelPlanName:\n stringField(payload, \"modelPlanName\") ?? stringField(payload, \"planName\"),\n model: stringField(payload, \"model\"),\n contextScope: stringField(payload, \"contextScope\"),\n resultText: stringField(payload, \"resultText\"),\n failureReason: stringField(payload, \"failureReason\"),\n durationMs: positiveNumberField(payload, \"durationMs\"),\n usage: usageField(payload),\n adoption: stringField(payload, \"adoption\") ?? \"not_applicable\"\n };\n}\n\nfunction usageField(\n payload: Record<string, unknown>\n): AgentCollaborationVM[\"usage\"] {\n const usage = normalizedPayload(\n payload.usage as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n if (!usage) {\n return null;\n }\n const inputTokens = nonNegativeNumberValue(usage.inputTokens);\n const outputTokens = nonNegativeNumberValue(usage.outputTokens);\n if (inputTokens === null && outputTokens === null) {\n return null;\n }\n return {\n inputTokens: inputTokens ?? 0,\n outputTokens: outputTokens ?? 0\n };\n}\n\nfunction normalizedPayload(\n payload: WorkspaceAgentActivityTimelineItem[\"payload\"]\n): Record<string, unknown> | null {\n return payload && typeof payload === \"object\" && !Array.isArray(payload)\n ? payload\n : null;\n}\n\nfunction stringField(\n payload: Record<string, unknown>,\n key: string\n): string | null {\n const value = payload[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction positiveNumberField(\n payload: Record<string, unknown>,\n key: string\n): number | null {\n const value = nonNegativeNumberValue(payload[key]);\n return value !== null && value > 0 ? value : null;\n}\n\nfunction nonNegativeNumberValue(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) && value >= 0\n ? value\n : null;\n}\n","import { createRichTextMentionMarkdown } from \"@tutti-os/ui-rich-text/core\";\nimport { AGENT_PASTED_TEXT_MENTION_KIND } from \"./pastedTextKinds\";\n\n// Matches a landed pasted-text archive path (content-addressed .txt under the\n// host's agent-prompt-assets dir). The path may contain spaces (e.g. macOS\n// \"Application Support\"), so match from the leading \"/\" or drive letter up to\n// the first \".txt\" after \"agent-prompt-assets\", staying on one line.\nconst PASTED_TEXT_ARCHIVE_PATH_RE =\n /(?:\\/|[A-Za-z]:\\\\)[^\\n]*?agent-prompt-assets[^\\n]*?\\.txt/;\n\nexport function pastedTextDraftDisplayName(index: number): string {\n return `pasted-text-${index + 1}.txt`;\n}\n\n/**\n * Extracts landed pasted-text archive paths from a persisted content text block.\n */\nexport function extractPastedTextArchivePaths(text: string): string[] {\n const paths: string[] = [];\n for (const line of text.split(\"\\n\")) {\n const path = firstPastedTextArchivePath(line);\n if (path && !paths.includes(path)) {\n paths.push(path);\n }\n }\n return paths;\n}\n\n/**\n * Rewrites persisted pasted-text instructions into the same mention links the\n * composer emits, without importing the interactive Composer model.\n */\nexport function linkifyPastedTextReferences(text: string): string {\n if (!PASTED_TEXT_ARCHIVE_PATH_RE.test(text)) {\n return text;\n }\n const lines = text.split(\"\\n\");\n const out: string[] = [];\n let refIndex = 0;\n for (let index = 0; index < lines.length; index++) {\n const line = lines[index] ?? \"\";\n const path = firstPastedTextArchivePath(line);\n if (path) {\n out.push(\n pastedTextReferenceMentionMarkdown(\n firstQuotedPreview(line),\n path,\n refIndex\n )\n );\n refIndex += 1;\n continue;\n }\n const next = lines[index + 1];\n if (next != null && firstPastedTextArchivePath(next)) {\n continue;\n }\n out.push(line);\n }\n return out.join(\"\\n\").trim();\n}\n\nfunction firstPastedTextArchivePath(line: string): string | null {\n return line.match(PASTED_TEXT_ARCHIVE_PATH_RE)?.[0].trim() ?? null;\n}\n\nfunction pastedTextReferenceMentionMarkdown(\n preview: string,\n path: string,\n index: number\n): string {\n return createRichTextMentionMarkdown({\n providerId: AGENT_PASTED_TEXT_MENTION_KIND,\n entityId: `ref-${index}`,\n label: preview.trim() || pastedTextDraftDisplayName(index),\n scope: { path }\n });\n}\n\nfunction firstQuotedPreview(line: string): string {\n return line.match(/\"([^\"]*)\"/)?.[1]?.trim() ?? \"\";\n}\n","import type { WorkspaceAgentSessionDetailTurn } from \"../../workspaceAgentSessionDetailViewModel\";\nimport { linkifyPastedTextReferences } from \"../../pastedTextReferenceProjection\";\nimport type {\n AgentMessageContentVM,\n AgentMessageRowVM\n} from \"../contracts/agentMessageRowVM\";\n\nexport function projectConversationUserRow(\n message: WorkspaceAgentSessionDetailTurn[\"userMessages\"][number],\n fallbackTurnId: string,\n workspaceId: string | null | undefined\n): AgentMessageRowVM {\n const turnId = message.turnId ?? fallbackTurnId;\n return {\n kind: \"message\",\n id: `message:user:${message.id}`,\n turnId,\n speaker: \"user\",\n messages: projectUserMessageContentParts(message, turnId, workspaceId),\n thinking: [],\n occurredAtUnixMs: message.occurredAtUnixMs ?? null\n };\n}\n\nfunction projectUserMessageContentParts(\n message: WorkspaceAgentSessionDetailTurn[\"userMessages\"][number],\n turnId: string,\n workspaceId: string | null | undefined\n): AgentMessageContentVM[] {\n const blocks = userPromptContentBlocks(message, workspaceId);\n if (blocks.length === 0) {\n return [textPart(message, turnId)];\n }\n const parts: AgentMessageContentVM[] = [];\n const imageBlocks = blocks.filter(\n (block): block is UserPromptImageBlock => block.type === \"image\"\n );\n if (imageBlocks.length > 0) {\n parts.push({\n kind: \"message-content\",\n id: `${message.id}:images:0`,\n turnId,\n body: \"\",\n presentationKind: \"content\",\n contentKind: \"image-grid\",\n images: imageBlocks.map((image, index) => ({\n id: `${message.id}:image:${index}`,\n workspaceId: image.workspaceId,\n agentSessionId: image.agentSessionId,\n attachmentId: image.attachmentId,\n mimeType: image.mimeType,\n name: image.name,\n data: image.data,\n url: image.url,\n path: image.path\n })),\n occurredAtUnixMs: message.occurredAtUnixMs ?? null,\n sourceTimelineItems: message.sourceTimelineItems\n });\n }\n blocks.forEach((block, index) => {\n if (block.type === \"image\" || block.text.trim() === \"\") return;\n parts.push({\n kind: \"message-content\",\n id: `${message.id}:text:${index}`,\n turnId,\n body: block.text,\n presentationKind: \"content\",\n contentKind: \"text\",\n occurredAtUnixMs: message.occurredAtUnixMs ?? null,\n sourceTimelineItems: message.sourceTimelineItems\n });\n });\n return parts.length > 0 ? parts : [textPart(message, turnId)];\n}\n\nfunction textPart(\n message: WorkspaceAgentSessionDetailTurn[\"userMessages\"][number],\n turnId: string\n): AgentMessageContentVM {\n return {\n kind: \"message-content\",\n id: message.id,\n turnId,\n body: message.body,\n presentationKind: \"content\",\n contentKind: \"text\",\n occurredAtUnixMs: message.occurredAtUnixMs ?? null,\n sourceTimelineItems: message.sourceTimelineItems\n };\n}\n\ntype UserPromptContentBlock = UserPromptTextBlock | UserPromptImageBlock;\n\ninterface UserPromptTextBlock {\n type: \"text\";\n text: string;\n}\n\ninterface UserPromptImageBlock {\n type: \"image\";\n workspaceId?: string | null;\n agentSessionId: string;\n attachmentId?: string | null;\n mimeType: string;\n name?: string | null;\n data?: string | null;\n url?: string | null;\n path?: string | null;\n}\n\nfunction userPromptContentBlocks(\n message: WorkspaceAgentSessionDetailTurn[\"userMessages\"][number],\n fallbackWorkspaceId: string | null | undefined\n): UserPromptContentBlock[] {\n const item = message.sourceTimelineItems?.find((candidate) =>\n Array.isArray(candidate.payload?.content)\n );\n const content = Array.isArray(item?.payload?.content)\n ? item.payload.content\n : null;\n if (!content) return [];\n const displayPrompt = firstString(\n message.sourceTimelineItems?.map((candidate) =>\n typeof candidate.payload?.displayPrompt === \"string\"\n ? candidate.payload.displayPrompt\n : \"\"\n ) ?? []\n );\n const visibleDisplayPrompt = isSyntheticImageOnlyDisplayPrompt(\n displayPrompt,\n content\n )\n ? \"\"\n : displayPrompt;\n const blocks = content.flatMap((raw): UserPromptContentBlock[] => {\n const block =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : null;\n if (!block) return [];\n if (block.type === \"text\" && typeof block.text === \"string\") {\n return visibleDisplayPrompt\n ? []\n : [{ type: \"text\", text: linkifyPastedTextReferences(block.text) }];\n }\n if (block.type !== \"image\") return [];\n const mimeType =\n typeof block.mimeType === \"string\" ? block.mimeType.trim() : \"\";\n if (!mimeType) return [];\n return [\n {\n type: \"image\",\n workspaceId: item?.workspaceId ?? fallbackWorkspaceId ?? null,\n agentSessionId: item?.agentSessionId ?? message.id,\n attachmentId: optionalString(block.attachmentId),\n mimeType,\n name: optionalString(block.name),\n data: optionalString(block.data),\n url: optionalString(block.url),\n path: optionalString(block.path)\n }\n ];\n });\n return visibleDisplayPrompt\n ? [{ type: \"text\", text: visibleDisplayPrompt }, ...blocks]\n : blocks;\n}\n\nfunction isSyntheticImageOnlyDisplayPrompt(\n displayPrompt: string,\n content: readonly unknown[]\n): boolean {\n if (displayPrompt !== \"[Image]\" && displayPrompt !== \"[Images]\") {\n return false;\n }\n let imageCount = 0;\n for (const raw of content) {\n const block =\n raw && typeof raw === \"object\" && !Array.isArray(raw)\n ? (raw as Record<string, unknown>)\n : null;\n if (!block) continue;\n if (\n block.type === \"text\" &&\n typeof block.text === \"string\" &&\n block.text.trim()\n ) {\n return false;\n }\n if (block.type === \"image\") {\n imageCount += 1;\n }\n }\n return displayPrompt === \"[Image]\" ? imageCount === 1 : imageCount > 1;\n}\n\nfunction optionalString(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction firstString(values: readonly string[]): string {\n for (const value of values) {\n const trimmed = value.trim();\n if (trimmed) return trimmed;\n }\n return \"\";\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"../../workspaceAgentTimelineTypes\";\nimport type {\n WorkspaceAgentSessionDetailMessage,\n WorkspaceAgentSessionDetailThinking,\n WorkspaceAgentSessionDetailTurn\n} from \"../../workspaceAgentSessionDetailViewModel\";\nimport type {\n AgentMessageContentVM,\n AgentMessageRowVM,\n AgentThinkingContentVM\n} from \"../contracts/agentMessageRowVM\";\nimport type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport { isApprovalToolCall } from \"./agentToolRendererKind\";\nimport { resolveAgentTranscriptPresentationKind } from \"./agentTranscriptPresentation\";\nimport { projectAgentToolCall } from \"./agentToolProjection\";\nimport {\n isCollaborationTimelineItem,\n projectAgentCollaborationVM\n} from \"./agentCollaborationProjection\";\nimport { projectConversationUserRow } from \"./agentConversationUserProjection\";\n\nexport type AgentTurnSequenceItemVM =\n | {\n kind: \"user-message\";\n row: AgentMessageRowVM;\n }\n | {\n kind: \"assistant-message\";\n message: AgentMessageContentVM;\n }\n | {\n kind: \"thinking\";\n thinking: AgentThinkingContentVM;\n }\n | {\n kind: \"tool-call\";\n call: AgentToolCallVM;\n };\n\nexport function buildAgentTurnSequenceItems(\n turn: WorkspaceAgentSessionDetailTurn,\n workspaceId?: string | null\n): AgentTurnSequenceItemVM[] {\n const items = turn.rawAgentItems ?? turn.agentItems;\n const sequence: AgentTurnSequenceItemVM[] = turn.userMessages.map(\n (message) => ({\n kind: \"user-message\",\n row: projectConversationUserRow(message, turn.id, workspaceId)\n })\n );\n items.forEach((item) => {\n if (item.kind === \"message\") {\n sequence.push({\n kind: \"assistant-message\",\n message: projectMessage(item.message, turn.id)\n });\n return;\n }\n if (item.kind === \"thinking\") {\n sequence.push({\n kind: \"thinking\",\n thinking: projectThinking(item.thinking, turn.id)\n });\n return;\n }\n const sourceEntries =\n item.groupEntries ??\n item.toolCalls.map((call) => ({ kind: \"tool-call\", call }) as const);\n sourceEntries.forEach((entry) => {\n if (entry.kind === \"thinking\") {\n sequence.push({\n kind: \"thinking\",\n thinking: projectThinking(entry.thinking, turn.id)\n });\n return;\n }\n if (isApprovalToolCall(entry.call)) {\n return;\n }\n sequence.push({\n kind: \"tool-call\",\n call: projectAgentToolCall(entry.call)\n });\n });\n });\n return sortTurnSequenceItems(sequence);\n}\n\nfunction sortTurnSequenceItems(\n sequence: readonly AgentTurnSequenceItemVM[]\n): AgentTurnSequenceItemVM[] {\n const positioned = sequence.map((item, sourceIndex) => ({\n item,\n sourceIndex,\n position: turnSequencePosition(item)\n }));\n if (positioned.every((entry) => entry.position.seq > 0)) {\n return positioned\n .sort(\n (left, right) =>\n left.position.seq - right.position.seq ||\n left.sourceIndex - right.sourceIndex\n )\n .map((entry) => entry.item);\n }\n if (positioned.every((entry) => entry.position.occurredAtUnixMs > 0)) {\n return positioned\n .sort(\n (left, right) =>\n left.position.occurredAtUnixMs - right.position.occurredAtUnixMs ||\n left.sourceIndex - right.sourceIndex\n )\n .map((entry) => entry.item);\n }\n return [...sequence];\n}\n\nfunction turnSequencePosition(item: AgentTurnSequenceItemVM): {\n seq: number;\n occurredAtUnixMs: number;\n} {\n const sourceItems = turnSequenceSourceItems(item);\n const seq = minimumPositive(\n sourceItems.map((sourceItem) => sourceItem.seq ?? 0)\n );\n const occurredAtUnixMs = minimumPositive(\n sourceItems.map(\n (sourceItem) =>\n sourceItem.occurredAtUnixMs ?? sourceItem.createdAtUnixMs ?? 0\n )\n );\n if (occurredAtUnixMs > 0) {\n return { seq, occurredAtUnixMs };\n }\n switch (item.kind) {\n case \"user-message\":\n return { seq, occurredAtUnixMs: item.row.occurredAtUnixMs ?? 0 };\n case \"assistant-message\":\n return { seq, occurredAtUnixMs: item.message.occurredAtUnixMs ?? 0 };\n case \"thinking\":\n return { seq, occurredAtUnixMs: item.thinking.occurredAtUnixMs ?? 0 };\n case \"tool-call\":\n return { seq, occurredAtUnixMs: item.call.occurredAtUnixMs ?? 0 };\n }\n}\n\nfunction turnSequenceSourceItems(\n item: AgentTurnSequenceItemVM\n): WorkspaceAgentActivityTimelineItem[] {\n switch (item.kind) {\n case \"user-message\":\n return item.row.messages.flatMap(\n (message) => message.sourceTimelineItems ?? []\n );\n case \"assistant-message\":\n return item.message.sourceTimelineItems ?? [];\n case \"thinking\":\n return item.thinking.sourceTimelineItems ?? [];\n case \"tool-call\":\n return item.call.sourceTimelineItems ?? [];\n }\n}\n\nfunction minimumPositive(values: readonly number[]): number {\n return values.reduce(\n (minimum, value) =>\n value > 0 && (minimum === 0 || value < minimum) ? value : minimum,\n 0\n );\n}\n\nfunction projectMessage(\n message: WorkspaceAgentSessionDetailMessage,\n turnId: string\n): AgentMessageContentVM {\n const projected: AgentMessageContentVM = {\n kind: \"message-content\",\n id: message.id,\n turnId: message.turnId ?? turnId,\n body: message.body,\n presentationKind: resolveAgentTranscriptPresentationKind(\n message.systemNotice ?? null\n ),\n statusKind: message.statusKind ?? null,\n occurredAtUnixMs: message.occurredAtUnixMs ?? null,\n visibleError: message.visibleError ?? null,\n systemNotice: message.systemNotice ?? null\n };\n if (message.sourceTimelineItems) {\n projected.sourceTimelineItems = message.sourceTimelineItems;\n if (\n message.sourceTimelineItems.some(\n (item) => item.payload?.messageKind === \"plan\"\n )\n ) {\n projected.contentKind = \"plan\";\n }\n const collaborationItem = message.sourceTimelineItems.find(\n isCollaborationTimelineItem\n );\n if (collaborationItem) {\n const collaboration = projectAgentCollaborationVM(collaborationItem);\n if (collaboration) {\n projected.contentKind = \"collaboration\";\n projected.collaboration = collaboration;\n }\n }\n }\n return projected;\n}\n\nfunction projectThinking(\n thinking: WorkspaceAgentSessionDetailThinking,\n turnId: string\n): AgentThinkingContentVM {\n const projected: AgentThinkingContentVM = {\n kind: \"thinking-content\",\n id: thinking.id,\n turnId: thinking.turnId ?? turnId,\n body: thinking.body,\n statusKind: thinking.statusKind ?? null,\n occurredAtUnixMs: thinking.occurredAtUnixMs ?? null\n };\n if (thinking.sourceTimelineItems) {\n projected.sourceTimelineItems = thinking.sourceTimelineItems;\n }\n return projected;\n}\n","/**\n * Split a flat list into consecutive runs. A new run starts whenever\n * `sameRun(previousItem, currentItem)` returns false. Total function: every\n * input element lands in exactly one run, runs preserve order, and an empty\n * input yields an empty result. No element is ever dropped or duplicated.\n *\n * This is the segmentation primitive behind neighbour-dependent projections\n * (e.g. coalescing thinking into the message it precedes). Keeping it generic\n * and pure means the grouping decision lives entirely in the `sameRun`\n * predicate, which is trivially table-testable on its own.\n */\nexport function chunkBy<T>(\n items: readonly T[],\n sameRun: (previous: T, current: T) => boolean\n): T[][] {\n const runs: T[][] = [];\n for (const item of items) {\n const current = runs.at(-1);\n if (current && sameRun(current.at(-1)!, item)) {\n current.push(item);\n continue;\n }\n runs.push([item]);\n }\n return runs;\n}\n","import type {\n AgentMessageContentVM,\n AgentThinkingContentVM\n} from \"../contracts/agentMessageRowVM\";\nimport type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport type { AgentTranscriptRowVM } from \"../contracts/agentTranscriptRowVM\";\nimport type { AgentComputedToolGroupVM } from \"./agentToolGroupingProjection\";\nimport type { AgentTurnSequenceItemVM } from \"./agentTurnSequenceProjection\";\nimport {\n projectAgentSingleToolRow,\n projectAgentToolGroupRowFromGroup\n} from \"./agentToolGroupingProjection\";\nimport { chunkBy } from \"./chunkBy\";\n\n/**\n * A render unit is one item that will become (part of) a single transcript\n * row. Unlike the raw turn sequence, tool groups have already been resolved to\n * one unit spanning their calls, and grouped/suppressed indices have been\n * dropped. This flattening is what lets the row pass reason about immediate\n * neighbours instead of looking ahead across skipped indices.\n */\nexport type AgentRenderUnit =\n | { tag: \"tool-group\"; group: AgentComputedToolGroupVM }\n | { tag: \"tool\"; call: AgentToolCallVM }\n | {\n tag: \"user-message\";\n row: Extract<AgentTranscriptRowVM, { kind: \"message\" }>;\n }\n | { tag: \"thinking\"; thinking: AgentThinkingContentVM }\n | { tag: \"message\"; message: AgentMessageContentVM };\n\nexport type AgentRenderUnitTag = AgentRenderUnit[\"tag\"];\n\n/** Pure classifier for a raw turn sequence item. */\nexport function tagOf(\n item: AgentTurnSequenceItemVM\n): \"user-message\" | \"message\" | \"thinking\" | \"tool\" {\n switch (item.kind) {\n case \"user-message\":\n return \"user-message\";\n case \"assistant-message\":\n return \"message\";\n case \"thinking\":\n return \"thinking\";\n case \"tool-call\":\n return \"tool\";\n }\n}\n\n/**\n * Run predicate: a thinking unit is absorbed into the assistant message that\n * immediately follows it (rendered as that message's `thinking`). Every other\n * adjacency starts a new run, so tools, tool groups and lone thinking each\n * become their own row.\n */\nexport function thinkingAbsorbedByMessage(\n previous: AgentRenderUnit,\n current: AgentRenderUnit\n): boolean {\n return previous.tag === \"thinking\" && current.tag === \"message\";\n}\n\n/**\n * Resolve the raw turn sequence into render units: emit one unit per tool\n * group (skipping its span), drop grouped/suppressed indices, and tag the\n * remaining message/thinking/tool items. Removing skipped items here is what\n * makes a thinking and a later message become adjacent units when only\n * suppressed tools sat between them.\n */\nexport function toRenderUnits(\n sequence: readonly AgentTurnSequenceItemVM[],\n groups: ReadonlyMap<number, AgentComputedToolGroupVM>,\n skippedIndices: ReadonlySet<number>\n): AgentRenderUnit[] {\n const units: AgentRenderUnit[] = [];\n for (let index = 0; index < sequence.length; index += 1) {\n const group = groups.get(index);\n if (group) {\n units.push({ tag: \"tool-group\", group });\n index = group.endIndex;\n continue;\n }\n if (skippedIndices.has(index)) {\n continue;\n }\n const item = sequence[index];\n if (!item) {\n continue;\n }\n switch (item.kind) {\n case \"user-message\":\n units.push({ tag: \"user-message\", row: item.row });\n break;\n case \"assistant-message\":\n units.push({ tag: \"message\", message: item.message });\n break;\n case \"thinking\":\n units.push({ tag: \"thinking\", thinking: item.thinking });\n break;\n case \"tool-call\":\n units.push({ tag: \"tool\", call: item.call });\n break;\n }\n }\n return units;\n}\n\n/**\n * Render one run into a transcript row. A run is either a singleton\n * (tool group / tool / lone thinking) or leading thinking units followed by a\n * single assistant message that absorbs them.\n */\nexport function renderRun(\n run: readonly AgentRenderUnit[],\n turnId: string,\n agentSessionId?: string\n): AgentTranscriptRowVM {\n const last = run.at(-1);\n if (!last) {\n throw new Error(\"renderRun received an empty run\");\n }\n if (last.tag === \"tool-group\") {\n return projectAgentToolGroupRowFromGroup(\n turnId,\n last.group,\n agentSessionId\n );\n }\n if (last.tag === \"tool\") {\n return projectAgentSingleToolRow(last.call, turnId);\n }\n if (last.tag === \"user-message\") {\n return last.row;\n }\n const thinking = run\n .filter(\n (unit): unit is Extract<AgentRenderUnit, { tag: \"thinking\" }> =>\n unit.tag === \"thinking\"\n )\n .map((unit) => unit.thinking);\n if (last.tag === \"message\") {\n return {\n kind: \"message\",\n id: `message:assistant:${last.message.id}`,\n turnId: last.message.turnId,\n speaker: \"assistant\",\n messages: [last.message],\n thinking,\n occurredAtUnixMs: last.message.occurredAtUnixMs\n };\n }\n return {\n kind: \"message\",\n id: `message:thinking:${turnId}:${thinking.map((entry) => entry.id).join(\"+\")}`,\n turnId,\n speaker: \"assistant\",\n messages: [],\n thinking,\n occurredAtUnixMs:\n thinking.at(-1)?.occurredAtUnixMs ?? thinking[0]?.occurredAtUnixMs ?? null\n };\n}\n\n/** Project a turn's sequence (with computed groups/skips) into transcript rows. */\nexport function projectTurnRows(\n sequence: readonly AgentTurnSequenceItemVM[],\n groups: ReadonlyMap<number, AgentComputedToolGroupVM>,\n skippedIndices: ReadonlySet<number>,\n turnId: string,\n agentSessionId?: string\n): AgentTranscriptRowVM[] {\n const units = toRenderUnits(sequence, groups, skippedIndices);\n return chunkBy(units, thinkingAbsorbedByMessage).map((run) =>\n renderRun(run, turnId, agentSessionId)\n );\n}\n","import type { WorkspaceAgentSessionDetailViewModel } from \"../../workspaceAgentSessionDetailViewModel\";\nimport type { AgentProcessingRowVM } from \"../contracts/agentProcessingRowVM\";\nimport type { AgentTranscriptRowVM } from \"../contracts/agentTranscriptRowVM\";\nimport { agentTranscriptRowHasPresentationKind } from \"./agentTranscriptPresentation\";\n\nexport function projectAgentProcessingRow(\n detail: WorkspaceAgentSessionDetailViewModel,\n rows: readonly AgentTranscriptRowVM[]\n): AgentProcessingRowVM | null {\n if (!detail.showProcessingIndicator) {\n return null;\n }\n const activeTurnId = detail.session.activeTurnId;\n const canonicalTurn = detail.sessionTurns?.find(\n (turn) => turn.turnId === activeTurnId\n );\n if (\n canonicalTurn &&\n canonicalTurn.phase !== \"settled\" &&\n Number.isFinite(canonicalTurn.startedAtUnixMs)\n ) {\n if (activeTurnId && hasTurnTimingHostRow(rows, activeTurnId)) {\n return null;\n }\n return processingRow(detail, activeTurnId);\n }\n const fallbackTurnId = activeTurnId ?? detail.turns.at(-1)?.id ?? null;\n if (fallbackTurnId && hasSpecificProgressRow(rows, fallbackTurnId)) {\n return null;\n }\n return processingRow(detail, fallbackTurnId);\n}\n\nfunction processingRow(\n detail: WorkspaceAgentSessionDetailViewModel,\n turnId: string | null\n): AgentProcessingRowVM {\n return {\n kind: \"processing\",\n id: `processing:${turnId ?? \"session\"}`,\n turnId,\n occurredAtUnixMs:\n detail.session.updatedAtUnixMs ?? detail.session.createdAtUnixMs ?? null\n };\n}\n\nfunction hasTurnTimingHostRow(\n rows: readonly AgentTranscriptRowVM[],\n activeTurnId: string\n): boolean {\n return rows.some((row) => row.turnId === activeTurnId);\n}\n\nfunction hasSpecificProgressRow(\n rows: readonly AgentTranscriptRowVM[],\n activeTurnId: string\n): boolean {\n return rows.some((row) => {\n if (row.turnId !== activeTurnId) {\n return false;\n }\n return (\n agentTranscriptRowHasPresentationKind(row, \"specific-progress\") ||\n (row.kind === \"tool-group\" &&\n row.calls.some(\n (call) =>\n call.statusKind === \"working\" || call.statusKind === \"waiting\"\n ))\n );\n });\n}\n","export type AgentPatchChangeType = \"created\" | \"modified\" | \"deleted\";\n\nexport function normalizeAgentPatchText(text: string): string {\n if (!text) {\n return text;\n }\n const contentField = tryExtractContentField(text);\n if (contentField) {\n return normalizeAgentPatchText(contentField);\n }\n const expanded =\n !text.includes(\"\\n\") && text.includes(\"\\\\n\")\n ? text.replace(/\\\\n/g, \"\\n\")\n : text;\n return expanded\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) =>\n line.trimStart() === \"\\\\"\n ? \"\\\\"\n : line\n )\n .join(\"\\n\");\n}\n\nexport function extractAgentPatchPath(patchText: string | null): string | null {\n const normalized = normalizeAgentPatchText(patchText ?? \"\");\n if (!normalized.trim()) {\n return null;\n }\n\n const applyPatchPath = extractApplyPatchPath(normalized);\n if (applyPatchPath) {\n return applyPatchPath;\n }\n\n const changeType = inferAgentPatchChangeType(normalized);\n const gitHeader = normalized.match(/^diff --git a\\/(.+?) b\\/(.+)$/m);\n const oldPath = gitHeader?.[1]?.trim() ?? null;\n const newPath = gitHeader?.[2]?.trim() ?? null;\n if (oldPath || newPath) {\n return changeType === \"deleted\"\n ? (nonNullPath(oldPath) ?? nonNullPath(newPath))\n : (nonNullPath(newPath) ?? nonNullPath(oldPath));\n }\n\n if (changeType === \"deleted\") {\n return extractOldHeaderPath(normalized);\n }\n return extractNewHeaderPath(normalized);\n}\n\nexport function inferAgentPatchChangeType(\n patchText: string | null\n): AgentPatchChangeType {\n const normalized = normalizeAgentPatchText(patchText ?? \"\").trim();\n if (!normalized) {\n return \"modified\";\n }\n if (\n /^(\\*\\*\\* Delete File:|deleted file mode\\b|\\+\\+\\+ \\/dev\\/null$)/m.test(\n normalized\n )\n ) {\n return \"deleted\";\n }\n if (\n /^(\\*\\*\\* Add File:|new file mode\\b|--- \\/dev\\/null$)/m.test(normalized)\n ) {\n return \"created\";\n }\n return \"modified\";\n}\n\nfunction extractApplyPatchPath(text: string): string | null {\n const match = text.match(/^\\*\\*\\* (?:Add|Delete|Update) File:\\s+(.+?)\\s*$/m);\n return match?.[1]?.trim() || null;\n}\n\nfunction extractOldHeaderPath(text: string): string | null {\n const match = text.match(/^---\\s+(?:a\\/)?([^\\n]+)$/m);\n return nonNullPath(match?.[1]?.trim() ?? null);\n}\n\nfunction extractNewHeaderPath(text: string): string | null {\n const match = text.match(/^\\+\\+\\+\\s+(?:b\\/)?([^\\n]+)$/m);\n return nonNullPath(match?.[1]?.trim() ?? null);\n}\n\nfunction nonNullPath(path: string | null): string | null {\n if (!path || path === \"/dev/null\" || path === \"dev/null\") {\n return null;\n }\n return path;\n}\n\nfunction tryExtractContentField(text: string): string | null {\n const trimmed = text.trim();\n if (!trimmed.startsWith(\"{\") || !trimmed.endsWith(\"}\")) {\n return null;\n }\n try {\n const parsed = JSON.parse(trimmed) as unknown;\n if (\n parsed &&\n typeof parsed === \"object\" &&\n typeof (parsed as { content?: unknown }).content === \"string\"\n ) {\n return (parsed as { content: string }).content;\n }\n return null;\n } catch {\n return null;\n }\n}\n","import { resolveWorkspaceFilePathCandidate } from \"../../../actions/workspaceFilePathCandidate\";\nimport type { AgentTurnSummaryFileVM } from \"../contracts/agentTurnSummaryRowVM\";\n\nexport type AgentTurnSummaryChangeType = AgentTurnSummaryFileVM[\"changeType\"];\nexport interface AgentTurnSummaryProjectionOptions {\n defaultCwd?: string | null;\n workspaceRoot?: string | null;\n}\n\nexport function normalizedFilePath(\n value: string | null,\n options: AgentTurnSummaryProjectionOptions = {}\n): string | null {\n const path = value?.trim() ?? \"\";\n if (!path || isStructuredPayloadPath(path) || isIgnoredFilePath(path)) {\n return null;\n }\n return resolveWorkspaceFilePathCandidate({\n path,\n workspaceRoot: options.workspaceRoot,\n basePath: options.defaultCwd\n })\n ? path\n : null;\n}\n\nfunction isIgnoredFilePath(path: string): boolean {\n const normalizedPath = path.replace(/\\\\/g, \"/\").replace(/\\/+$/, \"\");\n return normalizedPath === \"/dev/null\" || normalizedPath === \"NUL\";\n}\n\nfunction isStructuredPayloadPath(path: string): boolean {\n if (/[\\r\\n]/.test(path)) {\n return true;\n }\n if (!path.startsWith(\"{\") && !path.startsWith(\"[\")) {\n return false;\n }\n try {\n JSON.parse(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function applyShortestUniqueFileLabels(\n files: AgentTurnSummaryFileVM[]\n): AgentTurnSummaryFileVM[] {\n const suffixByPath = shortestUniquePathSuffixByPath(\n files.map((file) => file.path)\n );\n return files.map((file) => ({\n ...file,\n label: suffixByPath.get(file.path) ?? file.label\n }));\n}\n\nfunction shortestUniquePathSuffixByPath(paths: string[]): Map<string, string> {\n const partsByPath = new Map(\n paths.map((path) => [path, splitPathSegments(path)])\n );\n const labels = new Map<string, string>();\n const unresolved = new Set(paths);\n for (let depth = 1; unresolved.size > 0; depth += 1) {\n const grouped = new Map<string, string[]>();\n for (const path of unresolved) {\n const parts = partsByPath.get(path) ?? [];\n const label =\n parts.slice(-Math.min(depth, parts.length)).join(\"/\") ||\n parts.at(-1) ||\n path;\n grouped.set(label, [...(grouped.get(label) ?? []), path]);\n }\n let resolvedCount = 0;\n for (const [label, group] of grouped) {\n if (group.length !== 1 || !group[0]) {\n continue;\n }\n labels.set(group[0], label);\n unresolved.delete(group[0]);\n resolvedCount += 1;\n }\n if (resolvedCount === 0) {\n for (const path of unresolved) {\n labels.set(path, path);\n }\n break;\n }\n }\n return labels;\n}\n\nexport function splitFilePath(path: string): {\n fileName: string;\n directory: string | null;\n} {\n const normalized = path.trim();\n const parts = splitPathSegments(normalized);\n if (parts.length <= 1) {\n return { fileName: parts[0] ?? normalized, directory: null };\n }\n return {\n fileName: parts.at(-1) ?? normalized,\n directory: parts.slice(0, -1).join(\"/\")\n };\n}\n\nfunction splitPathSegments(path: string): string[] {\n return path.trim().split(/[\\\\/]/).filter(Boolean);\n}\n\nexport function normalizeChangeType(\n value: string | null\n): AgentTurnSummaryChangeType | null {\n switch ((value ?? \"\").trim().toLowerCase()) {\n case \"add\":\n case \"added\":\n case \"create\":\n case \"created\":\n case \"new\":\n return \"created\";\n case \"modify\":\n case \"modified\":\n case \"edit\":\n case \"edited\":\n case \"change\":\n case \"changed\":\n case \"update\":\n case \"updated\":\n return \"modified\";\n case \"delete\":\n case \"deleted\":\n case \"remove\":\n case \"removed\":\n return \"deleted\";\n default:\n return null;\n }\n}\n\nexport function isFailedToolStatus(value: string | null): boolean {\n const normalized = (value ?? \"\").trim().toLowerCase();\n return [\"failed\", \"error\", \"errored\", \"canceled\", \"cancelled\"].includes(\n normalized\n );\n}\n\nexport function objectValue(value: unknown): Record<string, unknown> | null {\n return value && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : null;\n}\n\nexport function firstFileChangeValue(...values: unknown[]): unknown {\n for (const value of values) {\n if (Array.isArray(value) || objectValue(value)) {\n return value;\n }\n }\n return null;\n}\n\nexport function arrayValue(value: unknown): unknown[] | null {\n return Array.isArray(value) ? value : null;\n}\n\nexport function nestedTaskStepsFromPayload(\n payload: Record<string, unknown> | null,\n output: Record<string, unknown> | null\n): unknown[] {\n const candidates = [\n arrayValue(payload?.steps),\n arrayValue(output?.steps),\n arrayValue(objectValue(payload?.metadata)?.steps),\n arrayValue(objectValue(output?.metadata)?.steps)\n ];\n return candidates.find((value) => value && value.length > 0) ?? [];\n}\n\nexport function nestedTaskStepStatusKind(\n step: Record<string, unknown>,\n fallback: string | null\n): string | null {\n return (\n stringValue(step.statusKind) ?? stringValue(step.status) ?? fallback ?? null\n );\n}\n\nexport function stringValue(value: unknown): string | null {\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nexport function literalStringValue(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\nexport function firstNonEmptyString(\n ...values: Array<string | null | undefined>\n): string | null {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nexport function firstPresentString(\n ...values: Array<string | null | undefined>\n): string | null {\n for (const value of values) {\n if (typeof value === \"string\") {\n return value;\n }\n }\n return null;\n}\n","import type {\n WorkspaceAgentSessionDetailToolCall,\n WorkspaceAgentSessionDetailTurn,\n WorkspaceAgentSessionDetailViewModel\n} from \"../../workspaceAgentSessionDetailViewModel\";\nimport type {\n AgentTurnSummaryPatchBatchVM,\n AgentTurnSummaryPatchChangeVM,\n AgentTurnSummaryFileVM,\n AgentTurnSummaryRowVM\n} from \"../contracts/agentTurnSummaryRowVM\";\nimport { inferAgentPatchChangeType } from \"../rules/agentPatchMetadata\";\nimport {\n fileChangeEntriesFromChanges,\n fileChangeTypeValue\n} from \"../../workspaceAgentFileChangePayload\";\nimport {\n applyShortestUniqueFileLabels,\n arrayValue,\n firstFileChangeValue,\n firstNonEmptyString,\n firstPresentString,\n isFailedToolStatus,\n literalStringValue,\n nestedTaskStepsFromPayload,\n nestedTaskStepStatusKind,\n normalizedFilePath,\n normalizeChangeType,\n objectValue,\n splitFilePath,\n stringValue\n} from \"./agentTurnSummaryFileProjection\";\n\ninterface AgentTurnSummaryProjectionOptions {\n defaultCwd?: string | null;\n workspaceRoot?: string | null;\n occurredAtUnixMs?: number | null;\n}\n\n/**\n * Projects the response-tail file list from durable turn state. Tool calls are\n * consulted only for executable Undo/Reapply patch batches; they never infer\n * which files changed or whether a change was create/modify/delete.\n */\nexport function projectAgentTurnSummaryRows(\n detail: WorkspaceAgentSessionDetailViewModel\n): AgentTurnSummaryRowVM[] {\n const transcriptTurnsById = new Map(\n detail.turns.map((turn) => [turn.id, turn])\n );\n return (detail.sessionTurns ?? []).flatMap((turn) => {\n const transcriptTurn = transcriptTurnsById.get(turn.turnId);\n if (\n !isSettledTurnSummaryVisible(detail, turn.turnId, turn.phase) ||\n !turn.fileChanges ||\n !transcriptTurn\n ) {\n return [];\n }\n return projectAgentTurnSummaryRowForTurn(transcriptTurn, turn.fileChanges, {\n defaultCwd: detail.cwd,\n workspaceRoot: detail.workspaceRoot,\n occurredAtUnixMs: turn.updatedAtUnixMs\n });\n });\n}\n\nfunction isSettledTurnSummaryVisible(\n detail: WorkspaceAgentSessionDetailViewModel,\n turnId: string,\n phase: string\n): boolean {\n if (phase !== \"settled\") return false;\n const activeTurn = detail.session.activeTurn;\n if (activeTurn?.turnId === turnId && activeTurn.phase !== \"settled\") {\n return false;\n }\n return (\n detail.showProcessingIndicator !== true ||\n detail.turns.at(-1)?.id !== turnId\n );\n}\n\nexport function projectAgentTurnSummaryRowForTurn(\n turn: WorkspaceAgentSessionDetailTurn,\n fileChanges: Record<string, unknown> | null,\n options: AgentTurnSummaryProjectionOptions = {}\n): AgentTurnSummaryRowVM[] {\n const files = canonicalTurnFiles(turn.id, fileChanges, options);\n if (files.length === 0) {\n return [];\n }\n const visiblePaths = new Set(files.map((file) => file.path));\n const patchBatches = patchBatchesFromCalls(\n turnToolCallsForSummary(turn),\n options\n ).flatMap((batch) => {\n const changes = batch.changes.filter((change) =>\n visiblePaths.has(change.path)\n );\n return changes.length > 0 ? [{ ...batch, changes }] : [];\n });\n const createdCount = files.filter(\n (file) => file.changeType === \"created\"\n ).length;\n return [\n {\n kind: \"turn-summary\",\n id: `turn-summary:${turn.id}`,\n turnId: turn.id,\n files,\n ...(patchBatches.length > 0 ? { patchBatches } : {}),\n fileCount: files.length,\n modifiedCount: files.length - createdCount,\n createdCount,\n occurredAtUnixMs: options.occurredAtUnixMs ?? null\n }\n ];\n}\n\nfunction canonicalTurnFiles(\n turnId: string,\n fileChanges: Record<string, unknown> | null,\n options: AgentTurnSummaryProjectionOptions\n): AgentTurnSummaryFileVM[] {\n const byPath = new Map<string, AgentTurnSummaryFileVM>();\n for (const [index, value] of (\n arrayValue(objectValue(fileChanges)?.files) ?? []\n ).entries()) {\n const file = objectValue(value);\n const path = normalizedFilePath(\n firstNonEmptyString(\n stringValue(file?.path),\n stringValue(file?.filePath),\n stringValue(file?.file_path)\n ),\n options\n );\n if (!file || !path) {\n continue;\n }\n const parts = splitFilePath(path);\n byPath.set(path, {\n label: path,\n path,\n fileName: parts.fileName,\n directory: parts.directory,\n changeType:\n normalizeChangeType(\n firstNonEmptyString(\n stringValue(file.change),\n stringValue(file.type),\n stringValue(file.status)\n )\n ) ?? \"modified\",\n toolName: null,\n messageId: `turn-summary:${turnId}:file:${index + 1}`,\n unifiedDiff:\n firstNonEmptyString(\n stringValue(file.unifiedDiff),\n stringValue(file.unified_diff),\n stringValue(file.diff),\n stringValue(file.patch)\n ) ?? null,\n oldString: firstPresentString(\n literalStringValue(file.oldString),\n literalStringValue(file.old_string)\n ),\n newString: firstPresentString(\n literalStringValue(file.newString),\n literalStringValue(file.new_string)\n ),\n content: literalStringValue(file.content),\n occurredAtUnixMs: options.occurredAtUnixMs ?? null\n });\n }\n return applyShortestUniqueFileLabels([...byPath.values()]);\n}\n\nfunction turnToolCallsForSummary(\n turn: WorkspaceAgentSessionDetailTurn\n): WorkspaceAgentSessionDetailToolCall[] {\n const callsById = new Map<string, WorkspaceAgentSessionDetailToolCall>();\n for (const call of turn.toolCalls) {\n callsById.set(call.id, call);\n }\n for (const item of turn.agentItems) {\n if (item.kind !== \"tool-calls\") {\n continue;\n }\n for (const call of item.toolCalls) {\n callsById.set(call.id, call);\n }\n for (const entry of item.groupEntries ?? []) {\n if (entry.kind === \"tool-call\") {\n callsById.set(entry.call.id, entry.call);\n }\n }\n }\n return [...callsById.values()];\n}\n\nfunction patchBatchesFromCalls(\n calls: readonly WorkspaceAgentSessionDetailToolCall[],\n options: AgentTurnSummaryProjectionOptions\n): AgentTurnSummaryPatchBatchVM[] {\n return calls.flatMap((call) => patchBatchesFromCall(call, options));\n}\n\nfunction patchBatchesFromCall(\n call: WorkspaceAgentSessionDetailToolCall,\n options: AgentTurnSummaryProjectionOptions\n): AgentTurnSummaryPatchBatchVM[] {\n const directBatch = isFailedToolStatus(call.statusKind ?? null)\n ? []\n : patchBatchFromPayload(call.id, call.payload ?? null, null, null, options);\n const output = objectValue(call.payload?.output);\n const nestedBatches = nestedTaskStepsFromPayload(\n call.payload,\n output\n ).flatMap((value, index) => {\n const step = objectValue(value);\n if (\n !step ||\n isFailedToolStatus(\n nestedTaskStepStatusKind(step, call.statusKind ?? null)\n )\n ) {\n return [];\n }\n return patchBatchFromPayload(\n stringValue(step.toolUseId) ??\n stringValue(step.id) ??\n `${call.id}:step:${index + 1}`,\n objectValue(step.payload),\n objectValue(step.toolInput) ?? objectValue(step.tool_input),\n objectValue(step.toolResult) ?? objectValue(step.tool_result),\n options\n );\n });\n return [...directBatch, ...nestedBatches];\n}\n\nfunction patchBatchFromPayload(\n id: string,\n payload: Record<string, unknown> | null,\n toolInput: Record<string, unknown> | null,\n toolOutput: Record<string, unknown> | null,\n options: AgentTurnSummaryProjectionOptions\n): AgentTurnSummaryPatchBatchVM[] {\n const toolState = objectValue(payload?.tool_state);\n const metadata = objectValue(payload?.metadata);\n const input =\n toolInput ?? objectValue(payload?.input) ?? objectValue(toolState?.input);\n const output =\n toolOutput ??\n objectValue(payload?.output) ??\n objectValue(toolState?.output);\n const rawInput = objectValue(input?.rawInput);\n const changes = firstFileChangeValue(\n output?.changes,\n payload?.changes,\n input?.changes,\n rawInput?.changes\n );\n const patchChanges = patchChangesFromChangeMap(changes);\n if (patchChanges.length === 0) {\n return [];\n }\n return [\n {\n cwd:\n firstNonEmptyString(\n stringValue(payload?.cwd),\n stringValue(input?.cwd),\n stringValue(rawInput?.cwd),\n stringValue(output?.cwd),\n stringValue(metadata?.cwd),\n options.defaultCwd ?? null\n ) ?? null,\n toolCallId: id,\n changes: patchChanges\n }\n ];\n}\n\nfunction patchChangesFromChangeMap(\n changes: unknown\n): AgentTurnSummaryPatchChangeVM[] {\n return fileChangeEntriesFromChanges(changes).flatMap((entry) => {\n const change = entry.change;\n const path = entry.path.trim();\n if (!path) {\n return [];\n }\n const changeType = normalizeChangeType(fileChangeTypeValue(change));\n const unifiedDiff =\n firstNonEmptyString(\n stringValue(change.unified_diff),\n stringValue(change.unifiedDiff),\n stringValue(change.diff),\n stringValue(change.patch)\n ) ?? null;\n let oldString = firstPresentString(\n literalStringValue(change.old_string),\n literalStringValue(change.oldString)\n );\n const explicitContent = literalStringValue(change.content);\n let newString = firstPresentString(\n literalStringValue(change.new_string),\n literalStringValue(change.newString),\n explicitContent\n );\n if (changeType === \"created\" && oldString === null && newString !== null) {\n oldString = \"\";\n }\n if (changeType === \"deleted\" && oldString === null && newString !== null) {\n oldString = newString;\n newString = \"\";\n }\n if (changeType === \"deleted\" && newString === null && oldString !== null) {\n newString = \"\";\n }\n const content = firstPresentString(\n changeType === \"deleted\" ? null : explicitContent,\n changeType === \"created\" ? newString : null\n );\n if (\n !unifiedDiff &&\n oldString === null &&\n newString === null &&\n content === null\n ) {\n return [];\n }\n return [\n {\n path,\n changeType: changeType ?? inferAgentPatchChangeType(unifiedDiff),\n unifiedDiff,\n oldString,\n newString,\n content\n }\n ];\n });\n}\n","import type {\n WorkspaceAgentSessionDetailTurn,\n WorkspaceAgentSessionDetailViewModel\n} from \"../../workspaceAgentSessionDetailViewModel\";\nimport { extractImageGenerationPreview } from \"../../imageGenerationTool\";\nimport type { AgentConversationVM } from \"../contracts/agentConversationVM\";\nimport type { AgentGeneratedImageRowVM } from \"../contracts/agentGeneratedImageRowVM\";\nimport type { AgentGoalControlRowVM } from \"../contracts/agentGoalControlRowVM\";\nimport type {\n AgentMessageContentVM,\n AgentMessageRowVM\n} from \"../contracts/agentMessageRowVM\";\nimport type { AgentToolCallVM } from \"../contracts/agentToolCallVM\";\nimport type { AgentTranscriptRowVM } from \"../contracts/agentTranscriptRowVM\";\nimport { projectAgentMessageFinalText } from \"./agentMessageFinalTextProjection\";\nimport { computeAgentToolGroups } from \"./agentToolGroupingProjection\";\nimport { buildAgentTurnSequenceItems } from \"./agentTurnSequenceProjection\";\nimport { projectTurnRows } from \"./agentTurnRowProjection\";\nimport { projectAgentProcessingRow } from \"./agentProcessingProjection\";\nimport { projectAgentTurnSummaryRows } from \"./agentTurnSummaryProjection\";\n\nexport interface AgentConversationProjectionOptions {\n avoidGroupingEdits?: boolean;\n}\n\nconst RENDER_IRRELEVANT_TRANSCRIPT_ROW_FIELDS = new Set([\"occurredAtUnixMs\"]);\nconst CODEX_SKILLS_CONTEXT_BUDGET_NOTICE_FRAGMENT =\n \"skill descriptions were shortened to fit the 2% skills context budget\";\nconst CODEX_MODEL_METADATA_FALLBACK_NOTICE_FRAGMENT =\n \"defaulting to fallback metadata\";\nconst MARKDOWN_IMAGE_PATTERN =\n /!\\[[^\\]]*]\\(\\s*(?:<([^>]+)>|([^)\\s]+))(?:\\s+[\"'][^\"']*[\"'])?\\s*\\)/g;\n\nexport function projectAgentConversationVM(\n detail: WorkspaceAgentSessionDetailViewModel,\n options: AgentConversationProjectionOptions = {}\n): AgentConversationVM {\n const rows: AgentTranscriptRowVM[] = [];\n const turns = detail.turns;\n const summariesByTurnId = new Map(\n projectAgentTurnSummaryRows(detail).map((summary) => [\n summary.turnId,\n summary\n ])\n );\n\n turns.forEach((turn) => {\n rows.push(\n ...projectTurnConversationRows(turn, detail.session.workspaceId, {\n agentSessionId: detail.session.agentSessionId,\n avoidGroupingEdits: options.avoidGroupingEdits\n })\n );\n const summary = summariesByTurnId.get(turn.id);\n if (summary) rows.push(summary);\n });\n\n const normalizedRows = dropCodexRuntimeDiagnosticNotices(\n dropRedundantErrorWarningNotices(\n mergeAdjacentAssistantMessageRows(\n dropRedundantCompactFailureEchoRows(\n mergeAdjacentTransportRetryNoticeRows(rows)\n )\n )\n )\n );\n const timelineRows = insertGoalControlRows(normalizedRows, detail);\n const processing = projectAgentProcessingRow(detail, timelineRows);\n const projectedRows = projectAgentMessageFinalText(\n processing ? [...timelineRows, processing] : timelineRows,\n detail\n );\n\n return {\n activity: detail.activity,\n workspaceRoot: detail.workspaceRoot,\n sourceDetail: detail,\n rows: projectedRows\n };\n}\n\nfunction insertGoalControlRows(\n rows: readonly AgentTranscriptRowVM[],\n detail: WorkspaceAgentSessionDetailViewModel\n): AgentTranscriptRowVM[] {\n const controls = detail.goalControls ?? [];\n if (controls.length === 0) {\n return [...rows];\n }\n const merged = [...rows];\n for (const control of controls) {\n const row: AgentGoalControlRowVM = {\n kind: \"goal-control\",\n id: `goal-control:${control.id}`,\n turnId: null,\n action: control.action,\n body: control.body,\n occurredAtUnixMs: control.occurredAtUnixMs ?? null,\n sourceTimelineItems: control.sourceTimelineItems\n };\n const insertionIndex = merged.findIndex(\n (candidate) =>\n row.occurredAtUnixMs !== null &&\n candidate.occurredAtUnixMs !== null &&\n candidate.occurredAtUnixMs > row.occurredAtUnixMs\n );\n if (insertionIndex < 0) {\n merged.push(row);\n } else {\n merged.splice(insertionIndex, 0, row);\n }\n }\n return merged;\n}\n\nfunction dropRedundantCompactFailureEchoRows(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const filtered: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n const previous = filtered.at(-1);\n if (\n isSingleCompactFailureNoticeRow(previous) &&\n isSinglePlainAssistantMessageRow(row) &&\n previous.turnId === row.turnId &&\n previous.messages[0]?.systemNotice?.detail?.trim() ===\n row.messages[0]?.body.trim()\n ) {\n continue;\n }\n filtered.push(row);\n }\n return filtered;\n}\n\nfunction isSingleCompactFailureNoticeRow(\n row: AgentTranscriptRowVM | undefined\n): row is AgentMessageRowVM {\n if (\n !row ||\n row.kind !== \"message\" ||\n row.speaker !== \"assistant\" ||\n row.thinking.length > 0 ||\n row.messages.length !== 1\n ) {\n return false;\n }\n const notice = row.messages[0]?.systemNotice;\n return (\n notice?.command === \"compact\" &&\n notice.commandStatus === \"failed\" &&\n Boolean(notice.detail?.trim())\n );\n}\n\nfunction isSinglePlainAssistantMessageRow(\n row: AgentTranscriptRowVM\n): row is AgentMessageRowVM {\n return (\n row.kind === \"message\" &&\n row.speaker === \"assistant\" &&\n row.thinking.length === 0 &&\n row.messages.length === 1 &&\n !row.messages[0]?.visibleError &&\n !row.messages[0]?.systemNotice\n );\n}\n\n/**\n * Latest plain assistant reply in the projected transcript (newest first).\n * Used as the optional consult context; error cards, system notices, plan and\n * collaboration cards are skipped so only ordinary reply text qualifies.\n */\nexport function latestAssistantMessageText(\n conversation: Pick<AgentConversationVM, \"rows\"> | null | undefined\n): string | null {\n if (!conversation) {\n return null;\n }\n for (let rowIndex = conversation.rows.length - 1; rowIndex >= 0; rowIndex--) {\n const row = conversation.rows[rowIndex];\n if (row?.kind !== \"message\" || row.speaker !== \"assistant\") {\n continue;\n }\n for (\n let messageIndex = row.messages.length - 1;\n messageIndex >= 0;\n messageIndex--\n ) {\n const message = row.messages[messageIndex];\n if (!message || message.visibleError || message.systemNotice) {\n continue;\n }\n if (message.contentKind && message.contentKind !== \"text\") {\n continue;\n }\n const body = message.body.trim();\n if (body) {\n return body;\n }\n }\n }\n return null;\n}\n\nexport function reconcileProjectedAgentConversationVM(\n previous: AgentConversationVM | null | undefined,\n next: AgentConversationVM\n): AgentConversationVM {\n if (!previous) {\n return next;\n }\n\n const previousRowsById = new Map(previous.rows.map((row) => [row.id, row]));\n let reusedRowCount = 0;\n const rows = next.rows.map((row) => {\n const previousRow = previousRowsById.get(row.id);\n if (previousRow && equivalentTranscriptRowForRender(previousRow, row)) {\n reusedRowCount += 1;\n return previousRow;\n }\n return row;\n });\n const rowsArrayReused =\n reusedRowCount === next.rows.length &&\n next.rows.length === previous.rows.length &&\n next.rows.every((_row, index) => rows[index] === previous.rows[index]);\n\n return {\n ...next,\n rows: rowsArrayReused ? previous.rows : rows\n };\n}\n\nfunction equivalentTranscriptRowForRender(\n previous: AgentTranscriptRowVM,\n next: AgentTranscriptRowVM\n): boolean {\n return equivalentValueIgnoringKeys(\n previous,\n next,\n RENDER_IRRELEVANT_TRANSCRIPT_ROW_FIELDS\n );\n}\n\nfunction equivalentValueIgnoringKeys(\n left: unknown,\n right: unknown,\n ignoredKeys: ReadonlySet<string>\n): boolean {\n if (Object.is(left, right)) {\n return true;\n }\n if (typeof left !== typeof right || left === null || right === null) {\n return false;\n }\n if (Array.isArray(left) || Array.isArray(right)) {\n return (\n Array.isArray(left) &&\n Array.isArray(right) &&\n left.length === right.length &&\n left.every((value, index) =>\n equivalentValueIgnoringKeys(value, right[index], ignoredKeys)\n )\n );\n }\n if (typeof left !== \"object\" || typeof right !== \"object\") {\n return false;\n }\n const leftRecord = left as Record<string, unknown>;\n const rightRecord = right as Record<string, unknown>;\n const leftKeys = Object.keys(leftRecord).filter(\n (key) => !ignoredKeys.has(key)\n );\n const rightKeys = Object.keys(rightRecord).filter(\n (key) => !ignoredKeys.has(key)\n );\n return (\n leftKeys.length === rightKeys.length &&\n leftKeys.every(\n (key) =>\n Object.prototype.hasOwnProperty.call(rightRecord, key) &&\n equivalentValueIgnoringKeys(\n leftRecord[key],\n rightRecord[key],\n ignoredKeys\n )\n )\n );\n}\n\nfunction mergeAdjacentAssistantMessageRows(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const merged: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n const previous = merged.at(-1);\n if (\n isMergeableAssistantMessageRow(previous) &&\n canMergeAdjacentAssistantMessageRows(previous, row)\n ) {\n const lastMessage = previous.messages.at(-1);\n const nextMessage = row.messages[0];\n if (lastMessage && nextMessage) {\n lastMessage.body += nextMessage.body;\n lastMessage.statusKind =\n nextMessage.statusKind ?? lastMessage.statusKind ?? null;\n lastMessage.occurredAtUnixMs =\n nextMessage.occurredAtUnixMs ?? lastMessage.occurredAtUnixMs;\n }\n if (row.messages.length > 1) {\n previous.messages.push(...row.messages.slice(1));\n }\n previous.occurredAtUnixMs =\n row.occurredAtUnixMs ?? previous.occurredAtUnixMs;\n continue;\n }\n merged.push(row);\n }\n return merged;\n}\n\nfunction dropCodexRuntimeDiagnosticNotices(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const filteredRows: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n if (row.kind !== \"message\" || row.speaker !== \"assistant\") {\n filteredRows.push(row);\n continue;\n }\n const messages = row.messages.filter(\n (message) => !isCodexSkillsContextBudgetNotice(message)\n );\n if (messages.length === 0 && row.thinking.length === 0) {\n continue;\n }\n if (messages.length === row.messages.length) {\n filteredRows.push(row);\n continue;\n }\n filteredRows.push({ ...row, messages });\n }\n return filteredRows;\n}\n\nfunction isCodexSkillsContextBudgetNotice(\n message: AgentMessageContentVM\n): boolean {\n const notice = message.systemNotice;\n if (!notice || notice.noticeKind !== \"warning\") {\n return false;\n }\n if (notice.source !== \"runtime\") {\n return false;\n }\n const text = [notice.title, notice.detail, message.body]\n .filter(Boolean)\n .join(\"\\n\")\n .toLowerCase();\n return (\n text.includes(CODEX_SKILLS_CONTEXT_BUDGET_NOTICE_FRAGMENT) ||\n text.includes(CODEX_MODEL_METADATA_FALLBACK_NOTICE_FRAGMENT)\n );\n}\n\nfunction dropRedundantErrorWarningNotices(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const turnsWithVisibleError = new Set<string>();\n for (const row of rows) {\n if (row.kind !== \"message\" || row.speaker !== \"assistant\") {\n continue;\n }\n for (const message of row.messages) {\n if (message.visibleError) {\n turnsWithVisibleError.add(row.turnId);\n }\n }\n }\n if (turnsWithVisibleError.size === 0) {\n return [...rows];\n }\n\n const filteredRows: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n if (row.kind !== \"message\" || row.speaker !== \"assistant\") {\n filteredRows.push(row);\n continue;\n }\n if (!turnsWithVisibleError.has(row.turnId)) {\n filteredRows.push(row);\n continue;\n }\n const messages = row.messages.filter(\n (message) => !isRedundantErrorWarningNotice(message)\n );\n if (messages.length === 0) {\n continue;\n }\n if (messages.length === row.messages.length) {\n filteredRows.push(row);\n continue;\n }\n filteredRows.push({ ...row, messages });\n }\n return filteredRows;\n}\n\nfunction isRedundantErrorWarningNotice(\n message: AgentMessageContentVM\n): boolean {\n const notice = message.systemNotice;\n if (!notice || notice.noticeKind !== \"warning\") {\n return false;\n }\n const title = notice.title?.trim() ?? \"\";\n return title === \"Codex reported an error.\";\n}\n\nfunction mergeAdjacentTransportRetryNoticeRows(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const merged: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n const previous = merged.at(-1);\n if (\n isSingleTransportRetryNoticeRow(previous) &&\n isSingleTransportRetryNoticeRow(row) &&\n previous.turnId === row.turnId\n ) {\n const previousMessage = previous.messages[0];\n const nextMessage = row.messages[0];\n if (!previousMessage || !nextMessage) {\n merged.push(row);\n continue;\n }\n const sourceTimelineItems = mergeSourceTimelineItems(\n previousMessage.sourceTimelineItems,\n nextMessage.sourceTimelineItems\n );\n previous.messages[0] = {\n ...previousMessage,\n body: nextMessage.body || previousMessage.body,\n systemNotice: nextMessage.systemNotice ?? previousMessage.systemNotice,\n statusKind:\n nextMessage.statusKind ?? previousMessage.statusKind ?? null,\n occurredAtUnixMs:\n nextMessage.occurredAtUnixMs ?? previousMessage.occurredAtUnixMs,\n ...(sourceTimelineItems ? { sourceTimelineItems } : {})\n };\n previous.occurredAtUnixMs =\n row.occurredAtUnixMs ?? previous.occurredAtUnixMs;\n continue;\n }\n merged.push(row);\n }\n return merged;\n}\n\nfunction isSingleTransportRetryNoticeRow(\n row: AgentTranscriptRowVM | undefined\n): row is AgentMessageRowVM {\n if (\n !row ||\n row.kind !== \"message\" ||\n row.speaker !== \"assistant\" ||\n row.thinking.length > 0 ||\n row.messages.length !== 1\n ) {\n return false;\n }\n return row.messages[0]?.systemNotice?.noticeKind === \"transport_retry\";\n}\n\nfunction mergeSourceTimelineItems(\n previous: AgentMessageContentVM[\"sourceTimelineItems\"],\n next: AgentMessageContentVM[\"sourceTimelineItems\"]\n): AgentMessageContentVM[\"sourceTimelineItems\"] {\n if (!previous || previous.length === 0) {\n return next;\n }\n if (!next || next.length === 0) {\n return previous;\n }\n return [...previous, ...next];\n}\n\nfunction isMergeableAssistantMessageRow(\n row: AgentTranscriptRowVM | undefined\n): row is AgentMessageRowVM {\n return Boolean(\n row &&\n row.kind === \"message\" &&\n row.speaker === \"assistant\" &&\n row.thinking.length === 0 &&\n !row.messages.some(isSpecialAssistantMessage)\n );\n}\n\nfunction canMergeAdjacentAssistantMessageRows(\n previous: AgentMessageRowVM,\n next: AgentTranscriptRowVM\n): next is AgentMessageRowVM {\n return (\n next.kind === \"message\" &&\n next.speaker === \"assistant\" &&\n next.thinking.length === 0 &&\n previous.turnId === next.turnId &&\n !next.messages.some(isSpecialAssistantMessage)\n );\n}\n\nfunction isSpecialAssistantMessage(message: {\n visibleError?: unknown;\n systemNotice?: unknown;\n contentKind?: string;\n}): boolean {\n return Boolean(\n message.visibleError ||\n message.systemNotice ||\n message.contentKind === \"plan\" ||\n message.contentKind === \"collaboration\"\n );\n}\n\nfunction projectTurnConversationRows(\n turn: WorkspaceAgentSessionDetailTurn,\n workspaceId: string | null | undefined,\n options: {\n agentSessionId: string;\n avoidGroupingEdits?: boolean;\n }\n): AgentTranscriptRowVM[] {\n const sequence = buildAgentTurnSequenceItems(turn, workspaceId);\n const { groups, groupedIndices, suppressedIndices } = computeAgentToolGroups(\n sequence,\n options\n );\n const skippedIndices = new Set([...groupedIndices, ...suppressedIndices]);\n return promoteGeneratedImageRows(\n projectTurnRows(\n sequence,\n groups,\n skippedIndices,\n turn.id,\n options.agentSessionId\n )\n );\n}\n\nfunction promoteGeneratedImageRows(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const promoted: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n promoted.push(row);\n if (row.kind !== \"tool-group\") {\n continue;\n }\n for (const call of row.calls) {\n const artifact = projectGeneratedImageRow(call, row.turnId);\n if (artifact) {\n promoted.push(artifact);\n }\n }\n }\n return dropDuplicateGeneratedImageMarkdown(promoted);\n}\n\nfunction dropDuplicateGeneratedImageMarkdown(\n rows: readonly AgentTranscriptRowVM[]\n): AgentTranscriptRowVM[] {\n const generatedImagesByTurn = new Map<string, Set<string>>();\n for (const row of rows) {\n if (row.kind !== \"generated-image\") {\n continue;\n }\n const reference = normalizeGeneratedImageReference(row.uri);\n if (!reference) {\n continue;\n }\n const references = generatedImagesByTurn.get(row.turnId) ?? new Set();\n references.add(reference);\n generatedImagesByTurn.set(row.turnId, references);\n }\n if (generatedImagesByTurn.size === 0) {\n return [...rows];\n }\n\n const filtered: AgentTranscriptRowVM[] = [];\n for (const row of rows) {\n if (row.kind !== \"message\" || row.speaker !== \"assistant\") {\n filtered.push(row);\n continue;\n }\n const generatedImages = generatedImagesByTurn.get(row.turnId);\n if (!generatedImages) {\n filtered.push(row);\n continue;\n }\n let changed = false;\n const messages = row.messages.flatMap((message) => {\n const body = removeGeneratedImageMarkdown(message.body, generatedImages);\n if (body === message.body) {\n return [message];\n }\n changed = true;\n return body ? [{ ...message, body }] : [];\n });\n if (messages.length === 0 && row.thinking.length === 0) {\n continue;\n }\n filtered.push(changed ? { ...row, messages } : row);\n }\n return filtered;\n}\n\nfunction removeGeneratedImageMarkdown(\n body: string,\n generatedImages: ReadonlySet<string>\n): string {\n let removed = false;\n const next = body.replace(\n MARKDOWN_IMAGE_PATTERN,\n (\n match,\n angleReference: string | undefined,\n plainReference: string | undefined\n ) => {\n const reference = normalizeGeneratedImageReference(\n angleReference ?? plainReference ?? \"\"\n );\n if (!reference || !generatedImages.has(reference)) {\n return match;\n }\n removed = true;\n return \"\";\n }\n );\n return removed\n ? next\n .replace(/[ \\t]+\\n/g, \"\\n\")\n .replace(/\\n{3,}/g, \"\\n\\n\")\n .trim()\n : body;\n}\n\nfunction normalizeGeneratedImageReference(reference: string): string | null {\n let normalized = reference.trim();\n if (!normalized) {\n return null;\n }\n if (/^file:\\/\\//i.test(normalized)) {\n if (!URL.canParse(normalized)) {\n return null;\n }\n normalized = new URL(normalized).pathname;\n } else if (/^[a-z][a-z\\d+.-]*:\\/\\//i.test(normalized)) {\n return URL.canParse(normalized) ? new URL(normalized).href : normalized;\n }\n normalized = decodePercentEncodedReference(normalized);\n normalized = normalized.replaceAll(\"\\\\\", \"/\");\n const prefix = normalized.startsWith(\"/\") ? \"/\" : \"\";\n const parts: string[] = [];\n for (const part of normalized.split(\"/\")) {\n if (!part || part === \".\") {\n continue;\n }\n if (part === \"..\" && parts.length > 0) {\n parts.pop();\n continue;\n }\n parts.push(part);\n }\n const collapsed = `${prefix}${parts.join(\"/\")}`;\n return /^[a-z]:\\//i.test(collapsed) ? collapsed.toLowerCase() : collapsed;\n}\n\nfunction decodePercentEncodedReference(reference: string): string {\n return reference.replace(/(?:%[a-f\\d]{2})+/gi, (encodedRun) => {\n const bytes = encodedRun\n .slice(1)\n .split(\"%\")\n .map((hex) => Number.parseInt(hex, 16));\n return new TextDecoder().decode(Uint8Array.from(bytes));\n });\n}\n\nfunction projectGeneratedImageRow(\n call: AgentToolCallVM,\n turnId: string\n): AgentGeneratedImageRowVM | null {\n if (\n call.rendererKind !== \"image-generation\" ||\n call.statusKind !== \"completed\"\n ) {\n return null;\n }\n const image = extractImageGenerationPreview({\n toolName: call.toolName,\n displayName: call.name,\n content: call.content,\n outputContent: call.output?.content,\n outputSavedPath: call.output?.savedPath ?? call.output?.saved_path,\n inputPrompt: call.input?.prompt,\n payloadInputPrompt:\n call.payload?.input &&\n typeof call.payload.input === \"object\" &&\n !Array.isArray(call.payload.input)\n ? (call.payload.input as Record<string, unknown>).prompt\n : null\n });\n if (!image.imageUri) {\n return null;\n }\n return {\n kind: \"generated-image\",\n id: `generated-image:${call.id}`,\n turnId,\n sourceCallId: call.id,\n uri: image.imageUri,\n mimeType: image.mimeType,\n prompt: image.prompt,\n occurredAtUnixMs: call.occurredAtUnixMs\n };\n}\n","import type { AgentActivityMessageSemantics } from \"@tutti-os/agent-activity-core\";\n\ntype NoticeCommand = NonNullable<\n AgentActivityMessageSemantics[\"noticeCommand\"]\n>;\ntype NoticeCommandStatus = NonNullable<\n AgentActivityMessageSemantics[\"noticeCommandStatus\"]\n>;\n\nexport interface WorkspaceAgentNoticeCommandSemantics {\n command: NoticeCommand;\n commandStatus: NoticeCommandStatus;\n}\n\nexport function resolveWorkspaceAgentNoticeCommandSemantics(input: {\n eventId?: string | null;\n messageSemantics?: AgentActivityMessageSemantics;\n payload: Record<string, unknown> | null;\n status?: string | null;\n}): WorkspaceAgentNoticeCommandSemantics | null {\n const semanticCommand = noticeCommand(input.messageSemantics?.noticeCommand);\n const semanticCommandStatus = noticeCommandStatus(\n input.messageSemantics?.noticeCommandStatus\n );\n const payloadCommand = noticeCommand(\n recordString(input.payload, \"noticeCommand\")\n );\n const payloadCommandStatus = noticeCommandStatus(\n recordString(input.payload, \"noticeCommandStatus\")\n );\n const command = semanticCommand ?? payloadCommand;\n const commandStatus = semanticCommandStatus ?? payloadCommandStatus;\n if (command && commandStatus) {\n return { command, commandStatus };\n }\n\n const source = recordString(input.payload, \"source\");\n const hasCompactIdentity =\n source === \"compact\" ||\n /^(?:claude-sdk:compact:|compaction:)/u.test(input.eventId?.trim() ?? \"\");\n if (!hasCompactIdentity) {\n return null;\n }\n const legacyCompactStatus =\n compactTitleStatus(recordString(input.payload, \"title\"), input.status) ??\n (source === \"compact\" ? compactStreamStatus(input.status) : null);\n if (!legacyCompactStatus) {\n return null;\n }\n return {\n command: \"compact\",\n commandStatus: legacyCompactStatus\n };\n}\n\nfunction noticeCommand(value: unknown): NoticeCommand | null {\n switch (value) {\n case \"compact\":\n case \"review\":\n case \"undo\":\n case \"goal\":\n return value;\n default:\n return null;\n }\n}\n\nfunction noticeCommandStatus(value: unknown): NoticeCommandStatus | null {\n switch (value) {\n case \"running\":\n case \"completed\":\n case \"failed\":\n case \"canceled\":\n return value;\n default:\n return null;\n }\n}\n\nfunction compactTitleStatus(\n title: string | null,\n status: string | null | undefined\n): NoticeCommandStatus | null {\n switch (title) {\n case \"Compacting context.\":\n return \"running\";\n case \"Context compacted.\":\n return \"completed\";\n case \"Context compaction interrupted.\":\n return compactStreamStatus(status) === \"canceled\" ? \"canceled\" : \"failed\";\n default:\n return null;\n }\n}\n\nfunction compactStreamStatus(\n status: string | null | undefined\n): NoticeCommandStatus {\n switch (status?.trim().toLowerCase()) {\n case \"completed\":\n case \"complete\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"failed\":\n case \"error\":\n return \"failed\";\n case \"canceled\":\n case \"cancelled\":\n case \"stopped\":\n return \"canceled\";\n default:\n return \"running\";\n }\n}\n\nfunction recordString(\n record: Record<string, unknown> | null,\n key: string\n): string | null {\n const value = record?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\n\nexport function looksLikeOpaqueToolCallIdentifier(value: string): boolean {\n return /^call[_:-](?:function[_:-])?[a-z0-9][a-z0-9_-]{11,}$/i.test(value);\n}\n\nexport function isOpaqueWorkspaceAgentToolCallIdentifier(\n value: string | null | undefined,\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const trimmed = value?.trim();\n if (!trimmed) {\n return false;\n }\n const knownCallId = firstPresentString(\n stringRecordValue(item.payload, \"callId\"),\n stringRecordValue(item.payload, \"callID\"),\n stringRecordValue(item.payload, \"call_id\"),\n item.callId\n );\n if (\n knownCallId &&\n normalizeOpaqueToolCallIdentifier(trimmed) ===\n normalizeOpaqueToolCallIdentifier(knownCallId)\n ) {\n return true;\n }\n return looksLikeOpaqueToolCallIdentifier(trimmed);\n}\n\nfunction normalizeOpaqueToolCallIdentifier(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/^call:/, \"call\")\n .replace(/[\\s_-]+/gu, \"\");\n}\n\nfunction firstPresentString(...values: Array<string | undefined>): string {\n for (const value of values) {\n const normalized = value?.trim();\n if (normalized) {\n return normalized;\n }\n }\n return \"\";\n}\n\nfunction stringRecordValue(record: unknown, key: string): string | undefined {\n if (!record || typeof record !== \"object\" || Array.isArray(record)) {\n return undefined;\n }\n const value = (record as Record<string, unknown>)[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n","export type ToolActivityKind = keyof typeof TOOL_ACTIVITY_KIND_TRANSLATION_KEYS;\n\nexport const TOOL_ACTIVITY_KIND_TRANSLATION_KEYS = {\n run_command: \"agentHost.agentTool.labels.runCommand\",\n read_file: \"agentHost.agentTool.labels.readFile\",\n write_file: \"agentHost.agentTool.labels.writeFile\",\n edit_file: \"agentHost.agentTool.labels.editFile\",\n list_files: \"agentHost.agentTool.labels.listFiles\",\n search_files: \"agentHost.agentTool.labels.searchFiles\",\n web_search: \"agentHost.agentTool.labels.webSearch\",\n web_fetch: \"agentHost.agentTool.labels.webFetch\",\n apply_patch: \"agentHost.agentTool.labels.applyPatch\",\n use_tool: \"agentHost.agentTool.labels.useTool\",\n find_files: \"agentHost.agentTool.labels.findFiles\",\n read_command_output: \"agentHost.agentTool.labels.readCommandOutput\",\n stop_command: \"agentHost.agentTool.labels.stopCommand\",\n read_notebook: \"agentHost.agentTool.labels.readNotebook\",\n edit_notebook: \"agentHost.agentTool.labels.editNotebook\",\n update_todos: \"agentHost.agentTool.labels.updateTodos\",\n delegate_agent: \"agentHost.agentTool.labels.delegateAgent\",\n thinking: \"agentHost.agentTool.labels.thinking\",\n responding: \"agentHost.agentTool.labels.responding\",\n notification: \"agentHost.agentTool.labels.notification\"\n} as const;\n\nexport const AGENT_ACTIVITY_KINDS = new Set<ToolActivityKind>([\n \"thinking\",\n \"responding\",\n \"notification\"\n]);\n\nexport const TOOL_NAME_TRANSLATION_KEYS: Record<string, string> = {\n bash: \"agentHost.agentTool.labels.runCommand\",\n read: \"agentHost.agentTool.labels.readFile\",\n write: \"agentHost.agentTool.labels.writeFile\",\n edit: \"agentHost.agentTool.labels.editFile\",\n glob: \"agentHost.agentTool.labels.findFiles\",\n grep: \"agentHost.agentTool.labels.searchFiles\",\n websearch: \"agentHost.agentTool.labels.webSearch\",\n webfetch: \"agentHost.agentTool.labels.webFetch\",\n todowrite: \"agentHost.agentTool.labels.updateTodos\",\n task: \"agentHost.agentTool.labels.delegateAgent\",\n currenttask: \"agentHost.agentTool.labels.currentIssue\",\n agent: \"agentHost.agentTool.labels.delegateAgent\",\n closeagent: \"agentHost.agentTool.labels.closeAgent\",\n wait: \"agentHost.agentTool.labels.waitAgent\"\n};\n\nexport function legacyKindToToolName(kind: ToolActivityKind): string | null {\n switch (kind) {\n case \"run_command\":\n case \"read_command_output\":\n case \"stop_command\":\n return \"Bash\";\n case \"read_file\":\n case \"read_notebook\":\n case \"list_files\":\n return \"Read\";\n case \"write_file\":\n return \"Write\";\n case \"edit_file\":\n case \"edit_notebook\":\n case \"apply_patch\":\n return \"Edit\";\n case \"find_files\":\n return \"Glob\";\n case \"search_files\":\n return \"Grep\";\n case \"web_search\":\n return \"WebSearch\";\n case \"web_fetch\":\n return \"WebFetch\";\n case \"update_todos\":\n return \"TodoWrite\";\n case \"delegate_agent\":\n return \"Task\";\n default:\n return null;\n }\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { looksLikeOpaqueToolCallIdentifier } from \"./workspaceAgentToolCallIdentifiers\";\nimport {\n legacyKindToToolName,\n TOOL_ACTIVITY_KIND_TRANSLATION_KEYS,\n type ToolActivityKind\n} from \"./workspaceAgentToolCallLabels\";\n\nexport function resolveCanonicalToolName(\n toolName: string | null | undefined\n): string | null {\n const normalized = normalizeToolNameToken(toolName);\n switch (normalized) {\n case \"imagegeneration\":\n case \"imagegen\":\n case \"generateimage\":\n case \"generatingimage\":\n case \"imagegenerate\":\n case \"imagegenerator\":\n return \"ImageGeneration\";\n case \"approval\":\n return \"Approval\";\n case \"askuserquestion\":\n return \"AskUserQuestion\";\n case \"enterplanmode\":\n return \"EnterPlanMode\";\n case \"exitplanmode\":\n return \"ExitPlanMode\";\n case \"toolsearch\":\n return \"ToolSearch\";\n case \"skill\":\n return \"Skill\";\n case \"think\":\n return \"Think\";\n case \"bash\":\n return \"Bash\";\n case \"read\":\n return \"Read\";\n case \"write\":\n return \"Write\";\n case \"edit\":\n return \"Edit\";\n case \"glob\":\n return \"Glob\";\n case \"grep\":\n return \"Grep\";\n case \"websearch\":\n return \"WebSearch\";\n case \"webfetch\":\n return \"WebFetch\";\n case \"todowrite\":\n return \"TodoWrite\";\n case \"task\":\n case \"subagent\":\n case \"runsubagent\":\n case \"delegatetask\":\n case \"delegateagent\":\n return \"Agent\";\n case \"agent\":\n return \"Agent\";\n default:\n // Codex/legacy tool calls (including ones reconstructed by the\n // Codex/Claude Code history import pipeline, which does not run the\n // live daemon's canonicalization step) report the raw snake_case\n // provider tool name verbatim, e.g. \"apply_patch\" for a file edit.\n // Recognize those exactly as the equivalent live-session ToolActivityKind\n // so imported and live tool calls resolve to the same canonical name and\n // render with the same specialized (e.g. diff/file-reference) content.\n return resolveLegacySnakeCaseToolName(toolName);\n }\n}\n\nfunction resolveLegacySnakeCaseToolName(\n toolName: string | null | undefined\n): string | null {\n const trimmed = toolName?.trim() ?? \"\";\n if (!trimmed || !(trimmed in TOOL_ACTIVITY_KIND_TRANSLATION_KEYS)) {\n return null;\n }\n return legacyKindToToolName(trimmed as ToolActivityKind);\n}\n\nexport function resolveLiveCanonicalToolName(\n item: WorkspaceAgentActivityTimelineItem,\n rawPayloadToolName: string | null | undefined,\n legacyACPToolName: string | null\n): string | null | undefined {\n const itemName = (item.name ?? \"\").trim();\n if (\n rawPayloadToolName &&\n looksLikeOpaqueToolCallID(rawPayloadToolName, item)\n ) {\n return null;\n }\n if (\n rawPayloadToolName &&\n isCanonicalMcpToolName(rawPayloadToolName, item.callType, item.payload)\n ) {\n return rawPayloadToolName.trim();\n }\n if (!isLiveCanonicalToolCall(item) || !hasCanonicalACPPayload(item.payload)) {\n return undefined;\n }\n if (rawPayloadToolName) {\n if (\n !shouldFallBackToLegacyACPToolName(\n rawPayloadToolName,\n itemName,\n legacyACPToolName\n )\n ) {\n return rawPayloadToolName.trim();\n }\n return null;\n }\n const normalizedCallType = (\n item.callType ??\n stringPayloadValue(item.payload, \"callType\") ??\n \"\"\n )\n .trim()\n .toLowerCase();\n if (normalizedCallType === \"tool\" || normalizedCallType === \"mcp\") {\n return null;\n }\n return undefined;\n}\n\nfunction shouldFallBackToLegacyACPToolName(\n rawPayloadToolName: string,\n itemName: string,\n legacyACPToolName: string | null\n): boolean {\n const trimmed = rawPayloadToolName.trim();\n if (!trimmed) {\n return false;\n }\n if (looksLikeOpaqueToolCallIdentifier(trimmed)) {\n return true;\n }\n if (legacyACPToolName === null) {\n return false;\n }\n if (trimmed === itemName) {\n return true;\n }\n return looksLikeOpaqueACPFunctionAlias(trimmed);\n}\n\nfunction looksLikeOpaqueACPFunctionAlias(value: string): boolean {\n return /^[A-Z][a-z0-9]{9,}$/.test(value);\n}\n\nfunction looksLikeOpaqueToolCallID(\n value: string,\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const trimmed = value.trim();\n if (!trimmed) {\n return false;\n }\n const payloadCallID =\n stringPayloadValue(item.payload, \"callId\") ??\n stringPayloadValue(item.payload, \"callID\") ??\n stringPayloadValue(item.payload, \"call_id\");\n if (trimmed === item.callId?.trim() || trimmed === payloadCallID?.trim()) {\n return true;\n }\n const lower = trimmed.toLowerCase();\n if (lower.startsWith(\"call_\")) {\n return isOpaqueIdentifierTail(trimmed.slice(\"call_\".length));\n }\n if (lower.startsWith(\"ws_\")) {\n return isOpaqueIdentifierTail(trimmed.slice(\"ws_\".length));\n }\n return false;\n}\n\nfunction isOpaqueIdentifierTail(value: string): boolean {\n return value.length >= 12 && /^[a-z0-9]+$/i.test(value);\n}\n\nfunction isCanonicalMcpToolName(\n toolName: string,\n callType: string | undefined,\n payload: Record<string, unknown> | undefined\n): boolean {\n const trimmed = toolName.trim();\n if (!trimmed) {\n return false;\n }\n if (trimmed.toLowerCase().startsWith(\"mcp__\")) {\n return true;\n }\n const payloadCallType = stringPayloadValue(payload, \"callType\");\n return (\n (callType ?? \"\").trim().toLowerCase() === \"mcp\" ||\n (payloadCallType ?? \"\").trim().toLowerCase() === \"mcp\"\n );\n}\n\nfunction isLiveCanonicalToolCall(\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const itemType = item.itemType.trim().toLowerCase();\n return (\n itemType === \"call.started\" ||\n itemType === \"call.completed\" ||\n itemType === \"call.errored\"\n );\n}\n\nfunction hasCanonicalACPPayload(\n payload: Record<string, unknown> | undefined\n): boolean {\n return Boolean(\n recordPayloadValue(payload, \"acp\") ||\n stringPayloadValue(payload, \"sessionUpdate\")\n );\n}\n\nfunction normalizeToolNameToken(value: string | null | undefined): string {\n return (value ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[_\\s-]+/g, \"\");\n}\n\nfunction recordPayloadValue(\n value: Record<string, unknown> | undefined,\n key: string\n): Record<string, unknown> | undefined {\n const nested = value?.[key];\n return nested && typeof nested === \"object\" && !Array.isArray(nested)\n ? (nested as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringPayloadValue(\n value: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const nested = value?.[key];\n return typeof nested === \"string\" ? nested : undefined;\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\n\nconst AGENT_ACTIVITY_KINDS = new Set([\n \"thinking\",\n \"responding\",\n \"notification\"\n]);\n\nexport function isAgentActivityTimelineItem(\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const activityKey = activityPayloadKey(item);\n if (activityKey.startsWith(\"agent.\")) {\n return true;\n }\n\n const metadata = recordValue(item.payload, \"metadata\");\n const normalizedKind = normalizeToolToken(\n firstPresentString(\n stringRecordValue(item.payload, \"activityKind\"),\n stringRecordValue(item.payload, \"activity_kind\"),\n stringRecordValue(metadata, \"activityKind\"),\n stringRecordValue(metadata, \"activity_kind\")\n )\n );\n if (AGENT_ACTIVITY_KINDS.has(normalizedKind)) {\n return true;\n }\n\n const normalizedName = (item.name ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[.\\-\\s]+/gu, \"_\");\n return normalizedName.startsWith(\"agent_\");\n}\n\nfunction activityPayloadKey(item: WorkspaceAgentActivityTimelineItem): string {\n const metadata = recordValue(item.payload, \"metadata\");\n return firstPresentString(\n stringRecordValue(item.payload, \"activityKey\"),\n stringRecordValue(item.payload, \"activity_key\"),\n stringRecordValue(metadata, \"activityKey\"),\n stringRecordValue(metadata, \"activity_key\")\n )\n .trim()\n .toLowerCase();\n}\n\nfunction normalizeToolToken(value: string | undefined): string {\n return (\n value\n ?.trim()\n .toLowerCase()\n .replace(/[-\\s]+/gu, \"_\") ?? \"\"\n );\n}\n\nfunction recordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): Record<string, unknown> | undefined {\n const entry = value?.[key];\n return typeof entry === \"object\" && entry !== null && !Array.isArray(entry)\n ? (entry as Record<string, unknown>)\n : undefined;\n}\n\nfunction stringRecordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const entry = value?.[key];\n return typeof entry === \"string\" ? entry : undefined;\n}\n\nfunction firstPresentString(...values: Array<string | undefined>): string {\n return (\n values.find(\n (value) => typeof value === \"string\" && value.trim().length > 0\n ) ?? \"\"\n );\n}\n","import { fileChangeCountFromChanges } from \"./workspaceAgentFileChangePayload\";\n\nexport function recordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): Record<string, unknown> | undefined {\n const nested = value?.[key];\n return nested && typeof nested === \"object\" && !Array.isArray(nested)\n ? (nested as Record<string, unknown>)\n : undefined;\n}\n\nexport function stringRecordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n const nested = value?.[key];\n return typeof nested === \"string\" ? nested : undefined;\n}\n\nexport function stringArrayRecordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): string[] {\n const nested = value?.[key];\n return Array.isArray(nested)\n ? nested.flatMap((item) =>\n typeof item === \"string\" && item.trim() ? [item.trim()] : []\n )\n : [];\n}\n\nexport function stringArrayFirstRecordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): string | undefined {\n return stringArrayRecordValue(value, key)[0];\n}\n\nexport function arrayRecordValue(\n value: Record<string, unknown> | undefined,\n key: string\n): Array<Record<string, unknown>> {\n const nested = value?.[key];\n return Array.isArray(nested)\n ? nested.flatMap((item) =>\n item && typeof item === \"object\" && !Array.isArray(item)\n ? [item as Record<string, unknown>]\n : []\n )\n : [];\n}\n\nexport function collectToolPaths(\n metadata: Record<string, unknown> | undefined,\n metadataInput: Record<string, unknown> | undefined,\n payloadInput: Record<string, unknown> | undefined\n): string[] {\n return Array.from(\n new Set([\n ...stringArrayRecordValue(metadata, \"paths\"),\n ...toolInputPaths(metadataInput),\n ...toolInputPaths(payloadInput)\n ])\n );\n}\n\nexport function summarizeToolInput(\n value: Record<string, unknown> | undefined\n): string {\n if (!value) return \"\";\n for (const key of [\n \"path\",\n \"file_path\",\n \"filePath\",\n \"filepath\",\n \"fileName\",\n \"filename\",\n \"target_path\",\n \"targetPath\",\n \"url\",\n \"uri\",\n \"query\",\n \"pattern\",\n \"prompt\",\n \"instruction\",\n \"task\",\n \"title\",\n \"message\",\n \"text\",\n \"cmd\",\n \"command\"\n ]) {\n const text = summarizeInputField(value, key);\n if (text) return text;\n }\n for (const [key, fieldValue] of Object.entries(value)) {\n if (isSensitiveKey(key)) continue;\n const text = summarizeInputValue(key, fieldValue);\n if (text) return text;\n }\n return \"\";\n}\n\nexport function summarizeFileChangeCount(\n ...values: Array<Record<string, unknown> | undefined>\n): string | null {\n for (const value of values) {\n const structuredPatch = arrayRecordValue(value, \"structuredPatch\");\n if (structuredPatch.length > 1) return `${structuredPatch.length} files`;\n const files = arrayRecordValue(recordValue(value, \"fileChanges\"), \"files\");\n if (files.length > 1) return `${files.length} files`;\n const count = fileChangeCountFromChanges(value?.changes);\n if (count > 1) return `${count} files`;\n }\n return null;\n}\n\nexport function summarizeTodoProgress(\n value: Record<string, unknown> | undefined\n): string | null {\n const todos = arrayRecordValue(value, \"todos\");\n if (todos.length === 0) return null;\n const completed = todos.filter(\n (todo) =>\n normalizeToolToken(stringRecordValue(todo, \"status\")) === \"completed\"\n ).length;\n return `${completed}/${todos.length} completed`;\n}\n\nexport function summarizeWebDomain(value: string | null): string | null {\n if (!value) return null;\n try {\n return new URL(value).hostname.replace(/^www\\./, \"\");\n } catch {\n return null;\n }\n}\n\nexport function firstPath(paths: string[]): string {\n return paths[0] ?? \"\";\n}\n\nexport function firstPresentString(\n ...values: Array<string | null | undefined>\n): string {\n for (const value of values) {\n const normalized = value?.trim();\n if (normalized) return normalized;\n }\n return \"\";\n}\n\nfunction toolInputPaths(value: Record<string, unknown> | undefined): string[] {\n if (!value) return [];\n return [\n ...stringValues(\n value,\n \"path\",\n \"file_path\",\n \"filePath\",\n \"filepath\",\n \"fileName\",\n \"filename\",\n \"target_path\",\n \"targetPath\"\n ),\n ...stringArrayRecordValue(value, \"paths\"),\n ...stringArrayRecordValue(value, \"file_paths\"),\n ...stringArrayRecordValue(value, \"filePaths\"),\n ...stringArrayRecordValue(value, \"file_names\"),\n ...stringArrayRecordValue(value, \"fileNames\"),\n ...stringArrayRecordValue(value, \"filenames\")\n ];\n}\n\nfunction summarizeInputField(\n value: Record<string, unknown>,\n key: string\n): string {\n const fieldValue = value[key];\n if (typeof fieldValue === \"string\")\n return formatInputSummary(key, fieldValue);\n if (Array.isArray(fieldValue)) {\n const items = fieldValue\n .flatMap((item) =>\n typeof item === \"string\" && item.trim() ? [item.trim()] : []\n )\n .slice(0, 3);\n if (items.length > 0) return formatInputSummary(key, items.join(\", \"));\n }\n if (\n fieldValue &&\n typeof fieldValue === \"object\" &&\n !Array.isArray(fieldValue)\n ) {\n for (const [nestedKey, nestedValue] of Object.entries(\n fieldValue as Record<string, unknown>\n )) {\n if (isSensitiveKey(nestedKey)) continue;\n const text = summarizeInputValue(`${key}.${nestedKey}`, nestedValue);\n if (text) return text;\n }\n }\n return \"\";\n}\n\nfunction summarizeInputValue(key: string, value: unknown): string {\n return typeof value === \"string\" && value.trim()\n ? formatInputSummary(key, value)\n : \"\";\n}\n\nfunction formatInputSummary(key: string, value: string): string {\n const trimmed = value.trim();\n if (!trimmed) return \"\";\n const prefixless = new Set(\n [\n \"path\",\n \"file_path\",\n \"filePath\",\n \"filepath\",\n \"fileName\",\n \"filename\",\n \"target_path\",\n \"targetPath\",\n \"url\",\n \"uri\",\n \"query\",\n \"pattern\",\n \"cmd\",\n \"command\"\n ].map(normalizeToolToken)\n );\n const text = trimmed.length > 140 ? `${trimmed.slice(0, 139)}…` : trimmed;\n // i18n-check-ignore: Tool input summaries combine schema keys with user input.\n return prefixless.has(normalizeToolToken(key)) ? text : `${key}: ${text}`;\n}\n\nfunction isSensitiveKey(key: string): boolean {\n const normalized = normalizeToolToken(key);\n return [\n \"token\",\n \"password\",\n \"secret\",\n \"api_key\",\n \"apikey\",\n \"authorization\"\n ].some((part) => normalized.includes(part));\n}\n\nfunction stringValues(\n value: Record<string, unknown>,\n ...keys: string[]\n): string[] {\n return keys.flatMap((key) => {\n const text = stringRecordValue(value, key)?.trim();\n return text ? [text] : [];\n });\n}\n\nfunction normalizeToolToken(value: string | undefined): string {\n return (\n value\n ?.trim()\n .toLowerCase()\n .replace(/[-\\s]+/gu, \"_\") ?? \"\"\n );\n}\n","import { translate } from \"../i18n/index\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { TOOL_NAME_TRANSLATION_KEYS } from \"./workspaceAgentToolCallLabels\";\nimport {\n firstPresentString,\n recordValue,\n stringRecordValue\n} from \"./workspaceAgentToolCallSummary\";\n\nexport function itemId(item: WorkspaceAgentActivityTimelineItem): string {\n return item.eventId.trim() || `id:${item.id}`;\n}\n\nexport function isGenericToolLabel(normalizedTitle: string): boolean {\n return normalizedTitle === \"tool\" || normalizedTitle === \"usetool\";\n}\n\nexport function looksLikeOpaqueToolCallID(\n value: string | null,\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const trimmed = value?.trim() ?? \"\";\n if (!trimmed) return false;\n const metadata = recordValue(item.payload, \"metadata\");\n const callID = firstPresentString(\n item.callId,\n stringRecordValue(item.payload, \"callId\"),\n stringRecordValue(item.payload, \"callID\"),\n stringRecordValue(item.payload, \"call_id\"),\n stringRecordValue(metadata, \"callId\"),\n stringRecordValue(metadata, \"callID\"),\n stringRecordValue(metadata, \"call_id\")\n );\n if (callID && trimmed === callID) return true;\n const lower = trimmed.toLowerCase();\n if (lower.startsWith(\"call_\")) return isOpaqueTail(trimmed.slice(5));\n if (lower.startsWith(\"ws_\")) return isOpaqueTail(trimmed.slice(3));\n return false;\n}\n\nexport function toolCallLabel(toolName: string | null): string {\n const normalized = normalizeToolNameToken(toolName);\n const translationKey = normalized\n ? TOOL_NAME_TRANSLATION_KEYS[normalized]\n : null;\n if (translationKey) return translate(translationKey);\n if (toolName?.trim()) return humanizeToolName(toolName);\n return translate(\"agentHost.agentTool.fallbackName\");\n}\n\nexport function normalizeToolNameToken(\n value: string | null | undefined\n): string {\n return (value ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[_\\s-]+/gu, \"\");\n}\n\nfunction isOpaqueTail(value: string): boolean {\n return value.length >= 12 && /^[a-z0-9]+$/i.test(value);\n}\n\nfunction humanizeToolName(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]+/g, \" \")\n .trim()\n .replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { translate } from \"../i18n/index\";\nimport {\n extractImageGenerationPreview,\n resolveImageGenerationCanonicalToolName\n} from \"./imageGenerationTool\";\nimport {\n resolveCanonicalToolName,\n resolveLiveCanonicalToolName\n} from \"./workspaceAgentToolCallCanonical\";\nimport { isAgentActivityTimelineItem } from \"./workspaceAgentToolCallAgentActivity\";\nimport { isOpaqueWorkspaceAgentToolCallIdentifier } from \"./workspaceAgentToolCallIdentifiers\";\nimport {\n AGENT_ACTIVITY_KINDS,\n TOOL_ACTIVITY_KIND_TRANSLATION_KEYS,\n legacyKindToToolName,\n type ToolActivityKind\n} from \"./workspaceAgentToolCallLabels\";\nimport {\n isGenericToolLabel,\n itemId,\n looksLikeOpaqueToolCallID,\n normalizeToolNameToken,\n toolCallLabel\n} from \"./workspaceAgentToolCallPresentation\";\nimport {\n collectToolPaths,\n firstPath,\n firstPresentString,\n recordValue,\n stringArrayFirstRecordValue,\n stringRecordValue,\n summarizeFileChangeCount,\n summarizeTodoProgress,\n summarizeToolInput,\n summarizeWebDomain\n} from \"./workspaceAgentToolCallSummary\";\nexport type { ToolActivityKind } from \"./workspaceAgentToolCallLabels\";\nexport type ToolCallStatusKind =\n | \"working\"\n | \"completed\"\n | \"failed\"\n | \"canceled\"\n | \"waiting\";\n\nexport interface WorkspaceAgentToolCallDisplay {\n id: string;\n name: string;\n status: string | null;\n statusKind: ToolCallStatusKind | null;\n detail?: string;\n}\n\nexport function isWorkspaceAgentToolCallItem(\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const itemType = item.itemType.trim().toLowerCase();\n if (isAgentActivityTimelineItem(item)) {\n return false;\n }\n if (itemType === \"call\" || itemType.startsWith(\"call.\")) {\n return true;\n }\n if (itemType.startsWith(\"approval.\") || itemType.startsWith(\"interactive.\")) {\n return true;\n }\n const payloadCallType = stringRecordValue(item.payload, \"callType\");\n if (payloadCallType === \"approval\" || payloadCallType === \"interactive\") {\n return true;\n }\n return isToolActivityTimelineItem(item);\n}\n\nexport function buildWorkspaceAgentToolCallDisplay(\n item: WorkspaceAgentActivityTimelineItem\n): WorkspaceAgentToolCallDisplay {\n const toolName = resolveWorkspaceAgentToolName(item);\n const detail = toolCallDetail(item, toolName);\n return {\n id: toolCallId(item),\n name: toolCallLabel(toolName),\n ...toolCallStatus(item),\n ...(detail ? { detail } : {})\n };\n}\n\nfunction toolCallId(item: WorkspaceAgentActivityTimelineItem): string {\n const metadata = recordValue(item.payload, \"metadata\");\n const callId = firstPresentString(\n stringRecordValue(item.payload, \"callId\"),\n stringRecordValue(item.payload, \"callID\"),\n stringRecordValue(item.payload, \"call_id\"),\n stringRecordValue(metadata, \"callId\"),\n stringRecordValue(metadata, \"callID\"),\n stringRecordValue(metadata, \"call_id\"),\n item.callId\n );\n return callId ? `call:${callId}` : itemId(item);\n}\n\nexport function resolveWorkspaceAgentToolName(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n const metadata = recordValue(item.payload, \"metadata\");\n const input = recordValue(item.payload, \"input\");\n const output = recordValue(item.payload, \"output\");\n const rawPayloadToolName = firstPresentString(\n stringRecordValue(item.payload, \"toolName\"),\n stringRecordValue(metadata, \"toolName\"),\n claudeCodeToolName(input),\n claudeCodeToolName(output)\n );\n const imageGenerationToolName = resolveImageGenerationCanonicalToolName({\n toolName: rawPayloadToolName,\n displayName: item.name,\n content: item.payload?.content,\n outputContent: output?.content,\n inputPrompt: input?.prompt\n });\n if (imageGenerationToolName) {\n return imageGenerationToolName;\n }\n const canonicalToolName = resolveCanonicalToolName(rawPayloadToolName);\n if (canonicalToolName) {\n return canonicalToolName;\n }\n const liveCanonicalToolName = resolveLiveCanonicalToolName(\n item,\n rawPayloadToolName,\n resolveLegacyACPToolName(item)\n );\n if (\n typeof liveCanonicalToolName === \"string\" &&\n liveCanonicalToolName.trim()\n ) {\n return liveCanonicalToolName;\n }\n if (liveCanonicalToolName === null && !rawPayloadToolName) {\n return null;\n }\n return resolveLegacyToolName(item) ?? resolveLegacyNamedToolName(item);\n}\n\nfunction resolveFetchToolName(\n payload: Record<string, unknown> | undefined\n): string | null {\n const input = recordValue(payload, \"input\");\n const action = recordValue(input, \"action\");\n const actionType = normalizeToolToken(stringRecordValue(action, \"type\"));\n switch (actionType) {\n case \"search\":\n case \"search_query\":\n case \"web_search\":\n return \"WebSearch\";\n case \"open_page\":\n case \"open\":\n case \"fetch\":\n case \"web_fetch\":\n return \"WebFetch\";\n default:\n break;\n }\n if (\n firstPresentString(\n stringRecordValue(action, \"url\"),\n stringRecordValue(input, \"url\")\n )\n ) {\n return \"WebFetch\";\n }\n if (\n firstPresentString(\n stringRecordValue(action, \"query\"),\n stringRecordValue(input, \"query\"),\n stringRecordValue(input, \"search_query\"),\n stringRecordValue(input, \"searchQuery\")\n )\n ) {\n return \"WebSearch\";\n }\n return null;\n}\n\nfunction resolveLegacyToolName(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n const metadata = recordValue(item.payload, \"metadata\");\n const rawKind =\n stringRecordValue(item.payload, \"activityKind\") ??\n stringRecordValue(item.payload, \"activity_kind\") ??\n stringRecordValue(metadata, \"activityKind\") ??\n stringRecordValue(metadata, \"activity_kind\");\n const normalizedKind = normalizeToolToken(rawKind);\n if (AGENT_ACTIVITY_KINDS.has(normalizedKind as ToolActivityKind)) {\n return null;\n }\n if (isToolActivityKind(normalizedKind)) {\n return legacyKindToToolName(normalizedKind);\n }\n\n return resolveLegacyACPToolName(item);\n}\n\nfunction resolveLegacyACPToolName(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n const input = recordValue(item.payload, \"input\");\n const normalizedKind = normalizeToolToken(\n firstPresentString(\n stringRecordValue(item.payload, \"kind\"),\n stringRecordValue(input, \"kind\")\n )\n );\n const normalizedTitle = normalizeToolToken(\n firstPresentString(\n stringRecordValue(item.payload, \"title\"),\n stringRecordValue(input, \"title\"),\n item.name\n )\n );\n const fetchToolName = resolveFetchToolName(item.payload);\n\n if (fetchToolName) {\n return fetchToolName;\n }\n\n if (normalizedKind === \"fetch\") {\n return \"WebFetch\";\n }\n if (normalizedKind === \"read\") {\n return stringRecordValue(input, \"pattern\") ? \"Glob\" : \"Read\";\n }\n if (normalizedKind === \"think\") {\n return normalizedTitle === \"update_todo\" || Array.isArray(input?.todos)\n ? \"TodoWrite\"\n : \"Think\";\n }\n if (normalizedKind === \"search\") {\n switch (normalizedTitle) {\n case \"glob\":\n case \"find\":\n case \"fd\":\n case \"file_search\":\n return \"Glob\";\n case \"grep\":\n case \"rg\":\n case \"ripgrep\":\n case \"codebase_search\":\n return \"Grep\";\n default:\n return \"Bash\";\n }\n }\n if (normalizedKind === \"other\") {\n switch (normalizedTitle) {\n case \"todowrite\":\n case \"updatetodo\":\n return \"TodoWrite\";\n case \"skill\":\n return \"Skill\";\n case \"task\":\n case \"subagent\":\n case \"runsubagent\":\n case \"delegatetask\":\n case \"delegateagent\":\n case \"agent\":\n return \"Agent\";\n case \"rg\":\n case \"ripgrep\":\n return \"Grep\";\n case \"find\":\n case \"fd\":\n return \"Glob\";\n default:\n return null;\n }\n }\n switch (normalizedKind) {\n case \"execute\":\n case \"exec\":\n case \"command\":\n case \"shell\":\n return \"Bash\";\n case \"edit\":\n case \"move\":\n return \"Edit\";\n case \"delete\":\n return \"Write\";\n default:\n return null;\n }\n}\n\nfunction resolveLegacyNamedToolName(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n const metadata = recordValue(item.payload, \"metadata\");\n const rawTitle = firstPresentString(\n stringRecordValue(item.payload, \"tool\"),\n stringRecordValue(metadata, \"tool\"),\n item.name\n );\n if (looksLikeOpaqueToolCallID(rawTitle, item)) {\n return null;\n }\n const normalizedTitle = normalizeToolNameToken(rawTitle);\n switch (normalizedTitle) {\n case \"approval\":\n return \"Approval\";\n case \"askuserquestion\":\n return \"AskUserQuestion\";\n case \"enterplanmode\":\n return \"EnterPlanMode\";\n case \"exitplanmode\":\n return \"ExitPlanMode\";\n case \"toolsearch\":\n return \"ToolSearch\";\n case \"skill\":\n return \"Skill\";\n case \"bash\":\n case \"shell\":\n case \"exec\":\n case \"execcommand\":\n case \"runshellcommand\":\n return \"Bash\";\n case \"read\":\n case \"readfile\":\n return \"Read\";\n case \"write\":\n case \"writefile\":\n return \"Write\";\n case \"edit\":\n case \"editfile\":\n case \"multiedit\":\n return \"Edit\";\n case \"grep\":\n return \"Grep\";\n case \"glob\":\n return \"Glob\";\n case \"websearch\":\n return \"WebSearch\";\n case \"webfetch\":\n return \"WebFetch\";\n case \"todowrite\":\n return \"TodoWrite\";\n case \"task\":\n case \"subagent\":\n case \"runsubagent\":\n case \"delegatetask\":\n case \"delegateagent\":\n case \"agent\":\n return \"Agent\";\n default:\n break;\n }\n\n const lowerTitle = rawTitle.trim().toLowerCase();\n if (lowerTitle.startsWith(\"read \")) {\n return \"Read\";\n }\n if (lowerTitle.startsWith(\"write \")) {\n return \"Write\";\n }\n if (lowerTitle.startsWith(\"edit \")) {\n return \"Edit\";\n }\n\n if (\n !normalizedTitle ||\n isGenericToolLabel(normalizedTitle) ||\n isOpaqueWorkspaceAgentToolCallIdentifier(rawTitle, item)\n ) {\n return null;\n }\n return rawTitle.trim();\n}\n\nfunction toolCallStatus(item: WorkspaceAgentActivityTimelineItem): {\n status: string | null;\n statusKind: ToolCallStatusKind | null;\n} {\n const payloadStatus = firstPresentString(\n item.status,\n stringRecordValue(item.payload, \"status\"),\n stringRecordValue(item.payload, \"activityStatus\"),\n statusFromActivityEventType(activityEventType(item))\n );\n switch (normalizeToolToken(payloadStatus)) {\n case \"active\":\n case \"running\":\n case \"working\":\n return {\n status: translate(\"agentHost.agentTool.statusWorking\"),\n statusKind: \"working\"\n };\n case \"completed\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return {\n status: translate(\"agentHost.agentTool.statusCompleted\"),\n statusKind: \"completed\"\n };\n case \"failed\":\n case \"error\":\n return {\n status: translate(\"agentHost.agentTool.statusFailed\"),\n statusKind: \"failed\"\n };\n case \"canceled\":\n return {\n status: translate(\"agentHost.agentTool.statusCanceled\"),\n statusKind: \"canceled\"\n };\n case \"pending\":\n case \"waiting\":\n case \"awaiting_approval\":\n case \"waiting_approval\":\n case \"waiting_input\":\n return {\n status: translate(\"agentHost.agentTool.statusWaiting\"),\n statusKind: \"waiting\"\n };\n default:\n return { status: null, statusKind: null };\n }\n}\n\nfunction toolCallDetail(\n item: WorkspaceAgentActivityTimelineItem,\n toolName: string | null\n): string | null {\n const metadata = recordValue(item.payload, \"metadata\");\n const metadataInput = recordValue(metadata, \"input\");\n const metadataError = recordValue(metadata, \"error\");\n const payloadInput = recordValue(item.payload, \"input\");\n const payloadOutput = recordValue(item.payload, \"output\");\n const payloadError = recordValue(item.payload, \"error\");\n const paths = collectToolPaths(metadata, metadataInput, payloadInput);\n const rawToolName = firstPresentString(\n stringRecordValue(metadata, \"tool\"),\n stringRecordValue(item.payload, \"tool\"),\n toolNameFromActivityKey(toolActivityKey(item)),\n item.name\n );\n const visibleRawToolName = isOpaqueWorkspaceAgentToolCallIdentifier(\n rawToolName,\n item\n )\n ? \"\"\n : rawToolName;\n const fallback = firstPresentString(\n commandDetail(\n item.payload,\n metadata,\n metadataInput,\n metadataError,\n payloadInput,\n payloadError\n ),\n toolContentDetail(\n item.payload,\n metadata,\n metadataInput,\n metadataError,\n payloadInput,\n payloadError\n ),\n item.content,\n stringRecordValue(item.payload, \"summary\"),\n stringRecordValue(item.payload, \"content\"),\n stringRecordValue(item.payload, \"text\"),\n stringRecordValue(metadata, \"summary\")\n );\n const query = firstPresentString(\n stringRecordValue(item.payload, \"query\"),\n stringArrayFirstRecordValue(item.payload, \"search_query\"),\n stringArrayFirstRecordValue(item.payload, \"searchQuery\"),\n stringRecordValue(metadata, \"query\"),\n stringRecordValue(metadataInput, \"query\"),\n stringArrayFirstRecordValue(metadataInput, \"search_query\"),\n stringArrayFirstRecordValue(metadataInput, \"searchQuery\"),\n stringRecordValue(payloadInput, \"query\"),\n stringArrayFirstRecordValue(payloadInput, \"search_query\"),\n stringArrayFirstRecordValue(payloadInput, \"searchQuery\"),\n stringRecordValue(recordValue(payloadInput, \"action\"), \"query\"),\n stringRecordValue(recordValue(payloadInput, \"action\"), \"url\")\n );\n const webTarget = firstPresentString(\n query,\n stringRecordValue(metadataInput, \"url\"),\n stringRecordValue(payloadInput, \"url\")\n );\n const pattern = firstPresentString(\n stringRecordValue(item.payload, \"pattern\"),\n stringRecordValue(metadata, \"pattern\"),\n stringRecordValue(metadataInput, \"pattern\"),\n stringRecordValue(payloadInput, \"pattern\")\n );\n const command = firstPresentString(\n stringRecordValue(metadata, \"command\"),\n stringRecordValue(metadataInput, \"cmd\"),\n stringRecordValue(metadataInput, \"command\"),\n stringRecordValue(payloadInput, \"cmd\"),\n stringRecordValue(payloadInput, \"command\")\n );\n const path = firstPresentString(\n stringRecordValue(metadataInput, \"path\"),\n stringRecordValue(metadataInput, \"file_path\"),\n stringRecordValue(metadataInput, \"fileName\"),\n stringRecordValue(metadataInput, \"filename\"),\n stringRecordValue(payloadInput, \"path\"),\n stringRecordValue(payloadInput, \"file_path\"),\n stringRecordValue(payloadInput, \"fileName\"),\n stringRecordValue(payloadInput, \"filename\")\n );\n const inputSummary = firstPresentString(\n summarizeToolInput(metadataInput),\n summarizeToolInput(payloadInput)\n );\n const normalizedToolName = normalizeToolNameToken(toolName);\n const multiFileSummary = summarizeFileChangeCount(\n payloadOutput,\n payloadInput,\n item.payload,\n metadataInput\n );\n const todoSummary = summarizeTodoProgress(payloadInput);\n const webDomainSummary = summarizeWebDomain(webTarget);\n const imageGeneration = extractImageGenerationPreview({\n toolName,\n displayName: visibleRawToolName,\n content: item.payload?.content,\n outputContent: payloadOutput?.content,\n outputSavedPath: payloadOutput?.savedPath ?? payloadOutput?.saved_path,\n inputPrompt: payloadInput?.prompt,\n payloadInputPrompt: metadataInput?.prompt\n });\n\n switch (normalizedToolName) {\n case \"imagegeneration\":\n return (\n imageGeneration.prompt ||\n imageGeneration.imageUri ||\n fallback ||\n inputSummary ||\n null\n );\n case \"read\":\n case \"write\":\n case \"edit\":\n case \"multiedit\":\n return (\n multiFileSummary ||\n path ||\n firstPath(paths) ||\n fallback ||\n inputSummary ||\n command ||\n null\n );\n case \"glob\":\n return (\n pattern ||\n query ||\n path ||\n firstPath(paths) ||\n fallback ||\n inputSummary ||\n null\n );\n case \"bash\":\n return (\n command || path || firstPath(paths) || fallback || inputSummary || null\n );\n case \"grep\":\n return (\n query ||\n pattern ||\n fallback ||\n inputSummary ||\n command ||\n firstPath(paths) ||\n null\n );\n case \"websearch\":\n return (\n query ||\n webDomainSummary ||\n pattern ||\n fallback ||\n inputSummary ||\n command ||\n firstPath(paths) ||\n null\n );\n case \"webfetch\":\n return (\n webDomainSummary ||\n query ||\n pattern ||\n fallback ||\n inputSummary ||\n command ||\n firstPath(paths) ||\n null\n );\n case \"todowrite\":\n return todoSummary || inputSummary || fallback || null;\n case \"toolsearch\":\n case \"skill\":\n case \"task\":\n case \"agent\":\n return (\n inputSummary ||\n fallback ||\n path ||\n firstPath(paths) ||\n query ||\n pattern ||\n command ||\n visibleRawToolName ||\n null\n );\n default:\n return (\n fallback ||\n command ||\n path ||\n firstPath(paths) ||\n query ||\n pattern ||\n inputSummary ||\n visibleRawToolName ||\n null\n );\n }\n}\n\nfunction commandDetail(\n payload: Record<string, unknown> | undefined,\n metadata: Record<string, unknown> | undefined,\n metadataInput: Record<string, unknown> | undefined,\n metadataError: Record<string, unknown> | undefined,\n payloadInput: Record<string, unknown> | undefined,\n payloadError: Record<string, unknown> | undefined\n): string {\n const payloadRawInput = recordValue(payloadInput, \"rawInput\");\n return firstPresentString(\n stringRecordValue(payload, \"command\"),\n stringRecordValue(payload, \"cmd\"),\n stringRecordValue(metadata, \"command\"),\n stringRecordValue(metadata, \"cmd\"),\n stringRecordValue(metadataInput, \"cmd\"),\n stringRecordValue(metadataInput, \"command\"),\n stringRecordValue(metadataError, \"cmd\"),\n stringRecordValue(metadataError, \"command\"),\n stringRecordValue(payloadInput, \"cmd\"),\n stringRecordValue(payloadInput, \"command\"),\n stringRecordValue(payloadRawInput, \"cmd\"),\n stringRecordValue(payloadRawInput, \"command\"),\n stringRecordValue(payloadError, \"cmd\"),\n stringRecordValue(payloadError, \"command\")\n );\n}\n\nfunction claudeCodeToolName(\n value: Record<string, unknown> | undefined\n): string | undefined {\n const meta = recordValue(value, \"_meta\");\n const claudeCode = recordValue(meta, \"claudeCode\");\n return stringRecordValue(claudeCode, \"toolName\");\n}\n\nfunction toolContentDetail(\n payload: Record<string, unknown> | undefined,\n metadata: Record<string, unknown> | undefined,\n metadataInput: Record<string, unknown> | undefined,\n metadataError: Record<string, unknown> | undefined,\n payloadInput: Record<string, unknown> | undefined,\n payloadError: Record<string, unknown> | undefined\n): string {\n return firstPresentString(\n stringRecordValue(payload, \"query\"),\n stringRecordValue(payload, \"search_query\"),\n stringRecordValue(payload, \"searchQuery\"),\n stringRecordValue(payload, \"pattern\"),\n stringRecordValue(payload, \"glob\"),\n stringRecordValue(payload, \"regex\"),\n stringRecordValue(payload, \"url\"),\n stringRecordValue(payload, \"patch\"),\n stringRecordValue(metadata, \"query\"),\n stringRecordValue(metadata, \"pattern\"),\n stringRecordValue(metadata, \"glob\"),\n stringRecordValue(metadata, \"regex\"),\n stringRecordValue(metadata, \"url\"),\n stringRecordValue(metadata, \"patch\"),\n stringRecordValue(metadataInput, \"query\"),\n stringRecordValue(metadataInput, \"pattern\"),\n stringRecordValue(metadataInput, \"glob\"),\n stringRecordValue(metadataInput, \"regex\"),\n stringRecordValue(metadataInput, \"url\"),\n stringRecordValue(metadataInput, \"patch\"),\n stringRecordValue(metadataError, \"query\"),\n stringRecordValue(metadataError, \"pattern\"),\n stringRecordValue(metadataError, \"url\"),\n stringRecordValue(payloadInput, \"query\"),\n stringRecordValue(payloadInput, \"search_query\"),\n stringRecordValue(payloadInput, \"searchQuery\"),\n stringRecordValue(payloadInput, \"pattern\"),\n stringRecordValue(payloadInput, \"glob\"),\n stringRecordValue(payloadInput, \"regex\"),\n stringRecordValue(payloadInput, \"url\"),\n stringRecordValue(payloadInput, \"patch\"),\n stringRecordValue(payloadError, \"query\"),\n stringRecordValue(payloadError, \"pattern\"),\n stringRecordValue(payloadError, \"url\")\n );\n}\n\nfunction isToolActivityTimelineItem(\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const eventType = activityEventType(item);\n if (!eventType.startsWith(\"activity.\")) {\n return false;\n }\n const activityKey = toolActivityKey(item);\n if (activityKey.startsWith(\"tool.\")) {\n return true;\n }\n return resolveLegacyToolName(item) !== null;\n}\n\nfunction activityEventType(item: WorkspaceAgentActivityTimelineItem): string {\n const itemType = item.itemType.trim().toLowerCase();\n if (itemType.startsWith(\"activity.\")) {\n return itemType;\n }\n return firstPresentString(\n stringRecordValue(item.payload, \"eventKey\"),\n item.itemType\n )\n .trim()\n .toLowerCase();\n}\n\nfunction statusFromActivityEventType(eventType: string): string {\n switch (eventType) {\n case \"activity.started\":\n case \"call.started\":\n return \"running\";\n case \"activity.completed\":\n case \"call.completed\":\n return \"completed\";\n case \"activity.failed\":\n case \"call.failed\":\n case \"call.errored\":\n return \"failed\";\n default:\n return \"\";\n }\n}\n\nfunction toolActivityKey(item: WorkspaceAgentActivityTimelineItem): string {\n const metadata = recordValue(item.payload, \"metadata\");\n return firstPresentString(\n stringRecordValue(item.payload, \"activityKey\"),\n stringRecordValue(item.payload, \"activity_key\"),\n stringRecordValue(metadata, \"activityKey\"),\n stringRecordValue(metadata, \"activity_key\")\n )\n .trim()\n .toLowerCase();\n}\n\nfunction toolNameFromActivityKey(activityKey: string): string {\n return activityKey.startsWith(\"tool.\")\n ? activityKey.slice(\"tool.\".length)\n : \"\";\n}\n\nfunction isToolActivityKind(value: string): value is ToolActivityKind {\n return value in TOOL_ACTIVITY_KIND_TRANSLATION_KEYS;\n}\n\nfunction normalizeToolToken(value: string | undefined): string {\n return (\n value\n ?.trim()\n .toLowerCase()\n .replace(/[-\\s]+/gu, \"_\") ?? \"\"\n );\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { resolveWorkspaceAgentNoticeCommandSemantics } from \"./workspaceAgentSystemNoticeSemantics\";\nimport {\n buildWorkspaceAgentToolCallDisplay,\n resolveWorkspaceAgentToolName,\n type ToolCallStatusKind\n} from \"./workspaceAgentToolCallDisplay\";\nimport type {\n BuildWorkspaceAgentSessionDetailInput,\n WorkspaceAgentSessionDetailMessage,\n WorkspaceAgentSessionDetailToolCall,\n WorkspaceAgentSessionDetailTurn\n} from \"./workspaceAgentSessionDetailViewModel\";\n\nexport function delegatedToolStepFromCall(\n call: WorkspaceAgentSessionDetailToolCall\n): Record<string, unknown> {\n const payload = normalizedPayload(call.payload ?? undefined);\n return {\n id: call.id,\n toolUseId: call.id.replace(/^call:/, \"\"),\n name: call.name,\n toolName: call.toolName,\n callType: call.callType,\n status: call.status,\n toolInput: normalizedPayload(\n payload?.input as WorkspaceAgentActivityTimelineItem[\"payload\"]\n ),\n toolResult: normalizedPayload(\n payload?.output as WorkspaceAgentActivityTimelineItem[\"payload\"]\n ),\n toolError: normalizedPayload(\n payload?.error as WorkspaceAgentActivityTimelineItem[\"payload\"]\n ),\n payload,\n metadata: normalizedPayload(\n payload?.metadata as WorkspaceAgentActivityTimelineItem[\"payload\"]\n ),\n content: Array.isArray(payload?.content) ? payload.content : null,\n locations: Array.isArray(payload?.locations) ? payload.locations : null,\n occurredAtUnixMs: call.occurredAtUnixMs ?? null\n };\n}\n\nexport function compareToolCallsAscending(\n left: WorkspaceAgentSessionDetailToolCall,\n right: WorkspaceAgentSessionDetailToolCall\n): number {\n return (\n (left.occurredAtUnixMs ?? 0) - (right.occurredAtUnixMs ?? 0) ||\n left.id.localeCompare(right.id)\n );\n}\n\nexport function parentToolUseIdFromCall(\n call: WorkspaceAgentSessionDetailToolCall\n): string | null {\n const metadata = normalizedPayload(\n call.payload?.metadata as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const input = normalizedPayload(\n call.payload?.input as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const output = normalizedPayload(\n call.payload?.output as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const error = normalizedPayload(\n call.payload?.error as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n return firstPresentString(\n stringRecordValue(metadata, \"parentToolUseId\"),\n stringRecordValue(call.payload, \"parentToolUseId\"),\n claudeCodeMetaValue(input, \"parentToolUseId\"),\n claudeCodeMetaValue(output, \"parentToolUseId\"),\n claudeCodeMetaValue(error, \"parentToolUseId\")\n );\n}\n\nexport function isTaskLikeToolCall(\n call: WorkspaceAgentSessionDetailToolCall\n): boolean {\n return [\n \"task\",\n \"subagent\",\n \"delegatetask\",\n \"delegateagent\",\n \"agent\"\n ].includes(normalizeToolName(call.toolName));\n}\n\nexport function toolCallView(\n item: WorkspaceAgentActivityTimelineItem\n): WorkspaceAgentSessionDetailToolCall {\n const display = buildWorkspaceAgentToolCallDisplay(item);\n const preserveTitle =\n item.itemType.trim().toLowerCase().startsWith(\"approval.\") ||\n item.itemType.trim().toLowerCase().startsWith(\"interactive.\") ||\n firstPresentString(\n item.callType,\n stringRecordValue(item.payload, \"callType\")\n ) === \"approval\";\n const fallbackName = preserveTitle\n ? firstPresentString(item.name, display.name)\n : display.name;\n return withSourceTimelineItems(\n {\n id: display.id,\n name: fallbackName || display.name,\n toolName: resolveWorkspaceAgentToolName(item),\n callType: firstPresentString(\n item.callType,\n stringRecordValue(item.payload, \"callType\")\n ),\n status: display.status,\n statusKind: display.statusKind,\n summary: display.detail ?? \"\",\n payload: normalizedPayload(item.payload),\n turnId: item.turnId?.trim() || undefined,\n compactSummary: display.detail ?? \"\",\n occurredAtUnixMs: item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null\n },\n [item]\n );\n}\n\nexport function withSourceTimelineItems<T extends object>(\n value: T,\n sourceTimelineItems: readonly WorkspaceAgentActivityTimelineItem[] | undefined\n): T & { sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[] } {\n if (!sourceTimelineItems || sourceTimelineItems.length === 0) return value;\n Object.defineProperty(value, \"sourceTimelineItems\", {\n configurable: true,\n enumerable: false,\n value: [...sourceTimelineItems],\n writable: true\n });\n return value as T & {\n sourceTimelineItems?: WorkspaceAgentActivityTimelineItem[];\n };\n}\n\nexport function mergeSourceTimelineItems(\n previous: readonly WorkspaceAgentActivityTimelineItem[] | undefined,\n next: readonly WorkspaceAgentActivityTimelineItem[] | undefined\n): WorkspaceAgentActivityTimelineItem[] | undefined {\n const merged = [...(previous ?? []), ...(next ?? [])];\n if (merged.length === 0) return undefined;\n const byKey = new Map<string, WorkspaceAgentActivityTimelineItem>();\n for (const item of merged) byKey.set(sourceTimelineItemKey(item), item);\n return [...byKey.values()].sort(compareTimelineItemsAscending);\n}\n\nexport function normalizedPayload(\n payload: WorkspaceAgentActivityTimelineItem[\"payload\"]\n): Record<string, unknown> | null {\n return payload && typeof payload === \"object\" ? payload : null;\n}\n\nexport function visibleErrorFromPayload(\n payload: Record<string, unknown> | null\n): WorkspaceAgentSessionDetailMessage[\"visibleError\"] {\n if (stringRecordValue(payload, \"kind\") !== \"agent_visible_error\") return null;\n return {\n code: stringRecordValue(payload, \"code\"),\n phase: stringRecordValue(payload, \"phase\"),\n provider: stringRecordValue(payload, \"provider\"),\n detail: stringRecordValue(payload, \"detail\"),\n retryable: booleanRecordValue(payload, \"retryable\")\n };\n}\n\nexport function systemNoticeFromPayload(\n payload: Record<string, unknown> | null,\n context: Pick<\n WorkspaceAgentActivityTimelineItem,\n \"eventId\" | \"messageSemantics\" | \"status\"\n >\n): WorkspaceAgentSessionDetailMessage[\"systemNotice\"] {\n const commandSemantics = resolveWorkspaceAgentNoticeCommandSemantics({\n eventId: context.eventId,\n messageSemantics: context.messageSemantics,\n payload,\n status: context.status\n });\n if (\n stringRecordValue(payload, \"kind\") !== \"agent_system_notice\" &&\n !commandSemantics\n ) {\n return null;\n }\n const source = stringRecordValue(payload, \"source\");\n return {\n noticeKind: stringRecordValue(payload, \"noticeKind\"),\n severity: stringRecordValue(payload, \"severity\"),\n ...(source ? { source } : {}),\n ...(commandSemantics\n ? {\n command: commandSemantics.command,\n commandStatus: commandSemantics.commandStatus\n }\n : {}),\n title: stringRecordValue(payload, \"title\"),\n detail: stringRecordValue(payload, \"detail\"),\n retryable: booleanRecordValue(payload, \"retryable\")\n };\n}\n\nexport function stringRecordValue(record: unknown, key: string): string | null {\n if (!record || typeof record !== \"object\" || Array.isArray(record))\n return null;\n const value = (record as Record<string, unknown>)[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nexport function claudeCodeMetaValue(\n record: Record<string, unknown> | null,\n key: string\n): string | null {\n const meta = normalizedPayload(\n record?._meta as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const claudeCode = normalizedPayload(\n meta?.claudeCode as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n return stringRecordValue(claudeCode, key);\n}\n\nexport function firstPresentString(\n ...values: Array<string | null | undefined>\n): string | null {\n for (const value of values) {\n if (typeof value === \"string\" && value.trim()) return value.trim();\n }\n return null;\n}\n\nexport function summarizeToolCallGroup(\n calls: readonly WorkspaceAgentSessionDetailToolCall[]\n): string | null {\n if (calls.length < 2) return null;\n const targets = [\n ...new Set(\n calls\n .filter((call) =>\n [\"edit\", \"multiedit\", \"write\"].includes(\n normalizeToolName(call.toolName)\n )\n )\n .map((call) => summarizeCallTarget(call.summary))\n .filter((value): value is string => value !== null)\n )\n ];\n if (targets.length === 0) return null;\n return targets.length === 1\n ? `Changed ${targets[0]}`\n : `Changed ${targets[0]} and ${targets.length - 1} more files`;\n}\n\nexport function shouldShowProcessingIndicator(\n session: BuildWorkspaceAgentSessionDetailInput[\"session\"],\n turns: readonly WorkspaceAgentSessionDetailTurn[]\n): boolean {\n if (!sessionHasRunnableIndicatorState(session)) return false;\n const lastTurn = turns.at(-1);\n if (!lastTurn) return true;\n const lastAgentItem = lastTurn.agentItems.at(-1);\n if (\n lastAgentItem?.kind === \"message\" &&\n isTerminalAgentMessageStatus(lastAgentItem.message.statusKind) &&\n !hasActiveRunningTurn(session)\n ) {\n return false;\n }\n return !lastTurn.toolCalls.some(\n (call) => call.statusKind === \"working\" || call.statusKind === \"waiting\"\n );\n}\n\nfunction sourceTimelineItemKey(\n item: WorkspaceAgentActivityTimelineItem\n): string {\n const eventId = item.eventId?.trim();\n if (eventId) return `event:${eventId}`;\n if (Number.isFinite(item.id) && item.id > 0) return `id:${item.id}`;\n const seq = item.seq ?? 0;\n return seq > 0\n ? `seq:${seq}`\n : `local:${item.itemType}:${item.occurredAtUnixMs ?? 0}`;\n}\n\nfunction compareTimelineItemsAscending(\n left: WorkspaceAgentActivityTimelineItem,\n right: WorkspaceAgentActivityTimelineItem\n): number {\n return (\n (left.seq ?? 0) - (right.seq ?? 0) ||\n (left.occurredAtUnixMs ?? left.createdAtUnixMs ?? 0) -\n (right.occurredAtUnixMs ?? right.createdAtUnixMs ?? 0) ||\n left.id - right.id\n );\n}\n\nfunction booleanRecordValue(record: unknown, key: string): boolean | null {\n if (!record || typeof record !== \"object\" || Array.isArray(record))\n return null;\n const value = (record as Record<string, unknown>)[key];\n return typeof value === \"boolean\" ? value : null;\n}\n\nfunction normalizeToolName(name: string | null): string {\n return (name ?? \"\")\n .trim()\n .replace(/[_\\s-]+/g, \"\")\n .toLowerCase();\n}\n\nfunction summarizeCallTarget(summary: string): string | null {\n const firstLine = summary.trim().split(\"\\n\")[0]?.trim() ?? \"\";\n if (!firstLine) return null;\n return firstLine.split(/[\\\\/]/).filter(Boolean).at(-1) ?? firstLine;\n}\n\nfunction hasActiveRunningTurn(\n session: BuildWorkspaceAgentSessionDetailInput[\"session\"]\n): boolean {\n const activeTurn = session.activeTurn;\n return Boolean(activeTurn && activeTurn.phase !== \"settled\");\n}\n\nfunction sessionHasRunnableIndicatorState(\n session: BuildWorkspaceAgentSessionDetailInput[\"session\"]\n): boolean {\n return session.activeTurn ? session.activeTurn.phase !== \"settled\" : false;\n}\n\nfunction isTerminalAgentMessageStatus(\n status: ToolCallStatusKind | null | undefined\n): boolean {\n return status === \"completed\" || status === \"failed\" || status === \"canceled\";\n}\n","import type { WorkspaceAgentSessionDetailGoalControl } from \"./workspaceAgentSessionDetailViewModel\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { normalizedPayload } from \"./workspaceAgentTimelineProjectionHelpers\";\n\nexport function appendWorkspaceAgentGoalControl(\n target: WorkspaceAgentSessionDetailGoalControl[],\n item: WorkspaceAgentActivityTimelineItem,\n id: string,\n body: string\n): boolean {\n if (item.itemType !== \"goal.control\") {\n return false;\n }\n const action = normalizedPayload(item.payload)?.action;\n if (\n action !== \"pause\" &&\n action !== \"resume\" &&\n action !== \"clear\" &&\n action !== \"set\"\n ) {\n return true;\n }\n const normalizedBody = body.trim();\n if (!normalizedBody) {\n return true;\n }\n target.push({\n id,\n action,\n body: normalizedBody,\n occurredAtUnixMs: item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null,\n sourceTimelineItems: [item]\n });\n return true;\n}\n","import type { ToolCallStatusKind } from \"./workspaceAgentToolCallDisplay\";\nimport { isWorkspaceAgentSyntheticControlMessage } from \"./workspaceAgentSyntheticMessages\";\nimport type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\n\nexport function messageRole(\n item: WorkspaceAgentActivityTimelineItem\n): \"user\" | \"agent\" | \"thinking\" | null {\n const explicitRole = item.role?.trim().toLowerCase();\n if (explicitRole === \"user\") {\n return \"user\";\n }\n if (explicitRole === \"assistant_thinking\") {\n return \"thinking\";\n }\n if (explicitRole === \"assistant\" || explicitRole === \"agent\") {\n return \"agent\";\n }\n\n const itemType = item.itemType.trim().toLowerCase();\n if (itemType === \"message.user\") {\n return \"user\";\n }\n if (itemType === \"message.agent\" || itemType === \"message.assistant\") {\n return \"agent\";\n }\n if (itemType === \"message.assistant_thinking\") {\n return \"thinking\";\n }\n return null;\n}\n\nexport function messageBody(item: WorkspaceAgentActivityTimelineItem): string {\n const payloadContent = item.payload?.content;\n if (typeof payloadContent === \"string\" && payloadContent.trim()) {\n const content = payloadContent.trim();\n return isWorkspaceAgentSyntheticControlMessage(content) ? \"\" : content;\n }\n\n const content = item.content?.trim();\n if (content) {\n return isWorkspaceAgentSyntheticControlMessage(content) ? \"\" : content;\n }\n\n const payloadText = item.payload?.text;\n if (typeof payloadText !== \"string\") {\n return \"\";\n }\n const text = payloadText.trim();\n return isWorkspaceAgentSyntheticControlMessage(text) ? \"\" : text;\n}\n\nexport function thinkingStatusKind(\n item: WorkspaceAgentActivityTimelineItem\n): ToolCallStatusKind | null {\n const status = firstPresentString(\n item.status,\n stringRecordValue(item.payload, \"status\"),\n stringRecordValue(item.payload, \"streamState\"),\n stringRecordValue(item.payload, \"messageStreamState\")\n );\n return messageStatusKind(status);\n}\n\nexport function messageStatusKind(\n status: string | null\n): ToolCallStatusKind | null {\n switch (normalizeStatusToken(status)) {\n case \"active\":\n case \"running\":\n case \"streaming\":\n case \"working\":\n case \"inprogress\":\n case \"in_progress\":\n return \"working\";\n case \"completed\":\n case \"complete\":\n case \"done\":\n case \"success\":\n case \"succeeded\":\n return \"completed\";\n case \"failed\":\n case \"error\":\n return \"failed\";\n case \"canceled\":\n return \"canceled\";\n case \"pending\":\n case \"waiting\":\n return \"waiting\";\n default:\n return null;\n }\n}\n\nexport function isPlaceholderThinkingBody(body: string): boolean {\n const normalized = body.trim();\n return normalized === \"...\" || normalized === \"…\";\n}\n\n// Codex review reasoning summaries lead with a bold section title, e.g.\n// \"**Considering workspace registration order**\\n\\nI'm looking at...\". Hide\n// the title in /review process prose; keep the body paragraph.\nconst reviewProcessSummaryTitlePattern = /^\\*\\*(.+?)\\*\\*(?:\\r?\\n\\s*)?/;\n\nexport function stripReviewProcessSummaryTitle(body: string): string {\n const match = body.match(reviewProcessSummaryTitlePattern);\n if (!match) {\n return body;\n }\n return body.slice(match[0].length).trimStart();\n}\n\nexport function normalizedMessageBody(body: string): string {\n return body.trim().replace(/\\s+/g, \" \");\n}\n\nexport function userMessageProjectionKey(\n item: WorkspaceAgentActivityTimelineItem,\n body: string\n): string | null {\n const normalizedBody = normalizedMessageBody(body);\n if (normalizedBody) {\n return `text:${normalizedBody}`;\n }\n if (!hasRenderableUserPromptContent(item.payload?.content)) {\n return null;\n }\n const clientSubmitId = stringRecordValue(item.payload, \"clientSubmitId\");\n return clientSubmitId\n ? `client-submit:${clientSubmitId}`\n : `event:${item.eventId}`;\n}\n\nexport function isRecentDuplicateUserMessage(\n previous: WorkspaceAgentActivityTimelineItem | undefined,\n current: WorkspaceAgentActivityTimelineItem\n): boolean {\n if (!previous) {\n return false;\n }\n\n const previousTurnId = previous.turnId?.trim();\n const currentTurnId = current.turnId?.trim();\n if (previousTurnId && currentTurnId && previousTurnId === currentTurnId) {\n return true;\n }\n if (previousTurnId && currentTurnId) {\n return false;\n }\n\n const previousOccurredAt = previous.occurredAtUnixMs ?? 0;\n const currentOccurredAt = current.occurredAtUnixMs ?? 0;\n if (previousOccurredAt > 0 && currentOccurredAt > 0) {\n return Math.abs(currentOccurredAt - previousOccurredAt) <= 60_000;\n }\n\n const previousSeq = previous.seq ?? 0;\n const currentSeq = current.seq ?? 0;\n if (previousSeq > 0 && currentSeq > 0) {\n return Math.abs(currentSeq - previousSeq) <= 5;\n }\n\n return false;\n}\n\nfunction hasRenderableUserPromptContent(content: unknown): boolean {\n if (!Array.isArray(content)) {\n return false;\n }\n return content.some((candidate) => {\n if (\n !candidate ||\n typeof candidate !== \"object\" ||\n Array.isArray(candidate)\n ) {\n return false;\n }\n const block = candidate as Record<string, unknown>;\n if (block.type === \"text\") {\n return typeof block.text === \"string\" && block.text.trim().length > 0;\n }\n return (\n block.type === \"image\" &&\n typeof block.mimeType === \"string\" &&\n block.mimeType.trim().length > 0\n );\n });\n}\n\nfunction stringRecordValue(record: unknown, key: string): string | null {\n if (!record || typeof record !== \"object\") {\n return null;\n }\n const value = (record as Record<string, unknown>)[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : null;\n}\n\nfunction firstPresentString(\n ...values: Array<string | null | undefined>\n): string | null {\n for (const value of values) {\n const normalized = value?.trim();\n if (normalized) {\n return normalized;\n }\n }\n return null;\n}\n\nfunction normalizeStatusToken(value: string | null): string {\n return (value ?? \"\")\n .trim()\n .toLowerCase()\n .replace(/[\\s-]+/g, \"_\");\n}\n","import type { AgentActivityTurn } from \"@tutti-os/agent-activity-core\";\nimport type {\n WorkspaceAgentSessionDetailMessage,\n WorkspaceAgentSessionDetailTurn\n} from \"./workspaceAgentSessionDetailViewModel\";\n\n/**\n * Enriches Turns that the hydrated transcript has already projected.\n *\n * `sessionTurns` can describe the full session while `turns` contains only the\n * current message window. Canonical lifecycle metadata therefore must not\n * create transcript membership or alter transcript order.\n */\nexport function enrichProjectedTurnsWithCanonicalErrors({\n turns,\n sessionTurns,\n provider,\n agentSessionId\n}: {\n turns: ReadonlyMap<string, WorkspaceAgentSessionDetailTurn>;\n sessionTurns: readonly AgentActivityTurn[];\n provider: string;\n agentSessionId: string;\n}): void {\n for (const canonicalTurn of sessionTurns) {\n if (\n canonicalTurn.outcome !== \"failed\" &&\n canonicalTurn.outcome !== \"interrupted\"\n ) {\n continue;\n }\n const detail = canonicalTurn.error?.message.trim() ?? \"\";\n if (!detail) {\n continue;\n }\n\n const turn = turns.get(canonicalTurn.turnId);\n if (!turn) {\n continue;\n }\n if (turn.agentMessages.some((message) => message.visibleError)) {\n continue;\n }\n\n const matchingMessage = turn.agentMessages.find(\n (message) => message.body.trim() === detail\n );\n if (matchingMessage) {\n matchingMessage.status = \"failed\";\n matchingMessage.statusKind = \"failed\";\n matchingMessage.visibleError = visibleErrorFromCanonicalTurn(\n canonicalTurn,\n provider\n );\n continue;\n }\n\n const message: WorkspaceAgentSessionDetailMessage = {\n id: `turn-error:${agentSessionId}:${canonicalTurn.turnId}`,\n body: detail,\n status: \"failed\",\n statusKind: \"failed\",\n turnId: canonicalTurn.turnId,\n occurredAtUnixMs:\n canonicalTurn.settledAtUnixMs ?? canonicalTurn.updatedAtUnixMs,\n visibleError: visibleErrorFromCanonicalTurn(canonicalTurn, provider)\n };\n turn.agentMessages.push(message);\n turn.agentItems.push({ kind: \"message\", message });\n }\n}\n\nfunction visibleErrorFromCanonicalTurn(\n turn: AgentActivityTurn,\n provider: string\n): NonNullable<WorkspaceAgentSessionDetailMessage[\"visibleError\"]> {\n return {\n code: turn.error?.code?.trim() || null,\n phase: \"turn\",\n provider: provider.trim() || null,\n detail: turn.error?.message.trim() || null,\n retryable: null\n };\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport {\n firstPresentString,\n normalizedPayload,\n stringRecordValue\n} from \"./workspaceAgentTimelineProjectionHelpers\";\nimport { resolveWorkspaceAgentToolName } from \"./workspaceAgentToolCallDisplay\";\n\nfunction toolNameFromItem(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n return resolveWorkspaceAgentToolName(item);\n}\n\nexport function normalizeToolName(name: string | null): string {\n return (name ?? \"\")\n .trim()\n .replace(/[_\\s-]+/g, \"\")\n .toLowerCase();\n}\n\nexport function suppressedUnavailableAskUserQuestionCallIds(\n items: readonly WorkspaceAgentActivityTimelineItem[]\n): Set<string> {\n const suppressed = new Set<string>();\n for (const item of items) {\n if (\n normalizeToolName(toolNameFromItem(item)) !== \"askuserquestion\" ||\n !isUnavailableAskUserQuestionFailure(item)\n ) {\n continue;\n }\n const callId = toolCallSuppressionId(item);\n if (callId) {\n suppressed.add(callId);\n }\n }\n return suppressed;\n}\n\nexport function shouldSuppressToolCall(\n item: WorkspaceAgentActivityTimelineItem,\n suppressedToolCallIds: ReadonlySet<string>\n): boolean {\n const callId = toolCallSuppressionId(item);\n return callId ? suppressedToolCallIds.has(callId) : false;\n}\n\nfunction toolCallSuppressionId(\n item: WorkspaceAgentActivityTimelineItem\n): string | null {\n return firstPresentString(\n item.callId,\n stringRecordValue(item.payload, \"callId\"),\n stringRecordValue(item.payload, \"toolCallId\")\n );\n}\n\nfunction isUnavailableAskUserQuestionFailure(\n item: WorkspaceAgentActivityTimelineItem\n): boolean {\n const status = firstPresentString(\n item.status,\n stringRecordValue(item.payload, \"status\")\n );\n if (status !== \"failed\") {\n return false;\n }\n const payload = normalizedPayload(item.payload);\n const output = normalizedPayload(\n payload?.output as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const error = normalizedPayload(\n payload?.error as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const message = firstPresentString(\n stringRecordValue(output, \"output\"),\n stringRecordValue(output, \"text\"),\n stringRecordValue(output, \"message\"),\n stringRecordValue(error, \"error\"),\n stringRecordValue(error, \"message\"),\n stringRecordValue(payload, \"error\"),\n stringRecordValue(payload, \"message\")\n );\n return message?.includes(\"No such tool available: AskUserQuestion\") ?? false;\n}\n","import type { WorkspaceAgentActivityTimelineItem } from \"./workspaceAgentTimelineTypes\";\nimport { appendWorkspaceAgentGoalControl } from \"./workspaceAgentGoalControlProjection\";\nimport { isWorkspaceAgentToolCallItem } from \"./workspaceAgentToolCallDisplay\";\nimport type {\n BuildWorkspaceAgentSessionDetailInput,\n WorkspaceAgentSessionDetailAgentItem,\n WorkspaceAgentSessionDetailGoalControl,\n WorkspaceAgentSessionDetailToolCall,\n WorkspaceAgentSessionDetailToolGroupEntry,\n WorkspaceAgentSessionDetailTurn,\n WorkspaceAgentSessionDetailViewModel\n} from \"./workspaceAgentSessionDetailViewModel\";\nimport {\n isPlaceholderThinkingBody,\n isRecentDuplicateUserMessage,\n messageBody,\n messageRole,\n messageStatusKind,\n normalizedMessageBody,\n stripReviewProcessSummaryTitle,\n thinkingStatusKind,\n userMessageProjectionKey\n} from \"./workspaceAgentTimelineMessageHelpers\";\nimport { isCollaborationTimelineItem } from \"./agentConversation/projection/agentCollaborationProjection\";\nimport {\n compareToolCallsAscending,\n delegatedToolStepFromCall,\n firstPresentString,\n isTaskLikeToolCall,\n mergeSourceTimelineItems,\n normalizedPayload,\n parentToolUseIdFromCall,\n shouldShowProcessingIndicator,\n stringRecordValue,\n summarizeToolCallGroup,\n systemNoticeFromPayload,\n toolCallView,\n visibleErrorFromPayload,\n withSourceTimelineItems\n} from \"./workspaceAgentTimelineProjectionHelpers\";\nimport { enrichProjectedTurnsWithCanonicalErrors } from \"./workspaceAgentTurnErrorProjection\";\nimport {\n normalizeToolName,\n shouldSuppressToolCall,\n suppressedUnavailableAskUserQuestionCallIds\n} from \"./workspaceAgentTimelineSuppression\";\n\nexport function buildCanonicalWorkspaceAgentDetailView({\n activity,\n session,\n sessionTurns = [],\n timelineItems,\n workspaceRoot = null\n}: BuildWorkspaceAgentSessionDetailInput): WorkspaceAgentSessionDetailViewModel {\n const turns = new Map<string, WorkspaceAgentSessionDetailTurn>();\n const goalControls: WorkspaceAgentSessionDetailGoalControl[] = [];\n const recentUserMessages = new Map<\n string,\n WorkspaceAgentActivityTimelineItem\n >();\n const seenThinkingMessages = new Set<string>();\n let activeSequenceTurnId: string | null = null;\n const sortedTimelineItems = [...timelineItems].sort(\n compareTimelineItemsAscending\n );\n const suppressedToolCallIds =\n suppressedUnavailableAskUserQuestionCallIds(sortedTimelineItems);\n\n for (const item of sortedTimelineItems) {\n const role = messageRole(item);\n const body = messageBody(item);\n const explicitTurnId = item.turnId?.trim();\n\n if (\n appendWorkspaceAgentGoalControl(goalControls, item, itemId(item), body)\n ) {\n continue;\n }\n\n if (role === \"user\") {\n const turnId = explicitTurnId || `seq:${item.seq || item.id}`;\n const projectionKey = userMessageProjectionKey(item, body);\n if (!projectionKey) {\n continue;\n }\n if (\n isRecentDuplicateUserMessage(\n recentUserMessages.get(projectionKey),\n item\n )\n ) {\n continue;\n }\n activeSequenceTurnId = turnId;\n const turn = getTurn(turns, turnId);\n const message = withSourceTimelineItems(\n {\n id: itemId(item),\n body,\n turnId,\n occurredAtUnixMs:\n item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null\n },\n [item]\n );\n turn.userMessages.push(message);\n turn.userMessage ??= message;\n recentUserMessages.set(projectionKey, item);\n continue;\n }\n\n const turnId =\n explicitTurnId || activeSequenceTurnId || `seq:${item.seq || item.id}`;\n const turn = getTurn(turns, turnId);\n\n // Collaboration runs render as a dedicated card. Unlike ordinary agent\n // messages they must stay visible while their body (resultText) is still\n // empty — a running consult has no output yet — so this branch does not\n // require a non-empty body.\n if (isCollaborationTimelineItem(item)) {\n const status = firstPresentString(\n item.status,\n stringRecordValue(item.payload, \"status\")\n );\n const statusKind = messageStatusKind(status);\n const message = withSourceTimelineItems(\n {\n id: itemId(item),\n body,\n ...(status ? { status } : {}),\n ...(statusKind ? { statusKind } : {}),\n turnId,\n occurredAtUnixMs:\n item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null\n },\n [item]\n );\n turn.agentMessages.push(message);\n turn.agentItems.push({ kind: \"message\", message });\n continue;\n }\n\n if (isWorkspaceAgentToolCallItem(item)) {\n if (shouldSuppressToolCall(item, suppressedToolCallIds)) {\n continue;\n }\n upsertToolCall(turn, item);\n continue;\n }\n\n if (role === \"thinking\" && body) {\n const payload = normalizedPayload(item.payload);\n if (payload?.messageKind === \"review-process\") {\n const status = firstPresentString(\n item.status,\n stringRecordValue(payload, \"status\")\n );\n const statusKind = messageStatusKind(status);\n const message = withSourceTimelineItems(\n {\n id: itemId(item),\n body: stripReviewProcessSummaryTitle(body),\n ...(status ? { status } : {}),\n ...(statusKind ? { statusKind } : {}),\n turnId,\n occurredAtUnixMs:\n item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null\n },\n [item]\n );\n turn.agentMessages.push(message);\n turn.agentItems.push({ kind: \"message\", message });\n continue;\n }\n if (isPlaceholderThinkingBody(body)) {\n continue;\n }\n const duplicateKey = `${turnId}\\u0000${normalizedMessageBody(body)}`;\n if (seenThinkingMessages.has(duplicateKey)) {\n continue;\n }\n seenThinkingMessages.add(duplicateKey);\n const statusKind = thinkingStatusKind(item);\n const thinking = withSourceTimelineItems(\n {\n id: itemId(item),\n body,\n ...(statusKind ? { statusKind } : {}),\n turnId,\n occurredAtUnixMs:\n item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null\n },\n [item]\n );\n turn.agentItems.push({ kind: \"thinking\", thinking });\n continue;\n }\n\n if (role === \"agent\" && body) {\n const payload = normalizedPayload(item.payload);\n const visibleError = visibleErrorFromPayload(payload);\n const systemNotice = systemNoticeFromPayload(payload, item);\n const status = firstPresentString(\n item.status,\n stringRecordValue(payload, \"status\")\n );\n const statusKind = messageStatusKind(status);\n const message = withSourceTimelineItems(\n {\n id: itemId(item),\n body,\n ...(status ? { status } : {}),\n ...(statusKind ? { statusKind } : {}),\n turnId,\n occurredAtUnixMs:\n item.occurredAtUnixMs ?? item.createdAtUnixMs ?? null,\n ...(visibleError ? { visibleError } : {}),\n ...(systemNotice ? { systemNotice } : {})\n },\n [item]\n );\n turn.agentMessages.push(message);\n turn.agentItems.push({ kind: \"message\", message });\n }\n }\n\n enrichProjectedTurnsWithCanonicalErrors({\n turns,\n sessionTurns:\n sessionTurns.length > 0\n ? sessionTurns\n : session.latestTurn\n ? [session.latestTurn]\n : [],\n provider: session.provider,\n agentSessionId: session.agentSessionId\n });\n\n const visibleTurns = [...turns.values()].filter(\n (turn) => turn.userMessages.length > 0 || turn.agentItems.length > 0\n );\n nestDelegatedToolCallsAcrossTurns(visibleTurns);\n visibleTurns.forEach(mergeBackgroundTerminalContinuations);\n visibleTurns.forEach((turn) => {\n turn.rawAgentItems = [...turn.agentItems];\n turn.agentItems = regroupAgentItems(turn.agentItems);\n });\n\n return {\n activity,\n session,\n sessionTurns,\n cwd: session.cwd.trim(),\n workspaceRoot: workspaceRoot?.trim() || null,\n goalControls,\n turns: visibleTurns,\n showProcessingIndicator: shouldShowProcessingIndicator(\n session,\n visibleTurns\n )\n };\n}\n\nfunction getTurn(\n turns: Map<string, WorkspaceAgentSessionDetailTurn>,\n id: string\n): WorkspaceAgentSessionDetailTurn {\n const existing = turns.get(id);\n if (existing) {\n return existing;\n }\n const turn: WorkspaceAgentSessionDetailTurn = {\n id,\n userMessage: null,\n userMessages: [],\n agentMessages: [],\n toolCalls: [],\n toolCallCount: 0,\n hasFailedToolCall: false,\n agentItems: []\n };\n turns.set(id, turn);\n return turn;\n}\n\nfunction compareTimelineItemsAscending(\n left: WorkspaceAgentActivityTimelineItem,\n right: WorkspaceAgentActivityTimelineItem\n): number {\n const leftSeq = left.seq ?? 0;\n const rightSeq = right.seq ?? 0;\n if (leftSeq > 0 && rightSeq > 0 && leftSeq !== rightSeq) {\n return leftSeq - rightSeq;\n }\n return (\n (left.occurredAtUnixMs ?? left.createdAtUnixMs ?? 0) -\n (right.occurredAtUnixMs ?? right.createdAtUnixMs ?? 0) ||\n leftSeq - rightSeq ||\n left.id - right.id\n );\n}\n\nfunction itemId(item: WorkspaceAgentActivityTimelineItem): string {\n const eventId = item.eventId?.trim();\n if (eventId) {\n return eventId;\n }\n const seq = item.seq ?? 0;\n return seq > 0 ? `seq:${seq}` : `id:${item.id}`;\n}\n\nfunction upsertToolCall(\n turn: WorkspaceAgentSessionDetailTurn,\n item: WorkspaceAgentActivityTimelineItem\n): void {\n const call = toolCallView(item);\n const existingIndex = turn.toolCalls.findIndex(\n (existing) => existing.id === call.id\n );\n if (existingIndex >= 0) {\n const existing = turn.toolCalls[existingIndex];\n if (!existing) {\n return;\n }\n turn.toolCalls[existingIndex] = mergeToolCallDetail(existing, call);\n } else {\n turn.toolCalls.push(call);\n }\n turn.toolCallCount = turn.toolCalls.length;\n turn.hasFailedToolCall = turn.toolCalls.some(\n (existing) => existing.statusKind === \"failed\"\n );\n upsertToolCallAgentItem(turn, call, itemId(item));\n}\n\nfunction upsertToolCallAgentItem(\n turn: WorkspaceAgentSessionDetailTurn,\n call: WorkspaceAgentSessionDetailToolCall,\n sourceId: string\n): void {\n for (const entry of turn.agentItems) {\n if (entry.kind !== \"tool-calls\") {\n continue;\n }\n const existingIndex = entry.toolCalls.findIndex(\n (existing) => existing.id === call.id\n );\n if (existingIndex >= 0) {\n const existing = entry.toolCalls[existingIndex];\n if (!existing) {\n continue;\n }\n entry.toolCalls[existingIndex] = mergeToolCallDetail(existing, call);\n refreshToolCallAgentItem(entry);\n return;\n }\n }\n\n const entry: WorkspaceAgentSessionDetailAgentItem = {\n kind: \"tool-calls\",\n id: `tools:${sourceId}`,\n toolCalls: [call],\n toolCallCount: 1,\n hasFailedToolCall: call.statusKind === \"failed\"\n };\n turn.agentItems.push(entry);\n}\n\nfunction refreshToolCallAgentItem(\n entry: Extract<WorkspaceAgentSessionDetailAgentItem, { kind: \"tool-calls\" }>\n): void {\n entry.toolCallCount = entry.toolCalls.length;\n entry.hasFailedToolCall = entry.toolCalls.some(\n (existing) => existing.statusKind === \"failed\"\n );\n const summary = summarizeToolCallGroup(entry.toolCalls);\n if (summary) {\n entry.summary = summary;\n } else {\n delete entry.summary;\n }\n}\n\nfunction regroupAgentItems(\n items: readonly WorkspaceAgentSessionDetailAgentItem[]\n): WorkspaceAgentSessionDetailAgentItem[] {\n const regrouped: WorkspaceAgentSessionDetailAgentItem[] = [];\n let pending: Array<\n Extract<WorkspaceAgentSessionDetailAgentItem, { kind: \"tool-calls\" }>\n > = [];\n\n const flushPending = () => {\n if (pending.length === 0) {\n return;\n }\n const groupedCalls = pending.flatMap((item) => item.toolCalls);\n if (groupedCalls.length >= 2) {\n regrouped.push({\n kind: \"tool-calls\",\n id: pending.map((item) => item.id).join(\"+\"),\n toolCalls: groupedCalls,\n toolCallCount: groupedCalls.length,\n hasFailedToolCall: groupedCalls.some(\n (call) => call.statusKind === \"failed\"\n ),\n summary: summarizeToolCallGroup(groupedCalls),\n groupEntries:\n pending.flatMap<WorkspaceAgentSessionDetailToolGroupEntry>((item) =>\n item.toolCalls.map((call) => ({ kind: \"tool-call\", call }))\n )\n });\n } else {\n regrouped.push(...pending);\n }\n pending = [];\n };\n\n for (const item of items) {\n if (item.kind === \"tool-calls\" && isGroupableToolCallItem(item)) {\n pending.push(item);\n continue;\n }\n flushPending();\n regrouped.push(item);\n }\n\n flushPending();\n return regrouped;\n}\n\nfunction isGroupableToolCallItem(\n item: Extract<WorkspaceAgentSessionDetailAgentItem, { kind: \"tool-calls\" }>\n): boolean {\n return (\n item.toolCalls.length === 1 &&\n item.toolCalls.every((call) => isGroupableToolCall(call))\n );\n}\n\nfunction mergeToolCallDetail(\n previous: WorkspaceAgentSessionDetailToolCall,\n next: WorkspaceAgentSessionDetailToolCall\n): WorkspaceAgentSessionDetailToolCall {\n return withSourceTimelineItems(\n {\n ...next,\n name: next.name || previous.name,\n toolName: next.toolName || previous.toolName,\n callType: next.callType || previous.callType,\n summary: next.summary || previous.summary,\n payload: next.payload ?? previous.payload\n },\n mergeSourceTimelineItems(\n previous.sourceTimelineItems,\n next.sourceTimelineItems\n )\n );\n}\n\nfunction mergeBackgroundTerminalContinuations(\n turn: WorkspaceAgentSessionDetailTurn\n): void {\n if (turn.agentItems.length === 0 || turn.toolCalls.length === 0) {\n return;\n }\n\n const removedCallIDs = new Set<string>();\n const singleCallItems = turn.agentItems.filter(\n (\n item\n ): item is Extract<\n WorkspaceAgentSessionDetailAgentItem,\n { kind: \"tool-calls\" }\n > => item.kind === \"tool-calls\" && item.toolCalls.length === 1\n );\n const turnToolIndexByID = new Map(\n turn.toolCalls.map((call, index) => [call.id, index])\n );\n\n for (let index = 0; index < singleCallItems.length - 1; index += 1) {\n const item = singleCallItems[index];\n const primaryCall = item?.toolCalls[0];\n if (!item || !primaryCall) {\n continue;\n }\n const terminalSessionID = backgroundTerminalSessionID(primaryCall);\n if (!terminalSessionID) {\n continue;\n }\n\n const continuationCall = singleCallItems[index + 1]?.toolCalls[0];\n if (\n !continuationCall ||\n !isBackgroundTerminalContinuation(continuationCall, terminalSessionID)\n ) {\n continue;\n }\n\n const mergedCall = mergeBackgroundTerminalCall(\n primaryCall,\n continuationCall\n );\n item.toolCalls[0] = mergedCall;\n const turnToolIndex = turnToolIndexByID.get(primaryCall.id);\n if (turnToolIndex !== undefined) {\n turn.toolCalls[turnToolIndex] = mergedCall;\n }\n refreshToolCallAgentItem(item);\n removedCallIDs.add(continuationCall.id);\n index += 1;\n }\n\n if (removedCallIDs.size === 0) {\n return;\n }\n\n turn.agentItems = turn.agentItems.filter(\n (item) =>\n item.kind !== \"tool-calls\" ||\n item.toolCalls.every((call) => !removedCallIDs.has(call.id))\n );\n turn.toolCalls = turn.toolCalls.filter(\n (call) => !removedCallIDs.has(call.id)\n );\n turn.toolCallCount = turn.toolCalls.length;\n turn.hasFailedToolCall = turn.toolCalls.some(\n (existing) => existing.statusKind === \"failed\"\n );\n}\n\nfunction mergeBackgroundTerminalCall(\n primary: WorkspaceAgentSessionDetailToolCall,\n continuation: WorkspaceAgentSessionDetailToolCall\n): WorkspaceAgentSessionDetailToolCall {\n const continuationOutput = normalizedPayload(\n continuation.payload\n ?.output as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const mergedPayload = primary.payload ? { ...primary.payload } : {};\n if (continuationOutput) {\n mergedPayload.output = continuationOutput;\n }\n return {\n ...primary,\n status: continuation.status || primary.status,\n statusKind: continuation.statusKind || primary.statusKind,\n payload:\n Object.keys(mergedPayload).length > 0 ? mergedPayload : primary.payload,\n occurredAtUnixMs: continuation.occurredAtUnixMs ?? primary.occurredAtUnixMs\n };\n}\n\nfunction nestDelegatedToolCallsAcrossTurns(\n turns: readonly WorkspaceAgentSessionDetailTurn[]\n): void {\n if (turns.length === 0) {\n return;\n }\n const parentCalls = new Map<string, WorkspaceAgentSessionDetailToolCall>();\n const callTurnByID = new Map<string, WorkspaceAgentSessionDetailTurn>();\n for (const turn of turns) {\n for (const call of turn.toolCalls) {\n parentCalls.set(call.id, call);\n parentCalls.set(call.id.replace(/^call:/, \"\"), call);\n callTurnByID.set(call.id, turn);\n callTurnByID.set(call.id.replace(/^call:/, \"\"), turn);\n }\n }\n const childCallsByParent = new Map<\n string,\n WorkspaceAgentSessionDetailToolCall[]\n >();\n for (const turn of turns) {\n for (const call of turn.toolCalls) {\n const parentToolUseId = parentToolUseIdFromCall(call);\n if (!parentToolUseId) {\n continue;\n }\n const parentCall = parentCalls.get(parentToolUseId);\n if (!parentCall || !isTaskLikeToolCall(parentCall)) {\n continue;\n }\n const children = childCallsByParent.get(parentToolUseId) ?? [];\n children.push(call);\n childCallsByParent.set(parentToolUseId, children);\n }\n }\n if (childCallsByParent.size === 0) {\n return;\n }\n const removeIDsByTurn = new Map<\n WorkspaceAgentSessionDetailTurn,\n Set<string>\n >();\n for (const [parentID, childCalls] of childCallsByParent.entries()) {\n const parentCall = parentCalls.get(parentID);\n if (!parentCall) {\n continue;\n }\n appendDelegatedToolSteps(parentCall, childCalls);\n for (const childCall of childCalls) {\n const childTurn = callTurnByID.get(childCall.id);\n if (!childTurn) {\n continue;\n }\n const removeIDs = removeIDsByTurn.get(childTurn) ?? new Set<string>();\n removeIDs.add(childCall.id);\n removeIDsByTurn.set(childTurn, removeIDs);\n }\n }\n for (const [turn, removeIDs] of removeIDsByTurn.entries()) {\n pruneTurnToolCalls(turn, removeIDs);\n }\n}\n\nfunction backgroundTerminalSessionID(\n call: WorkspaceAgentSessionDetailToolCall\n): string | null {\n const outputText = stringRecordValue(call.payload?.output, \"output\");\n if (!outputText) {\n return null;\n }\n const match = outputText.match(/Process running with session ID (\\d+)/i);\n return match?.[1] ?? null;\n}\n\nfunction isBackgroundTerminalContinuation(\n call: WorkspaceAgentSessionDetailToolCall,\n sessionID: string\n): boolean {\n const input = normalizedPayload(\n call.payload?.input as WorkspaceAgentActivityTimelineItem[\"payload\"]\n );\n const inputSessionID = firstPresentString(\n stringRecordValue(input, \"session_id\"),\n stringRecordValue(input, \"sessionId\")\n );\n if (inputSessionID !== sessionID) {\n return false;\n }\n const chars = firstPresentString(stringRecordValue(input, \"chars\")) ?? \"\";\n if (chars !== \"\") {\n return false;\n }\n return stringRecordValue(call.payload?.output, \"output\") !== null;\n}\n\nfunction isGroupableToolCall(\n call: WorkspaceAgentSessionDetailToolCall\n): boolean {\n if (\n call.callType === \"approval\" ||\n call.callType === \"interactive\" ||\n call.callType === \"subagent\"\n ) {\n return false;\n }\n switch (normalizeToolName(call.toolName)) {\n case \"askuserquestion\":\n case \"enterplanmode\":\n case \"exitplanmode\":\n case \"task\":\n case \"subagent\":\n case \"delegatetask\":\n return false;\n default:\n return true;\n }\n}\n\nfunction pruneTurnToolCalls(\n turn: WorkspaceAgentSessionDetailTurn,\n removeIDs: ReadonlySet<string>\n): void {\n if (removeIDs.size === 0) {\n return;\n }\n turn.toolCalls = turn.toolCalls.filter((call) => !removeIDs.has(call.id));\n turn.toolCallCount = turn.toolCalls.length;\n turn.hasFailedToolCall = turn.toolCalls.some(\n (existing) => existing.statusKind === \"failed\"\n );\n turn.agentItems =\n turn.agentItems.flatMap<WorkspaceAgentSessionDetailAgentItem>((item) => {\n if (item.kind !== \"tool-calls\") {\n return [item];\n }\n const toolCalls = item.toolCalls.filter(\n (call) => !removeIDs.has(call.id)\n );\n if (toolCalls.length === 0) {\n return [];\n }\n const nextItem = {\n ...item,\n toolCalls\n };\n refreshToolCallAgentItem(nextItem);\n return [nextItem];\n });\n}\n\nfunction appendDelegatedToolSteps(\n parentCall: WorkspaceAgentSessionDetailToolCall,\n childCalls: readonly WorkspaceAgentSessionDetailToolCall[]\n): void {\n const nextPayload = parentCall.payload ? { ...parentCall.payload } : {};\n const nextMetadata =\n normalizedPayload(\n nextPayload.metadata as WorkspaceAgentActivityTimelineItem[\"payload\"]\n ) ?? {};\n const existingSteps = Array.isArray(nextMetadata.steps)\n ? [...nextMetadata.steps]\n : [];\n const existingStepIDs = new Set(\n existingSteps\n .map((step) =>\n normalizedPayload(step as WorkspaceAgentActivityTimelineItem[\"payload\"])\n )\n .map(\n (step) =>\n stringRecordValue(step, \"toolUseId\") ?? stringRecordValue(step, \"id\")\n )\n .filter((value): value is string => Boolean(value))\n );\n for (const childCall of [...childCalls].sort(compareToolCallsAscending)) {\n const step = delegatedToolStepFromCall(childCall);\n const stepID =\n stringRecordValue(step, \"toolUseId\") ?? stringRecordValue(step, \"id\");\n if (stepID && existingStepIDs.has(stepID)) {\n continue;\n }\n if (stepID) {\n existingStepIDs.add(stepID);\n }\n existingSteps.push(step);\n }\n nextMetadata.steps = existingSteps;\n nextPayload.metadata = nextMetadata;\n parentCall.payload = nextPayload;\n}\n"],"mappings":"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","names":["stringValue","value","normalizeToolName","objectValue","stringValue","arrayValue","arrayValue","stringValue","objectValue","objectValue","arrayValue","objectValue","arrayValue","stringValue","arrayValue","objectValue","stringValue","firstPresentString","AGENT_ACTIVITY_KINDS","firstPresentString","stringRecordValue","recordValue","stringRecordValue","normalizeToolToken","firstPresentString","looksLikeOpaqueToolCallID","recordValue","firstPresentString","stringRecordValue","normalizeToolNameToken","stringRecordValue","recordValue","firstPresentString","normalizeToolToken","looksLikeOpaqueToolCallID","normalizeToolNameToken","normalizedPayload","firstPresentString","stringRecordValue","normalizeToolName","mergeSourceTimelineItems","summarizeToolCallGroup","summarizeCallTarget","normalizedPayload","content","firstPresentString","stringRecordValue","message","normalizeToolName","firstPresentString","stringRecordValue","normalizedPayload","compareTimelineItemsAscending","itemId","turnId","turn","firstPresentString","stringRecordValue","normalizedPayload","statusKind","entry","summarizeToolCallGroup","isGroupableToolCall","mergeSourceTimelineItems","normalizeToolName"]}