@agent-native/core 0.95.1 → 0.96.0

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 (224) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +25 -0
  3. package/corpus/core/package.json +3 -1
  4. package/corpus/core/src/a2a/client.ts +11 -1
  5. package/corpus/core/src/agent/production-agent.ts +87 -27
  6. package/corpus/core/src/agent/thread-data-builder.ts +7 -5
  7. package/corpus/core/src/chat-threads/store.ts +20 -1
  8. package/corpus/core/src/cli/code-agent-executor.ts +1 -0
  9. package/corpus/core/src/cli/code-agent-runs.ts +14 -0
  10. package/corpus/core/src/client/AgentPanel.tsx +32 -25
  11. package/corpus/core/src/client/AssistantChat.tsx +36 -20
  12. package/corpus/core/src/client/MultiTabAssistantChat.tsx +141 -90
  13. package/corpus/core/src/client/chat/ChatHistoryList.tsx +404 -0
  14. package/corpus/core/src/client/chat/index.ts +6 -0
  15. package/corpus/core/src/client/chat/tool-call-display.tsx +37 -3
  16. package/corpus/core/src/client/code-agent-chat-adapter.ts +72 -4
  17. package/corpus/core/src/client/composer/RealtimeVoiceMode.tsx +52 -11
  18. package/corpus/core/src/client/composer/TiptapComposer.tsx +157 -20
  19. package/corpus/core/src/client/composer/VoiceButton.tsx +28 -0
  20. package/corpus/core/src/client/composer/useRealtimeVoiceMode.tsx +5 -0
  21. package/corpus/core/src/client/conversation/code-agent-transcript.ts +4 -5
  22. package/corpus/core/src/client/guided-questions.tsx +2 -1
  23. package/corpus/core/src/client/index.ts +11 -0
  24. package/corpus/core/src/client/use-chat-threads.ts +10 -1
  25. package/corpus/core/src/client/voice-provider-status.ts +44 -0
  26. package/corpus/core/src/code-agents/transcript-normalizer.ts +76 -0
  27. package/corpus/core/src/deploy/build.ts +12 -11
  28. package/corpus/core/src/integrations/a2a-continuation-processor.ts +35 -5
  29. package/corpus/core/src/integrations/adapters/slack.ts +74 -21
  30. package/corpus/core/src/integrations/webhook-handler.ts +14 -0
  31. package/corpus/core/src/localization/default-messages.ts +6 -0
  32. package/corpus/core/src/observability/hosted-model-experiment.ts +118 -0
  33. package/corpus/core/src/observability/routes.ts +17 -0
  34. package/corpus/core/src/observability/store.ts +4 -1
  35. package/corpus/core/src/observability/traces.ts +41 -2
  36. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +19 -1
  37. package/corpus/core/src/scripts/call-agent.ts +53 -3
  38. package/corpus/core/src/scripts/chat/search-chats.ts +11 -8
  39. package/corpus/core/src/secrets/register-framework-secrets.ts +1 -1
  40. package/corpus/core/src/server/agent-chat-plugin.ts +41 -6
  41. package/corpus/core/src/server/core-routes-plugin.ts +15 -0
  42. package/corpus/core/src/server/realtime-voice.ts +71 -24
  43. package/corpus/core/src/server/voice-providers-status.ts +4 -3
  44. package/corpus/core/src/shared/cache-control.ts +2 -8
  45. package/corpus/core/src/styles/agent-native.css +1 -0
  46. package/corpus/core/src/styles/chat-history-list.css +313 -0
  47. package/corpus/core/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  48. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
  49. package/corpus/core/src/vite/client.ts +1 -0
  50. package/corpus/templates/analytics/AGENTS.md +7 -0
  51. package/corpus/templates/analytics/actions/bigquery.ts +26 -2
  52. package/corpus/templates/analytics/actions/data-source-status.ts +18 -0
  53. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -4
  54. package/corpus/templates/analytics/app/global.css +10 -0
  55. package/corpus/templates/analytics/app/pages/Ask.tsx +25 -2
  56. package/corpus/templates/analytics/changelog/2026-07-10-analytics-answers-simple-time-bounded-metrics-without-unnece.md +6 -0
  57. package/corpus/templates/analytics/changelog/2026-07-10-analytics-chat-reliably-uses-connected-data-sources-across-s.md +6 -0
  58. package/corpus/templates/analytics/changelog/2026-07-10-chat-threads-now-stay-clear-of-top-actions-and-fade-smoothly.md +6 -0
  59. package/corpus/templates/analytics/changelog/2026-07-10-context-chips-can-now-be-selected-and-removed-one-at-a-time-.md +6 -0
  60. package/corpus/templates/analytics/changelog/2026-07-10-the-ask-composer-no-longer-carries-dashboard-or-panel-contex.md +6 -0
  61. package/corpus/templates/analytics/changelog/2026-07-10-the-ask-section-stays-highlighted-while-its-chat-history-is-.md +6 -0
  62. package/corpus/templates/analytics/server/lib/bigquery.ts +90 -14
  63. package/corpus/templates/analytics/server/plugins/agent-chat.ts +82 -7
  64. package/dist/a2a/client.d.ts +7 -0
  65. package/dist/a2a/client.d.ts.map +1 -1
  66. package/dist/a2a/client.js +2 -1
  67. package/dist/a2a/client.js.map +1 -1
  68. package/dist/agent/production-agent.d.ts +6 -0
  69. package/dist/agent/production-agent.d.ts.map +1 -1
  70. package/dist/agent/production-agent.js +63 -26
  71. package/dist/agent/production-agent.js.map +1 -1
  72. package/dist/agent/thread-data-builder.d.ts +1 -0
  73. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  74. package/dist/agent/thread-data-builder.js +6 -5
  75. package/dist/agent/thread-data-builder.js.map +1 -1
  76. package/dist/chat-threads/store.d.ts +10 -0
  77. package/dist/chat-threads/store.d.ts.map +1 -1
  78. package/dist/chat-threads/store.js +6 -0
  79. package/dist/chat-threads/store.js.map +1 -1
  80. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  81. package/dist/cli/code-agent-executor.js +1 -0
  82. package/dist/cli/code-agent-executor.js.map +1 -1
  83. package/dist/cli/code-agent-runs.d.ts +12 -0
  84. package/dist/cli/code-agent-runs.d.ts.map +1 -1
  85. package/dist/cli/code-agent-runs.js +1 -0
  86. package/dist/cli/code-agent-runs.js.map +1 -1
  87. package/dist/client/AgentPanel.d.ts.map +1 -1
  88. package/dist/client/AgentPanel.js +3 -3
  89. package/dist/client/AgentPanel.js.map +1 -1
  90. package/dist/client/AssistantChat.d.ts +11 -0
  91. package/dist/client/AssistantChat.d.ts.map +1 -1
  92. package/dist/client/AssistantChat.js +7 -4
  93. package/dist/client/AssistantChat.js.map +1 -1
  94. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  95. package/dist/client/MultiTabAssistantChat.js +83 -10
  96. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  97. package/dist/client/chat/ChatHistoryList.d.ts +88 -0
  98. package/dist/client/chat/ChatHistoryList.d.ts.map +1 -0
  99. package/dist/client/chat/ChatHistoryList.js +83 -0
  100. package/dist/client/chat/ChatHistoryList.js.map +1 -0
  101. package/dist/client/chat/index.d.ts +1 -0
  102. package/dist/client/chat/index.d.ts.map +1 -1
  103. package/dist/client/chat/index.js +1 -0
  104. package/dist/client/chat/index.js.map +1 -1
  105. package/dist/client/chat/tool-call-display.d.ts +13 -1
  106. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  107. package/dist/client/chat/tool-call-display.js +10 -2
  108. package/dist/client/chat/tool-call-display.js.map +1 -1
  109. package/dist/client/code-agent-chat-adapter.d.ts +17 -1
  110. package/dist/client/code-agent-chat-adapter.d.ts.map +1 -1
  111. package/dist/client/code-agent-chat-adapter.js +47 -3
  112. package/dist/client/code-agent-chat-adapter.js.map +1 -1
  113. package/dist/client/composer/RealtimeVoiceMode.d.ts +11 -1
  114. package/dist/client/composer/RealtimeVoiceMode.d.ts.map +1 -1
  115. package/dist/client/composer/RealtimeVoiceMode.js +5 -3
  116. package/dist/client/composer/RealtimeVoiceMode.js.map +1 -1
  117. package/dist/client/composer/TiptapComposer.d.ts +25 -2
  118. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  119. package/dist/client/composer/TiptapComposer.js +96 -5
  120. package/dist/client/composer/TiptapComposer.js.map +1 -1
  121. package/dist/client/composer/VoiceButton.d.ts.map +1 -1
  122. package/dist/client/composer/VoiceButton.js +21 -1
  123. package/dist/client/composer/VoiceButton.js.map +1 -1
  124. package/dist/client/composer/useRealtimeVoiceMode.d.ts.map +1 -1
  125. package/dist/client/composer/useRealtimeVoiceMode.js +5 -0
  126. package/dist/client/composer/useRealtimeVoiceMode.js.map +1 -1
  127. package/dist/client/conversation/code-agent-transcript.d.ts +2 -0
  128. package/dist/client/conversation/code-agent-transcript.d.ts.map +1 -1
  129. package/dist/client/conversation/code-agent-transcript.js +3 -5
  130. package/dist/client/conversation/code-agent-transcript.js.map +1 -1
  131. package/dist/client/guided-questions.d.ts.map +1 -1
  132. package/dist/client/guided-questions.js +2 -1
  133. package/dist/client/guided-questions.js.map +1 -1
  134. package/dist/client/index.d.ts +3 -1
  135. package/dist/client/index.d.ts.map +1 -1
  136. package/dist/client/index.js +3 -1
  137. package/dist/client/index.js.map +1 -1
  138. package/dist/client/use-chat-threads.d.ts.map +1 -1
  139. package/dist/client/use-chat-threads.js +9 -1
  140. package/dist/client/use-chat-threads.js.map +1 -1
  141. package/dist/client/voice-provider-status.d.ts +10 -0
  142. package/dist/client/voice-provider-status.d.ts.map +1 -0
  143. package/dist/client/voice-provider-status.js +32 -0
  144. package/dist/client/voice-provider-status.js.map +1 -0
  145. package/dist/code-agents/transcript-normalizer.d.ts +29 -0
  146. package/dist/code-agents/transcript-normalizer.d.ts.map +1 -1
  147. package/dist/code-agents/transcript-normalizer.js +55 -0
  148. package/dist/code-agents/transcript-normalizer.js.map +1 -1
  149. package/dist/collab/routes.d.ts +1 -1
  150. package/dist/collab/struct-routes.d.ts +1 -1
  151. package/dist/deploy/build.d.ts.map +1 -1
  152. package/dist/deploy/build.js +13 -11
  153. package/dist/deploy/build.js.map +1 -1
  154. package/dist/integrations/a2a-continuation-processor.d.ts.map +1 -1
  155. package/dist/integrations/a2a-continuation-processor.js +25 -5
  156. package/dist/integrations/a2a-continuation-processor.js.map +1 -1
  157. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  158. package/dist/integrations/adapters/slack.js +55 -21
  159. package/dist/integrations/adapters/slack.js.map +1 -1
  160. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  161. package/dist/integrations/webhook-handler.js +11 -0
  162. package/dist/integrations/webhook-handler.js.map +1 -1
  163. package/dist/localization/default-messages.d.ts +5 -0
  164. package/dist/localization/default-messages.d.ts.map +1 -1
  165. package/dist/localization/default-messages.js +5 -0
  166. package/dist/localization/default-messages.js.map +1 -1
  167. package/dist/notifications/routes.d.ts +2 -2
  168. package/dist/observability/hosted-model-experiment.d.ts +39 -0
  169. package/dist/observability/hosted-model-experiment.d.ts.map +1 -0
  170. package/dist/observability/hosted-model-experiment.js +90 -0
  171. package/dist/observability/hosted-model-experiment.js.map +1 -0
  172. package/dist/observability/routes.d.ts +1 -1
  173. package/dist/observability/routes.d.ts.map +1 -1
  174. package/dist/observability/routes.js +16 -0
  175. package/dist/observability/routes.js.map +1 -1
  176. package/dist/observability/store.d.ts.map +1 -1
  177. package/dist/observability/store.js +4 -1
  178. package/dist/observability/store.js.map +1 -1
  179. package/dist/observability/traces.d.ts +6 -0
  180. package/dist/observability/traces.d.ts.map +1 -1
  181. package/dist/observability/traces.js +28 -2
  182. package/dist/observability/traces.js.map +1 -1
  183. package/dist/resources/handlers.d.ts +1 -1
  184. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  185. package/dist/scripts/agent-engines/list-agent-engines.js +19 -1
  186. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  187. package/dist/scripts/call-agent.d.ts.map +1 -1
  188. package/dist/scripts/call-agent.js +43 -3
  189. package/dist/scripts/call-agent.js.map +1 -1
  190. package/dist/scripts/chat/search-chats.d.ts +1 -1
  191. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  192. package/dist/scripts/chat/search-chats.js +11 -8
  193. package/dist/scripts/chat/search-chats.js.map +1 -1
  194. package/dist/secrets/register-framework-secrets.js +1 -1
  195. package/dist/secrets/register-framework-secrets.js.map +1 -1
  196. package/dist/server/agent-chat-plugin.d.ts +11 -0
  197. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  198. package/dist/server/agent-chat-plugin.js +27 -6
  199. package/dist/server/agent-chat-plugin.js.map +1 -1
  200. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  201. package/dist/server/core-routes-plugin.d.ts +3 -0
  202. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  203. package/dist/server/core-routes-plugin.js +13 -0
  204. package/dist/server/core-routes-plugin.js.map +1 -1
  205. package/dist/server/realtime-voice.d.ts.map +1 -1
  206. package/dist/server/realtime-voice.js +55 -21
  207. package/dist/server/realtime-voice.js.map +1 -1
  208. package/dist/server/voice-providers-status.d.ts.map +1 -1
  209. package/dist/server/voice-providers-status.js +2 -3
  210. package/dist/server/voice-providers-status.js.map +1 -1
  211. package/dist/shared/cache-control.d.ts +4 -6
  212. package/dist/shared/cache-control.d.ts.map +1 -1
  213. package/dist/shared/cache-control.js +2 -7
  214. package/dist/shared/cache-control.js.map +1 -1
  215. package/dist/styles/agent-native.css +1 -0
  216. package/dist/styles/chat-history-list.css +313 -0
  217. package/dist/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  218. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
  219. package/dist/vite/client.d.ts.map +1 -1
  220. package/dist/vite/client.js +1 -0
  221. package/dist/vite/client.js.map +1 -1
  222. package/package.json +3 -1
  223. package/src/templates/workspace-core/.agents/skills/observability/SKILL.md +20 -0
  224. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +8 -4
@@ -1 +1 @@
1
- {"version":3,"file":"transcript-normalizer.js","sourceRoot":"","sources":["../../src/code-agents/transcript-normalizer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n normalizeActionChatUIConfig,\n type ActionChatUIConfig,\n} from \"../action-ui.js\";\nimport type { CodeAgentTranscriptEvent } from \"../cli/code-agent-runs.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\n\nexport type { CodeAgentTranscriptEvent } from \"../cli/code-agent-runs.js\";\n\nexport type NormalizedCodeAgentTranscriptItem =\n | NormalizedCodeAgentUserTurn\n | NormalizedCodeAgentAssistantTurn\n | NormalizedCodeAgentToolEvent\n | NormalizedCodeAgentStatusEvent\n | NormalizedCodeAgentThinkingEvent;\n\nexport interface NormalizedCodeAgentTranscript {\n items: NormalizedCodeAgentTranscriptItem[];\n rawEvents: CodeAgentTranscriptEvent[];\n hiddenEvents: CodeAgentTranscriptEvent[];\n}\n\nexport interface NormalizedCodeAgentTranscriptBase {\n id: string;\n createdAt: string;\n updatedAt: string;\n eventIds: string[];\n events: CodeAgentTranscriptEvent[];\n turnIndex: number;\n}\n\nexport interface NormalizedCodeAgentUserTurn extends NormalizedCodeAgentTranscriptBase {\n type: \"user\";\n role: \"user\";\n text: string;\n}\n\nexport interface NormalizedCodeAgentAssistantTurn extends NormalizedCodeAgentTranscriptBase {\n type: \"assistant\";\n role: \"assistant\";\n text: string;\n source: \"system\" | \"runner-stdout\";\n suppressedDuplicateEventIds?: string[];\n}\n\nexport interface NormalizedCodeAgentToolEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"tool\";\n tool?: string;\n label: string;\n state: \"activity\" | \"running\" | \"completed\";\n input?: unknown;\n result?: unknown;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n activities: string[];\n startedAt?: string;\n completedAt?: string;\n /**\n * Structured metadata from the tool execution side-channel. Present on\n * bash/edit/write/read tool events when the executor is new enough to emit\n * it. Absent on old transcript events — UI must handle both cases.\n */\n structuredMeta?: Record<string, unknown>;\n}\n\nexport interface NormalizedCodeAgentStatusEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"status\";\n level: \"info\" | \"warning\" | \"error\" | \"approval\";\n text: string;\n statusKind: CodeAgentTranscriptEvent[\"kind\"];\n status?: string;\n phase?: string;\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Accumulated reasoning/thinking text emitted during a model's extended\n * thinking phase. Rendered as a collapsed-by-default \"Thinking…\" cell.\n */\nexport interface NormalizedCodeAgentThinkingEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"thinking\";\n text: string;\n}\n\nexport function normalizeCodeAgentTranscript(\n events: readonly CodeAgentTranscriptEvent[],\n): NormalizedCodeAgentTranscript {\n const items: NormalizedCodeAgentTranscriptItem[] = [];\n const hiddenEvents: CodeAgentTranscriptEvent[] = [];\n const eventOrder = new Map(events.map((event, index) => [event.id, index]));\n let turnIndex = -1;\n\n for (const event of events) {\n const currentTurnIndex = Math.max(turnIndex, 0);\n if (isAgentChatClearEvent(event)) {\n clearNormalizedAgentDraftItems(items, currentTurnIndex);\n hiddenEvents.push(event);\n continue;\n }\n\n if (event.kind === \"user\") {\n turnIndex = turnIndex < 0 ? (items.length === 0 ? 0 : 1) : turnIndex + 1;\n items.push(createUserTurn(event, turnIndex));\n continue;\n }\n\n const assistantSource = assistantTextSource(event);\n if (assistantSource) {\n const text = assistantTextForEvent(event, assistantSource);\n if (!text) {\n hiddenEvents.push(event);\n continue;\n }\n const previous = items.at(-1);\n if (\n previous?.type === \"assistant\" &&\n previous.source === assistantSource &&\n previous.turnIndex === currentTurnIndex\n ) {\n appendAssistantChunk(previous, event, text);\n } else {\n items.push(\n createAssistantTurn(event, assistantSource, currentTurnIndex, text),\n );\n }\n continue;\n }\n\n if (isThinkingEvent(event)) {\n appendThinkingChunk(items, event, currentTurnIndex);\n continue;\n }\n\n const toolType = toolEventType(event);\n if (toolType) {\n appendToolEvent(items, event, toolType, currentTurnIndex);\n continue;\n }\n\n if (shouldShowStatusEvent(event)) {\n items.push(createStatusEvent(event, currentTurnIndex));\n } else {\n hiddenEvents.push(event);\n }\n }\n\n const dedupedItems = suppressDuplicateFinalAssistantText(items, hiddenEvents);\n hiddenEvents.sort(\n (a, b) => (eventOrder.get(a.id) ?? 0) - (eventOrder.get(b.id) ?? 0),\n );\n\n return {\n items: dedupedItems,\n rawEvents: [...events],\n hiddenEvents,\n };\n}\n\nfunction createUserTurn(\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): NormalizedCodeAgentUserTurn {\n return {\n type: \"user\",\n role: \"user\",\n id: event.id,\n text: event.message,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction createAssistantTurn(\n event: CodeAgentTranscriptEvent,\n source: NormalizedCodeAgentAssistantTurn[\"source\"],\n turnIndex: number,\n text: string,\n): NormalizedCodeAgentAssistantTurn {\n return {\n type: \"assistant\",\n role: \"assistant\",\n id: event.id,\n text,\n source,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction appendAssistantChunk(\n item: NormalizedCodeAgentAssistantTurn,\n event: CodeAgentTranscriptEvent,\n text: string,\n): void {\n item.text = shouldAppendAssistantChunkExactly(item, event)\n ? `${item.text}${text}`\n : joinAssistantChunks(item.text, text);\n item.updatedAt = event.createdAt;\n item.eventIds.push(event.id);\n item.events.push(event);\n}\n\nfunction isThinkingEvent(event: CodeAgentTranscriptEvent): boolean {\n return (\n event.kind === \"status\" &&\n stringMetadata(event.metadata, \"type\") === \"thinking\"\n );\n}\n\nfunction appendThinkingChunk(\n items: NormalizedCodeAgentTranscriptItem[],\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): void {\n const previous = items.at(-1);\n if (previous?.type === \"thinking\" && previous.turnIndex === turnIndex) {\n // Accumulate consecutive thinking chunks into one cell.\n previous.text = `${previous.text}${event.message}`;\n previous.updatedAt = event.createdAt;\n previous.eventIds.push(event.id);\n previous.events.push(event);\n return;\n }\n const thinkingItem: NormalizedCodeAgentThinkingEvent = {\n type: \"thinking\",\n id: event.id,\n text: event.message,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n items.push(thinkingItem);\n}\n\nfunction createStatusEvent(\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): NormalizedCodeAgentStatusEvent {\n const metadata = event.metadata;\n return {\n type: \"status\",\n id: event.id,\n text: event.message,\n level: statusEventLevel(event),\n statusKind: event.kind,\n status: stringMetadata(metadata, \"status\"),\n phase: stringMetadata(metadata, \"phase\"),\n metadata,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction appendToolEvent(\n items: NormalizedCodeAgentTranscriptItem[],\n event: CodeAgentTranscriptEvent,\n toolType: \"activity\" | \"tool_done\" | \"tool_start\",\n turnIndex: number,\n): void {\n const tool = stringMetadata(event.metadata, \"tool\");\n const item = findOpenToolEvent(items, tool, turnIndex);\n\n if (!item) {\n items.push(createToolEvent(event, toolType, turnIndex));\n return;\n }\n\n item.updatedAt = event.createdAt;\n item.eventIds.push(event.id);\n item.events.push(event);\n\n if (toolType === \"activity\") {\n item.activities.push(event.message);\n if (item.state === \"activity\") item.label = event.message;\n return;\n }\n\n if (toolType === \"tool_start\") {\n const wasActivity = item.state === \"activity\";\n item.state = \"running\";\n item.startedAt = item.startedAt ?? event.createdAt;\n if (hasMetadataKey(event.metadata, \"input\")) {\n item.input = event.metadata?.input;\n }\n if (wasActivity || item.label === item.activities.at(-1)) {\n item.label = event.message;\n }\n const startMeta = structuredMetadata(event.metadata);\n if (startMeta) item.structuredMeta = startMeta;\n return;\n }\n\n item.state = \"completed\";\n item.completedAt = event.createdAt;\n if (hasMetadataKey(event.metadata, \"result\")) {\n item.result = event.metadata?.result;\n }\n const mcpApp = mcpAppMetadata(event.metadata);\n if (mcpApp) item.mcpApp = mcpApp;\n const chatUI = chatUIMetadata(event.metadata);\n if (chatUI) item.chatUI = chatUI;\n const doneMeta = structuredMetadata(event.metadata);\n if (doneMeta) item.structuredMeta = doneMeta;\n}\n\nfunction createToolEvent(\n event: CodeAgentTranscriptEvent,\n toolType: \"activity\" | \"tool_done\" | \"tool_start\",\n turnIndex: number,\n): NormalizedCodeAgentToolEvent {\n const metadata = event.metadata;\n const state =\n toolType === \"tool_done\"\n ? \"completed\"\n : toolType === \"tool_start\"\n ? \"running\"\n : \"activity\";\n return {\n type: \"tool\",\n id: event.id,\n tool: stringMetadata(metadata, \"tool\"),\n label: event.message,\n state,\n input: hasMetadataKey(metadata, \"input\") ? metadata?.input : undefined,\n result: hasMetadataKey(metadata, \"result\") ? metadata?.result : undefined,\n mcpApp: mcpAppMetadata(metadata),\n chatUI: chatUIMetadata(metadata),\n activities: toolType === \"activity\" ? [event.message] : [],\n startedAt: toolType === \"tool_start\" ? event.createdAt : undefined,\n completedAt: toolType === \"tool_done\" ? event.createdAt : undefined,\n structuredMeta: structuredMetadata(metadata),\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction findOpenToolEvent(\n items: readonly NormalizedCodeAgentTranscriptItem[],\n tool: string | undefined,\n turnIndex: number,\n): NormalizedCodeAgentToolEvent | null {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (item.type !== \"tool\") continue;\n if (item.turnIndex !== turnIndex) continue;\n if (item.state === \"completed\") continue;\n if (tool && item.tool !== tool) continue;\n if (!tool && item.tool) continue;\n return item;\n }\n return null;\n}\n\nfunction isAgentChatClearEvent(event: CodeAgentTranscriptEvent): boolean {\n return stringMetadata(event.metadata, \"agentChatEventType\") === \"clear\";\n}\n\nfunction clearNormalizedAgentDraftItems(\n items: NormalizedCodeAgentTranscriptItem[],\n turnIndex: number,\n): void {\n for (let index = items.length - 1; index >= 0; index--) {\n const item = items[index];\n if (!item || item.turnIndex !== turnIndex) continue;\n if (\n item.type === \"assistant\" ||\n item.type === \"thinking\" ||\n item.type === \"status\"\n ) {\n items.splice(index, 1);\n continue;\n }\n if (item.type === \"tool\" && item.state !== \"completed\") {\n items.splice(index, 1);\n }\n }\n}\n\nfunction suppressDuplicateFinalAssistantText(\n items: readonly NormalizedCodeAgentTranscriptItem[],\n hiddenEvents: CodeAgentTranscriptEvent[],\n): NormalizedCodeAgentTranscriptItem[] {\n const result: NormalizedCodeAgentTranscriptItem[] = [];\n\n for (const item of items) {\n if (item.type !== \"assistant\" || item.source !== \"system\") {\n result.push(item);\n continue;\n }\n\n const stdoutItems = result.filter(\n (candidate): candidate is NormalizedCodeAgentAssistantTurn =>\n candidate.type === \"assistant\" &&\n candidate.source === \"runner-stdout\" &&\n candidate.turnIndex === item.turnIndex,\n );\n if (\n stdoutItems.length === 0 ||\n !isSameAssistantText(\n stdoutItems.map((candidate) => candidate.text).join(\" \"),\n item.text,\n )\n ) {\n result.push(item);\n continue;\n }\n\n hiddenEvents.push(...item.events);\n const target =\n stdoutItems.length === 1 ? stdoutItems[0] : stdoutItems.at(-1);\n if (!target) continue;\n if (stdoutItems.length === 1) {\n target.text = item.text;\n target.updatedAt = item.updatedAt;\n }\n target.eventIds.push(...item.eventIds);\n target.events.push(...item.events);\n target.suppressedDuplicateEventIds = [\n ...(target.suppressedDuplicateEventIds ?? []),\n ...item.eventIds,\n ];\n }\n\n return result;\n}\n\nfunction shouldShowStatusEvent(event: CodeAgentTranscriptEvent): boolean {\n if (event.kind === \"artifact\" || event.kind === \"note\") return true;\n if (event.kind !== \"status\") return false;\n // Thinking events are handled separately by appendThinkingChunk; never\n // render them again as plain status entries.\n if (isThinkingEvent(event)) return false;\n if (isLowSignalLifecycleEvent(event)) return false;\n return true;\n}\n\nfunction isLowSignalLifecycleEvent(event: CodeAgentTranscriptEvent): boolean {\n const metadata = event.metadata;\n const type = stringMetadata(metadata, \"type\");\n if (type === \"mcp-tools-connected\") return true;\n if (statusEventLevel(event) !== \"info\") return false;\n\n const status = stringMetadata(metadata, \"status\");\n const phase = stringMetadata(metadata, \"phase\");\n if (status === \"queued\" || status === \"running\" || status === \"completed\") {\n return true;\n }\n if (\n phase === \"queued\" ||\n phase === \"starting\" ||\n phase === \"executing\" ||\n phase === \"follow-up\" ||\n phase === \"complete\"\n ) {\n return true;\n }\n\n return LOW_SIGNAL_STATUS_MESSAGES.some((pattern) =>\n pattern.test(event.message),\n );\n}\n\nconst LOW_SIGNAL_STATUS_MESSAGES = [\n /^Agent-Native Code run started\\.?$/i,\n /^Agent-Native Code run completed\\.?$/i,\n /^Agent-Native Code process exited\\.?$/i,\n /^Starting local Agent-Native Code execution\\.?$/i,\n /^Remote Agent-Native Code run queued\\.?$/i,\n /^Connected \\d+ MCP tools? for this run\\.?$/i,\n];\n\nfunction statusEventLevel(\n event: CodeAgentTranscriptEvent,\n): NormalizedCodeAgentStatusEvent[\"level\"] {\n const metadata = event.metadata;\n const status = stringMetadata(metadata, \"status\");\n const phase = stringMetadata(metadata, \"phase\");\n const source = stringMetadata(metadata, \"source\");\n const type = stringMetadata(metadata, \"type\");\n\n if (\n status === \"needs-approval\" ||\n Boolean(metadata?.pendingApproval) ||\n Boolean(metadata?.pendingApprovalId) ||\n Boolean(metadata?.approvalId) ||\n phase?.includes(\"approval\") ||\n /\\bapproval\\b/i.test(event.message)\n ) {\n return \"approval\";\n }\n\n if (\n event.kind === \"status\" &&\n (status === \"errored\" ||\n type === \"error\" ||\n type?.endsWith(\"-error\") ||\n Boolean(metadata?.failed) ||\n typeof metadata?.errorCode === \"string\" ||\n source === \"runner-stderr\")\n ) {\n return \"error\";\n }\n\n if (\n status === \"paused\" ||\n phase === \"missing-credentials\" ||\n phase === \"stopped\" ||\n /\\b(missing|stopped|unavailable|denied)\\b/i.test(event.message)\n ) {\n return \"warning\";\n }\n\n return \"info\";\n}\n\nfunction assistantTextSource(\n event: CodeAgentTranscriptEvent,\n): NormalizedCodeAgentAssistantTurn[\"source\"] | null {\n const source = stringMetadata(event.metadata, \"source\");\n const type = stringMetadata(event.metadata, \"type\");\n if (type === \"assistant_delta\") {\n return \"runner-stdout\";\n }\n if (event.kind === \"status\" && source === \"runner-stdout\") {\n return \"runner-stdout\";\n }\n if (event.kind === \"system\" || event.metadata?.role === \"assistant\") {\n return \"system\";\n }\n return null;\n}\n\nfunction shouldAppendAssistantChunkExactly(\n item: NormalizedCodeAgentAssistantTurn,\n event: CodeAgentTranscriptEvent,\n): boolean {\n return (\n item.source === \"runner-stdout\" &&\n (isAssistantDeltaEvent(event) || item.events.some(isAssistantDeltaEvent))\n );\n}\n\nfunction isAssistantDeltaEvent(event: CodeAgentTranscriptEvent): boolean {\n return stringMetadata(event.metadata, \"type\") === \"assistant_delta\";\n}\n\nfunction assistantTextForEvent(\n event: CodeAgentTranscriptEvent,\n source: NormalizedCodeAgentAssistantTurn[\"source\"],\n): string {\n if (source === \"runner-stdout\") {\n return stripRunnerDiagnostics(event.message, {\n trim: !isAssistantDeltaEvent(event),\n });\n }\n return event.message;\n}\n\nfunction stripRunnerDiagnostics(\n value: string,\n options: { trim?: boolean } = {},\n): string {\n const stripped = value\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.engineDetect, \"\")\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.builderEngine, \"\")\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.sessionStartedBanner, \"\");\n return options.trim === false ? stripped : stripped.trim();\n}\n\nconst RUNNER_DIAGNOSTIC_LINE_PATTERNS = {\n engineDetect: /^\\[engine-detect\\][^\\r\\n]*(?:\\r?\\n|$)/gm,\n builderEngine: /^\\[builder-engine\\]\\s*[←→][^\\r\\n]*(?:\\r?\\n|$)/gm,\n // Strip the \"Agent-Native Code session started.\" banner block that the CLI\n // prints to stdout at the start of every run. It is informational for\n // terminal users but clutters the chat transcript.\n sessionStartedBanner:\n /\\n?Agent-Native Code session started\\.[\\s\\S]*?Streaming output below\\. The transcript is saved with this run\\.\\n?/,\n};\n\nfunction toolEventType(\n event: CodeAgentTranscriptEvent,\n): \"activity\" | \"tool_done\" | \"tool_start\" | null {\n if (event.kind !== \"status\") return null;\n const type = stringMetadata(event.metadata, \"type\");\n if (type === \"activity\" || type === \"tool_done\" || type === \"tool_start\") {\n return type;\n }\n return null;\n}\n\nfunction joinAssistantChunks(previous: string, next: string): string {\n if (!previous) return next;\n if (!next) return previous;\n if (/\\s$/.test(previous) || /^\\s/.test(next)) return `${previous}${next}`;\n if (/^[.,!?;:)\\]}'\"`]/.test(next)) return `${previous}${next}`;\n if (/[([{'\"`]$/.test(previous)) return `${previous}${next}`;\n return `${previous} ${next}`;\n}\n\nfunction canonicalText(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isSameAssistantText(left: string, right: string): boolean {\n if (canonicalText(left) === canonicalText(right)) return true;\n return compactText(left) === compactText(right);\n}\n\nfunction compactText(value: string): string {\n return canonicalText(value).replace(/\\s+/g, \"\");\n}\n\nfunction stringMetadata(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction hasMetadataKey(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): boolean {\n return (\n Boolean(metadata) && Object.prototype.hasOwnProperty.call(metadata, key)\n );\n}\n\nfunction structuredMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n const value = metadata?.structuredMeta;\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as Record<string, unknown>;\n}\n\nfunction mcpAppMetadata(\n metadata: Record<string, unknown> | undefined,\n): AgentMcpAppPayload | undefined {\n const value = metadata?.mcpApp;\n if (!value || typeof value !== \"object\") return undefined;\n const candidate = value as Partial<AgentMcpAppPayload>;\n if (\n typeof candidate.serverId !== \"string\" ||\n typeof candidate.originalToolName !== \"string\" ||\n typeof candidate.resourceUri !== \"string\" ||\n !candidate.resourceUri.startsWith(\"ui://\")\n ) {\n return undefined;\n }\n return candidate as AgentMcpAppPayload;\n}\n\nfunction chatUIMetadata(\n metadata: Record<string, unknown> | undefined,\n): ActionChatUIConfig | undefined {\n return normalizeActionChatUIConfig(metadata?.chatUI);\n}\n"]}
1
+ {"version":3,"file":"transcript-normalizer.js","sourceRoot":"","sources":["../../src/code-agents/transcript-normalizer.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n normalizeActionChatUIConfig,\n type ActionChatUIConfig,\n} from \"../action-ui.js\";\nimport type { CodeAgentTranscriptEvent } from \"../cli/code-agent-runs.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\n\nexport type { CodeAgentTranscriptEvent } from \"../cli/code-agent-runs.js\";\n\nexport type NormalizedCodeAgentTranscriptItem =\n | NormalizedCodeAgentUserTurn\n | NormalizedCodeAgentAssistantTurn\n | NormalizedCodeAgentToolEvent\n | NormalizedCodeAgentStatusEvent\n | NormalizedCodeAgentThinkingEvent;\n\nexport interface NormalizedCodeAgentTranscript {\n items: NormalizedCodeAgentTranscriptItem[];\n rawEvents: CodeAgentTranscriptEvent[];\n hiddenEvents: CodeAgentTranscriptEvent[];\n}\n\nexport interface NormalizedCodeAgentTranscriptBase {\n id: string;\n createdAt: string;\n updatedAt: string;\n eventIds: string[];\n events: CodeAgentTranscriptEvent[];\n turnIndex: number;\n}\n\nexport interface NormalizedCodeAgentUserTurn extends NormalizedCodeAgentTranscriptBase {\n type: \"user\";\n role: \"user\";\n text: string;\n}\n\nexport interface NormalizedCodeAgentAssistantTurn extends NormalizedCodeAgentTranscriptBase {\n type: \"assistant\";\n role: \"assistant\";\n text: string;\n source: \"system\" | \"runner-stdout\";\n suppressedDuplicateEventIds?: string[];\n}\n\nexport interface NormalizedCodeAgentToolEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"tool\";\n tool?: string;\n label: string;\n state: \"activity\" | \"running\" | \"completed\";\n input?: unknown;\n result?: unknown;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n activities: string[];\n startedAt?: string;\n completedAt?: string;\n /**\n * Structured metadata from the tool execution side-channel. Present on\n * bash/edit/write/read tool events when the executor is new enough to emit\n * it. Absent on old transcript events — UI must handle both cases.\n */\n structuredMeta?: Record<string, unknown>;\n /**\n * Stable approval id extracted from the synthetic \"Approval required...\"\n * bash result (see `requestCodeAgentApproval` in `cli/code-agent-executor.ts`)\n * when this exact approval has not yet been resolved elsewhere in the\n * transcript (approved / denied / allowlisted / forbidden). Consumers attach\n * this as `approval: { approvalKey }` on the rendered tool-call content part\n * so the shared `ApprovalAffordance` can render inline. Absent once a later\n * transcript event records a resolution for this approval id.\n */\n pendingApprovalKey?: string;\n}\n\nexport interface NormalizedCodeAgentStatusEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"status\";\n level: \"info\" | \"warning\" | \"error\" | \"approval\";\n text: string;\n statusKind: CodeAgentTranscriptEvent[\"kind\"];\n status?: string;\n phase?: string;\n signal?: CodeAgentTranscriptEvent[\"signal\"];\n metadata?: Record<string, unknown>;\n}\n\n/**\n * Accumulated reasoning/thinking text emitted during a model's extended\n * thinking phase. Rendered as a collapsed-by-default \"Thinking…\" cell.\n */\nexport interface NormalizedCodeAgentThinkingEvent extends NormalizedCodeAgentTranscriptBase {\n type: \"thinking\";\n text: string;\n}\n\n/** Structured signal value stamped on the \"no LLM provider key\" status event. */\nexport const CREDENTIAL_GAP_SIGNAL: NonNullable<\n CodeAgentTranscriptEvent[\"signal\"]\n> = \"credential-gap\";\n\n/**\n * Shared \"credential gap\" detection for code-agent transcript events and the\n * normalized status items built from them. Prefers the structured `signal`\n * field the executor stamps on the event (see `code-agent-executor.ts`); only\n * falls back to matching the legacy hint text for transcripts persisted\n * before the structured signal existed. Accepts either a raw\n * `CodeAgentTranscriptEvent` (`message`) or a `NormalizedCodeAgentStatusEvent`\n * (`text`), and any of the other UI-facing transcript event shapes that carry\n * the same field names, so every consumer can share one implementation\n * instead of re-implementing the regex.\n */\nexport function isCredentialGapCodeAgentEvent(event: {\n signal?: string;\n text?: string;\n message?: string;\n}): boolean {\n if (event.signal === CREDENTIAL_GAP_SIGNAL) return true;\n return isLegacyCredentialGapHintText(event.text ?? event.message ?? \"\");\n}\n\nfunction isLegacyCredentialGapHintText(value: string): boolean {\n return /No LLM provider key was found|Missing credentials/i.test(value);\n}\n\nexport function normalizeCodeAgentTranscript(\n events: readonly CodeAgentTranscriptEvent[],\n): NormalizedCodeAgentTranscript {\n const items: NormalizedCodeAgentTranscriptItem[] = [];\n const hiddenEvents: CodeAgentTranscriptEvent[] = [];\n const eventOrder = new Map(events.map((event, index) => [event.id, index]));\n let turnIndex = -1;\n\n for (const event of events) {\n const currentTurnIndex = Math.max(turnIndex, 0);\n if (isAgentChatClearEvent(event)) {\n clearNormalizedAgentDraftItems(items, currentTurnIndex);\n hiddenEvents.push(event);\n continue;\n }\n\n if (event.kind === \"user\") {\n turnIndex = turnIndex < 0 ? (items.length === 0 ? 0 : 1) : turnIndex + 1;\n items.push(createUserTurn(event, turnIndex));\n continue;\n }\n\n const assistantSource = assistantTextSource(event);\n if (assistantSource) {\n const text = assistantTextForEvent(event, assistantSource);\n if (!text) {\n hiddenEvents.push(event);\n continue;\n }\n const previous = items.at(-1);\n if (\n previous?.type === \"assistant\" &&\n previous.source === assistantSource &&\n previous.turnIndex === currentTurnIndex\n ) {\n appendAssistantChunk(previous, event, text);\n } else {\n items.push(\n createAssistantTurn(event, assistantSource, currentTurnIndex, text),\n );\n }\n continue;\n }\n\n if (isThinkingEvent(event)) {\n appendThinkingChunk(items, event, currentTurnIndex);\n continue;\n }\n\n const toolType = toolEventType(event);\n if (toolType) {\n appendToolEvent(items, event, toolType, currentTurnIndex);\n continue;\n }\n\n if (shouldShowStatusEvent(event)) {\n items.push(createStatusEvent(event, currentTurnIndex));\n } else {\n hiddenEvents.push(event);\n }\n }\n\n const dedupedItems = suppressDuplicateFinalAssistantText(items, hiddenEvents);\n hiddenEvents.sort(\n (a, b) => (eventOrder.get(a.id) ?? 0) - (eventOrder.get(b.id) ?? 0),\n );\n applyPendingCodeAgentApprovalKeys(dedupedItems, events);\n\n return {\n items: dedupedItems,\n rawEvents: [...events],\n hiddenEvents,\n };\n}\n\n/**\n * Stamp `pendingApprovalKey` onto completed bash tool events whose synthetic\n * result carries an \"Approval id: {id}\" marker (see `requestCodeAgentApproval`\n * in `cli/code-agent-executor.ts`), unless a later raw event already recorded\n * a resolution for that same id (approved / denied / allowlisted-and-run /\n * forbidden — all stamp `metadata.approvalId`).\n *\n * Resolution lookup scans the *raw* event stream rather than the normalized\n * items: resolution status events are intentionally low-signal (they read as\n * \"status: running\") and get folded into `hiddenEvents` by\n * `isLowSignalLifecycleEvent`, so they would not otherwise be visible here.\n */\nfunction applyPendingCodeAgentApprovalKeys(\n items: NormalizedCodeAgentTranscriptItem[],\n events: readonly CodeAgentTranscriptEvent[],\n): void {\n const resolvedApprovalIds = new Set<string>();\n for (const event of events) {\n const approvalId = stringMetadata(event.metadata, \"approvalId\");\n if (approvalId) resolvedApprovalIds.add(approvalId);\n }\n for (const item of items) {\n if (item.type !== \"tool\" || item.state !== \"completed\") continue;\n if (typeof item.result !== \"string\") continue;\n const match = CODE_AGENT_APPROVAL_ID_RESULT_PATTERN.exec(item.result);\n const id = match?.[1];\n if (id && !resolvedApprovalIds.has(id)) {\n item.pendingApprovalKey = id;\n }\n }\n}\n\nconst CODE_AGENT_APPROVAL_ID_RESULT_PATTERN = /Approval id:\\s*(\\S+)/;\n\nfunction createUserTurn(\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): NormalizedCodeAgentUserTurn {\n return {\n type: \"user\",\n role: \"user\",\n id: event.id,\n text: event.message,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction createAssistantTurn(\n event: CodeAgentTranscriptEvent,\n source: NormalizedCodeAgentAssistantTurn[\"source\"],\n turnIndex: number,\n text: string,\n): NormalizedCodeAgentAssistantTurn {\n return {\n type: \"assistant\",\n role: \"assistant\",\n id: event.id,\n text,\n source,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction appendAssistantChunk(\n item: NormalizedCodeAgentAssistantTurn,\n event: CodeAgentTranscriptEvent,\n text: string,\n): void {\n item.text = shouldAppendAssistantChunkExactly(item, event)\n ? `${item.text}${text}`\n : joinAssistantChunks(item.text, text);\n item.updatedAt = event.createdAt;\n item.eventIds.push(event.id);\n item.events.push(event);\n}\n\nfunction isThinkingEvent(event: CodeAgentTranscriptEvent): boolean {\n return (\n event.kind === \"status\" &&\n stringMetadata(event.metadata, \"type\") === \"thinking\"\n );\n}\n\nfunction appendThinkingChunk(\n items: NormalizedCodeAgentTranscriptItem[],\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): void {\n const previous = items.at(-1);\n if (previous?.type === \"thinking\" && previous.turnIndex === turnIndex) {\n // Accumulate consecutive thinking chunks into one cell.\n previous.text = `${previous.text}${event.message}`;\n previous.updatedAt = event.createdAt;\n previous.eventIds.push(event.id);\n previous.events.push(event);\n return;\n }\n const thinkingItem: NormalizedCodeAgentThinkingEvent = {\n type: \"thinking\",\n id: event.id,\n text: event.message,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n items.push(thinkingItem);\n}\n\nfunction createStatusEvent(\n event: CodeAgentTranscriptEvent,\n turnIndex: number,\n): NormalizedCodeAgentStatusEvent {\n const metadata = event.metadata;\n return {\n type: \"status\",\n id: event.id,\n text: event.message,\n level: statusEventLevel(event),\n statusKind: event.kind,\n status: stringMetadata(metadata, \"status\"),\n phase: stringMetadata(metadata, \"phase\"),\n signal: event.signal,\n metadata,\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction appendToolEvent(\n items: NormalizedCodeAgentTranscriptItem[],\n event: CodeAgentTranscriptEvent,\n toolType: \"activity\" | \"tool_done\" | \"tool_start\",\n turnIndex: number,\n): void {\n const tool = stringMetadata(event.metadata, \"tool\");\n const item = findOpenToolEvent(items, tool, turnIndex);\n\n if (!item) {\n items.push(createToolEvent(event, toolType, turnIndex));\n return;\n }\n\n item.updatedAt = event.createdAt;\n item.eventIds.push(event.id);\n item.events.push(event);\n\n if (toolType === \"activity\") {\n item.activities.push(event.message);\n if (item.state === \"activity\") item.label = event.message;\n return;\n }\n\n if (toolType === \"tool_start\") {\n const wasActivity = item.state === \"activity\";\n item.state = \"running\";\n item.startedAt = item.startedAt ?? event.createdAt;\n if (hasMetadataKey(event.metadata, \"input\")) {\n item.input = event.metadata?.input;\n }\n if (wasActivity || item.label === item.activities.at(-1)) {\n item.label = event.message;\n }\n const startMeta = structuredMetadata(event.metadata);\n if (startMeta) item.structuredMeta = startMeta;\n return;\n }\n\n item.state = \"completed\";\n item.completedAt = event.createdAt;\n if (hasMetadataKey(event.metadata, \"result\")) {\n item.result = event.metadata?.result;\n }\n const mcpApp = mcpAppMetadata(event.metadata);\n if (mcpApp) item.mcpApp = mcpApp;\n const chatUI = chatUIMetadata(event.metadata);\n if (chatUI) item.chatUI = chatUI;\n const doneMeta = structuredMetadata(event.metadata);\n if (doneMeta) item.structuredMeta = doneMeta;\n}\n\nfunction createToolEvent(\n event: CodeAgentTranscriptEvent,\n toolType: \"activity\" | \"tool_done\" | \"tool_start\",\n turnIndex: number,\n): NormalizedCodeAgentToolEvent {\n const metadata = event.metadata;\n const state =\n toolType === \"tool_done\"\n ? \"completed\"\n : toolType === \"tool_start\"\n ? \"running\"\n : \"activity\";\n return {\n type: \"tool\",\n id: event.id,\n tool: stringMetadata(metadata, \"tool\"),\n label: event.message,\n state,\n input: hasMetadataKey(metadata, \"input\") ? metadata?.input : undefined,\n result: hasMetadataKey(metadata, \"result\") ? metadata?.result : undefined,\n mcpApp: mcpAppMetadata(metadata),\n chatUI: chatUIMetadata(metadata),\n activities: toolType === \"activity\" ? [event.message] : [],\n startedAt: toolType === \"tool_start\" ? event.createdAt : undefined,\n completedAt: toolType === \"tool_done\" ? event.createdAt : undefined,\n structuredMeta: structuredMetadata(metadata),\n createdAt: event.createdAt,\n updatedAt: event.createdAt,\n eventIds: [event.id],\n events: [event],\n turnIndex,\n };\n}\n\nfunction findOpenToolEvent(\n items: readonly NormalizedCodeAgentTranscriptItem[],\n tool: string | undefined,\n turnIndex: number,\n): NormalizedCodeAgentToolEvent | null {\n for (let index = items.length - 1; index >= 0; index -= 1) {\n const item = items[index];\n if (item.type !== \"tool\") continue;\n if (item.turnIndex !== turnIndex) continue;\n if (item.state === \"completed\") continue;\n if (tool && item.tool !== tool) continue;\n if (!tool && item.tool) continue;\n return item;\n }\n return null;\n}\n\nfunction isAgentChatClearEvent(event: CodeAgentTranscriptEvent): boolean {\n return stringMetadata(event.metadata, \"agentChatEventType\") === \"clear\";\n}\n\nfunction clearNormalizedAgentDraftItems(\n items: NormalizedCodeAgentTranscriptItem[],\n turnIndex: number,\n): void {\n for (let index = items.length - 1; index >= 0; index--) {\n const item = items[index];\n if (!item || item.turnIndex !== turnIndex) continue;\n if (\n item.type === \"assistant\" ||\n item.type === \"thinking\" ||\n item.type === \"status\"\n ) {\n items.splice(index, 1);\n continue;\n }\n if (item.type === \"tool\" && item.state !== \"completed\") {\n items.splice(index, 1);\n }\n }\n}\n\nfunction suppressDuplicateFinalAssistantText(\n items: readonly NormalizedCodeAgentTranscriptItem[],\n hiddenEvents: CodeAgentTranscriptEvent[],\n): NormalizedCodeAgentTranscriptItem[] {\n const result: NormalizedCodeAgentTranscriptItem[] = [];\n\n for (const item of items) {\n if (item.type !== \"assistant\" || item.source !== \"system\") {\n result.push(item);\n continue;\n }\n\n const stdoutItems = result.filter(\n (candidate): candidate is NormalizedCodeAgentAssistantTurn =>\n candidate.type === \"assistant\" &&\n candidate.source === \"runner-stdout\" &&\n candidate.turnIndex === item.turnIndex,\n );\n if (\n stdoutItems.length === 0 ||\n !isSameAssistantText(\n stdoutItems.map((candidate) => candidate.text).join(\" \"),\n item.text,\n )\n ) {\n result.push(item);\n continue;\n }\n\n hiddenEvents.push(...item.events);\n const target =\n stdoutItems.length === 1 ? stdoutItems[0] : stdoutItems.at(-1);\n if (!target) continue;\n if (stdoutItems.length === 1) {\n target.text = item.text;\n target.updatedAt = item.updatedAt;\n }\n target.eventIds.push(...item.eventIds);\n target.events.push(...item.events);\n target.suppressedDuplicateEventIds = [\n ...(target.suppressedDuplicateEventIds ?? []),\n ...item.eventIds,\n ];\n }\n\n return result;\n}\n\nfunction shouldShowStatusEvent(event: CodeAgentTranscriptEvent): boolean {\n if (event.kind === \"artifact\" || event.kind === \"note\") return true;\n if (event.kind !== \"status\") return false;\n // Thinking events are handled separately by appendThinkingChunk; never\n // render them again as plain status entries.\n if (isThinkingEvent(event)) return false;\n if (isLowSignalLifecycleEvent(event)) return false;\n return true;\n}\n\nfunction isLowSignalLifecycleEvent(event: CodeAgentTranscriptEvent): boolean {\n const metadata = event.metadata;\n const type = stringMetadata(metadata, \"type\");\n if (type === \"mcp-tools-connected\") return true;\n if (statusEventLevel(event) !== \"info\") return false;\n\n const status = stringMetadata(metadata, \"status\");\n const phase = stringMetadata(metadata, \"phase\");\n if (status === \"queued\" || status === \"running\" || status === \"completed\") {\n return true;\n }\n if (\n phase === \"queued\" ||\n phase === \"starting\" ||\n phase === \"executing\" ||\n phase === \"follow-up\" ||\n phase === \"complete\"\n ) {\n return true;\n }\n\n return LOW_SIGNAL_STATUS_MESSAGES.some((pattern) =>\n pattern.test(event.message),\n );\n}\n\nconst LOW_SIGNAL_STATUS_MESSAGES = [\n /^Agent-Native Code run started\\.?$/i,\n /^Agent-Native Code run completed\\.?$/i,\n /^Agent-Native Code process exited\\.?$/i,\n /^Starting local Agent-Native Code execution\\.?$/i,\n /^Remote Agent-Native Code run queued\\.?$/i,\n /^Connected \\d+ MCP tools? for this run\\.?$/i,\n];\n\nfunction statusEventLevel(\n event: CodeAgentTranscriptEvent,\n): NormalizedCodeAgentStatusEvent[\"level\"] {\n const metadata = event.metadata;\n const status = stringMetadata(metadata, \"status\");\n const phase = stringMetadata(metadata, \"phase\");\n const source = stringMetadata(metadata, \"source\");\n const type = stringMetadata(metadata, \"type\");\n\n if (\n status === \"needs-approval\" ||\n Boolean(metadata?.pendingApproval) ||\n Boolean(metadata?.pendingApprovalId) ||\n Boolean(metadata?.approvalId) ||\n phase?.includes(\"approval\") ||\n /\\bapproval\\b/i.test(event.message)\n ) {\n return \"approval\";\n }\n\n if (\n event.kind === \"status\" &&\n (status === \"errored\" ||\n type === \"error\" ||\n type?.endsWith(\"-error\") ||\n Boolean(metadata?.failed) ||\n typeof metadata?.errorCode === \"string\" ||\n source === \"runner-stderr\")\n ) {\n return \"error\";\n }\n\n if (\n status === \"paused\" ||\n phase === \"missing-credentials\" ||\n phase === \"stopped\" ||\n /\\b(missing|stopped|unavailable|denied)\\b/i.test(event.message)\n ) {\n return \"warning\";\n }\n\n return \"info\";\n}\n\nfunction assistantTextSource(\n event: CodeAgentTranscriptEvent,\n): NormalizedCodeAgentAssistantTurn[\"source\"] | null {\n const source = stringMetadata(event.metadata, \"source\");\n const type = stringMetadata(event.metadata, \"type\");\n if (type === \"assistant_delta\") {\n return \"runner-stdout\";\n }\n if (event.kind === \"status\" && source === \"runner-stdout\") {\n return \"runner-stdout\";\n }\n if (event.kind === \"system\" || event.metadata?.role === \"assistant\") {\n return \"system\";\n }\n return null;\n}\n\nfunction shouldAppendAssistantChunkExactly(\n item: NormalizedCodeAgentAssistantTurn,\n event: CodeAgentTranscriptEvent,\n): boolean {\n return (\n item.source === \"runner-stdout\" &&\n (isAssistantDeltaEvent(event) || item.events.some(isAssistantDeltaEvent))\n );\n}\n\nfunction isAssistantDeltaEvent(event: CodeAgentTranscriptEvent): boolean {\n return stringMetadata(event.metadata, \"type\") === \"assistant_delta\";\n}\n\nfunction assistantTextForEvent(\n event: CodeAgentTranscriptEvent,\n source: NormalizedCodeAgentAssistantTurn[\"source\"],\n): string {\n if (source === \"runner-stdout\") {\n return stripRunnerDiagnostics(event.message, {\n trim: !isAssistantDeltaEvent(event),\n });\n }\n return event.message;\n}\n\nfunction stripRunnerDiagnostics(\n value: string,\n options: { trim?: boolean } = {},\n): string {\n const stripped = value\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.engineDetect, \"\")\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.builderEngine, \"\")\n .replace(RUNNER_DIAGNOSTIC_LINE_PATTERNS.sessionStartedBanner, \"\");\n return options.trim === false ? stripped : stripped.trim();\n}\n\nconst RUNNER_DIAGNOSTIC_LINE_PATTERNS = {\n engineDetect: /^\\[engine-detect\\][^\\r\\n]*(?:\\r?\\n|$)/gm,\n builderEngine: /^\\[builder-engine\\]\\s*[←→][^\\r\\n]*(?:\\r?\\n|$)/gm,\n // Strip the \"Agent-Native Code session started.\" banner block that the CLI\n // prints to stdout at the start of every run. It is informational for\n // terminal users but clutters the chat transcript.\n sessionStartedBanner:\n /\\n?Agent-Native Code session started\\.[\\s\\S]*?Streaming output below\\. The transcript is saved with this run\\.\\n?/,\n};\n\nfunction toolEventType(\n event: CodeAgentTranscriptEvent,\n): \"activity\" | \"tool_done\" | \"tool_start\" | null {\n if (event.kind !== \"status\") return null;\n const type = stringMetadata(event.metadata, \"type\");\n if (type === \"activity\" || type === \"tool_done\" || type === \"tool_start\") {\n return type;\n }\n return null;\n}\n\nfunction joinAssistantChunks(previous: string, next: string): string {\n if (!previous) return next;\n if (!next) return previous;\n if (/\\s$/.test(previous) || /^\\s/.test(next)) return `${previous}${next}`;\n if (/^[.,!?;:)\\]}'\"`]/.test(next)) return `${previous}${next}`;\n if (/[([{'\"`]$/.test(previous)) return `${previous}${next}`;\n return `${previous} ${next}`;\n}\n\nfunction canonicalText(value: string): string {\n return value.replace(/\\s+/g, \" \").trim();\n}\n\nfunction isSameAssistantText(left: string, right: string): boolean {\n if (canonicalText(left) === canonicalText(right)) return true;\n return compactText(left) === compactText(right);\n}\n\nfunction compactText(value: string): string {\n return canonicalText(value).replace(/\\s+/g, \"\");\n}\n\nfunction stringMetadata(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = metadata?.[key];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction hasMetadataKey(\n metadata: Record<string, unknown> | undefined,\n key: string,\n): boolean {\n return (\n Boolean(metadata) && Object.prototype.hasOwnProperty.call(metadata, key)\n );\n}\n\nfunction structuredMetadata(\n metadata: Record<string, unknown> | undefined,\n): Record<string, unknown> | undefined {\n const value = metadata?.structuredMeta;\n if (!value || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n return value as Record<string, unknown>;\n}\n\nfunction mcpAppMetadata(\n metadata: Record<string, unknown> | undefined,\n): AgentMcpAppPayload | undefined {\n const value = metadata?.mcpApp;\n if (!value || typeof value !== \"object\") return undefined;\n const candidate = value as Partial<AgentMcpAppPayload>;\n if (\n typeof candidate.serverId !== \"string\" ||\n typeof candidate.originalToolName !== \"string\" ||\n typeof candidate.resourceUri !== \"string\" ||\n !candidate.resourceUri.startsWith(\"ui://\")\n ) {\n return undefined;\n }\n return candidate as AgentMcpAppPayload;\n}\n\nfunction chatUIMetadata(\n metadata: Record<string, unknown> | undefined,\n): ActionChatUIConfig | undefined {\n return normalizeActionChatUIConfig(metadata?.chatUI);\n}\n"]}
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
26
26
  * Body: { update: string (base64), requestSource?: string }
27
27
  */
28
28
  export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
29
- error: string;
30
29
  ok?: undefined;
30
+ error: string;
31
31
  } | {
32
32
  error?: undefined;
33
33
  ok: boolean;
@@ -13,8 +13,8 @@
13
13
  * Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
14
14
  */
15
15
  export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
16
- ok?: undefined;
17
16
  error: string;
17
+ ok?: undefined;
18
18
  } | {
19
19
  error?: undefined;
20
20
  ok: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/deploy/build.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ import path from "path";
19
19
  import { fileURLToPath } from "url";
20
20
  import { AGENT_BACKGROUND_FUNCTION_NAME, AGENT_BACKGROUND_PROCESSOR_A2A, AGENT_BACKGROUND_PROCESSOR_FIELD, AGENT_BACKGROUND_PROCESSOR_ROUTE, AGENT_BACKGROUND_PROCESSOR_ROUTE_FIELD, AGENT_CHAT_PROCESS_RUN_PATH, } from "../agent/durable-background.js";
21
21
  import { normalizeAppBasePath } from "../server/app-base-path.js";
22
- import { DEFAULT_SSR_CDN_CACHE_CONTROL, DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL, DEFAULT_SSR_NETLIFY_VARY, DEFAULT_SPECULATION_RULES_PATH, DEFAULT_SSR_CACHE_CONTROL, } from "../shared/cache-control.js";
22
+ import { DEFAULT_SSR_CDN_CACHE_CONTROL, DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL, DEFAULT_SPECULATION_RULES_PATH, DEFAULT_SSR_CACHE_CONTROL, } from "../shared/cache-control.js";
23
23
  import { mcpEmbedStaticAssetRouteRules } from "../shared/mcp-embed-headers.js";
24
24
  import { AGENT_NATIVE_SOCIAL_IMAGE_ALT, AGENT_NATIVE_SOCIAL_IMAGE_CACHE_BUSTER, AGENT_NATIVE_SOCIAL_IMAGE_HEIGHT, AGENT_NATIVE_SOCIAL_IMAGE_PATH, AGENT_NATIVE_SOCIAL_IMAGE_TYPE, AGENT_NATIVE_SOCIAL_IMAGE_WIDTH, } from "../shared/social-meta.js";
25
25
  import { generateActionRegistryForProject } from "../vite/action-types-plugin.js";
@@ -739,7 +739,6 @@ function injectHeadScript(html, script) {
739
739
  const DEFAULT_SSR_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CACHE_CONTROL)};
740
740
  const DEFAULT_SSR_CDN_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_CDN_CACHE_CONTROL)};
741
741
  const DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL = ${JSON.stringify(DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL)};
742
- const DEFAULT_SSR_NETLIFY_VARY = ${JSON.stringify(DEFAULT_SSR_NETLIFY_VARY)};
743
742
  const DEFAULT_SPECULATION_RULES_PATH = ${JSON.stringify(DEFAULT_SPECULATION_RULES_PATH)};
744
743
  const IMMUTABLE_ASSET_CACHE_CONTROL = ${JSON.stringify(IMMUTABLE_ASSET_CACHE_CONTROL)};
745
744
  const IMMUTABLE_ASSET_PATHS = new Set(${JSON.stringify([...new Set(immutableAssetPaths)].sort())});
@@ -802,17 +801,21 @@ function isSsrHtmlOrDataResponse(headers, status, pathname) {
802
801
  /**
803
802
  * Apply the SSR cache policy to the response headers.
804
803
  *
805
- * SSR IS A PUBLIC, HARD-CDN-CACHED SHELL SERVED IDENTICALLY TO EVERYONE.
806
- * Every SSR HTML / React Router .data response gets the same public
807
- * stale-while-revalidate policy for ALL visitors, authenticated or not. The SSR
808
- * output is impersonal (the handler never reads the request's session/cookies),
809
- * so it is safe to hard-cache one shared copy at the edge. Do NOT reintroduce
810
- * per-user / cookie-based cache variation here (no private, no no-store, no
811
- * "authenticated then don't cache" branch) — that makes every logged-in
812
- * visitor's pages uncacheable. Per-user state is resolved client-side instead.
804
+ * Unannotated SSR HTML and React Router .data responses share a public
805
+ * stale-while-revalidate cache policy. Preserve an explicit route policy,
806
+ * though: token-gated and personalized routes can opt out with private or
807
+ * no-store policies.
813
808
  */
814
809
  function applyDefaultSsrCacheHeader(headers, status, pathname) {
815
810
  if (!isSsrHtmlOrDataResponse(headers, status, pathname)) return;
811
+ // React Router marks every .data response as no-cache, but those loader
812
+ // payloads are safe to cache at the shared edge. Preserve only explicit
813
+ // private/no-store policies, which token-gated and personalized routes use
814
+ // to opt out of shared caching.
815
+ const cacheControl = headers.get("cache-control")?.toLowerCase() ?? "";
816
+ if (cacheControl.includes("private") || cacheControl.includes("no-store")) {
817
+ return;
818
+ }
816
819
 
817
820
  headers.set("cache-control", DEFAULT_SSR_CACHE_CONTROL);
818
821
  headers.set("cdn-cache-control", DEFAULT_SSR_CDN_CACHE_CONTROL);
@@ -821,7 +824,6 @@ function applyDefaultSsrCacheHeader(headers, status, pathname) {
821
824
  // Netlify-specific header so SSR HTML/.data are served from the shared
822
825
  // durable CDN cache instead of stampeding origin — for every visitor.
823
826
  headers.set("netlify-cdn-cache-control", DEFAULT_SSR_NETLIFY_CDN_CACHE_CONTROL);
824
- headers.set("netlify-vary", DEFAULT_SSR_NETLIFY_VARY);
825
827
  }
826
828
 
827
829
  function applyDefaultSpeculationRulesHeader(headers, status, basePath) {