@agent-native/core 0.122.4 → 0.123.1

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 (1595) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +554 -0
  3. package/corpus/core/docs/content/actions.mdx +33 -20
  4. package/corpus/core/docs/content/agent-mentions.mdx +30 -19
  5. package/corpus/core/docs/content/agent-native-toolkit.mdx +8 -6
  6. package/corpus/core/docs/content/agent-resources.mdx +11 -0
  7. package/corpus/core/docs/content/agent-surfaces.mdx +41 -30
  8. package/corpus/core/docs/content/audit-log.mdx +78 -0
  9. package/corpus/core/docs/content/authentication.mdx +7 -5
  10. package/corpus/core/docs/content/automations.mdx +15 -9
  11. package/corpus/core/docs/content/client.mdx +11 -11
  12. package/corpus/core/docs/content/cloneable-saas.mdx +7 -1
  13. package/corpus/core/docs/content/code-agents-ui.mdx +9 -1
  14. package/corpus/core/docs/content/components.mdx +7 -0
  15. package/corpus/core/docs/content/context-awareness.mdx +1 -0
  16. package/corpus/core/docs/content/creating-templates.mdx +9 -1
  17. package/corpus/core/docs/content/custom-design-system.mdx +8 -0
  18. package/corpus/core/docs/content/data-programs.mdx +6 -0
  19. package/corpus/core/docs/content/deployment.mdx +2 -0
  20. package/corpus/core/docs/content/doctor.mdx +5 -3
  21. package/corpus/core/docs/content/extensions.mdx +26 -0
  22. package/corpus/core/docs/content/external-agents-catalog.mdx +533 -0
  23. package/corpus/core/docs/content/external-agents.mdx +20 -514
  24. package/corpus/core/docs/content/faq.mdx +2 -2
  25. package/corpus/core/docs/content/file-uploads.mdx +44 -0
  26. package/corpus/core/docs/content/frames.mdx +2 -2
  27. package/corpus/core/docs/content/generative-ui.mdx +8 -0
  28. package/corpus/core/docs/content/getting-started.mdx +45 -17
  29. package/corpus/core/docs/content/human-approval.mdx +9 -0
  30. package/corpus/core/docs/content/integrations.mdx +4 -3
  31. package/corpus/core/docs/content/internationalization.mdx +4 -11
  32. package/corpus/core/docs/content/key-concepts.mdx +1 -1
  33. package/corpus/core/docs/content/local-file-mode.mdx +5 -0
  34. package/corpus/core/docs/content/mcp-apps.mdx +2 -1
  35. package/corpus/core/docs/content/mcp-clients.mdx +32 -1
  36. package/corpus/core/docs/content/mcp-protocol.mdx +4 -3
  37. package/corpus/core/docs/content/messaging-internals.mdx +328 -0
  38. package/corpus/core/docs/content/messaging-recipes.mdx +194 -0
  39. package/corpus/core/docs/content/messaging.mdx +9 -307
  40. package/corpus/core/docs/content/multi-app-workspace.mdx +1 -1
  41. package/corpus/core/docs/content/multi-tenancy.mdx +1 -0
  42. package/corpus/core/docs/content/native-chat-ui.mdx +8 -0
  43. package/corpus/core/docs/content/notifications.mdx +18 -20
  44. package/corpus/core/docs/content/observability.mdx +1 -0
  45. package/corpus/core/docs/content/onboarding.mdx +20 -6
  46. package/corpus/core/docs/content/organizations-teams-permissions.mdx +99 -124
  47. package/corpus/core/docs/content/package-lifecycle.mdx +19 -7
  48. package/corpus/core/docs/content/progress.mdx +11 -0
  49. package/corpus/core/docs/content/real-time-collaboration.mdx +44 -3
  50. package/corpus/core/docs/content/recurring-jobs.mdx +14 -1
  51. package/corpus/core/docs/content/security.mdx +5 -2
  52. package/corpus/core/docs/content/server.mdx +2 -1
  53. package/corpus/core/docs/content/sharing.mdx +22 -3
  54. package/corpus/core/docs/content/skills-guide.mdx +62 -19
  55. package/corpus/core/docs/content/syncing-template-changes.mdx +9 -0
  56. package/corpus/core/docs/content/template-analytics-connectors.mdx +75 -0
  57. package/corpus/core/docs/content/template-analytics-dashboards.mdx +106 -0
  58. package/corpus/core/docs/content/template-analytics-developers.mdx +287 -0
  59. package/corpus/core/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  60. package/corpus/core/docs/content/template-analytics.mdx +21 -263
  61. package/corpus/core/docs/content/template-assets-developers.mdx +456 -0
  62. package/corpus/core/docs/content/template-assets-generation.mdx +147 -0
  63. package/corpus/core/docs/content/template-assets-integrations.mdx +319 -0
  64. package/corpus/core/docs/content/template-assets-presets.mdx +185 -0
  65. package/corpus/core/docs/content/template-assets.mdx +12 -562
  66. package/corpus/core/docs/content/template-brain-agent.mdx +103 -0
  67. package/corpus/core/docs/content/template-brain-developers.mdx +379 -0
  68. package/corpus/core/docs/content/template-brain-knowledge.mdx +50 -0
  69. package/corpus/core/docs/content/template-brain-sources.mdx +163 -0
  70. package/corpus/core/docs/content/template-brain.mdx +30 -390
  71. package/corpus/core/docs/content/template-calendar-agent.mdx +133 -0
  72. package/corpus/core/docs/content/template-calendar-booking-links.mdx +73 -0
  73. package/corpus/core/docs/content/template-calendar-developers.mdx +366 -0
  74. package/corpus/core/docs/content/template-calendar-scheduling.mdx +128 -0
  75. package/corpus/core/docs/content/template-calendar.mdx +13 -260
  76. package/corpus/core/docs/content/template-chat-developers.mdx +88 -0
  77. package/corpus/core/docs/content/template-chat-first-edits.mdx +145 -0
  78. package/corpus/core/docs/content/template-chat.mdx +12 -77
  79. package/corpus/core/docs/content/template-clips-ai-and-editing.mdx +114 -0
  80. package/corpus/core/docs/content/template-clips-capture-everywhere.mdx +120 -0
  81. package/corpus/core/docs/content/template-clips-developers.mdx +373 -0
  82. package/corpus/core/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  83. package/corpus/core/docs/content/template-clips.mdx +19 -508
  84. package/corpus/core/docs/content/template-content-databases.mdx +406 -0
  85. package/corpus/core/docs/content/template-content-developers.mdx +364 -0
  86. package/corpus/core/docs/content/template-content-editing.mdx +60 -0
  87. package/corpus/core/docs/content/template-content-sync.mdx +149 -0
  88. package/corpus/core/docs/content/template-content.mdx +21 -561
  89. package/corpus/core/docs/content/template-design-brand-and-figma.mdx +150 -0
  90. package/corpus/core/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  91. package/corpus/core/docs/content/template-design-developers.mdx +358 -0
  92. package/corpus/core/docs/content/template-design-quality-and-components.mdx +95 -0
  93. package/corpus/core/docs/content/template-design.mdx +20 -344
  94. package/corpus/core/docs/content/template-dispatch-developers.mdx +121 -0
  95. package/corpus/core/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  96. package/corpus/core/docs/content/template-dispatch-operations.mdx +160 -0
  97. package/corpus/core/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  98. package/corpus/core/docs/content/template-dispatch.mdx +24 -283
  99. package/corpus/core/docs/content/template-forms-building-publishing.mdx +135 -0
  100. package/corpus/core/docs/content/template-forms-developers.mdx +195 -0
  101. package/corpus/core/docs/content/template-forms-responses.mdx +120 -0
  102. package/corpus/core/docs/content/template-forms.mdx +21 -230
  103. package/corpus/core/docs/content/template-mail-agent.mdx +114 -0
  104. package/corpus/core/docs/content/template-mail-developers.mdx +356 -0
  105. package/corpus/core/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  106. package/corpus/core/docs/content/template-mail-inbox.mdx +118 -0
  107. package/corpus/core/docs/content/template-mail.mdx +23 -274
  108. package/corpus/core/docs/content/template-plan-automations.mdx +213 -0
  109. package/corpus/core/docs/content/template-plan-developers.mdx +703 -0
  110. package/corpus/core/docs/content/template-plan-local-and-desktop.mdx +236 -0
  111. package/corpus/core/docs/content/template-plan-review-workflow.mdx +180 -0
  112. package/corpus/core/docs/content/template-plan.mdx +60 -910
  113. package/corpus/core/docs/content/template-slides-agent.mdx +102 -0
  114. package/corpus/core/docs/content/template-slides-design-and-media.mdx +94 -0
  115. package/corpus/core/docs/content/template-slides-developers.mdx +488 -0
  116. package/corpus/core/docs/content/template-slides-editing.mdx +56 -0
  117. package/corpus/core/docs/content/template-slides.mdx +20 -362
  118. package/corpus/core/docs/content/toolkit-capability-packages.mdx +38 -13
  119. package/corpus/core/docs/content/toolkit-context-knowledge.mdx +49 -9
  120. package/corpus/core/docs/content/toolkit-editors-canvases.mdx +72 -10
  121. package/corpus/core/docs/content/toolkit-resources.mdx +16 -0
  122. package/corpus/core/docs/content/toolkit-settings.mdx +3 -3
  123. package/corpus/core/docs/content/toolkit-sharing.mdx +5 -7
  124. package/corpus/core/docs/content/using-your-agent.mdx +25 -2
  125. package/corpus/core/docs/content/voice-input.mdx +11 -7
  126. package/corpus/core/docs/content/what-is-agent-native.mdx +1 -0
  127. package/corpus/core/docs/content/workspace-connections.mdx +21 -11
  128. package/corpus/core/docs/content/workspace-management.mdx +1 -1
  129. package/corpus/core/package.json +1 -3
  130. package/corpus/core/src/a2a/client.ts +4 -2
  131. package/corpus/core/src/agent/action-warnings.ts +103 -0
  132. package/corpus/core/src/agent/durable-background.ts +42 -5
  133. package/corpus/core/src/agent/engine/ai-sdk-engine.ts +58 -6
  134. package/corpus/core/src/agent/engine/anthropic-engine.ts +51 -8
  135. package/corpus/core/src/agent/engine/builder-engine.ts +56 -18
  136. package/corpus/core/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  137. package/corpus/core/src/agent/engine/credential-errors.ts +11 -0
  138. package/corpus/core/src/agent/engine/error-detail.ts +39 -0
  139. package/corpus/core/src/agent/engine/prompt-cache.ts +44 -0
  140. package/corpus/core/src/agent/engine/registry.ts +22 -30
  141. package/corpus/core/src/agent/engine/tool-call-journal-seed.ts +2 -1
  142. package/corpus/core/src/agent/engine/translate-anthropic.ts +99 -0
  143. package/corpus/core/src/agent/loop-settings.ts +94 -7
  144. package/corpus/core/src/agent/production-agent.ts +667 -157
  145. package/corpus/core/src/agent/run-loop-with-resume.ts +27 -1
  146. package/corpus/core/src/agent/run-manager.ts +229 -39
  147. package/corpus/core/src/agent/run-store.ts +397 -64
  148. package/corpus/core/src/agent/thread-data-builder.ts +5 -1
  149. package/corpus/core/src/agent/types.ts +23 -6
  150. package/corpus/core/src/application-state/script-helpers.ts +5 -2
  151. package/corpus/core/src/cli/agents.ts +69 -1
  152. package/corpus/core/src/cli/app-skill.ts +1 -1
  153. package/corpus/core/src/cli/code-agent-executor.ts +7 -3
  154. package/corpus/core/src/cli/design-connect.ts +82 -8
  155. package/corpus/core/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  156. package/corpus/core/src/cli/templates-meta.ts +12 -0
  157. package/corpus/core/src/client/AssistantChat.tsx +623 -607
  158. package/corpus/core/src/client/agent-chat-adapter.ts +176 -29
  159. package/corpus/core/src/client/chat/message-components.tsx +13 -0
  160. package/corpus/core/src/client/embed-auth.ts +3 -1
  161. package/corpus/core/src/client/integrations/IntegrationCard.tsx +41 -24
  162. package/corpus/core/src/client/integrations/IntegrationsPanel.tsx +37 -21
  163. package/corpus/core/src/client/integrations/webhook-url.ts +29 -0
  164. package/corpus/core/src/client/org/OrgSwitcher.tsx +41 -27
  165. package/corpus/core/src/client/org/RequireActiveOrg.tsx +7 -0
  166. package/corpus/core/src/client/org/TeamPage.tsx +144 -14
  167. package/corpus/core/src/client/org/hooks.ts +27 -0
  168. package/corpus/core/src/client/org/index.ts +2 -0
  169. package/corpus/core/src/client/require-session.tsx +40 -29
  170. package/corpus/core/src/client/session-replay.ts +1 -1
  171. package/corpus/core/src/client/settings/DemoModeSection.tsx +0 -5
  172. package/corpus/core/src/client/settings/SecretsSection.tsx +47 -42
  173. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  174. package/corpus/core/src/client/sse-event-processor.ts +83 -8
  175. package/corpus/core/src/client/use-action.ts +22 -13
  176. package/corpus/core/src/client/use-agent-engine-configured.ts +36 -4
  177. package/corpus/core/src/client/use-db-sync.ts +21 -1
  178. package/corpus/core/src/credentials/index.ts +124 -2
  179. package/corpus/core/src/deploy/build.ts +93 -30
  180. package/corpus/core/src/deploy/workspace-deploy.ts +21 -16
  181. package/corpus/core/src/guards/no-localhost-fallback.ts +76 -14
  182. package/corpus/core/src/integrations/google-docs-poller.ts +19 -12
  183. package/corpus/core/src/integrations/webhook-handler.ts +56 -33
  184. package/corpus/core/src/jobs/scheduler.ts +57 -23
  185. package/corpus/core/src/localization/default-messages.ts +23 -1
  186. package/corpus/core/src/observability/evals.ts +7 -8
  187. package/corpus/core/src/observability/traces.ts +2 -0
  188. package/corpus/core/src/org/accept-pending.ts +2 -2
  189. package/corpus/core/src/org/active-org.ts +73 -0
  190. package/corpus/core/src/org/auto-join-domain.ts +7 -2
  191. package/corpus/core/src/org/context.ts +169 -66
  192. package/corpus/core/src/org/handlers.ts +148 -10
  193. package/corpus/core/src/org/plugin.ts +8 -1
  194. package/corpus/core/src/org/types.ts +6 -1
  195. package/corpus/core/src/provider-api/index.ts +6 -1
  196. package/corpus/core/src/resources/handlers.ts +2 -6
  197. package/corpus/core/src/resources/script-helpers.ts +2 -1
  198. package/corpus/core/src/scripts/chat/search-chats.ts +5 -2
  199. package/corpus/core/src/scripts/describe-workspace-apps.ts +59 -0
  200. package/corpus/core/src/scripts/resources/delete-memory.ts +5 -2
  201. package/corpus/core/src/scripts/resources/delete.ts +5 -2
  202. package/corpus/core/src/scripts/resources/effective.ts +5 -2
  203. package/corpus/core/src/scripts/resources/list.ts +5 -2
  204. package/corpus/core/src/scripts/resources/read.ts +5 -2
  205. package/corpus/core/src/scripts/resources/save-memory.ts +5 -2
  206. package/corpus/core/src/scripts/resources/write.ts +5 -2
  207. package/corpus/core/src/server/agent-capabilities.ts +147 -0
  208. package/corpus/core/src/server/agent-chat/framework-prompts.ts +11 -13
  209. package/corpus/core/src/server/agent-chat/prompt-resources.ts +183 -57
  210. package/corpus/core/src/server/agent-chat/script-entries.ts +20 -7
  211. package/corpus/core/src/server/agent-chat-plugin.ts +27 -0
  212. package/corpus/core/src/server/auth.ts +38 -32
  213. package/corpus/core/src/server/core-routes-plugin.ts +229 -179
  214. package/corpus/core/src/server/credential-provider.ts +196 -44
  215. package/corpus/core/src/server/embed-session.ts +10 -0
  216. package/corpus/core/src/server/framework-request-handler.ts +43 -0
  217. package/corpus/core/src/server/google-auth-plugin.ts +13 -450
  218. package/corpus/core/src/server/index.ts +4 -1
  219. package/corpus/core/src/server/onboarding-html.ts +20 -56
  220. package/corpus/core/src/server/open-route.ts +6 -1
  221. package/corpus/core/src/server/poll.ts +1 -1
  222. package/corpus/core/src/server/prompts/framework-core-compact.ts +5 -5
  223. package/corpus/core/src/server/prompts/framework-core.ts +7 -9
  224. package/corpus/core/src/server/prompts/shared-rules.ts +20 -9
  225. package/corpus/core/src/server/request-context.ts +58 -2
  226. package/corpus/core/src/server/scoped-key-storage.ts +1 -1
  227. package/corpus/core/src/settings/org-settings.ts +9 -0
  228. package/corpus/core/src/settings/store.ts +29 -0
  229. package/corpus/core/src/shared/index.ts +13 -0
  230. package/corpus/core/src/shared/sign-in-journey.ts +331 -0
  231. package/corpus/core/src/styles/agent-native.css +8 -0
  232. package/corpus/core/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  233. package/corpus/core/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  234. package/corpus/core/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  235. package/corpus/core/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  236. package/corpus/core/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  237. package/corpus/core/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  238. package/corpus/core/src/templates/chat/AGENTS.md +8 -0
  239. package/corpus/core/src/templates/chat/app/entry.client.tsx +3 -0
  240. package/corpus/core/src/templates/chat/changelog/2026-07-24-borderless-secondary-surfaces.md +6 -0
  241. package/corpus/core/src/templates/chat/changelog/2026-07-24-sidebar-footer-controls-follow-a-consistent-order.md +6 -0
  242. package/corpus/core/src/templates/chat/changelog/2026-07-25-settings-navigation-now-keeps-manage-agent-as-a-dedicated-li.md +6 -0
  243. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  244. package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  245. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  246. package/corpus/core/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  247. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  248. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  249. package/corpus/core/src/templates/default/AGENTS.md +68 -195
  250. package/corpus/core/src/templates/default/app/entry.client.tsx +3 -0
  251. package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +8 -0
  252. package/corpus/core/src/templates/default/app/i18n/de-DE.ts +8 -0
  253. package/corpus/core/src/templates/default/app/i18n/en-US.ts +8 -0
  254. package/corpus/core/src/templates/default/app/i18n/es-ES.ts +8 -0
  255. package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +8 -0
  256. package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +8 -0
  257. package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +8 -0
  258. package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +8 -0
  259. package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +8 -0
  260. package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +8 -0
  261. package/corpus/core/src/templates/default/app/i18n/zh-TW.ts +8 -0
  262. package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  263. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  264. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  265. package/corpus/core/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  266. package/corpus/core/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  267. package/corpus/core/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  268. package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  269. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  270. package/corpus/core/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  271. package/corpus/core/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  272. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  273. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  274. package/corpus/core/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  275. package/corpus/core/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  276. package/corpus/core/src/templates/workspace-core/AGENTS.md +62 -124
  277. package/corpus/core/src/templates/workspace-root/AGENTS.md +6 -1
  278. package/corpus/core/src/triggers/dispatcher.ts +28 -17
  279. package/corpus/core/src/vite/client.ts +20 -8
  280. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +19 -1
  281. package/corpus/templates/analytics/.agents/skills/dashboard-management/SKILL.md +41 -1
  282. package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +50 -22
  283. package/corpus/templates/analytics/.agents/skills/data-querying/SKILL.md +1 -1
  284. package/corpus/templates/analytics/.agents/skills/data-querying/references/inline-chart-embeds.md +8 -0
  285. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +20 -6
  286. package/corpus/templates/analytics/.agents/skills/security/SKILL.md +2 -0
  287. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +4 -3
  288. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +7 -3
  289. package/corpus/templates/analytics/.agents/skills/sharing/SKILL.md +228 -0
  290. package/corpus/templates/analytics/.builder/skills/charts/SKILL.md +2 -2
  291. package/corpus/templates/analytics/actions/delete-dashboard-view.ts +24 -0
  292. package/corpus/templates/analytics/actions/delete-user-pref.ts +22 -0
  293. package/corpus/templates/analytics/actions/generate-chart.ts +8 -245
  294. package/corpus/templates/analytics/actions/get-theme.ts +27 -0
  295. package/corpus/templates/analytics/actions/get-user-pref.ts +22 -0
  296. package/corpus/templates/analytics/actions/list-dashboard-views.ts +25 -0
  297. package/corpus/templates/analytics/actions/save-dashboard-view.ts +33 -0
  298. package/corpus/templates/analytics/actions/set-theme.ts +22 -0
  299. package/corpus/templates/analytics/actions/set-user-pref.ts +24 -0
  300. package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +134 -27
  301. package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +2 -9
  302. package/corpus/templates/analytics/app/components/layout/Layout.tsx +0 -17
  303. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +10 -5
  304. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +22 -52
  305. package/corpus/templates/analytics/app/hooks/use-user-pref.ts +21 -31
  306. package/corpus/templates/analytics/app/i18n-data.ts +10 -0
  307. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +2 -1
  308. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/dual-axis.ts +73 -0
  309. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +8 -27
  310. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/report-panel-window.ts +0 -57
  311. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/types.ts +8 -0
  312. package/corpus/templates/analytics/app/root.tsx +0 -28
  313. package/corpus/templates/analytics/changelog/2026-07-26-error-issues-now-group-by-message-as-well-as-stack-frame-and.md +6 -0
  314. package/corpus/templates/analytics/changelog/2026-07-26-line-area-and-bar-dashboard-panels-can-plot-series-on-a-seco.md +6 -0
  315. package/corpus/templates/analytics/changelog/2026-07-26-scheduled-dashboard-email-reports-now-arrive-complete-and-re.md +6 -0
  316. package/corpus/templates/analytics/changelog/2026-07-26-session-replays-now-detect-rage-clicks-so-the-rage-click-fil.md +6 -0
  317. package/corpus/templates/analytics/docs/error-capture.md +8 -4
  318. package/corpus/templates/analytics/package.json +1 -2
  319. package/corpus/templates/analytics/scripts/preview-dashboard-report.ts +221 -0
  320. package/corpus/templates/analytics/server/jobs/dashboard-report.ts +39 -32
  321. package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +1168 -0
  322. package/corpus/templates/analytics/server/lib/dashboard-report.ts +111 -1358
  323. package/corpus/templates/analytics/server/lib/error-capture.ts +32 -15
  324. package/corpus/templates/analytics/server/lib/report-chart-svg.ts +901 -0
  325. package/corpus/templates/analytics/server/lib/session-replay.ts +77 -1
  326. package/corpus/templates/analytics/shared/dashboard-report-timeouts.ts +3 -4
  327. package/corpus/templates/assets/.agents/skills/a2a-assets/SKILL.md +28 -0
  328. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +19 -1
  329. package/corpus/templates/assets/.agents/skills/assets-navigation/SKILL.md +46 -0
  330. package/corpus/templates/assets/.agents/skills/creative-context/SKILL.md +12 -0
  331. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +20 -6
  332. package/corpus/templates/assets/.agents/skills/image-generation/SKILL.md +28 -0
  333. package/corpus/templates/assets/.agents/skills/library-management/SKILL.md +9 -0
  334. package/corpus/templates/assets/.agents/skills/logo-composite/SKILL.md +11 -0
  335. package/corpus/templates/assets/.agents/skills/security/SKILL.md +2 -0
  336. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +4 -3
  337. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +7 -3
  338. package/corpus/templates/assets/.agents/skills/sharing/SKILL.md +228 -0
  339. package/corpus/templates/assets/AGENTS.md +58 -125
  340. package/corpus/templates/assets/actions/variant-slots.ts +8 -4
  341. package/corpus/templates/assets/app/entry.client.tsx +3 -0
  342. package/corpus/templates/assets/package.json +0 -2
  343. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +19 -1
  344. package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +2 -0
  345. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +78 -4
  346. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +20 -6
  347. package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +15 -3
  348. package/corpus/templates/brain/.agents/skills/security/SKILL.md +2 -0
  349. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +4 -3
  350. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +7 -3
  351. package/corpus/templates/brain/.agents/skills/sharing/SKILL.md +228 -0
  352. package/corpus/templates/brain/.agents/skills/storing-data/SKILL.md +178 -0
  353. package/corpus/templates/brain/AGENTS.md +73 -119
  354. package/corpus/templates/brain/app/entry.client.tsx +3 -0
  355. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +19 -1
  356. package/corpus/templates/calendar/.agents/skills/event-management/SKILL.md +56 -3
  357. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +20 -6
  358. package/corpus/templates/calendar/.agents/skills/security/SKILL.md +2 -0
  359. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +4 -3
  360. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +7 -3
  361. package/corpus/templates/calendar/.agents/skills/sharing/SKILL.md +228 -0
  362. package/corpus/templates/calendar/AGENTS.md +22 -45
  363. package/corpus/templates/calendar/app/entry.client.tsx +3 -0
  364. package/corpus/templates/calendar/server/handlers/events.ts +0 -364
  365. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  366. package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  367. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  368. package/corpus/templates/chat/.agents/skills/security/SKILL.md +2 -0
  369. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  370. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  371. package/corpus/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  372. package/corpus/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  373. package/corpus/templates/chat/AGENTS.md +8 -0
  374. package/corpus/templates/chat/app/entry.client.tsx +3 -0
  375. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +19 -1
  376. package/corpus/templates/clips/.agents/skills/ai-video-tools/SKILL.md +42 -0
  377. package/corpus/templates/clips/.agents/skills/brain-export/SKILL.md +59 -0
  378. package/corpus/templates/clips/.agents/skills/bug-reports/SKILL.md +37 -0
  379. package/corpus/templates/clips/.agents/skills/crm-call-evidence/SKILL.md +41 -0
  380. package/corpus/templates/clips/.agents/skills/dictate/SKILL.md +4 -0
  381. package/corpus/templates/clips/.agents/skills/external-integrations/SKILL.md +45 -0
  382. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +20 -6
  383. package/corpus/templates/clips/.agents/skills/meetings/SKILL.md +9 -0
  384. package/corpus/templates/clips/.agents/skills/recording/SKILL.md +45 -0
  385. package/corpus/templates/clips/.agents/skills/screen-memory/SKILL.md +43 -0
  386. package/corpus/templates/clips/.agents/skills/security/SKILL.md +2 -0
  387. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +4 -3
  388. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +7 -3
  389. package/corpus/templates/clips/.agents/skills/video-sharing/SKILL.md +38 -1
  390. package/corpus/templates/clips/AGENTS.md +82 -224
  391. package/corpus/templates/clips/actions/create-recording.ts +4 -0
  392. package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +6 -10
  393. package/corpus/templates/clips/app/routes/invite.$token.tsx +6 -5
  394. package/corpus/templates/clips/app/routes/r.$recordingId.tsx +4 -5
  395. package/corpus/templates/clips/app/routes/share.$shareId.tsx +8 -8
  396. package/corpus/templates/clips/changelog/2026-07-26-long-agent-chat-turns-now-finish-instead-of-stopping-partway.md +6 -0
  397. package/corpus/templates/clips/changelog/2026-07-26-recordings-no-longer-get-stuck-on-uploading-uploads-now-hold.md +6 -0
  398. package/corpus/templates/clips/server/db/schema.ts +3 -0
  399. package/corpus/templates/clips/server/jobs/brain-export.ts +4 -0
  400. package/corpus/templates/clips/server/lib/recording-upload-state.ts +0 -52
  401. package/corpus/templates/clips/server/lib/upload-lease.ts +241 -0
  402. package/corpus/templates/clips/server/plugins/agent-chat.ts +4 -0
  403. package/corpus/templates/clips/server/plugins/db.ts +18 -347
  404. package/corpus/templates/clips/server/routes/api/clips/brain-export/run.post.ts +7 -1
  405. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/chunk.post.ts +123 -126
  406. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/reset-chunks.post.ts +4 -0
  407. package/corpus/templates/clips/server/routes/api/uploads/[recordingId]/resume.get.ts +118 -0
  408. package/corpus/templates/clips/server/routes/api/uploads/reap.post.ts +69 -0
  409. package/corpus/templates/content/.agents/skills/actions/SKILL.md +19 -1
  410. package/corpus/templates/content/.agents/skills/content/SKILL.md +4 -0
  411. package/corpus/templates/content/.agents/skills/creative-context/SKILL.md +8 -0
  412. package/corpus/templates/content/.agents/skills/document-editing/SKILL.md +55 -0
  413. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +20 -6
  414. package/corpus/templates/content/.agents/skills/notion-integration/SKILL.md +12 -1
  415. package/corpus/templates/content/.agents/skills/security/SKILL.md +2 -0
  416. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +4 -3
  417. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +7 -3
  418. package/corpus/templates/content/.agents/skills/sharing/SKILL.md +228 -0
  419. package/corpus/templates/content/AGENTS.md +63 -131
  420. package/corpus/templates/content/app/routes/_app.tsx +4 -4
  421. package/corpus/templates/content/server/routes/api/notion/callback.get.ts +6 -24
  422. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +115 -0
  423. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +177 -0
  424. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +205 -0
  425. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +220 -0
  426. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +169 -0
  427. package/corpus/templates/crm/.agents/skills/sharing/SKILL.md +228 -0
  428. package/corpus/templates/crm/.agents/skills/storing-data/SKILL.md +178 -0
  429. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +122 -0
  430. package/corpus/templates/crm/.env.example +5 -0
  431. package/corpus/templates/crm/AGENTS.md +82 -0
  432. package/corpus/templates/crm/CHANGELOG.md +25 -0
  433. package/corpus/templates/crm/DEVELOPING.md +66 -0
  434. package/corpus/templates/crm/README.md +122 -0
  435. package/corpus/templates/crm/_gitignore +12 -0
  436. package/corpus/templates/crm/actions/_crm-action-utils.ts +98 -0
  437. package/corpus/templates/crm/actions/_crm-attribute-utils.ts +219 -0
  438. package/corpus/templates/crm/actions/_crm-dashboard.ts +69 -0
  439. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +15 -0
  440. package/corpus/templates/crm/actions/_crm-list-utils.ts +775 -0
  441. package/corpus/templates/crm/actions/_crm-signal-utils.ts +79 -0
  442. package/corpus/templates/crm/actions/add-crm-record-to-list.ts +164 -0
  443. package/corpus/templates/crm/actions/apply-crm-proposals.ts +291 -0
  444. package/corpus/templates/crm/actions/archive-crm-attribute.ts +69 -0
  445. package/corpus/templates/crm/actions/attach-call-evidence.ts +170 -0
  446. package/corpus/templates/crm/actions/configure-crm-connection.ts +126 -0
  447. package/corpus/templates/crm/actions/configure-native-crm.ts +44 -0
  448. package/corpus/templates/crm/actions/create-crm-attribute.ts +350 -0
  449. package/corpus/templates/crm/actions/create-crm-list.ts +194 -0
  450. package/corpus/templates/crm/actions/create-crm-record.ts +148 -0
  451. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +58 -0
  452. package/corpus/templates/crm/actions/delete-crm-saved-view.ts +68 -0
  453. package/corpus/templates/crm/actions/delete-staged-dataset.ts +14 -0
  454. package/corpus/templates/crm/actions/estimate-crm-enrichment.ts +229 -0
  455. package/corpus/templates/crm/actions/find-crm-duplicates.ts +87 -0
  456. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +36 -0
  457. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +35 -0
  458. package/corpus/templates/crm/actions/get-crm-dashboard.ts +14 -0
  459. package/corpus/templates/crm/actions/get-crm-overview.ts +13 -0
  460. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +61 -0
  461. package/corpus/templates/crm/actions/get-crm-record-page.ts +287 -0
  462. package/corpus/templates/crm/actions/get-crm-record.ts +75 -0
  463. package/corpus/templates/crm/actions/get-crm-workspace.ts +364 -0
  464. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +81 -0
  465. package/corpus/templates/crm/actions/list-crm-attributes.ts +71 -0
  466. package/corpus/templates/crm/actions/list-crm-connections.ts +68 -0
  467. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +15 -0
  468. package/corpus/templates/crm/actions/list-crm-dashboards.ts +15 -0
  469. package/corpus/templates/crm/actions/list-crm-enrichment-slots.ts +28 -0
  470. package/corpus/templates/crm/actions/list-crm-list-entries.ts +192 -0
  471. package/corpus/templates/crm/actions/list-crm-lists.ts +80 -0
  472. package/corpus/templates/crm/actions/list-crm-proposals.ts +55 -0
  473. package/corpus/templates/crm/actions/list-crm-record-field-history.ts +201 -0
  474. package/corpus/templates/crm/actions/list-crm-record-values.ts +200 -0
  475. package/corpus/templates/crm/actions/list-crm-records.ts +103 -0
  476. package/corpus/templates/crm/actions/list-crm-saved-views.ts +66 -0
  477. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +43 -0
  478. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +32 -0
  479. package/corpus/templates/crm/actions/list-crm-tasks.ts +22 -0
  480. package/corpus/templates/crm/actions/list-staged-datasets.ts +14 -0
  481. package/corpus/templates/crm/actions/list-workspace-connections.ts +47 -0
  482. package/corpus/templates/crm/actions/manage-crm-attribute-option.ts +272 -0
  483. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +87 -0
  484. package/corpus/templates/crm/actions/manage-crm-task.ts +132 -0
  485. package/corpus/templates/crm/actions/merge-crm-records.ts +691 -0
  486. package/corpus/templates/crm/actions/navigate.ts +54 -0
  487. package/corpus/templates/crm/actions/provider-api-catalog.ts +22 -0
  488. package/corpus/templates/crm/actions/provider-api-docs.ts +54 -0
  489. package/corpus/templates/crm/actions/provider-api-request.ts +92 -0
  490. package/corpus/templates/crm/actions/query-staged-dataset.ts +44 -0
  491. package/corpus/templates/crm/actions/record-crm-call-insight.ts +160 -0
  492. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +150 -0
  493. package/corpus/templates/crm/actions/remove-crm-list-entry.ts +79 -0
  494. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +23 -0
  495. package/corpus/templates/crm/actions/review-crm-signal.ts +31 -0
  496. package/corpus/templates/crm/actions/run-crm-attribute-fill.ts +443 -0
  497. package/corpus/templates/crm/actions/run-crm-enrichment.ts +647 -0
  498. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +103 -0
  499. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +265 -0
  500. package/corpus/templates/crm/actions/run.ts +7 -0
  501. package/corpus/templates/crm/actions/save-crm-dashboard.ts +51 -0
  502. package/corpus/templates/crm/actions/save-crm-saved-view.ts +296 -0
  503. package/corpus/templates/crm/actions/sync-crm.ts +146 -0
  504. package/corpus/templates/crm/actions/update-crm-attribute.ts +111 -0
  505. package/corpus/templates/crm/actions/update-crm-list-entry.ts +102 -0
  506. package/corpus/templates/crm/actions/update-crm-list.ts +97 -0
  507. package/corpus/templates/crm/actions/update-crm-record.ts +543 -0
  508. package/corpus/templates/crm/actions/view-screen.ts +324 -0
  509. package/corpus/templates/crm/agent-native.app-skill.json +69 -0
  510. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +158 -0
  511. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +78 -0
  512. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +220 -0
  513. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +414 -0
  514. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +648 -0
  515. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +488 -0
  516. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +232 -0
  517. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +93 -0
  518. package/corpus/templates/crm/app/components/crm/Surface.tsx +97 -0
  519. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +180 -0
  520. package/corpus/templates/crm/app/components/crm/board/CrmBoard.tsx +988 -0
  521. package/corpus/templates/crm/app/components/crm/board/board-model.ts +399 -0
  522. package/corpus/templates/crm/app/components/crm/board/entry-filter.ts +150 -0
  523. package/corpus/templates/crm/app/components/crm/board/view-draft.ts +227 -0
  524. package/corpus/templates/crm/app/components/crm/grid/CrmGrid.tsx +1033 -0
  525. package/corpus/templates/crm/app/components/crm/grid/GridCell.tsx +620 -0
  526. package/corpus/templates/crm/app/components/crm/grid/clipboard.ts +84 -0
  527. package/corpus/templates/crm/app/components/crm/grid/model.ts +304 -0
  528. package/corpus/templates/crm/app/components/crm/grid/navigation.ts +220 -0
  529. package/corpus/templates/crm/app/components/crm/grid/query.ts +214 -0
  530. package/corpus/templates/crm/app/components/crm/record/AttributePanel.tsx +192 -0
  531. package/corpus/templates/crm/app/components/crm/record/FieldHistory.tsx +179 -0
  532. package/corpus/templates/crm/app/components/crm/record/RecordHeader.tsx +103 -0
  533. package/corpus/templates/crm/app/components/crm/record/RecordLists.tsx +235 -0
  534. package/corpus/templates/crm/app/components/crm/record/RecordTabs.tsx +206 -0
  535. package/corpus/templates/crm/app/components/crm/record/field-editors.tsx +245 -0
  536. package/corpus/templates/crm/app/components/crm/record/record-data.ts +603 -0
  537. package/corpus/templates/crm/app/components/crm/settings/AdvancedSettings.tsx +49 -0
  538. package/corpus/templates/crm/app/components/crm/settings/AttributeOptionsEditor.tsx +441 -0
  539. package/corpus/templates/crm/app/components/crm/settings/ConnectionSettings.tsx +169 -0
  540. package/corpus/templates/crm/app/components/crm/settings/FieldsSettings.tsx +935 -0
  541. package/corpus/templates/crm/app/components/crm/settings/ListsSettings.tsx +339 -0
  542. package/corpus/templates/crm/app/components/crm/settings/settings-admin.ts +377 -0
  543. package/corpus/templates/crm/app/components/crm/shared/AttributeValueParts.tsx +69 -0
  544. package/corpus/templates/crm/app/components/crm/shared/attribute-value.ts +591 -0
  545. package/corpus/templates/crm/app/components/layout/CrmCommandMenu.tsx +556 -0
  546. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +130 -0
  547. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +407 -0
  548. package/corpus/templates/crm/app/components/layout/command-palette-search.ts +126 -0
  549. package/corpus/templates/crm/app/components/layout/crm-ui-intents.ts +41 -0
  550. package/corpus/templates/crm/app/components/layout/sidebar-collapse.ts +40 -0
  551. package/corpus/templates/crm/app/components/layout/sidebar-lists.ts +109 -0
  552. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +1 -0
  553. package/corpus/templates/crm/app/components/ui/badge.tsx +1 -0
  554. package/corpus/templates/crm/app/components/ui/button.tsx +1 -0
  555. package/corpus/templates/crm/app/components/ui/card.tsx +1 -0
  556. package/corpus/templates/crm/app/components/ui/checkbox.tsx +1 -0
  557. package/corpus/templates/crm/app/components/ui/dialog.tsx +1 -0
  558. package/corpus/templates/crm/app/components/ui/dropdown-menu.tsx +1 -0
  559. package/corpus/templates/crm/app/components/ui/hover-card.tsx +1 -0
  560. package/corpus/templates/crm/app/components/ui/input.tsx +1 -0
  561. package/corpus/templates/crm/app/components/ui/label.tsx +1 -0
  562. package/corpus/templates/crm/app/components/ui/popover.tsx +1 -0
  563. package/corpus/templates/crm/app/components/ui/select.tsx +1 -0
  564. package/corpus/templates/crm/app/components/ui/sheet.tsx +1 -0
  565. package/corpus/templates/crm/app/components/ui/skeleton.tsx +1 -0
  566. package/corpus/templates/crm/app/components/ui/switch.tsx +1 -0
  567. package/corpus/templates/crm/app/components/ui/table.tsx +1 -0
  568. package/corpus/templates/crm/app/components/ui/tabs.tsx +1 -0
  569. package/corpus/templates/crm/app/components/ui/textarea.tsx +1 -0
  570. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +17 -0
  571. package/corpus/templates/crm/app/components/ui/tooltip.tsx +1 -0
  572. package/corpus/templates/crm/app/design-system.ts +3 -0
  573. package/corpus/templates/crm/app/entry.client.tsx +19 -0
  574. package/corpus/templates/crm/app/entry.server.tsx +10 -0
  575. package/corpus/templates/crm/app/global.css +167 -0
  576. package/corpus/templates/crm/app/hooks/use-keyboard-shortcuts.ts +206 -0
  577. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +48 -0
  578. package/corpus/templates/crm/app/i18n/en-US.ts +684 -0
  579. package/corpus/templates/crm/app/i18n/index.ts +34 -0
  580. package/corpus/templates/crm/app/lib/dashboard.ts +13 -0
  581. package/corpus/templates/crm/app/lib/navigation.ts +17 -0
  582. package/corpus/templates/crm/app/lib/tab-id.ts +1 -0
  583. package/corpus/templates/crm/app/lib/types.ts +172 -0
  584. package/corpus/templates/crm/app/lib/utils.ts +1 -0
  585. package/corpus/templates/crm/app/root.tsx +93 -0
  586. package/corpus/templates/crm/app/routes/_index.tsx +26 -0
  587. package/corpus/templates/crm/app/routes/accounts.tsx +41 -0
  588. package/corpus/templates/crm/app/routes/agent.tsx +5 -0
  589. package/corpus/templates/crm/app/routes/ask.tsx +53 -0
  590. package/corpus/templates/crm/app/routes/dashboard.tsx +118 -0
  591. package/corpus/templates/crm/app/routes/lists.tsx +228 -0
  592. package/corpus/templates/crm/app/routes/opportunities.tsx +41 -0
  593. package/corpus/templates/crm/app/routes/people.tsx +41 -0
  594. package/corpus/templates/crm/app/routes/proposals.tsx +388 -0
  595. package/corpus/templates/crm/app/routes/records.$recordId.tsx +53 -0
  596. package/corpus/templates/crm/app/routes/records.tsx +64 -0
  597. package/corpus/templates/crm/app/routes/settings.tsx +118 -0
  598. package/corpus/templates/crm/app/routes/setup.tsx +308 -0
  599. package/corpus/templates/crm/app/routes/tasks.tsx +252 -0
  600. package/corpus/templates/crm/app/routes/views.tsx +683 -0
  601. package/corpus/templates/crm/app/routes.ts +19 -0
  602. package/corpus/templates/crm/app/vite-env.d.ts +6 -0
  603. package/corpus/templates/crm/changelog/2026-07-26-any-list-or-view-can-be-shown-as-a-board-grouped-by-stage-so.md +6 -0
  604. package/corpus/templates/crm/changelog/2026-07-26-crm-now-finds-likely-duplicate-records-and-tells-you-exactly.md +6 -0
  605. package/corpus/templates/crm/changelog/2026-07-26-enrichment-now-shows-what-a-run-will-cost-before-it-starts-g.md +6 -0
  606. package/corpus/templates/crm/changelog/2026-07-26-lists-turn-any-set-of-records-into-a-pipeline-with-its-own-s.md +6 -0
  607. package/corpus/templates/crm/changelog/2026-07-26-moving-a-record-or-list-entry-into-a-stage-that-was-retired-.md +6 -0
  608. package/corpus/templates/crm/changelog/2026-07-26-opening-a-record-now-shows-one-page-with-its-fields-the-list.md +6 -0
  609. package/corpus/templates/crm/changelog/2026-07-26-press-cmd-k-to-jump-to-any-record-list-view-or-setting-and-u.md +6 -0
  610. package/corpus/templates/crm/changelog/2026-07-26-provider-record-edits-now-show-an-exact-before-after-diff-an.md +6 -0
  611. package/corpus/templates/crm/changelog/2026-07-26-record-page-attribute-labels-now-read-in-full-instead-of-bei.md +6 -0
  612. package/corpus/templates/crm/changelog/2026-07-26-records-now-use-typed-fields-currency-dates-ratings-status-s.md +6 -0
  613. package/corpus/templates/crm/changelog/2026-07-26-retyping-a-value-on-the-record-page-now-replaces-it-instead-.md +6 -0
  614. package/corpus/templates/crm/changelog/2026-07-26-settings-now-has-fields-and-lists-tabs-for-adding-fields-edi.md +6 -0
  615. package/corpus/templates/crm/changelog/2026-07-26-the-proposal-review-now-shows-the-field-that-actually-change.md +6 -0
  616. package/corpus/templates/crm/changelog/2026-07-26-the-record-grid-is-now-a-real-spreadsheet-filter-sort-and-pa.md +6 -0
  617. package/corpus/templates/crm/components.json +20 -0
  618. package/corpus/templates/crm/docs/architecture/crm-contract.md +214 -0
  619. package/corpus/templates/crm/docs/features/README.md +55 -0
  620. package/corpus/templates/crm/docs/features/f1-records-and-fields.mdx +52 -0
  621. package/corpus/templates/crm/docs/features/f2-lists-pipelines-and-views.mdx +48 -0
  622. package/corpus/templates/crm/docs/features/f3-work-and-record-quality.mdx +40 -0
  623. package/corpus/templates/crm/docs/features/f4-evidence-and-chat.mdx +47 -0
  624. package/corpus/templates/crm/learnings.defaults.md +5 -0
  625. package/corpus/templates/crm/netlify.toml +11 -0
  626. package/corpus/templates/crm/package.json +61 -0
  627. package/corpus/templates/crm/public/favicon.svg +1 -0
  628. package/corpus/templates/crm/public/icon-180.svg +1 -0
  629. package/corpus/templates/crm/public/manifest.json +11 -0
  630. package/corpus/templates/crm/react-router.config.ts +7 -0
  631. package/corpus/templates/crm/server/crm/adapter.ts +32 -0
  632. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +64 -0
  633. package/corpus/templates/crm/server/crm/crm-mirror.ts +721 -0
  634. package/corpus/templates/crm/server/crm/field-policy-attributes.ts +48 -0
  635. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +1146 -0
  636. package/corpus/templates/crm/server/crm/native-adapter.ts +1810 -0
  637. package/corpus/templates/crm/server/crm/provider-record-link.ts +264 -0
  638. package/corpus/templates/crm/server/crm/read-through.ts +207 -0
  639. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +1255 -0
  640. package/corpus/templates/crm/server/db/crm-store.ts +1112 -0
  641. package/corpus/templates/crm/server/db/index.ts +191 -0
  642. package/corpus/templates/crm/server/db/schema.ts +647 -0
  643. package/corpus/templates/crm/server/lib/crm-query.ts +1558 -0
  644. package/corpus/templates/crm/server/lib/dedupe.ts +714 -0
  645. package/corpus/templates/crm/server/lib/enrichment-cost.ts +381 -0
  646. package/corpus/templates/crm/server/lib/enrichment-slots.ts +519 -0
  647. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +65 -0
  648. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +105 -0
  649. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +94 -0
  650. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +39 -0
  651. package/corpus/templates/crm/server/lib/intelligence/summary.ts +19 -0
  652. package/corpus/templates/crm/server/lib/lifecycle.ts +634 -0
  653. package/corpus/templates/crm/server/lib/provider-api.ts +64 -0
  654. package/corpus/templates/crm/server/middleware/auth.ts +4 -0
  655. package/corpus/templates/crm/server/plugins/agent-chat.ts +65 -0
  656. package/corpus/templates/crm/server/plugins/auth.ts +14 -0
  657. package/corpus/templates/crm/server/plugins/core-routes.ts +17 -0
  658. package/corpus/templates/crm/server/plugins/db.ts +738 -0
  659. package/corpus/templates/crm/server/routes/[...page].get.ts +5 -0
  660. package/corpus/templates/crm/shared/crm-attributes.ts +469 -0
  661. package/corpus/templates/crm/shared/crm-automation-recipes.ts +132 -0
  662. package/corpus/templates/crm/shared/crm-contract.ts +417 -0
  663. package/corpus/templates/crm/shared/crm-navigation.ts +190 -0
  664. package/corpus/templates/crm/shared/crm-sales-config.ts +63 -0
  665. package/corpus/templates/crm/ssr-entry.ts +11 -0
  666. package/corpus/templates/crm/tsconfig.json +24 -0
  667. package/corpus/templates/crm/vite.config.ts +15 -0
  668. package/corpus/templates/crm/vitest.config.ts +5 -0
  669. package/corpus/templates/design/.agents/skills/actions/SKILL.md +19 -1
  670. package/corpus/templates/design/.agents/skills/design-generation/SKILL.md +16 -0
  671. package/corpus/templates/design/.agents/skills/design-systems/SKILL.md +15 -0
  672. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +20 -6
  673. package/corpus/templates/design/.agents/skills/full-app-build/SKILL.md +12 -0
  674. package/corpus/templates/design/.agents/skills/security/SKILL.md +2 -0
  675. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +4 -3
  676. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +7 -3
  677. package/corpus/templates/design/.agents/skills/sharing/SKILL.md +228 -0
  678. package/corpus/templates/design/.agents/skills/storing-data/SKILL.md +178 -0
  679. package/corpus/templates/design/.agents/skills/visual-edit/SKILL.md +201 -102
  680. package/corpus/templates/design/AGENTS.md +58 -71
  681. package/corpus/templates/design/actions/open-visual-edit.ts +111 -2
  682. package/corpus/templates/design/app/components/design/AddLocalhostScreenDialog.tsx +236 -0
  683. package/corpus/templates/design/app/components/design/DesignCanvas.tsx +1 -1
  684. package/corpus/templates/design/app/components/design/MultiScreenCanvas.tsx +2 -2
  685. package/corpus/templates/design/app/entry.client.tsx +3 -0
  686. package/corpus/templates/design/app/i18n-data.ts +192 -12
  687. package/corpus/templates/design/app/pages/Present.tsx +6 -9
  688. package/corpus/templates/design/app/pages/VisualEdit.tsx +4 -7
  689. package/corpus/templates/design/app/pages/design-editor/design-data-geometry-utils.ts +20 -0
  690. package/corpus/templates/design/changelog/2026-07-26-apply-design-updates-from-a-centered-top-toolbar-without-cov.md +6 -0
  691. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +19 -1
  692. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +20 -6
  693. package/corpus/templates/dispatch/.agents/skills/security/SKILL.md +2 -0
  694. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +4 -3
  695. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +7 -3
  696. package/corpus/templates/dispatch/.agents/skills/sharing/SKILL.md +228 -0
  697. package/corpus/templates/dispatch/.agents/skills/storing-data/SKILL.md +178 -0
  698. package/corpus/templates/dispatch/app/entry.client.tsx +3 -0
  699. package/corpus/templates/dispatch/server/plugins/identity-sso.ts +27 -16
  700. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +19 -1
  701. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +20 -6
  702. package/corpus/templates/forms/.agents/skills/security/SKILL.md +2 -0
  703. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +4 -3
  704. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +7 -3
  705. package/corpus/templates/forms/.agents/skills/sharing/SKILL.md +228 -0
  706. package/corpus/templates/forms/DEVELOPING.md +1 -1
  707. package/corpus/templates/forms/app/entry.client.tsx +3 -0
  708. package/corpus/templates/forms/app/pages/FormsListPage.tsx +3 -5
  709. package/corpus/templates/forms/app/routes/_app.tsx +4 -4
  710. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +20 -6
  711. package/corpus/templates/macros/.agents/skills/security/SKILL.md +2 -0
  712. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +7 -3
  713. package/corpus/templates/macros/.agents/skills/sharing/SKILL.md +228 -0
  714. package/corpus/templates/macros/.agents/skills/storing-data/SKILL.md +178 -0
  715. package/corpus/templates/macros/app/entry.client.tsx +3 -0
  716. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +19 -1
  717. package/corpus/templates/mail/.agents/skills/contacts-and-crm/SKILL.md +10 -0
  718. package/corpus/templates/mail/.agents/skills/draft-queue/SKILL.md +3 -0
  719. package/corpus/templates/mail/.agents/skills/email-drafts/SKILL.md +26 -2
  720. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +20 -6
  721. package/corpus/templates/mail/.agents/skills/inbox-automations/SKILL.md +37 -0
  722. package/corpus/templates/mail/.agents/skills/inbox-reads-and-triage/SKILL.md +58 -0
  723. package/corpus/templates/mail/.agents/skills/mail-backends/SKILL.md +33 -0
  724. package/corpus/templates/mail/.agents/skills/provider-api-scans/SKILL.md +39 -0
  725. package/corpus/templates/mail/.agents/skills/security/SKILL.md +2 -0
  726. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +4 -3
  727. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +7 -3
  728. package/corpus/templates/mail/.agents/skills/sharing/SKILL.md +228 -0
  729. package/corpus/templates/mail/AGENTS.md +74 -143
  730. package/corpus/templates/mail/actions/create-alias.ts +36 -0
  731. package/corpus/templates/mail/actions/create-automation.ts +28 -0
  732. package/corpus/templates/mail/actions/create-scheduled-job.ts +45 -0
  733. package/corpus/templates/mail/actions/delete-alias.ts +26 -0
  734. package/corpus/templates/mail/actions/delete-automation.ts +21 -0
  735. package/corpus/templates/mail/actions/get-automation-settings.ts +32 -0
  736. package/corpus/templates/mail/actions/get-mail-preferences.ts +18 -0
  737. package/corpus/templates/mail/actions/list-aliases.ts +17 -0
  738. package/corpus/templates/mail/actions/list-automations.ts +18 -0
  739. package/corpus/templates/mail/actions/list-scheduled-jobs.ts +18 -0
  740. package/corpus/templates/mail/actions/update-alias.ts +37 -0
  741. package/corpus/templates/mail/actions/update-automation-settings.ts +33 -0
  742. package/corpus/templates/mail/actions/update-automation.ts +33 -0
  743. package/corpus/templates/mail/actions/update-mail-preferences.ts +68 -0
  744. package/corpus/templates/mail/actions/update-scheduled-job.ts +25 -0
  745. package/corpus/templates/mail/app/entry.client.tsx +3 -0
  746. package/corpus/templates/mail/app/hooks/use-aliases.ts +6 -36
  747. package/corpus/templates/mail/app/hooks/use-automations.ts +9 -16
  748. package/corpus/templates/mail/app/hooks/use-emails.ts +6 -5
  749. package/corpus/templates/mail/app/hooks/use-scheduled-jobs.ts +12 -15
  750. package/corpus/templates/mail/app/pages/SettingsPage.tsx +15 -9
  751. package/corpus/templates/mail/server/handlers/automations.ts +5 -142
  752. package/corpus/templates/mail/server/handlers/emails.ts +1 -56
  753. package/corpus/templates/mail/server/handlers/scheduled-jobs.ts +0 -134
  754. package/corpus/templates/mail/server/lib/aliases.ts +18 -0
  755. package/corpus/templates/mail/server/lib/automations.ts +104 -0
  756. package/corpus/templates/mail/server/lib/jobs.ts +34 -0
  757. package/corpus/templates/mail/server/lib/mail-settings.ts +43 -0
  758. package/corpus/templates/mail/shared/automation-schema.ts +10 -0
  759. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +19 -1
  760. package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +2 -0
  761. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +20 -6
  762. package/corpus/templates/plan/.agents/skills/plan-authoring-flow/SKILL.md +98 -0
  763. package/corpus/templates/plan/.agents/skills/plan-browser-editing/SKILL.md +42 -0
  764. package/corpus/templates/plan/.agents/skills/plan-comments-and-feedback/SKILL.md +68 -0
  765. package/corpus/templates/plan/.agents/skills/plan-events/SKILL.md +22 -0
  766. package/corpus/templates/plan/.agents/skills/plan-hosted-writes/SKILL.md +42 -0
  767. package/corpus/templates/plan/.agents/skills/plan-local-codebase-chat/SKILL.md +38 -0
  768. package/corpus/templates/plan/.agents/skills/plan-review-recaps/SKILL.md +25 -0
  769. package/corpus/templates/plan/.agents/skills/plan-source-sync/SKILL.md +68 -0
  770. package/corpus/templates/plan/.agents/skills/plan-version-history/SKILL.md +25 -0
  771. package/corpus/templates/plan/.agents/skills/security/SKILL.md +2 -0
  772. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +4 -3
  773. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +7 -3
  774. package/corpus/templates/plan/.agents/skills/sharing/SKILL.md +228 -0
  775. package/corpus/templates/plan/.agents/skills/storing-data/SKILL.md +178 -0
  776. package/corpus/templates/plan/AGENTS.md +64 -296
  777. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +9 -8
  778. package/corpus/templates/plan/app/pages/PlansPage.tsx +5 -10
  779. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +19 -1
  780. package/corpus/templates/slides/.agents/skills/deck-management/SKILL.md +7 -7
  781. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +20 -6
  782. package/corpus/templates/slides/.agents/skills/security/SKILL.md +2 -0
  783. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +4 -3
  784. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +7 -3
  785. package/corpus/templates/slides/.agents/skills/sharing/SKILL.md +228 -0
  786. package/corpus/templates/slides/.agents/skills/slide-editing/SKILL.md +3 -2
  787. package/corpus/templates/slides/.agents/skills/storing-data/SKILL.md +178 -0
  788. package/corpus/templates/slides/DEVELOPING.md +3 -3
  789. package/corpus/templates/slides/actions/_deck-write.ts +52 -0
  790. package/corpus/templates/slides/actions/add-deck.ts +73 -0
  791. package/corpus/templates/slides/actions/delete-deck.ts +60 -0
  792. package/corpus/templates/slides/actions/get-deck.ts +3 -1
  793. package/corpus/templates/slides/actions/save-deck.ts +144 -0
  794. package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +27 -20
  795. package/corpus/templates/slides/app/context/DeckContext.tsx +173 -100
  796. package/corpus/templates/slides/app/pages/Index.tsx +3 -6
  797. package/corpus/templates/slides/app/routes/slide.tsx +16 -12
  798. package/corpus/templates/slides/changelog/2026-07-26-a-newly-created-deck-now-appears-in-the-deck-list-right-away.md +6 -0
  799. package/corpus/templates/slides/server/handlers/decks.ts +2 -378
  800. package/corpus/templates/tasks/.agents/skills/action-reference/SKILL.md +47 -0
  801. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +19 -1
  802. package/corpus/templates/tasks/.agents/skills/adding-a-feature/SKILL.md +2 -0
  803. package/corpus/templates/tasks/.agents/skills/change-summary/SKILL.md +19 -1
  804. package/corpus/templates/tasks/.agents/skills/custom-fields/SKILL.md +63 -0
  805. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +20 -6
  806. package/corpus/templates/tasks/.agents/skills/security/SKILL.md +2 -0
  807. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +4 -3
  808. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +7 -3
  809. package/corpus/templates/tasks/.agents/skills/sharing/SKILL.md +228 -0
  810. package/corpus/templates/tasks/.agents/skills/store-conventions/SKILL.md +45 -0
  811. package/corpus/templates/tasks/.agents/skills/storing-data/SKILL.md +178 -0
  812. package/corpus/templates/tasks/.agents/skills/task-inbox-workflow/SKILL.md +66 -0
  813. package/corpus/templates/tasks/AGENTS.md +48 -113
  814. package/corpus/templates/tasks/app/entry.client.tsx +3 -0
  815. package/corpus/toolkit/CHANGELOG.md +12 -0
  816. package/corpus/toolkit/package.json +1 -1
  817. package/corpus/toolkit/src/composer/PromptComposer.tsx +23 -20
  818. package/dist/a2a/client.d.ts +3 -1
  819. package/dist/a2a/client.d.ts.map +1 -1
  820. package/dist/a2a/client.js +4 -2
  821. package/dist/a2a/client.js.map +1 -1
  822. package/dist/agent/action-warnings.d.ts +27 -0
  823. package/dist/agent/action-warnings.d.ts.map +1 -0
  824. package/dist/agent/action-warnings.js +73 -0
  825. package/dist/agent/action-warnings.js.map +1 -0
  826. package/dist/agent/durable-background.d.ts +8 -0
  827. package/dist/agent/durable-background.d.ts.map +1 -1
  828. package/dist/agent/durable-background.js +37 -5
  829. package/dist/agent/durable-background.js.map +1 -1
  830. package/dist/agent/engine/ai-sdk-engine.d.ts.map +1 -1
  831. package/dist/agent/engine/ai-sdk-engine.js +47 -6
  832. package/dist/agent/engine/ai-sdk-engine.js.map +1 -1
  833. package/dist/agent/engine/anthropic-engine.d.ts.map +1 -1
  834. package/dist/agent/engine/anthropic-engine.js +41 -9
  835. package/dist/agent/engine/anthropic-engine.js.map +1 -1
  836. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  837. package/dist/agent/engine/builder-engine.js +46 -19
  838. package/dist/agent/engine/builder-engine.js.map +1 -1
  839. package/dist/agent/engine/continuation-dispatch-retry.d.ts.map +1 -1
  840. package/dist/agent/engine/continuation-dispatch-retry.js +11 -9
  841. package/dist/agent/engine/continuation-dispatch-retry.js.map +1 -1
  842. package/dist/agent/engine/credential-errors.d.ts +6 -0
  843. package/dist/agent/engine/credential-errors.d.ts.map +1 -1
  844. package/dist/agent/engine/credential-errors.js +10 -0
  845. package/dist/agent/engine/credential-errors.js.map +1 -1
  846. package/dist/agent/engine/error-detail.d.ts +2 -0
  847. package/dist/agent/engine/error-detail.d.ts.map +1 -0
  848. package/dist/agent/engine/error-detail.js +37 -0
  849. package/dist/agent/engine/error-detail.js.map +1 -0
  850. package/dist/agent/engine/prompt-cache.d.ts +34 -0
  851. package/dist/agent/engine/prompt-cache.d.ts.map +1 -0
  852. package/dist/agent/engine/prompt-cache.js +39 -0
  853. package/dist/agent/engine/prompt-cache.js.map +1 -0
  854. package/dist/agent/engine/registry.d.ts.map +1 -1
  855. package/dist/agent/engine/registry.js +23 -33
  856. package/dist/agent/engine/registry.js.map +1 -1
  857. package/dist/agent/engine/tool-call-journal-seed.d.ts +1 -1
  858. package/dist/agent/engine/tool-call-journal-seed.d.ts.map +1 -1
  859. package/dist/agent/engine/tool-call-journal-seed.js +2 -2
  860. package/dist/agent/engine/tool-call-journal-seed.js.map +1 -1
  861. package/dist/agent/engine/translate-anthropic.d.ts +28 -0
  862. package/dist/agent/engine/translate-anthropic.d.ts.map +1 -1
  863. package/dist/agent/engine/translate-anthropic.js +75 -0
  864. package/dist/agent/engine/translate-anthropic.js.map +1 -1
  865. package/dist/agent/loop-settings.d.ts +35 -2
  866. package/dist/agent/loop-settings.d.ts.map +1 -1
  867. package/dist/agent/loop-settings.js +71 -8
  868. package/dist/agent/loop-settings.js.map +1 -1
  869. package/dist/agent/production-agent.d.ts +105 -20
  870. package/dist/agent/production-agent.d.ts.map +1 -1
  871. package/dist/agent/production-agent.js +516 -123
  872. package/dist/agent/production-agent.js.map +1 -1
  873. package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
  874. package/dist/agent/run-loop-with-resume.js +24 -2
  875. package/dist/agent/run-loop-with-resume.js.map +1 -1
  876. package/dist/agent/run-manager.d.ts +52 -9
  877. package/dist/agent/run-manager.d.ts.map +1 -1
  878. package/dist/agent/run-manager.js +191 -36
  879. package/dist/agent/run-manager.js.map +1 -1
  880. package/dist/agent/run-store.d.ts +87 -14
  881. package/dist/agent/run-store.d.ts.map +1 -1
  882. package/dist/agent/run-store.js +331 -59
  883. package/dist/agent/run-store.js.map +1 -1
  884. package/dist/agent/thread-data-builder.d.ts.map +1 -1
  885. package/dist/agent/thread-data-builder.js +6 -1
  886. package/dist/agent/thread-data-builder.js.map +1 -1
  887. package/dist/agent/types.d.ts +18 -6
  888. package/dist/agent/types.d.ts.map +1 -1
  889. package/dist/agent/types.js +9 -5
  890. package/dist/agent/types.js.map +1 -1
  891. package/dist/application-state/script-helpers.d.ts.map +1 -1
  892. package/dist/application-state/script-helpers.js +2 -2
  893. package/dist/application-state/script-helpers.js.map +1 -1
  894. package/dist/cli/agents.d.ts +2 -0
  895. package/dist/cli/agents.d.ts.map +1 -1
  896. package/dist/cli/agents.js +48 -1
  897. package/dist/cli/agents.js.map +1 -1
  898. package/dist/cli/app-skill.js +1 -1
  899. package/dist/cli/app-skill.js.map +1 -1
  900. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  901. package/dist/cli/code-agent-executor.js +3 -3
  902. package/dist/cli/code-agent-executor.js.map +1 -1
  903. package/dist/cli/design-connect.d.ts.map +1 -1
  904. package/dist/cli/design-connect.js +73 -8
  905. package/dist/cli/design-connect.js.map +1 -1
  906. package/dist/cli/skills-content/design-visual-edit-skill.d.ts +1 -1
  907. package/dist/cli/skills-content/design-visual-edit-skill.d.ts.map +1 -1
  908. package/dist/cli/skills-content/design-visual-edit-skill.js +169 -24
  909. package/dist/cli/skills-content/design-visual-edit-skill.js.map +1 -1
  910. package/dist/cli/templates-meta.d.ts.map +1 -1
  911. package/dist/cli/templates-meta.js +12 -0
  912. package/dist/cli/templates-meta.js.map +1 -1
  913. package/dist/client/AssistantChat.d.ts.map +1 -1
  914. package/dist/client/AssistantChat.js +135 -125
  915. package/dist/client/AssistantChat.js.map +1 -1
  916. package/dist/client/agent-chat-adapter.d.ts +17 -0
  917. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  918. package/dist/client/agent-chat-adapter.js +141 -31
  919. package/dist/client/agent-chat-adapter.js.map +1 -1
  920. package/dist/client/chat/message-components.d.ts +9 -1
  921. package/dist/client/chat/message-components.d.ts.map +1 -1
  922. package/dist/client/chat/message-components.js +12 -1
  923. package/dist/client/chat/message-components.js.map +1 -1
  924. package/dist/client/embed-auth.d.ts.map +1 -1
  925. package/dist/client/embed-auth.js +3 -1
  926. package/dist/client/embed-auth.js.map +1 -1
  927. package/dist/client/integrations/IntegrationCard.d.ts.map +1 -1
  928. package/dist/client/integrations/IntegrationCard.js +9 -4
  929. package/dist/client/integrations/IntegrationCard.js.map +1 -1
  930. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  931. package/dist/client/integrations/IntegrationsPanel.js +13 -7
  932. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  933. package/dist/client/integrations/webhook-url.d.ts +7 -0
  934. package/dist/client/integrations/webhook-url.d.ts.map +1 -0
  935. package/dist/client/integrations/webhook-url.js +32 -0
  936. package/dist/client/integrations/webhook-url.js.map +1 -0
  937. package/dist/client/org/OrgSwitcher.d.ts.map +1 -1
  938. package/dist/client/org/OrgSwitcher.js +13 -11
  939. package/dist/client/org/OrgSwitcher.js.map +1 -1
  940. package/dist/client/org/RequireActiveOrg.d.ts.map +1 -1
  941. package/dist/client/org/RequireActiveOrg.js +2 -2
  942. package/dist/client/org/RequireActiveOrg.js.map +1 -1
  943. package/dist/client/org/TeamPage.d.ts.map +1 -1
  944. package/dist/client/org/TeamPage.js +52 -13
  945. package/dist/client/org/TeamPage.js.map +1 -1
  946. package/dist/client/org/hooks.d.ts +9 -0
  947. package/dist/client/org/hooks.d.ts.map +1 -1
  948. package/dist/client/org/hooks.js +24 -0
  949. package/dist/client/org/hooks.js.map +1 -1
  950. package/dist/client/org/index.d.ts +1 -1
  951. package/dist/client/org/index.d.ts.map +1 -1
  952. package/dist/client/org/index.js +1 -1
  953. package/dist/client/org/index.js.map +1 -1
  954. package/dist/client/require-session.d.ts +12 -17
  955. package/dist/client/require-session.d.ts.map +1 -1
  956. package/dist/client/require-session.js +36 -23
  957. package/dist/client/require-session.js.map +1 -1
  958. package/dist/client/session-replay.js +1 -1
  959. package/dist/client/session-replay.js.map +1 -1
  960. package/dist/client/settings/DemoModeSection.d.ts +0 -1
  961. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  962. package/dist/client/settings/DemoModeSection.js +0 -4
  963. package/dist/client/settings/DemoModeSection.js.map +1 -1
  964. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  965. package/dist/client/settings/SecretsSection.js +12 -8
  966. package/dist/client/settings/SecretsSection.js.map +1 -1
  967. package/dist/client/settings/VoiceTranscriptionSection.d.ts +0 -1
  968. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  969. package/dist/client/settings/VoiceTranscriptionSection.js +1 -4
  970. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  971. package/dist/client/sse-event-processor.d.ts +33 -1
  972. package/dist/client/sse-event-processor.d.ts.map +1 -1
  973. package/dist/client/sse-event-processor.js +83 -8
  974. package/dist/client/sse-event-processor.js.map +1 -1
  975. package/dist/client/use-action.d.ts.map +1 -1
  976. package/dist/client/use-action.js +23 -14
  977. package/dist/client/use-action.js.map +1 -1
  978. package/dist/client/use-agent-engine-configured.d.ts +9 -3
  979. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  980. package/dist/client/use-agent-engine-configured.js +30 -3
  981. package/dist/client/use-agent-engine-configured.js.map +1 -1
  982. package/dist/client/use-db-sync.d.ts +3 -0
  983. package/dist/client/use-db-sync.d.ts.map +1 -1
  984. package/dist/client/use-db-sync.js +18 -1
  985. package/dist/client/use-db-sync.js.map +1 -1
  986. package/dist/collab/awareness.d.ts +2 -2
  987. package/dist/collab/awareness.d.ts.map +1 -1
  988. package/dist/credentials/index.d.ts +29 -1
  989. package/dist/credentials/index.d.ts.map +1 -1
  990. package/dist/credentials/index.js +111 -2
  991. package/dist/credentials/index.js.map +1 -1
  992. package/dist/deploy/build.d.ts +14 -3
  993. package/dist/deploy/build.d.ts.map +1 -1
  994. package/dist/deploy/build.js +81 -24
  995. package/dist/deploy/build.js.map +1 -1
  996. package/dist/deploy/workspace-deploy.d.ts +15 -0
  997. package/dist/deploy/workspace-deploy.d.ts.map +1 -1
  998. package/dist/deploy/workspace-deploy.js +19 -18
  999. package/dist/deploy/workspace-deploy.js.map +1 -1
  1000. package/dist/file-upload/actions/upload-image.d.ts +2 -2
  1001. package/dist/guards/no-localhost-fallback.d.ts +7 -0
  1002. package/dist/guards/no-localhost-fallback.d.ts.map +1 -1
  1003. package/dist/guards/no-localhost-fallback.js +75 -16
  1004. package/dist/guards/no-localhost-fallback.js.map +1 -1
  1005. package/dist/integrations/google-docs-poller.d.ts.map +1 -1
  1006. package/dist/integrations/google-docs-poller.js +8 -3
  1007. package/dist/integrations/google-docs-poller.js.map +1 -1
  1008. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  1009. package/dist/integrations/webhook-handler.js +22 -4
  1010. package/dist/integrations/webhook-handler.js.map +1 -1
  1011. package/dist/jobs/scheduler.d.ts +17 -0
  1012. package/dist/jobs/scheduler.d.ts.map +1 -1
  1013. package/dist/jobs/scheduler.js +60 -33
  1014. package/dist/jobs/scheduler.js.map +1 -1
  1015. package/dist/localization/default-messages.d.ts +17 -1
  1016. package/dist/localization/default-messages.d.ts.map +1 -1
  1017. package/dist/localization/default-messages.js +17 -1
  1018. package/dist/localization/default-messages.js.map +1 -1
  1019. package/dist/notifications/routes.d.ts +1 -1
  1020. package/dist/observability/evals.d.ts.map +1 -1
  1021. package/dist/observability/evals.js +7 -10
  1022. package/dist/observability/evals.js.map +1 -1
  1023. package/dist/observability/routes.d.ts +3 -3
  1024. package/dist/observability/traces.d.ts +2 -0
  1025. package/dist/observability/traces.d.ts.map +1 -1
  1026. package/dist/observability/traces.js.map +1 -1
  1027. package/dist/org/accept-pending.js +2 -2
  1028. package/dist/org/accept-pending.js.map +1 -1
  1029. package/dist/org/active-org.d.ts +16 -0
  1030. package/dist/org/active-org.d.ts.map +1 -0
  1031. package/dist/org/active-org.js +57 -0
  1032. package/dist/org/active-org.js.map +1 -0
  1033. package/dist/org/auto-join-domain.d.ts.map +1 -1
  1034. package/dist/org/auto-join-domain.js +3 -2
  1035. package/dist/org/auto-join-domain.js.map +1 -1
  1036. package/dist/org/context.d.ts +19 -1
  1037. package/dist/org/context.d.ts.map +1 -1
  1038. package/dist/org/context.js +159 -71
  1039. package/dist/org/context.js.map +1 -1
  1040. package/dist/org/handlers.d.ts +24 -1
  1041. package/dist/org/handlers.d.ts.map +1 -1
  1042. package/dist/org/handlers.js +129 -10
  1043. package/dist/org/handlers.js.map +1 -1
  1044. package/dist/org/plugin.d.ts +2 -0
  1045. package/dist/org/plugin.d.ts.map +1 -1
  1046. package/dist/org/plugin.js +9 -2
  1047. package/dist/org/plugin.js.map +1 -1
  1048. package/dist/org/types.d.ts +6 -1
  1049. package/dist/org/types.d.ts.map +1 -1
  1050. package/dist/org/types.js.map +1 -1
  1051. package/dist/progress/routes.d.ts +1 -1
  1052. package/dist/provider-api/actions/custom-provider-registration.d.ts +9 -9
  1053. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  1054. package/dist/provider-api/index.d.ts.map +1 -1
  1055. package/dist/provider-api/index.js +3 -2
  1056. package/dist/provider-api/index.js.map +1 -1
  1057. package/dist/resources/handlers.d.ts +1 -1
  1058. package/dist/resources/handlers.d.ts.map +1 -1
  1059. package/dist/resources/handlers.js +2 -7
  1060. package/dist/resources/handlers.js.map +1 -1
  1061. package/dist/resources/script-helpers.d.ts.map +1 -1
  1062. package/dist/resources/script-helpers.js +2 -2
  1063. package/dist/resources/script-helpers.js.map +1 -1
  1064. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  1065. package/dist/scripts/chat/search-chats.js +2 -2
  1066. package/dist/scripts/chat/search-chats.js.map +1 -1
  1067. package/dist/scripts/describe-workspace-apps.d.ts +4 -0
  1068. package/dist/scripts/describe-workspace-apps.d.ts.map +1 -0
  1069. package/dist/scripts/describe-workspace-apps.js +34 -0
  1070. package/dist/scripts/describe-workspace-apps.js.map +1 -0
  1071. package/dist/scripts/resources/delete-memory.d.ts.map +1 -1
  1072. package/dist/scripts/resources/delete-memory.js +2 -2
  1073. package/dist/scripts/resources/delete-memory.js.map +1 -1
  1074. package/dist/scripts/resources/delete.d.ts.map +1 -1
  1075. package/dist/scripts/resources/delete.js +2 -2
  1076. package/dist/scripts/resources/delete.js.map +1 -1
  1077. package/dist/scripts/resources/effective.d.ts.map +1 -1
  1078. package/dist/scripts/resources/effective.js +2 -2
  1079. package/dist/scripts/resources/effective.js.map +1 -1
  1080. package/dist/scripts/resources/list.d.ts.map +1 -1
  1081. package/dist/scripts/resources/list.js +2 -2
  1082. package/dist/scripts/resources/list.js.map +1 -1
  1083. package/dist/scripts/resources/read.d.ts.map +1 -1
  1084. package/dist/scripts/resources/read.js +2 -2
  1085. package/dist/scripts/resources/read.js.map +1 -1
  1086. package/dist/scripts/resources/save-memory.d.ts.map +1 -1
  1087. package/dist/scripts/resources/save-memory.js +2 -2
  1088. package/dist/scripts/resources/save-memory.js.map +1 -1
  1089. package/dist/scripts/resources/write.d.ts.map +1 -1
  1090. package/dist/scripts/resources/write.js +2 -2
  1091. package/dist/scripts/resources/write.js.map +1 -1
  1092. package/dist/secrets/routes.d.ts +9 -9
  1093. package/dist/server/agent-capabilities.d.ts +21 -0
  1094. package/dist/server/agent-capabilities.d.ts.map +1 -0
  1095. package/dist/server/agent-capabilities.js +106 -0
  1096. package/dist/server/agent-capabilities.js.map +1 -0
  1097. package/dist/server/agent-chat/framework-prompts.d.ts.map +1 -1
  1098. package/dist/server/agent-chat/framework-prompts.js +11 -13
  1099. package/dist/server/agent-chat/framework-prompts.js.map +1 -1
  1100. package/dist/server/agent-chat/prompt-resources.d.ts +32 -0
  1101. package/dist/server/agent-chat/prompt-resources.d.ts.map +1 -1
  1102. package/dist/server/agent-chat/prompt-resources.js +117 -56
  1103. package/dist/server/agent-chat/prompt-resources.js.map +1 -1
  1104. package/dist/server/agent-chat/script-entries.d.ts.map +1 -1
  1105. package/dist/server/agent-chat/script-entries.js +18 -8
  1106. package/dist/server/agent-chat/script-entries.js.map +1 -1
  1107. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  1108. package/dist/server/agent-chat-plugin.js +27 -1
  1109. package/dist/server/agent-chat-plugin.js.map +1 -1
  1110. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  1111. package/dist/server/auth.d.ts +9 -9
  1112. package/dist/server/auth.d.ts.map +1 -1
  1113. package/dist/server/auth.js +32 -33
  1114. package/dist/server/auth.js.map +1 -1
  1115. package/dist/server/core-routes-plugin.d.ts +45 -0
  1116. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  1117. package/dist/server/core-routes-plugin.js +162 -139
  1118. package/dist/server/core-routes-plugin.js.map +1 -1
  1119. package/dist/server/credential-provider.d.ts +35 -2
  1120. package/dist/server/credential-provider.d.ts.map +1 -1
  1121. package/dist/server/credential-provider.js +155 -40
  1122. package/dist/server/credential-provider.js.map +1 -1
  1123. package/dist/server/embed-session.d.ts.map +1 -1
  1124. package/dist/server/embed-session.js +10 -0
  1125. package/dist/server/embed-session.js.map +1 -1
  1126. package/dist/server/framework-request-handler.d.ts.map +1 -1
  1127. package/dist/server/framework-request-handler.js +38 -0
  1128. package/dist/server/framework-request-handler.js.map +1 -1
  1129. package/dist/server/google-auth-plugin.d.ts.map +1 -1
  1130. package/dist/server/google-auth-plugin.js +12 -444
  1131. package/dist/server/google-auth-plugin.js.map +1 -1
  1132. package/dist/server/index.d.ts +2 -2
  1133. package/dist/server/index.d.ts.map +1 -1
  1134. package/dist/server/index.js +2 -2
  1135. package/dist/server/index.js.map +1 -1
  1136. package/dist/server/onboarding-html.d.ts.map +1 -1
  1137. package/dist/server/onboarding-html.js +20 -56
  1138. package/dist/server/onboarding-html.js.map +1 -1
  1139. package/dist/server/open-route.d.ts.map +1 -1
  1140. package/dist/server/open-route.js +6 -1
  1141. package/dist/server/open-route.js.map +1 -1
  1142. package/dist/server/poll.js +1 -1
  1143. package/dist/server/poll.js.map +1 -1
  1144. package/dist/server/prompts/framework-core-compact.d.ts.map +1 -1
  1145. package/dist/server/prompts/framework-core-compact.js +5 -6
  1146. package/dist/server/prompts/framework-core-compact.js.map +1 -1
  1147. package/dist/server/prompts/framework-core.d.ts.map +1 -1
  1148. package/dist/server/prompts/framework-core.js +7 -10
  1149. package/dist/server/prompts/framework-core.js.map +1 -1
  1150. package/dist/server/prompts/shared-rules.d.ts +20 -2
  1151. package/dist/server/prompts/shared-rules.d.ts.map +1 -1
  1152. package/dist/server/prompts/shared-rules.js +20 -10
  1153. package/dist/server/prompts/shared-rules.js.map +1 -1
  1154. package/dist/server/realtime-token.d.ts +1 -1
  1155. package/dist/server/request-context.d.ts +26 -1
  1156. package/dist/server/request-context.d.ts.map +1 -1
  1157. package/dist/server/request-context.js +52 -2
  1158. package/dist/server/request-context.js.map +1 -1
  1159. package/dist/server/scoped-key-storage.js +1 -1
  1160. package/dist/server/scoped-key-storage.js.map +1 -1
  1161. package/dist/server/transcribe-voice.d.ts +1 -1
  1162. package/dist/settings/org-settings.d.ts +2 -0
  1163. package/dist/settings/org-settings.d.ts.map +1 -1
  1164. package/dist/settings/org-settings.js +5 -1
  1165. package/dist/settings/org-settings.js.map +1 -1
  1166. package/dist/settings/store.d.ts +6 -0
  1167. package/dist/settings/store.d.ts.map +1 -1
  1168. package/dist/settings/store.js +25 -0
  1169. package/dist/settings/store.js.map +1 -1
  1170. package/dist/shared/index.d.ts +1 -0
  1171. package/dist/shared/index.d.ts.map +1 -1
  1172. package/dist/shared/index.js +1 -0
  1173. package/dist/shared/index.js.map +1 -1
  1174. package/dist/shared/sign-in-journey.d.ts +102 -0
  1175. package/dist/shared/sign-in-journey.d.ts.map +1 -0
  1176. package/dist/shared/sign-in-journey.js +269 -0
  1177. package/dist/shared/sign-in-journey.js.map +1 -0
  1178. package/dist/styles/agent-native.css +8 -0
  1179. package/dist/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  1180. package/dist/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1181. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  1182. package/dist/templates/chat/.agents/skills/security/SKILL.md +2 -0
  1183. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1184. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1185. package/dist/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  1186. package/dist/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  1187. package/dist/templates/chat/AGENTS.md +8 -0
  1188. package/dist/templates/chat/app/entry.client.tsx +3 -0
  1189. package/dist/templates/default/.agents/skills/actions/SKILL.md +19 -1
  1190. package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1191. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  1192. package/dist/templates/default/.agents/skills/security/SKILL.md +2 -0
  1193. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1194. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1195. package/dist/templates/default/AGENTS.md +68 -195
  1196. package/dist/templates/default/app/entry.client.tsx +3 -0
  1197. package/dist/templates/default/app/i18n/ar-SA.ts +8 -0
  1198. package/dist/templates/default/app/i18n/de-DE.ts +8 -0
  1199. package/dist/templates/default/app/i18n/en-US.ts +8 -0
  1200. package/dist/templates/default/app/i18n/es-ES.ts +8 -0
  1201. package/dist/templates/default/app/i18n/fr-FR.ts +8 -0
  1202. package/dist/templates/default/app/i18n/hi-IN.ts +8 -0
  1203. package/dist/templates/default/app/i18n/ja-JP.ts +8 -0
  1204. package/dist/templates/default/app/i18n/ko-KR.ts +8 -0
  1205. package/dist/templates/default/app/i18n/pt-BR.ts +8 -0
  1206. package/dist/templates/default/app/i18n/zh-CN.ts +8 -0
  1207. package/dist/templates/default/app/i18n/zh-TW.ts +8 -0
  1208. package/dist/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  1209. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  1210. package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1211. package/dist/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  1212. package/dist/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  1213. package/dist/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  1214. package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  1215. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  1216. package/dist/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  1217. package/dist/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  1218. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1219. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1220. package/dist/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  1221. package/dist/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  1222. package/dist/templates/workspace-core/AGENTS.md +62 -124
  1223. package/dist/templates/workspace-root/AGENTS.md +6 -1
  1224. package/dist/triggers/dispatcher.d.ts.map +1 -1
  1225. package/dist/triggers/dispatcher.js +10 -3
  1226. package/dist/triggers/dispatcher.js.map +1 -1
  1227. package/dist/vite/client.d.ts.map +1 -1
  1228. package/dist/vite/client.js +18 -8
  1229. package/dist/vite/client.js.map +1 -1
  1230. package/docs/content/actions.mdx +33 -20
  1231. package/docs/content/agent-mentions.mdx +30 -19
  1232. package/docs/content/agent-native-toolkit.mdx +8 -6
  1233. package/docs/content/agent-resources.mdx +11 -0
  1234. package/docs/content/agent-surfaces.mdx +41 -30
  1235. package/docs/content/audit-log.mdx +78 -0
  1236. package/docs/content/authentication.mdx +7 -5
  1237. package/docs/content/automations.mdx +15 -9
  1238. package/docs/content/client.mdx +11 -11
  1239. package/docs/content/cloneable-saas.mdx +7 -1
  1240. package/docs/content/code-agents-ui.mdx +9 -1
  1241. package/docs/content/components.mdx +7 -0
  1242. package/docs/content/context-awareness.mdx +1 -0
  1243. package/docs/content/creating-templates.mdx +9 -1
  1244. package/docs/content/custom-design-system.mdx +8 -0
  1245. package/docs/content/data-programs.mdx +6 -0
  1246. package/docs/content/deployment.mdx +2 -0
  1247. package/docs/content/doctor.mdx +5 -3
  1248. package/docs/content/extensions.mdx +26 -0
  1249. package/docs/content/external-agents-catalog.mdx +533 -0
  1250. package/docs/content/external-agents.mdx +20 -514
  1251. package/docs/content/faq.mdx +2 -2
  1252. package/docs/content/file-uploads.mdx +44 -0
  1253. package/docs/content/frames.mdx +2 -2
  1254. package/docs/content/generative-ui.mdx +8 -0
  1255. package/docs/content/getting-started.mdx +45 -17
  1256. package/docs/content/human-approval.mdx +9 -0
  1257. package/docs/content/integrations.mdx +4 -3
  1258. package/docs/content/internationalization.mdx +4 -11
  1259. package/docs/content/key-concepts.mdx +1 -1
  1260. package/docs/content/local-file-mode.mdx +5 -0
  1261. package/docs/content/mcp-apps.mdx +2 -1
  1262. package/docs/content/mcp-clients.mdx +32 -1
  1263. package/docs/content/mcp-protocol.mdx +4 -3
  1264. package/docs/content/messaging-internals.mdx +328 -0
  1265. package/docs/content/messaging-recipes.mdx +194 -0
  1266. package/docs/content/messaging.mdx +9 -307
  1267. package/docs/content/multi-app-workspace.mdx +1 -1
  1268. package/docs/content/multi-tenancy.mdx +1 -0
  1269. package/docs/content/native-chat-ui.mdx +8 -0
  1270. package/docs/content/notifications.mdx +18 -20
  1271. package/docs/content/observability.mdx +1 -0
  1272. package/docs/content/onboarding.mdx +20 -6
  1273. package/docs/content/organizations-teams-permissions.mdx +99 -124
  1274. package/docs/content/package-lifecycle.mdx +19 -7
  1275. package/docs/content/progress.mdx +11 -0
  1276. package/docs/content/real-time-collaboration.mdx +44 -3
  1277. package/docs/content/recurring-jobs.mdx +14 -1
  1278. package/docs/content/security.mdx +5 -2
  1279. package/docs/content/server.mdx +2 -1
  1280. package/docs/content/sharing.mdx +22 -3
  1281. package/docs/content/skills-guide.mdx +62 -19
  1282. package/docs/content/syncing-template-changes.mdx +9 -0
  1283. package/docs/content/template-analytics-connectors.mdx +75 -0
  1284. package/docs/content/template-analytics-dashboards.mdx +106 -0
  1285. package/docs/content/template-analytics-developers.mdx +287 -0
  1286. package/docs/content/template-analytics-monitoring-and-sessions.mdx +109 -0
  1287. package/docs/content/template-analytics.mdx +21 -263
  1288. package/docs/content/template-assets-developers.mdx +456 -0
  1289. package/docs/content/template-assets-generation.mdx +147 -0
  1290. package/docs/content/template-assets-integrations.mdx +319 -0
  1291. package/docs/content/template-assets-presets.mdx +185 -0
  1292. package/docs/content/template-assets.mdx +12 -562
  1293. package/docs/content/template-brain-agent.mdx +103 -0
  1294. package/docs/content/template-brain-developers.mdx +379 -0
  1295. package/docs/content/template-brain-knowledge.mdx +50 -0
  1296. package/docs/content/template-brain-sources.mdx +163 -0
  1297. package/docs/content/template-brain.mdx +30 -390
  1298. package/docs/content/template-calendar-agent.mdx +133 -0
  1299. package/docs/content/template-calendar-booking-links.mdx +73 -0
  1300. package/docs/content/template-calendar-developers.mdx +366 -0
  1301. package/docs/content/template-calendar-scheduling.mdx +128 -0
  1302. package/docs/content/template-calendar.mdx +13 -260
  1303. package/docs/content/template-chat-developers.mdx +88 -0
  1304. package/docs/content/template-chat-first-edits.mdx +145 -0
  1305. package/docs/content/template-chat.mdx +12 -77
  1306. package/docs/content/template-clips-ai-and-editing.mdx +114 -0
  1307. package/docs/content/template-clips-capture-everywhere.mdx +120 -0
  1308. package/docs/content/template-clips-developers.mdx +373 -0
  1309. package/docs/content/template-clips-sharing-and-teams.mdx +182 -0
  1310. package/docs/content/template-clips.mdx +19 -508
  1311. package/docs/content/template-content-databases.mdx +406 -0
  1312. package/docs/content/template-content-developers.mdx +364 -0
  1313. package/docs/content/template-content-editing.mdx +60 -0
  1314. package/docs/content/template-content-sync.mdx +149 -0
  1315. package/docs/content/template-content.mdx +21 -561
  1316. package/docs/content/template-design-brand-and-figma.mdx +150 -0
  1317. package/docs/content/template-design-collaboration-and-full-apps.mdx +125 -0
  1318. package/docs/content/template-design-developers.mdx +358 -0
  1319. package/docs/content/template-design-quality-and-components.mdx +95 -0
  1320. package/docs/content/template-design.mdx +20 -344
  1321. package/docs/content/template-dispatch-developers.mdx +121 -0
  1322. package/docs/content/template-dispatch-messaging-routing.mdx +114 -0
  1323. package/docs/content/template-dispatch-operations.mdx +160 -0
  1324. package/docs/content/template-dispatch-vault-integrations.mdx +316 -0
  1325. package/docs/content/template-dispatch.mdx +24 -283
  1326. package/docs/content/template-forms-building-publishing.mdx +135 -0
  1327. package/docs/content/template-forms-developers.mdx +195 -0
  1328. package/docs/content/template-forms-responses.mdx +120 -0
  1329. package/docs/content/template-forms.mdx +21 -230
  1330. package/docs/content/template-mail-agent.mdx +114 -0
  1331. package/docs/content/template-mail-developers.mdx +356 -0
  1332. package/docs/content/template-mail-drafts-and-queue.mdx +103 -0
  1333. package/docs/content/template-mail-inbox.mdx +118 -0
  1334. package/docs/content/template-mail.mdx +23 -274
  1335. package/docs/content/template-plan-automations.mdx +213 -0
  1336. package/docs/content/template-plan-developers.mdx +703 -0
  1337. package/docs/content/template-plan-local-and-desktop.mdx +236 -0
  1338. package/docs/content/template-plan-review-workflow.mdx +180 -0
  1339. package/docs/content/template-plan.mdx +60 -910
  1340. package/docs/content/template-slides-agent.mdx +102 -0
  1341. package/docs/content/template-slides-design-and-media.mdx +94 -0
  1342. package/docs/content/template-slides-developers.mdx +488 -0
  1343. package/docs/content/template-slides-editing.mdx +56 -0
  1344. package/docs/content/template-slides.mdx +20 -362
  1345. package/docs/content/toolkit-capability-packages.mdx +38 -13
  1346. package/docs/content/toolkit-context-knowledge.mdx +49 -9
  1347. package/docs/content/toolkit-editors-canvases.mdx +72 -10
  1348. package/docs/content/toolkit-resources.mdx +16 -0
  1349. package/docs/content/toolkit-settings.mdx +3 -3
  1350. package/docs/content/toolkit-sharing.mdx +5 -7
  1351. package/docs/content/using-your-agent.mdx +25 -2
  1352. package/docs/content/voice-input.mdx +11 -7
  1353. package/docs/content/what-is-agent-native.mdx +1 -0
  1354. package/docs/content/workspace-connections.mdx +21 -11
  1355. package/docs/content/workspace-management.mdx +1 -1
  1356. package/package.json +2 -4
  1357. package/src/a2a/client.ts +4 -2
  1358. package/src/agent/action-warnings.ts +103 -0
  1359. package/src/agent/durable-background.ts +42 -5
  1360. package/src/agent/engine/ai-sdk-engine.ts +58 -6
  1361. package/src/agent/engine/anthropic-engine.ts +51 -8
  1362. package/src/agent/engine/builder-engine.ts +56 -18
  1363. package/src/agent/engine/continuation-dispatch-retry.ts +10 -9
  1364. package/src/agent/engine/credential-errors.ts +11 -0
  1365. package/src/agent/engine/error-detail.ts +39 -0
  1366. package/src/agent/engine/prompt-cache.ts +44 -0
  1367. package/src/agent/engine/registry.ts +22 -30
  1368. package/src/agent/engine/tool-call-journal-seed.ts +2 -1
  1369. package/src/agent/engine/translate-anthropic.ts +99 -0
  1370. package/src/agent/loop-settings.ts +94 -7
  1371. package/src/agent/production-agent.ts +667 -157
  1372. package/src/agent/run-loop-with-resume.ts +27 -1
  1373. package/src/agent/run-manager.ts +229 -39
  1374. package/src/agent/run-store.ts +397 -64
  1375. package/src/agent/thread-data-builder.ts +5 -1
  1376. package/src/agent/types.ts +23 -6
  1377. package/src/application-state/script-helpers.ts +5 -2
  1378. package/src/cli/agents.ts +69 -1
  1379. package/src/cli/app-skill.ts +1 -1
  1380. package/src/cli/code-agent-executor.ts +7 -3
  1381. package/src/cli/design-connect.ts +82 -8
  1382. package/src/cli/skills-content/design-visual-edit-skill.ts +169 -24
  1383. package/src/cli/templates-meta.ts +12 -0
  1384. package/src/client/AssistantChat.tsx +623 -607
  1385. package/src/client/agent-chat-adapter.ts +176 -29
  1386. package/src/client/chat/message-components.tsx +13 -0
  1387. package/src/client/embed-auth.ts +3 -1
  1388. package/src/client/integrations/IntegrationCard.tsx +41 -24
  1389. package/src/client/integrations/IntegrationsPanel.tsx +37 -21
  1390. package/src/client/integrations/webhook-url.ts +29 -0
  1391. package/src/client/org/OrgSwitcher.tsx +41 -27
  1392. package/src/client/org/RequireActiveOrg.tsx +7 -0
  1393. package/src/client/org/TeamPage.tsx +144 -14
  1394. package/src/client/org/hooks.ts +27 -0
  1395. package/src/client/org/index.ts +2 -0
  1396. package/src/client/require-session.tsx +40 -29
  1397. package/src/client/session-replay.ts +1 -1
  1398. package/src/client/settings/DemoModeSection.tsx +0 -5
  1399. package/src/client/settings/SecretsSection.tsx +47 -42
  1400. package/src/client/settings/VoiceTranscriptionSection.tsx +0 -5
  1401. package/src/client/sse-event-processor.ts +83 -8
  1402. package/src/client/use-action.ts +22 -13
  1403. package/src/client/use-agent-engine-configured.ts +36 -4
  1404. package/src/client/use-db-sync.ts +21 -1
  1405. package/src/credentials/index.ts +124 -2
  1406. package/src/deploy/build.ts +93 -30
  1407. package/src/deploy/workspace-deploy.ts +21 -16
  1408. package/src/guards/no-localhost-fallback.ts +76 -14
  1409. package/src/integrations/google-docs-poller.ts +19 -12
  1410. package/src/integrations/webhook-handler.ts +56 -33
  1411. package/src/jobs/scheduler.ts +57 -23
  1412. package/src/localization/default-messages.ts +23 -1
  1413. package/src/observability/evals.ts +7 -8
  1414. package/src/observability/traces.ts +2 -0
  1415. package/src/org/accept-pending.ts +2 -2
  1416. package/src/org/active-org.ts +73 -0
  1417. package/src/org/auto-join-domain.ts +7 -2
  1418. package/src/org/context.ts +169 -66
  1419. package/src/org/handlers.ts +148 -10
  1420. package/src/org/plugin.ts +8 -1
  1421. package/src/org/types.ts +6 -1
  1422. package/src/provider-api/index.ts +6 -1
  1423. package/src/resources/handlers.ts +2 -6
  1424. package/src/resources/script-helpers.ts +2 -1
  1425. package/src/scripts/chat/search-chats.ts +5 -2
  1426. package/src/scripts/describe-workspace-apps.ts +59 -0
  1427. package/src/scripts/resources/delete-memory.ts +5 -2
  1428. package/src/scripts/resources/delete.ts +5 -2
  1429. package/src/scripts/resources/effective.ts +5 -2
  1430. package/src/scripts/resources/list.ts +5 -2
  1431. package/src/scripts/resources/read.ts +5 -2
  1432. package/src/scripts/resources/save-memory.ts +5 -2
  1433. package/src/scripts/resources/write.ts +5 -2
  1434. package/src/server/__snapshots__/agent-chat-plugin.surface.spec.ts.snap +11 -31
  1435. package/src/server/agent-capabilities.ts +147 -0
  1436. package/src/server/agent-chat/framework-prompts.ts +11 -13
  1437. package/src/server/agent-chat/prompt-resources.ts +183 -57
  1438. package/src/server/agent-chat/script-entries.ts +20 -7
  1439. package/src/server/agent-chat-plugin.ts +27 -0
  1440. package/src/server/auth.ts +38 -32
  1441. package/src/server/core-routes-plugin.ts +229 -179
  1442. package/src/server/credential-provider.ts +196 -44
  1443. package/src/server/embed-session.ts +10 -0
  1444. package/src/server/framework-request-handler.ts +43 -0
  1445. package/src/server/google-auth-plugin.ts +13 -450
  1446. package/src/server/index.ts +4 -1
  1447. package/src/server/onboarding-html.ts +20 -56
  1448. package/src/server/open-route.ts +6 -1
  1449. package/src/server/poll.ts +1 -1
  1450. package/src/server/prompts/framework-core-compact.ts +5 -5
  1451. package/src/server/prompts/framework-core.ts +7 -9
  1452. package/src/server/prompts/shared-rules.ts +20 -9
  1453. package/src/server/request-context.ts +58 -2
  1454. package/src/server/scoped-key-storage.ts +1 -1
  1455. package/src/settings/org-settings.ts +9 -0
  1456. package/src/settings/store.ts +29 -0
  1457. package/src/shared/index.ts +13 -0
  1458. package/src/shared/sign-in-journey.ts +331 -0
  1459. package/src/styles/agent-native.css +8 -0
  1460. package/src/templates/chat/.agents/skills/actions/SKILL.md +19 -1
  1461. package/src/templates/chat/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1462. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +20 -6
  1463. package/src/templates/chat/.agents/skills/security/SKILL.md +2 -0
  1464. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1465. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1466. package/src/templates/chat/.agents/skills/sharing/SKILL.md +228 -0
  1467. package/src/templates/chat/.agents/skills/storing-data/SKILL.md +178 -0
  1468. package/src/templates/chat/AGENTS.md +8 -0
  1469. package/src/templates/chat/app/entry.client.tsx +3 -0
  1470. package/src/templates/default/.agents/skills/actions/SKILL.md +19 -1
  1471. package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1472. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +20 -6
  1473. package/src/templates/default/.agents/skills/security/SKILL.md +2 -0
  1474. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1475. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1476. package/src/templates/default/AGENTS.md +68 -195
  1477. package/src/templates/default/app/entry.client.tsx +3 -0
  1478. package/src/templates/default/app/i18n/ar-SA.ts +8 -0
  1479. package/src/templates/default/app/i18n/de-DE.ts +8 -0
  1480. package/src/templates/default/app/i18n/en-US.ts +8 -0
  1481. package/src/templates/default/app/i18n/es-ES.ts +8 -0
  1482. package/src/templates/default/app/i18n/fr-FR.ts +8 -0
  1483. package/src/templates/default/app/i18n/hi-IN.ts +8 -0
  1484. package/src/templates/default/app/i18n/ja-JP.ts +8 -0
  1485. package/src/templates/default/app/i18n/ko-KR.ts +8 -0
  1486. package/src/templates/default/app/i18n/pt-BR.ts +8 -0
  1487. package/src/templates/default/app/i18n/zh-CN.ts +8 -0
  1488. package/src/templates/default/app/i18n/zh-TW.ts +8 -0
  1489. package/src/templates/headless/.agents/skills/actions/SKILL.md +19 -1
  1490. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +19 -1
  1491. package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +2 -0
  1492. package/src/templates/workspace-core/.agents/skills/adding-workspace-apps/SKILL.md +100 -0
  1493. package/src/templates/workspace-core/.agents/skills/address-feedback/SKILL.md +2 -1
  1494. package/src/templates/workspace-core/.agents/skills/authentication/SKILL.md +28 -0
  1495. package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +14 -1
  1496. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +20 -6
  1497. package/src/templates/workspace-core/.agents/skills/qa/SKILL.md +6 -3
  1498. package/src/templates/workspace-core/.agents/skills/security/SKILL.md +2 -0
  1499. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +4 -3
  1500. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +7 -3
  1501. package/src/templates/workspace-core/.agents/skills/workspace-conventions/SKILL.md +91 -0
  1502. package/src/templates/workspace-core/.agents/skills/writing-agent-instructions/SKILL.md +60 -0
  1503. package/src/templates/workspace-core/AGENTS.md +62 -124
  1504. package/src/templates/workspace-root/AGENTS.md +6 -1
  1505. package/src/triggers/dispatcher.ts +28 -17
  1506. package/src/vite/client.ts +20 -8
  1507. package/corpus/core/src/client/components/MissingKeyCard.tsx +0 -61
  1508. package/corpus/core/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1509. package/corpus/core/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1510. package/corpus/core/src/client/settings/BrowserSection.tsx +0 -110
  1511. package/corpus/templates/analytics/app/components/InlineMetric.tsx +0 -31
  1512. package/corpus/templates/analytics/app/components/auth/LoginScreen.tsx +0 -4
  1513. package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +0 -128
  1514. package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +0 -264
  1515. package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +0 -84
  1516. package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +0 -92
  1517. package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +0 -154
  1518. package/corpus/templates/analytics/app/components/dashboard/StatsCard.tsx +0 -49
  1519. package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +0 -120
  1520. package/corpus/templates/analytics/server/handlers/dashboard-views.ts +0 -85
  1521. package/corpus/templates/analytics/server/handlers/user-prefs.ts +0 -58
  1522. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId]/[viewId].delete.ts +0 -1
  1523. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].get.ts +0 -1
  1524. package/corpus/templates/analytics/server/routes/api/dashboard-views/[dashboardId].post.ts +0 -1
  1525. package/corpus/templates/analytics/server/routes/api/theme.get.ts +0 -17
  1526. package/corpus/templates/analytics/server/routes/api/theme.post.ts +0 -15
  1527. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].delete.ts +0 -1
  1528. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].get.ts +0 -1
  1529. package/corpus/templates/analytics/server/routes/api/user-prefs/[key].put.ts +0 -1
  1530. package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +0 -156
  1531. package/corpus/templates/assets/app/components/library/LibraryCard.tsx +0 -213
  1532. package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +0 -49
  1533. package/corpus/templates/calendar/server/routes/api/events/[id].delete.ts +0 -1
  1534. package/corpus/templates/calendar/server/routes/api/events/[id].get.ts +0 -1
  1535. package/corpus/templates/calendar/server/routes/api/events/[id].put.ts +0 -1
  1536. package/corpus/templates/content/app/components/layout/AppLayout.tsx +0 -9
  1537. package/corpus/templates/content/server/routes/api/comments/[id].delete.ts +0 -69
  1538. package/corpus/templates/content/server/routes/api/comments/[id].patch.ts +0 -109
  1539. package/corpus/templates/content/server/routes/api/documents/[id]/versions.get.ts +0 -53
  1540. package/corpus/templates/design/app/components/design/code-workbench/ActivityBar.tsx +0 -85
  1541. package/corpus/templates/design/app/components/design-system/DesignSystemCard.tsx +0 -129
  1542. package/corpus/templates/forms/app/components/layout/AppLayout.tsx +0 -9
  1543. package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +0 -213
  1544. package/corpus/templates/mail/server/handlers/aliases.ts +0 -98
  1545. package/corpus/templates/mail/server/routes/api/aliases/[id].delete.ts +0 -1
  1546. package/corpus/templates/mail/server/routes/api/aliases/[id].patch.ts +0 -1
  1547. package/corpus/templates/mail/server/routes/api/aliases/index.get.ts +0 -1
  1548. package/corpus/templates/mail/server/routes/api/aliases/index.post.ts +0 -1
  1549. package/corpus/templates/mail/server/routes/api/automations/[id].delete.ts +0 -1
  1550. package/corpus/templates/mail/server/routes/api/automations/[id].patch.ts +0 -1
  1551. package/corpus/templates/mail/server/routes/api/automations/index.get.ts +0 -1
  1552. package/corpus/templates/mail/server/routes/api/automations/index.post.ts +0 -1
  1553. package/corpus/templates/mail/server/routes/api/automations/settings.get.ts +0 -22
  1554. package/corpus/templates/mail/server/routes/api/automations/settings.put.ts +0 -25
  1555. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].delete.ts +0 -1
  1556. package/corpus/templates/mail/server/routes/api/scheduled-jobs/[id].patch.ts +0 -1
  1557. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.get.ts +0 -1
  1558. package/corpus/templates/mail/server/routes/api/scheduled-jobs/index.post.ts +0 -1
  1559. package/corpus/templates/mail/server/routes/api/settings.get.ts +0 -1
  1560. package/corpus/templates/mail/server/routes/api/settings.patch.ts +0 -1
  1561. package/corpus/templates/slides/app/components/deck/BuilderLogo.tsx +0 -22
  1562. package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +0 -176
  1563. package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +0 -244
  1564. package/corpus/templates/slides/app/components/editor/ImportButton.tsx +0 -84
  1565. package/corpus/templates/slides/server/routes/api/comments/[id].delete.ts +0 -43
  1566. package/corpus/templates/slides/server/routes/api/comments/[id].patch.ts +0 -50
  1567. package/corpus/templates/slides/server/routes/api/decks/[id].delete.ts +0 -1
  1568. package/corpus/templates/slides/server/routes/api/decks/[id].get.ts +0 -1
  1569. package/corpus/templates/slides/server/routes/api/decks/[id].put.ts +0 -1
  1570. package/corpus/templates/slides/server/routes/api/decks/index.get.ts +0 -1
  1571. package/corpus/templates/slides/server/routes/api/decks/index.post.ts +0 -1
  1572. package/dist/client/components/MissingKeyCard.d.ts +0 -7
  1573. package/dist/client/components/MissingKeyCard.d.ts.map +0 -1
  1574. package/dist/client/components/MissingKeyCard.js +0 -32
  1575. package/dist/client/components/MissingKeyCard.js.map +0 -1
  1576. package/dist/client/extensions/agent-native-extension-runtime.d.ts +0 -69
  1577. package/dist/client/extensions/agent-native-extension-runtime.d.ts.map +0 -1
  1578. package/dist/client/extensions/agent-native-extension-runtime.js +0 -348
  1579. package/dist/client/extensions/agent-native-extension-runtime.js.map +0 -1
  1580. package/dist/client/settings/BackgroundAgentSection.d.ts +0 -2
  1581. package/dist/client/settings/BackgroundAgentSection.d.ts.map +0 -1
  1582. package/dist/client/settings/BackgroundAgentSection.js +0 -68
  1583. package/dist/client/settings/BackgroundAgentSection.js.map +0 -1
  1584. package/dist/client/settings/BrowserSection.d.ts +0 -2
  1585. package/dist/client/settings/BrowserSection.d.ts.map +0 -1
  1586. package/dist/client/settings/BrowserSection.js +0 -40
  1587. package/dist/client/settings/BrowserSection.js.map +0 -1
  1588. package/dist/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1589. package/dist/templates/chat/.react-router/types/app/+types/root.ts +0 -68
  1590. package/src/client/components/MissingKeyCard.tsx +0 -61
  1591. package/src/client/extensions/agent-native-extension-runtime.ts +0 -495
  1592. package/src/client/settings/BackgroundAgentSection.tsx +0 -193
  1593. package/src/client/settings/BrowserSection.tsx +0 -110
  1594. package/src/templates/chat/.react-router/types/+server-build.d.ts +0 -18
  1595. package/src/templates/chat/.react-router/types/app/+types/root.ts +0 -68
@@ -1 +1 @@
1
- {"version":3,"file":"thread-data-builder.d.ts","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thread-data-builder.d.ts","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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"}
@@ -67,8 +67,13 @@ export function buildAssistantMessage(events, runId, options = {}) {
67
67
  content.push({ type: "reasoning", text });
68
68
  }
69
69
  };
70
- for (const { event } of events) {
70
+ for (const [index, { event }] of events.entries()) {
71
71
  if (event.type === "clear") {
72
+ // A live stream always follows `clear` with the chunk that re-emits the
73
+ // wiped content. A rebuild has no successor, so applying a TRAILING
74
+ // clear can only destroy the transcript permanently.
75
+ if (index === events.length - 1)
76
+ continue;
72
77
  clearAssistantDraftContent(content);
73
78
  continue;
74
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"thread-data-builder.js","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n isCredentialGapCodeAgentEvent,\n normalizeCodeAgentTranscript,\n type CodeAgentTranscriptEvent as CoreCodeAgentTranscriptEvent,\n type NormalizedCodeAgentStatusEvent,\n type NormalizedCodeAgentThinkingEvent,\n type NormalizedCodeAgentToolEvent,\n type NormalizedCodeAgentTranscriptItem,\n} from \"../code-agents/transcript-normalizer.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\nimport type { EngineMessage } from \"./engine/types.js\";\nimport type { AgentChatAttachment, RunEvent } from \"./types.js\";\n\ninterface ContentPart {\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n argsText?: string;\n args?: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n}\n\ninterface BuildAssistantMessageOptions {\n suppressInternalContinuation?: boolean;\n /**\n * Logical-turn identity. When set it is stamped onto the message metadata so\n * continuation runs of the same turn can be folded onto a single durable\n * assistant message (see foldAssistantTurn) instead of each run dropping or\n * overwriting the others.\n */\n turnId?: string;\n runDurationMs?: number;\n}\n\ntype AssistantMessage = NonNullable<ReturnType<typeof buildAssistantMessage>>;\ntype UserMessage = ReturnType<typeof buildUserMessage>;\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\n\nexport const ASSISTANT_RUN_DURATION_METADATA_KEY = \"agentNativeRunDurationMs\";\n\nconst MAX_STORED_ATTACHMENT_CHARS = 60_000;\n/**\n * When no file-upload provider is configured we fall back to storing base64\n * directly in the SQL thread_data column. Cap the raw base64 per attachment to\n * avoid unbounded row growth. Attachments larger than this get a '[truncated]'\n * marker so the transcript still renders but the column stays sane.\n */\nconst MAX_STORED_BASE64_BYTES = 2 * 1024 * 1024; // 2 MB per attachment\n\nfunction isInternalContinuationError(event: {\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const msg = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\" ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\n/**\n * Reconstruct an assistant-ui message from raw agent run events.\n * Mirrors the client-side processEvent logic so the server can persist\n * the assistant's response even if the frontend is disconnected.\n */\nexport function buildAssistantMessage(\n events: RunEvent[],\n runId?: string,\n options: BuildAssistantMessageOptions = {},\n): {\n id: string;\n createdAt: Date;\n role: \"assistant\";\n content: ContentPart[];\n status:\n | { type: \"complete\"; reason: \"stop\" }\n | { type: \"incomplete\"; reason: \"error\" };\n metadata: Record<string, unknown>;\n} | null {\n const content: ContentPart[] = [];\n let toolCallCounter = 0;\n let runError: {\n message: string;\n errorCode?: string;\n details?: string;\n recoverable?: boolean;\n } | null = null;\n let endedAtInternalContinuationBoundary = false;\n\n const appendText = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"text\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"text\", text });\n }\n };\n\n const appendReasoning = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"reasoning\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"reasoning\", text });\n }\n };\n\n for (const { event } of events) {\n if (event.type === \"clear\") {\n clearAssistantDraftContent(content);\n continue;\n }\n\n if (event.type === \"text\") {\n appendText(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"thinking\") {\n appendReasoning(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"tool_start\") {\n toolCallCounter += 1;\n const toolCallId =\n event.id?.trim() ||\n (runId ? `${runId}:tc_${toolCallCounter}` : `tc_${toolCallCounter}`);\n const args = (event.input ?? {}) as Record<string, string>;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: event.tool ?? \"unknown\",\n argsText: JSON.stringify(args),\n args,\n });\n continue;\n }\n\n if (event.type === \"tool_done\") {\n const eventToolCallId = event.id?.trim();\n let matchingIndex = -1;\n\n if (eventToolCallId) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === eventToolCallId &&\n part.result === undefined\n ) {\n matchingIndex = i;\n break;\n }\n }\n }\n\n if (matchingIndex === -1) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === event.tool &&\n part.result === undefined\n ) {\n matchingIndex = i;\n break;\n }\n }\n }\n\n const part = content[matchingIndex];\n if (part?.type === \"tool-call\") {\n part.result = event.result ?? \"\";\n if (event.isError !== undefined) part.isError = event.isError;\n if (event.completedSideEffect !== undefined) {\n part.completedSideEffect = event.completedSideEffect;\n }\n if (event.mcpApp) part.mcpApp = event.mcpApp;\n if (event.chatUI) part.chatUI = event.chatUI;\n }\n continue;\n }\n\n if (event.type === \"loop_limit\") {\n // Older servers emitted this as a user-visible terminal event. Treat it\n // as an internal continuation boundary when rebuilding persisted turns.\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"auto_continue\") {\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"error\") {\n if (\n options.suppressInternalContinuation &&\n isInternalContinuationError(event)\n ) {\n endedAtInternalContinuationBoundary = true;\n continue;\n }\n if (event.errorCode === \"run_timeout\" && event.recoverable) {\n continue;\n }\n runError = {\n message: event.error,\n ...(event.errorCode ? { errorCode: event.errorCode } : {}),\n ...(event.details ? { details: event.details } : {}),\n ...(event.recoverable ? { recoverable: event.recoverable } : {}),\n };\n appendText(`${content.length > 0 ? \"\\n\\n\" : \"\"}Error: ${event.error}`);\n continue;\n }\n\n // done, missing_api_key — terminal signals, not content\n }\n\n // Only a truly empty turn produces nothing to persist. A turn that ended at\n // an internal continuation boundary (soft-timeout auto_continue, a\n // recoverable gateway error, suppressed loop_limit) DID stream real content\n // — persist it as a partial so the continuation run can fold the next chunk\n // onto it (foldAssistantTurn) instead of the earlier text being dropped.\n if (content.length === 0) return null;\n\n const continued = endedAtInternalContinuationBoundary;\n if (!continued) {\n settleInterruptedToolCalls(content);\n }\n\n const custom: Record<string, unknown> = {};\n if (options.turnId) custom.turnId = options.turnId;\n if (runId) custom.foldedRunIds = [runId];\n if (\n typeof options.runDurationMs === \"number\" &&\n Number.isFinite(options.runDurationMs) &&\n options.runDurationMs >= 0\n ) {\n custom[ASSISTANT_RUN_DURATION_METADATA_KEY] = options.runDurationMs;\n }\n if (continued) custom.continued = true;\n if (runError) {\n custom.runError = {\n ...runError,\n ...(runId ? { runId } : {}),\n };\n }\n\n const metadata: Record<string, unknown> = {};\n if (runId) metadata.runId = runId;\n if (Object.keys(custom).length > 0) metadata.custom = custom;\n\n return {\n id: `server-${runId ?? Date.now()}`,\n createdAt: new Date(),\n role: \"assistant\",\n content,\n status: runError\n ? { type: \"incomplete\" as const, reason: \"error\" as const }\n : { type: \"complete\" as const, reason: \"stop\" as const },\n metadata,\n };\n}\n\nfunction clearAssistantDraftContent(content: ContentPart[]): void {\n for (let index = content.length - 1; index >= 0; index--) {\n const part = content[index];\n if (!part) continue;\n if (part.type === \"text\" || part.type === \"reasoning\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n // Keep materialized in-flight tool cards across retry clears so persisted\n // thread rebuilds match the live SSE processor and avoid hide→show flicker.\n const isEphemeral =\n (part as { activity?: boolean }).activity === true ||\n part.argsText === \"\" ||\n Object.keys(part.args ?? {}).length === 0;\n if (isEphemeral) content.splice(index, 1);\n }\n }\n}\n\nfunction getStoredMessage(entry: any): any {\n return entry?.message ?? entry;\n}\n\nfunction getStoredParentId(entry: any): string | null | undefined {\n return typeof entry?.parentId === \"string\" || entry?.parentId === null\n ? entry.parentId\n : undefined;\n}\n\nfunction getStoredRunConfig(entry: any): any {\n return entry && typeof entry === \"object\" && \"runConfig\" in entry\n ? entry.runConfig\n : undefined;\n}\n\nfunction messageId(message: any): string | undefined {\n return typeof message?.id === \"string\" && message.id ? message.id : undefined;\n}\n\nfunction getMessageRunId(message: any): string | undefined {\n const meta = message?.metadata;\n const direct = meta?.runId;\n const custom = meta?.custom?.runId;\n const errorRun = meta?.custom?.runError?.runId ?? meta?.runError?.runId;\n if (typeof direct === \"string\") return direct;\n if (typeof custom === \"string\") return custom;\n if (typeof errorRun === \"string\") return errorRun;\n return undefined;\n}\n\nfunction messageContentIsEmpty(content: unknown): boolean {\n if (typeof content === \"string\") return content.trim().length === 0;\n if (Array.isArray(content)) {\n return !content.some((part: any) => {\n if (!part || typeof part !== \"object\") return false;\n if (part.type === \"text\") {\n return typeof part.text === \"string\" && part.text.trim().length > 0;\n }\n return true;\n });\n }\n return content == null;\n}\n\nfunction messageText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\");\n}\n\nfunction settleInterruptedToolCalls(content: ContentPart[]): void {\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n part.result = INTERRUPTED_TOOL_RESULT;\n }\n }\n}\n\nfunction isTerminalAssistantStatus(status: unknown): boolean {\n const type = (status as { type?: unknown } | undefined)?.type;\n return type === \"complete\" || type === \"incomplete\";\n}\n\nfunction normalizeAttachmentIdentity(attachments: unknown): unknown {\n if (!Array.isArray(attachments) || attachments.length === 0) return undefined;\n return attachments.map((att: any) => ({\n type: att?.type,\n name: att?.name,\n contentType: att?.contentType,\n }));\n}\n\n// Strip the render-only `toolCallId` before fingerprinting. The id is generated\n// differently depending on who built the message — the server now scopes it by\n// run (`${runId}:tc_1`) while the client's live stream uses a bare counter\n// (`tc_1`) — so the client export and the server fold of the SAME tool-call turn\n// would otherwise hash to different fingerprints and fail to dedupe, leaving the\n// turn rendered twice. The id never participates in message identity (history\n// replay regenerates its own ids), so hashing content without it is the correct\n// notion of \"same message\".\nfunction normalizeContentForFingerprint(content: unknown): unknown {\n if (!Array.isArray(content)) return content;\n return content.map((part: any) =>\n part && typeof part === \"object\" && part.type === \"tool-call\"\n ? { ...part, toolCallId: undefined }\n : part,\n );\n}\n\nfunction messageIdentityKeys(message: any): string[] {\n const keys: string[] = [];\n if (typeof message?.id === \"string\" && message.id) {\n keys.push(`id:${message.id}`);\n }\n const runId = getMessageRunId(message);\n if (runId) keys.push(`run:${runId}`);\n // A logical turn is ONE durable assistant message even though it may span\n // several continuation runs, so two messages sharing a turnId (e.g. the\n // client export and the server fold of the same answer) must dedupe to one.\n const turnId = turnIdOf(message);\n if (turnId) keys.push(`turn:${turnId}`);\n\n // Normalize attachments through `normalizeAttachmentIdentity` so an\n // explicit empty `[]` (assistant-ui's default for messages with no\n // attachments) and an omitted/undefined `attachments` field hash to the\n // same fingerprint. Without this, every user message ended up duplicated\n // in `chat_threads`: one copy from `saveThreadData` (runtime export\n // includes `attachments: []`) and one from `persistSubmittedUserMessage`\n // → `buildUserMessage` (omits the field entirely). The merge couldn't\n // dedupe them because their fingerprints differed by exactly one\n // `[]` vs `undefined`. (Repro on slides prod: every user turn produced\n // a `client_user → assistant → server_user` triple instead of a\n // `user → assistant` pair.)\n try {\n keys.push(\n `fingerprint:${JSON.stringify({\n role: message?.role,\n content: normalizeContentForFingerprint(message?.content),\n attachments: normalizeAttachmentIdentity(message?.attachments),\n })}`,\n );\n } catch {\n // Best effort. id/runId usually exist for persisted assistant-ui rows.\n }\n if (message?.role === \"user\") {\n try {\n keys.push(\n `user-fingerprint:${JSON.stringify({\n role: message.role,\n content: normalizeContentForFingerprint(message.content),\n attachments: normalizeAttachmentIdentity(message.attachments),\n })}`,\n );\n } catch {\n // Same best-effort behavior as the full fingerprint.\n }\n }\n return keys;\n}\n\nfunction messagesMatch(a: any, b: any): boolean {\n const bKeys = new Set(messageIdentityKeys(b));\n return messageIdentityKeys(a).some((key) => bKeys.has(key));\n}\n\nfunction preserveAssistantRunDuration(chosenEntry: any, otherEntry: any): any {\n const chosen = getStoredMessage(chosenEntry);\n const other = getStoredMessage(otherEntry);\n if (chosen?.role !== \"assistant\" || other?.role !== \"assistant\") {\n return chosenEntry;\n }\n\n const chosenCustom =\n chosen.metadata?.custom && typeof chosen.metadata.custom === \"object\"\n ? (chosen.metadata.custom as Record<string, unknown>)\n : {};\n if (assistantRunDurationMs(chosenCustom) != null) return chosenEntry;\n\n const otherCustom =\n other.metadata?.custom && typeof other.metadata.custom === \"object\"\n ? (other.metadata.custom as Record<string, unknown>)\n : {};\n const durationMs = assistantRunDurationMs(otherCustom);\n if (durationMs == null) return chosenEntry;\n\n const nextMessage = {\n ...chosen,\n metadata: {\n ...chosen.metadata,\n custom: {\n ...chosenCustom,\n [ASSISTANT_RUN_DURATION_METADATA_KEY]: durationMs,\n },\n },\n };\n return chosenEntry?.message === undefined\n ? nextMessage\n : { ...chosenEntry, message: nextMessage };\n}\n\nfunction chooseMergedMessageEntry(existingEntry: any, incomingEntry: any): any {\n const existing = getStoredMessage(existingEntry);\n const incoming = getStoredMessage(incomingEntry);\n // Same logical turn (client export vs server fold of one accumulating\n // answer): never shrink — keep whichever side accumulated more content, so a\n // stale/lossy export can't overwrite the richer folded turn. Ties prefer the\n // terminal copy.\n const existingTurn = turnIdOf(existing);\n const incomingTurn = turnIdOf(incoming);\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n existingTurn &&\n existingTurn === incomingTurn\n ) {\n const existingWeight = assistantContentWeight(existing.content);\n const incomingWeight = assistantContentWeight(incoming.content);\n const chosen =\n existingWeight > incomingWeight\n ? existingEntry\n : incomingWeight > existingWeight\n ? incomingEntry\n : isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ? existingEntry\n : incomingEntry;\n return preserveAssistantRunDuration(\n chosen,\n chosen === existingEntry ? incomingEntry : existingEntry,\n );\n }\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ) {\n return preserveAssistantRunDuration(existingEntry, incomingEntry);\n }\n return preserveAssistantRunDuration(incomingEntry, existingEntry);\n}\n\nfunction normalizeMessageEntry(\n entry: any,\n parentId: string | null,\n): { message: any; parentId: string | null; runConfig?: any } | null {\n const message = getStoredMessage(entry);\n if (!messageId(message)) return null;\n const normalizedMessage = normalizeAssistantToolCallIds(message);\n const runConfig = getStoredRunConfig(entry);\n return {\n message: normalizedMessage,\n parentId,\n ...(runConfig !== undefined ? { runConfig } : {}),\n };\n}\n\nfunction uniqueToolCallId(toolCallId: string, seen: Set<string>): string {\n if (!seen.has(toolCallId)) return toolCallId;\n let suffix = 2;\n let candidate = `${toolCallId}__dedup_${suffix}`;\n while (seen.has(candidate)) {\n suffix += 1;\n candidate = `${toolCallId}__dedup_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeAssistantToolCallIds(message: any): any {\n if (message?.role !== \"assistant\" || !Array.isArray(message.content)) {\n return message;\n }\n\n const seen = new Set<string>();\n let changed = false;\n const content = message.content.map((part: any) => {\n if (\n part?.type !== \"tool-call\" ||\n typeof part.toolCallId !== \"string\" ||\n part.toolCallId.length === 0\n ) {\n return part;\n }\n\n const nextToolCallId = uniqueToolCallId(part.toolCallId, seen);\n seen.add(nextToolCallId);\n if (nextToolCallId === part.toolCallId) return part;\n changed = true;\n return { ...part, toolCallId: nextToolCallId };\n });\n\n return changed ? { ...message, content } : message;\n}\n\n/**\n * Convert legacy/partially merged thread data into assistant-ui's exported\n * repository shape and repair parent links so `threadRuntime.import()` cannot\n * fail with \"Parent message not found\".\n */\nexport function normalizeThreadRepository(repo: any): any {\n const normalized = repo && typeof repo === \"object\" ? { ...repo } : {};\n const sourceMessages: any[] = Array.isArray(repo?.messages)\n ? repo.messages\n : [];\n const firstIndexById = new Map<string, number>();\n const lastEntryById = new Map<string, any>();\n sourceMessages.forEach((entry, index) => {\n const id = messageId(getStoredMessage(entry));\n if (!id) return;\n if (!firstIndexById.has(id)) firstIndexById.set(id, index);\n lastEntryById.set(id, entry);\n });\n const uniqueSourceMessages = sourceMessages\n .filter((entry, index) => {\n const id = messageId(getStoredMessage(entry));\n return id && firstIndexById.get(id) === index;\n })\n .map((entry) => {\n const id = messageId(getStoredMessage(entry));\n return (id && lastEntryById.get(id)) || entry;\n });\n const messages: Array<{\n message: any;\n parentId: string | null;\n runConfig?: any;\n }> = [];\n const seenIds = new Set<string>();\n let previousId: string | null = null;\n\n for (const entry of uniqueSourceMessages) {\n const message = getStoredMessage(entry);\n const id = messageId(message);\n if (!id) continue;\n\n const requestedParentId = getStoredParentId(entry);\n const parentId =\n requestedParentId === null\n ? null\n : requestedParentId && seenIds.has(requestedParentId)\n ? requestedParentId\n : previousId;\n\n const normalizedEntry = normalizeMessageEntry(entry, parentId);\n if (!normalizedEntry) continue;\n\n messages.push(normalizedEntry);\n seenIds.add(id);\n previousId = id;\n }\n\n normalized.messages = messages;\n const headId = typeof repo?.headId === \"string\" ? repo.headId : undefined;\n normalized.headId =\n headId && seenIds.has(headId) ? headId : (previousId ?? null);\n return normalized;\n}\n\n/**\n * Rebuild a flat `EngineMessage[]` from persisted thread_data (the\n * assistant-ui ExportedMessageRepository shape). Text-only — tool calls/results\n * are flattened to their text so a continuation run gets the conversation\n * prefix as plain context (Anthropic's prompt cache makes the resume cheap).\n *\n * Used to resume a background sub-agent in a fresh function invocation (the\n * server-side analog of the browser re-POSTing history for the main chat).\n * Originally inlined in `integrations/webhook-handler.ts`.\n */\nexport function threadDataToEngineMessages(\n threadData: string | Record<string, unknown> | null | undefined,\n): EngineMessage[] {\n const messages: EngineMessage[] = [];\n if (!threadData) return messages;\n let data: any;\n try {\n data = typeof threadData === \"string\" ? JSON.parse(threadData) : threadData;\n } catch {\n return messages;\n }\n if (!Array.isArray(data?.messages)) return messages;\n for (const entry of data.messages) {\n const m = entry?.message ?? entry;\n if (!m || (m.role !== \"user\" && m.role !== \"assistant\")) continue;\n const text = threadMessageTextForEngine(m);\n if (!text.trim()) continue;\n messages.push({ role: m.role, content: [{ type: \"text\", text }] });\n }\n return messages;\n}\n\nconst MAX_INTEGRATION_ARTIFACTS_IN_CONTEXT = 12;\nconst MAX_INTEGRATION_ARTIFACT_FIELD_CHARS = 500;\n\nfunction boundedString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed\n ? trimmed.slice(0, MAX_INTEGRATION_ARTIFACT_FIELD_CHARS)\n : undefined;\n}\n\nfunction promptSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replaceAll(\"&\", \"\\\\u0026\")\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\">\", \"\\\\u003e\");\n}\n\nfunction messageTextContent(message: any): string {\n if (typeof message?.content === \"string\") return message.content;\n if (!Array.isArray(message?.content)) return \"\";\n return message.content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\\n\");\n}\n\n/**\n * Select the participant-visible delivery for integration turns while keeping\n * a compact, trusted resource ledger available to the agent. Raw tool results\n * remain in thread_data for UI/audit use but are not replayed into the prompt.\n */\nexport function threadMessageTextForEngine(message: any): string {\n const delivery = message?.metadata?.integrationDelivery;\n const deliveryAttempted =\n message?.metadata?.integrationDeliveryAttempted === true;\n const deliveredText =\n message?.role === \"assistant\" &&\n delivery?.status === \"delivered\" &&\n typeof delivery.text === \"string\" &&\n delivery.text.trim()\n ? delivery.text\n : undefined;\n let text =\n deliveredText ??\n (message?.role === \"assistant\" && deliveryAttempted\n ? \"\"\n : messageTextContent(message));\n\n if (message?.role !== \"assistant\") return text;\n const storedArtifacts = message?.metadata?.integrationArtifacts;\n if (!Array.isArray(storedArtifacts)) return text;\n\n const artifacts = storedArtifacts\n .slice(0, MAX_INTEGRATION_ARTIFACTS_IN_CONTEXT)\n .map((artifact: any) => ({\n resourceType: boundedString(artifact?.resourceType),\n id: boundedString(artifact?.id),\n sourceAction: boundedString(artifact?.sourceAction),\n titleAtAction: boundedString(artifact?.titleAtAction),\n url: boundedString(artifact?.url),\n }))\n .filter(\n (artifact: {\n resourceType?: string;\n id?: string;\n sourceAction?: string;\n }) => artifact.resourceType && artifact.id && artifact.sourceAction,\n );\n if (artifacts.length === 0) return text;\n\n const context = [\n \"<integration_artifact_context>\",\n \"Trusted action history for this conversation. Resource IDs remain stable if participants rename the resource. Fields such as titleAtAction are historical aliases from the time of that action, not current resource state. Use stable IDs to locate an earlier artifact, read its current state before changing it, and omit fields the user did not explicitly ask to change while still deciding whether to update, add, supersede, or create.\",\n promptSafeJson(artifacts),\n \"</integration_artifact_context>\",\n ].join(\"\\n\");\n text = text.trim() ? `${text.trim()}\\n\\n${context}` : context;\n return text;\n}\n\nexport interface CodeAgentThreadTranscriptEvent {\n id: string;\n runId: string;\n kind?: CoreCodeAgentTranscriptEvent[\"kind\"];\n type?: CoreCodeAgentTranscriptEvent[\"kind\"] | \"note\";\n message?: string;\n text?: string;\n createdAt: string;\n metadata?: Record<string, unknown>;\n artifactPath?: string;\n artifactUrl?: string;\n signal?: CoreCodeAgentTranscriptEvent[\"signal\"];\n}\n\nexport interface BuildRepositoryFromCodeAgentTranscriptOptions {\n hideCredentialMessages?: boolean;\n}\n\nexport function buildRepositoryFromCodeAgentTranscript(\n events: readonly CodeAgentThreadTranscriptEvent[],\n options: BuildRepositoryFromCodeAgentTranscriptOptions = {},\n): any {\n const normalized = normalizeCodeAgentTranscript(\n events.map(toCoreCodeAgentTranscriptEvent),\n );\n const repo: {\n headId: string | null;\n messages: Array<{ message: any; parentId: string | null }>;\n } = {\n headId: null,\n messages: [],\n };\n\n let headId: string | null = null;\n let assistantTurn: {\n turnIndex: number;\n id: string;\n createdAt: string;\n updatedAt: string;\n runId?: string;\n content: ContentPart[];\n eventIds: string[];\n } | null = null;\n\n const flushAssistant = () => {\n if (!assistantTurn || assistantTurn.content.length === 0) {\n assistantTurn = null;\n return;\n }\n const message = {\n id: assistantTurn.id,\n createdAt: new Date(assistantTurn.createdAt),\n role: \"assistant\" as const,\n content: assistantTurn.content,\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n ...(assistantTurn.runId ? { runId: assistantTurn.runId } : {}),\n custom: {\n codeAgentTranscriptEventIds: assistantTurn.eventIds,\n },\n },\n };\n repo.messages.push({ message, parentId: headId });\n headId = message.id;\n repo.headId = headId;\n assistantTurn = null;\n };\n\n for (const item of normalized.items) {\n if (item.type === \"user\") {\n flushAssistant();\n const runId = item.events[0]?.runId;\n const userMessage = buildUserMessage({\n text: item.text,\n attachments: codeAgentAttachmentsFromEvents(item.events),\n runId: runId ? `${runId}-${item.id}` : item.id,\n createdAt: new Date(item.createdAt),\n });\n userMessage.id = `code-user-${item.id}`;\n const existingCustom =\n userMessage.metadata.custom &&\n typeof userMessage.metadata.custom === \"object\"\n ? (userMessage.metadata.custom as Record<string, unknown>)\n : {};\n userMessage.metadata = {\n ...userMessage.metadata,\n custom: {\n ...existingCustom,\n submittedRunId: runId,\n codeAgentTranscriptEventIds: item.eventIds,\n },\n };\n repo.messages.push({ message: userMessage, parentId: headId });\n headId = userMessage.id;\n repo.headId = headId;\n continue;\n }\n\n const content = contentPartForCodeAgentTranscriptItem(item, options);\n if (!content) continue;\n\n if (!assistantTurn || assistantTurn.turnIndex !== item.turnIndex) {\n flushAssistant();\n assistantTurn = {\n turnIndex: item.turnIndex,\n id: `code-assistant-${item.turnIndex}-${item.id}`,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n runId: item.events[0]?.runId,\n content: [],\n eventIds: [],\n };\n }\n assistantTurn.updatedAt = item.updatedAt;\n assistantTurn.eventIds.push(...item.eventIds);\n if (content.type === \"text\") {\n const last = assistantTurn.content.at(-1);\n if (last?.type === \"text\") {\n last.text = `${last.text}${last.text ? \"\\n\\n\" : \"\"}${content.text}`;\n } else {\n assistantTurn.content.push(content);\n }\n } else {\n assistantTurn.content.push(content);\n }\n }\n\n flushAssistant();\n return normalizeThreadRepository(repo);\n}\n\nfunction rewriteEntryParentId(\n entry: any,\n idRewrites: Map<string, string>,\n): any {\n const parentId = getStoredParentId(entry);\n if (!parentId) return entry;\n const rewritten = idRewrites.get(parentId);\n if (!rewritten) return entry;\n return { ...entry, parentId: rewritten };\n}\n\n/**\n * Merge an incoming client-side full-thread save over the current SQL copy.\n *\n * The browser exports and PUTs the whole assistant-ui repository. If a server\n * completion save lands first, an older browser export can otherwise replace\n * `thread_data` wholesale and delete the assistant message the server just\n * reconstructed from run events. Preserve server-only messages while still\n * accepting client-only messages and metadata.\n */\nexport interface MergeThreadDataOptions {\n preserveExistingQueuedMessages?: boolean;\n preserveExistingTopLevelKeys?: boolean;\n}\n\nexport function mergeThreadDataForClientSave(\n existingRepo: any,\n incomingRepo: any,\n options: MergeThreadDataOptions = {},\n) {\n const preserveExistingQueuedMessages =\n options.preserveExistingQueuedMessages ?? true;\n const preserveExistingTopLevelKeys =\n options.preserveExistingTopLevelKeys ?? true;\n const existingNormalized = normalizeThreadRepository(existingRepo);\n const incomingNormalized = normalizeThreadRepository(incomingRepo);\n const merged =\n incomingNormalized && typeof incomingNormalized === \"object\"\n ? { ...incomingNormalized }\n : {};\n if (\n preserveExistingTopLevelKeys &&\n existingNormalized &&\n typeof existingNormalized === \"object\"\n ) {\n for (const [key, value] of Object.entries(existingNormalized)) {\n if (key === \"messages\" || key === \"headId\") continue;\n if (key === \"queuedMessages\" && !preserveExistingQueuedMessages) {\n continue;\n }\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n } else if (\n preserveExistingQueuedMessages &&\n existingNormalized &&\n typeof existingNormalized === \"object\" &&\n existingNormalized.queuedMessages !== undefined &&\n merged.queuedMessages === undefined\n ) {\n merged.queuedMessages = existingNormalized.queuedMessages;\n }\n\n const existingMessages = Array.isArray(existingNormalized?.messages)\n ? existingNormalized.messages\n : null;\n const incomingMessages = Array.isArray(merged.messages)\n ? merged.messages\n : null;\n if (!existingMessages || !incomingMessages) return merged;\n\n const incomingKeySets: Set<string>[] = incomingMessages.map(\n (entry: unknown) => new Set(messageIdentityKeys(getStoredMessage(entry))),\n );\n const usedIncoming = new Set<number>();\n const nextMessages: any[] = [];\n const idRewrites = new Map<string, string>();\n\n for (const existingEntry of existingMessages) {\n const existingMessage = getStoredMessage(existingEntry);\n if (\n existingMessage?.role === \"assistant\" &&\n messageContentIsEmpty(existingMessage.content)\n ) {\n continue;\n }\n\n const existingKeys = messageIdentityKeys(existingMessage);\n const incomingIndex = incomingKeySets.findIndex(\n (keys: Set<string>, index: number) =>\n !usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),\n );\n\n if (incomingIndex === -1) {\n nextMessages.push(existingEntry);\n continue;\n }\n\n usedIncoming.add(incomingIndex);\n const incomingEntry = incomingMessages[incomingIndex];\n const chosen = chooseMergedMessageEntry(existingEntry, incomingEntry);\n const existingId = messageId(getStoredMessage(existingEntry));\n const chosenId = messageId(getStoredMessage(chosen));\n if (existingId && chosenId && existingId !== chosenId) {\n idRewrites.set(existingId, chosenId);\n }\n nextMessages.push(chosen);\n }\n\n for (let index = 0; index < incomingMessages.length; index++) {\n if (usedIncoming.has(index)) continue;\n const incomingMessage = getStoredMessage(incomingMessages[index]);\n if (\n incomingMessage?.role === \"assistant\" &&\n messageContentIsEmpty(incomingMessage.content)\n ) {\n continue;\n }\n nextMessages.push(incomingMessages[index]);\n }\n\n merged.messages = nextMessages.map((entry) =>\n rewriteEntryParentId(entry, idRewrites),\n );\n return normalizeThreadRepository(merged);\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(\n /^<attachment\\b[^>]*>\\n?([\\s\\S]*?)\\n?<\\/attachment>$/,\n );\n return match ? match[1] : text;\n}\n\nfunction truncateStoredAttachment(text: string): string {\n const unwrapped = unwrapTextAttachmentEnvelope(text);\n if (unwrapped.length <= MAX_STORED_ATTACHMENT_CHARS) return unwrapped;\n const omitted = unwrapped.length - MAX_STORED_ATTACHMENT_CHARS;\n return `${unwrapped.slice(0, MAX_STORED_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_STORED_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from persisted chat history.]`;\n}\n\nfunction textAttachmentEnvelope(\n att: AgentChatAttachment,\n text: string,\n): string {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateStoredAttachment(text)}\\n</attachment>`;\n}\n\n/**\n * Cap a base64 data-URL string for storage. When the encoded string is over\n * the limit we replace the base64 payload with a truncation marker so the\n * transcript still renders the attachment chip but doesn't bloat SQL.\n */\nfunction capBase64DataUrl(dataUrl: string): string {\n const commaIdx = dataUrl.indexOf(\",\");\n if (commaIdx === -1) return dataUrl;\n const header = dataUrl.slice(0, commaIdx + 1);\n const b64 = dataUrl.slice(commaIdx + 1);\n // Each base64 char encodes 6 bits; 4 chars = 3 bytes.\n const approxBytes = Math.floor((b64.length * 3) / 4);\n if (approxBytes <= MAX_STORED_BASE64_BYTES) return dataUrl;\n return `${header}[base64 truncated — ${approxBytes.toLocaleString()} bytes exceeds storage limit]`;\n}\n\nfunction buildStoredAttachments(\n attachments: AgentChatAttachment[] | undefined,\n runId: string | undefined,\n): any[] {\n return (attachments ?? [])\n .map((att, index) => {\n const id = `server-${runId ?? Date.now()}-attachment-${index}`;\n // When the attachment was successfully pre-uploaded, store only the URL\n // reference. This keeps the SQL thread_data row compact regardless of\n // file size, and lets the transcript render from the hosted URL instead\n // of re-shipping megabytes of base64 on every poll save.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n const referenceOnly = (att as any).referenceOnly === true;\n const storedAsImage = att.type === \"image\" && !referenceOnly;\n return {\n id,\n type: storedAsImage ? \"image\" : \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n // URL reference shape — content[0] uses the hosted URL.\n content: storedAsImage\n ? [{ type: \"image\", image: uploadedUrl }]\n : [\n {\n type: \"file\",\n url: uploadedUrl,\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n // Keep the reference metadata for tooling / read-attachment.\n metadata: {\n uploadUrl: uploadedUrl,\n uploadProvider: (att as any).uploadProvider as string | undefined,\n ...(referenceOnly\n ? {\n referenceOnly: true,\n securityNote: (att as any).securityNote as string | undefined,\n }\n : {}),\n },\n };\n }\n\n if (att.type === \"image\" && att.data) {\n return {\n id,\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [{ type: \"image\", image: capBase64DataUrl(att.data) }],\n };\n }\n if (att.data) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n {\n type: \"file\",\n data: capBase64DataUrl(att.data),\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n };\n }\n if (typeof att.text === \"string\" && att.text.length > 0) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n { type: \"text\", text: textAttachmentEnvelope(att, att.text) },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nexport function buildUserMessage(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n runId?: string;\n createdAt?: Date;\n}): {\n id: string;\n createdAt: Date;\n role: \"user\";\n content: ContentPart[];\n attachments?: any[];\n metadata: Record<string, unknown>;\n} {\n const attachments = buildStoredAttachments(opts.attachments, opts.runId);\n return {\n id: `server-user-${opts.runId ?? Date.now()}`,\n createdAt: opts.createdAt ?? new Date(),\n role: \"user\",\n content: [{ type: \"text\", text: opts.text }],\n ...(attachments.length > 0 ? { attachments } : {}),\n metadata: {\n custom: {\n submittedRunId: opts.runId,\n },\n },\n };\n}\n\nfunction toCoreCodeAgentTranscriptEvent(\n event: CodeAgentThreadTranscriptEvent,\n): CoreCodeAgentTranscriptEvent {\n return {\n schemaVersion: 1,\n id: event.id,\n runId: event.runId,\n kind: (event.kind ??\n event.type ??\n \"status\") as CoreCodeAgentTranscriptEvent[\"kind\"],\n message: event.message ?? event.text ?? \"\",\n createdAt: event.createdAt,\n metadata: {\n ...(event.metadata ?? {}),\n ...(event.artifactPath ? { artifactPath: event.artifactPath } : {}),\n ...(event.artifactUrl ? { artifactUrl: event.artifactUrl } : {}),\n },\n ...(event.signal ? { signal: event.signal } : {}),\n };\n}\n\nfunction contentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentTranscriptItem,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): ContentPart | null {\n if (item.type === \"assistant\") {\n return item.text.trim() ? { type: \"text\", text: item.text } : null;\n }\n if (item.type === \"tool\") {\n return toolContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"thinking\") {\n return thinkingContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"status\") {\n const text = statusTextForCodeAgentTranscriptItem(item, options);\n return text ? { type: \"text\", text } : null;\n }\n return null;\n}\n\nfunction thinkingContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentThinkingEvent,\n): ContentPart | null {\n const text = item.text.trim();\n return text ? { type: \"reasoning\", text } : null;\n}\n\nfunction toolContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentToolEvent,\n): ContentPart {\n return {\n type: \"tool-call\",\n toolCallId: `code-tool-${item.id}`,\n toolName: item.tool ?? item.label ?? \"code-agent\",\n argsText: previewCodeAgentTranscriptValue(item.input) ?? \"\",\n args: recordArgsForCodeAgentTool(item.input),\n ...(item.result !== undefined\n ? { result: previewCodeAgentTranscriptValue(item.result) ?? \"\" }\n : {}),\n ...(item.structuredMeta ? { structuredMeta: item.structuredMeta } : {}),\n ...(item.pendingApprovalKey\n ? { approval: { approvalKey: item.pendingApprovalKey } }\n : {}),\n };\n}\n\nfunction statusTextForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentStatusEvent,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): string | null {\n if (options.hideCredentialMessages && isCredentialGapCodeAgentEvent(item)) {\n return null;\n }\n if (item.statusKind === \"artifact\") {\n const event = item.events[0];\n const path =\n stringRecordValue(event?.metadata, \"artifactPath\") ??\n stringRecordValue(event?.metadata, \"path\");\n const url = stringRecordValue(event?.metadata, \"artifactUrl\");\n const target = url ?? path;\n return target\n ? `Artifact: ${item.text}\\n${target}`\n : `Artifact: ${item.text}`;\n }\n if (item.level === \"info\" && item.statusKind !== \"note\") return null;\n return item.text;\n}\n\nfunction codeAgentAttachmentsFromEvents(\n events: readonly CoreCodeAgentTranscriptEvent[],\n): AgentChatAttachment[] {\n for (const event of events) {\n const raw = event.metadata?.attachments;\n if (!Array.isArray(raw) || raw.length === 0) continue;\n const attachments: AgentChatAttachment[] = [];\n for (const item of raw) {\n if (!item || typeof item !== \"object\") continue;\n const record = item as Record<string, unknown>;\n const name = stringRecordValue(record, \"name\");\n if (!name) continue;\n const contentType = stringRecordValue(record, \"type\");\n const text = stringRecordValue(record, \"text\");\n const dataUrl = stringRecordValue(record, \"dataUrl\");\n attachments.push({\n type: dataUrl ? \"image\" : \"file\",\n name,\n ...(contentType ? { contentType } : {}),\n ...(text ? { text } : {}),\n ...(dataUrl ? { data: dataUrl } : {}),\n });\n }\n if (attachments.length > 0) return attachments;\n }\n return [];\n}\n\nfunction recordArgsForCodeAgentTool(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(value)) {\n result[key] =\n typeof entry === \"string\"\n ? entry\n : (previewCodeAgentTranscriptValue(entry) ?? \"\");\n }\n return result;\n}\n\nfunction previewCodeAgentTranscriptValue(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const text =\n typeof value === \"string\" ? value : (JSON.stringify(value, null, 2) ?? \"\");\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n return trimmed.length > 4000 ? `${trimmed.slice(0, 4000)}\\n...` : trimmed;\n}\n\nfunction stringRecordValue(\n record: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = record?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nexport function upsertUserMessage(repo: any, userMsg: UserMessage): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n if (lastMsg?.role === \"user\" && messagesMatch(lastMsg, userMsg)) {\n return nextRepo;\n }\n\n const parentId =\n lastIndex >= 0 ? (messageId(getStoredMessage(lastEntry)) ?? null) : null;\n nextRepo.messages.push({ message: userMsg, parentId });\n nextRepo.headId = userMsg.id;\n return nextRepo;\n}\n\nfunction shouldReplaceLastAssistant(\n lastMessage: any,\n assistantMsg: AssistantMessage,\n): boolean {\n const lastContent = lastMessage?.content;\n if (messageContentIsEmpty(lastContent)) return true;\n\n const lastRunId = getMessageRunId(lastMessage);\n const nextRunId = getMessageRunId(assistantMsg);\n if (lastRunId && nextRunId && lastRunId === nextRunId) return true;\n if (lastRunId && nextRunId && lastRunId !== nextRunId) return false;\n\n const lastStatus = lastMessage?.status;\n if (lastStatus && !isTerminalAssistantStatus(lastStatus)) return true;\n\n try {\n if (JSON.stringify(lastContent) === JSON.stringify(assistantMsg.content)) {\n return true;\n }\n } catch {\n // Fall through to the text-prefix check.\n }\n\n const lastText = messageText(lastContent).trim();\n const nextText = messageText(assistantMsg.content).trim();\n if (isTerminalAssistantStatus(lastStatus)) return false;\n return Boolean(lastText && nextText && nextText.startsWith(lastText));\n}\n\n/**\n * Merge the server-reconstructed assistant message into persisted\n * assistant-ui thread data.\n *\n * The browser periodically saves thread data while a run is still streaming.\n * That can leave the last assistant message non-empty but partial/pending.\n * Completion must replace that same-run partial message instead of treating\n * any assistant content as proof that the frontend already saved the final\n * turn.\n */\nexport function upsertAssistantMessage(\n repo: any,\n assistantMsg: AssistantMessage,\n): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n const lastRole = lastMsg?.role;\n\n if (\n lastRole === \"assistant\" &&\n shouldReplaceLastAssistant(lastMsg, assistantMsg)\n ) {\n nextRepo.messages[lastIndex] = { ...lastEntry, message: assistantMsg };\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n }\n\n const parentId =\n nextRepo.messages.length > 0\n ? (messageId(\n getStoredMessage(nextRepo.messages[nextRepo.messages.length - 1]),\n ) ?? null)\n : null;\n nextRepo.messages.push({ message: assistantMsg, parentId });\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n}\n\nfunction turnIdOf(message: any): string | undefined {\n const t = message?.metadata?.custom?.turnId;\n return typeof t === \"string\" && t ? t : undefined;\n}\n\nfunction foldedRunIdsOf(message: any): string[] {\n const ids = message?.metadata?.custom?.foldedRunIds;\n return Array.isArray(ids)\n ? ids.filter((x: unknown): x is string => typeof x === \"string\")\n : [];\n}\n\nfunction assistantRunDurationMs(\n custom: Record<string, unknown>,\n): number | null {\n const durationMs = custom[ASSISTANT_RUN_DURATION_METADATA_KEY];\n return typeof durationMs === \"number\" &&\n Number.isFinite(durationMs) &&\n durationMs >= 0\n ? durationMs\n : null;\n}\n\n/** Rough size of an assistant message's content, used only to pick the larger\n * of two representations of the same chunk so a fold can never shrink. */\nfunction assistantContentWeight(content: unknown): number {\n if (!Array.isArray(content)) return 0;\n let weight = 0;\n for (const part of content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n weight += part.text.length;\n } else {\n weight += 1;\n }\n }\n return weight;\n}\n\n/** Concatenate continuation content onto the accumulated turn, merging a\n * trailing+leading text run so the resumed answer reads as one flowing\n * message rather than two stacked fragments. */\nfunction appendFoldedContent(existing: any[], incoming: any[]): any[] {\n const merged = existing.map((p) => ({ ...p }));\n for (const part of incoming) {\n const last = merged[merged.length - 1];\n if (\n part?.type === \"text\" &&\n typeof part.text === \"string\" &&\n last?.type === \"text\" &&\n typeof last.text === \"string\"\n ) {\n last.text = `${last.text}${part.text}`;\n } else {\n merged.push({ ...part });\n }\n }\n return normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: merged,\n }).content;\n}\n\n/**\n * Fold a continuation run's assistant message onto the single durable message\n * for its logical turn (identified by `turnId`), so a turn that spans several\n * continuation runs accumulates into ONE message that only ever grows. This is\n * the server-side analog of an append-only rollout: the durable transcript is\n * a monotonic fold over every run in the turn, never a per-run snapshot that\n * drops the earlier chunks.\n *\n * Idempotent and never-shrinking, so it is safe to run alongside the client's\n * full-thread export (which may write the same turn from the other side):\n * - First chunk of a turn → appended as a fresh message.\n * - A run whose content is already represented (already folded, or the client\n * saved it) → kept as-is, choosing whichever copy has more content.\n * - A new chunk → appended onto the accumulated turn.\n * Falls back to per-run upsert when no `turnId` is available (turn == run).\n */\nexport function foldAssistantTurn(\n repo: any,\n assistantMsg: AssistantMessage,\n options: { turnId?: string; runId?: string },\n): any {\n const turnId = options.turnId;\n const runId = options.runId;\n if (!turnId) return upsertAssistantMessage(repo, assistantMsg);\n\n const nextRepo = normalizeThreadRepository(repo);\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n\n const sameTurn =\n lastMsg?.role === \"assistant\" &&\n (turnIdOf(lastMsg) === turnId ||\n // A message the client wrote for one of this turn's runs before it\n // carried a turnId stamp.\n (!!runId && getMessageRunId(lastMsg) === runId));\n\n if (!sameTurn) {\n // First chunk of this turn (or the previous assistant belongs to an\n // earlier turn) — append as a fresh message; buildAssistantMessage already\n // stamped turnId + foldedRunIds onto it.\n return upsertAssistantMessage(repo, assistantMsg);\n }\n\n const existingContent = Array.isArray(lastMsg.content) ? lastMsg.content : [];\n const incomingContent = Array.isArray(assistantMsg.content)\n ? assistantMsg.content\n : [];\n const existingFolded = foldedRunIdsOf(lastMsg);\n const runAlreadyFolded =\n !!runId &&\n (existingFolded.includes(runId) || getMessageRunId(lastMsg) === runId);\n\n // If this run's chunk is already represented in the turn (the client saved\n // it, or we already folded it), do not re-append — keep the larger copy so\n // the turn never shrinks. Otherwise fold this chunk onto the accumulated turn.\n const mergedContent = runAlreadyFolded\n ? assistantContentWeight(incomingContent) >\n assistantContentWeight(existingContent)\n ? incomingContent\n : existingContent\n : appendFoldedContent(existingContent, incomingContent);\n\n const mergedFolded = Array.from(\n new Set([...existingFolded, ...(runId ? [runId] : [])]),\n );\n\n const existingCustom =\n lastMsg.metadata?.custom && typeof lastMsg.metadata.custom === \"object\"\n ? (lastMsg.metadata.custom as Record<string, unknown>)\n : {};\n const incomingCustom =\n assistantMsg.metadata?.custom &&\n typeof assistantMsg.metadata.custom === \"object\"\n ? (assistantMsg.metadata.custom as Record<string, unknown>)\n : {};\n\n const mergedCustom: Record<string, unknown> = {\n ...existingCustom,\n ...incomingCustom,\n turnId,\n foldedRunIds: mergedFolded,\n };\n const existingDurationMs = assistantRunDurationMs(existingCustom);\n const incomingDurationMs = assistantRunDurationMs(incomingCustom);\n const mergedDurationMs = runAlreadyFolded\n ? existingDurationMs == null\n ? incomingDurationMs\n : incomingDurationMs == null\n ? existingDurationMs\n : Math.max(existingDurationMs, incomingDurationMs)\n : existingDurationMs == null && incomingDurationMs == null\n ? null\n : (existingDurationMs ?? 0) + (incomingDurationMs ?? 0);\n if (mergedDurationMs != null) {\n mergedCustom[ASSISTANT_RUN_DURATION_METADATA_KEY] = mergedDurationMs;\n }\n // Only the freshest chunk decides whether the turn is still continuing.\n if (incomingCustom.continued !== true) delete mergedCustom.continued;\n\n const mergedMessage = {\n ...lastMsg,\n content: normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: mergedContent,\n }).content,\n // The freshest chunk's status wins: a clean done supersedes a prior\n // partial; a real error supersedes a partial.\n status: assistantMsg.status ?? lastMsg.status,\n metadata: {\n ...lastMsg.metadata,\n runId: runId ?? lastMsg.metadata?.runId,\n custom: mergedCustom,\n },\n };\n\n nextRepo.messages[lastIndex] = { ...lastEntry, message: mergedMessage };\n nextRepo.headId = mergedMessage.id ?? nextRepo.headId;\n return nextRepo;\n}\n\nexport function normalizeThreadTitle(value: unknown): string {\n if (typeof value !== \"string\") return \"\";\n return value.replace(/\\s+/g, \" \").trim().slice(0, 160);\n}\n\n/**\n * Extract title and preview from a thread runtime export.\n * Isomorphic — works on both server and client.\n */\nexport function extractThreadMeta(repo: any): {\n title: string;\n preview: string;\n} {\n const titleOverride = normalizeThreadTitle(repo?._titleOverride);\n const msgs = repo?.messages;\n if (!Array.isArray(msgs) || msgs.length === 0)\n return { title: titleOverride, preview: \"\" };\n\n let title = \"\";\n let preview = \"\";\n for (const entry of msgs) {\n // Support both wrapped ({ message: { role, content } }) and flat ({ role, content }) formats\n const msg = entry?.message ?? entry;\n if (msg.role !== \"user\") continue;\n const textParts = Array.isArray(msg.content)\n ? msg.content\n .filter((p: any) => p.type === \"text\")\n .map((p: any) => p.text)\n .join(\" \")\n : typeof msg.content === \"string\"\n ? msg.content\n : \"\";\n if (textParts.trim()) {\n if (!title) title = textParts.trim().slice(0, 80);\n preview = textParts.trim().slice(0, 120);\n }\n }\n return { title: titleOverride || title, preview };\n}\n"]}
1
+ {"version":3,"file":"thread-data-builder.js","sourceRoot":"","sources":["../../src/agent/thread-data-builder.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ActionChatUIConfig } from \"../action-ui.js\";\nimport {\n isCredentialGapCodeAgentEvent,\n normalizeCodeAgentTranscript,\n type CodeAgentTranscriptEvent as CoreCodeAgentTranscriptEvent,\n type NormalizedCodeAgentStatusEvent,\n type NormalizedCodeAgentThinkingEvent,\n type NormalizedCodeAgentToolEvent,\n type NormalizedCodeAgentTranscriptItem,\n} from \"../code-agents/transcript-normalizer.js\";\nimport type { AgentMcpAppPayload } from \"../mcp-client/app-result.js\";\nimport type { EngineMessage } from \"./engine/types.js\";\nimport type { AgentChatAttachment, RunEvent } from \"./types.js\";\n\ninterface ContentPart {\n type: string;\n text?: string;\n toolCallId?: string;\n toolName?: string;\n argsText?: string;\n args?: Record<string, string>;\n result?: string;\n isError?: boolean;\n completedSideEffect?: boolean;\n mcpApp?: AgentMcpAppPayload;\n chatUI?: ActionChatUIConfig;\n}\n\ninterface BuildAssistantMessageOptions {\n suppressInternalContinuation?: boolean;\n /**\n * Logical-turn identity. When set it is stamped onto the message metadata so\n * continuation runs of the same turn can be folded onto a single durable\n * assistant message (see foldAssistantTurn) instead of each run dropping or\n * overwriting the others.\n */\n turnId?: string;\n runDurationMs?: number;\n}\n\ntype AssistantMessage = NonNullable<ReturnType<typeof buildAssistantMessage>>;\ntype UserMessage = ReturnType<typeof buildUserMessage>;\n\nconst INTERRUPTED_TOOL_RESULT =\n \"Interrupted before this tool returned a result.\";\n\nexport const ASSISTANT_RUN_DURATION_METADATA_KEY = \"agentNativeRunDurationMs\";\n\nconst MAX_STORED_ATTACHMENT_CHARS = 60_000;\n/**\n * When no file-upload provider is configured we fall back to storing base64\n * directly in the SQL thread_data column. Cap the raw base64 per attachment to\n * avoid unbounded row growth. Attachments larger than this get a '[truncated]'\n * marker so the transcript still renders but the column stays sane.\n */\nconst MAX_STORED_BASE64_BYTES = 2 * 1024 * 1024; // 2 MB per attachment\n\nfunction isInternalContinuationError(event: {\n error: string;\n errorCode?: string;\n recoverable?: boolean;\n}): boolean {\n const code = String(event.errorCode ?? \"\").toLowerCase();\n const msg = event.error.toLowerCase();\n if (code === \"builder_gateway_error\") return false;\n return (\n event.recoverable === true ||\n code === \"builder_gateway_timeout\" ||\n code === \"stale_run\" ||\n code === \"timeout\" ||\n code === \"timeout_error\" ||\n code === \"http_408\" ||\n code === \"http_429\" ||\n code === \"http_500\" ||\n code === \"http_502\" ||\n code === \"http_503\" ||\n code === \"http_504\" ||\n code === \"rate_limited\" ||\n code === \"too_many_concurrent_requests\" ||\n code === \"overloaded_error\" ||\n msg.includes(\"timeout\") ||\n msg.includes(\"gateway timeout\") ||\n msg.includes(\"inactivity timeout\") ||\n msg.includes(\"stream ended\") ||\n msg.includes(\"stream closed\") ||\n msg.includes(\"temporarily unavailable\") ||\n msg.includes(\"502\") ||\n msg.includes(\"503\") ||\n msg.includes(\"504\") ||\n msg.includes(\"529\")\n );\n}\n\n/**\n * Reconstruct an assistant-ui message from raw agent run events.\n * Mirrors the client-side processEvent logic so the server can persist\n * the assistant's response even if the frontend is disconnected.\n */\nexport function buildAssistantMessage(\n events: RunEvent[],\n runId?: string,\n options: BuildAssistantMessageOptions = {},\n): {\n id: string;\n createdAt: Date;\n role: \"assistant\";\n content: ContentPart[];\n status:\n | { type: \"complete\"; reason: \"stop\" }\n | { type: \"incomplete\"; reason: \"error\" };\n metadata: Record<string, unknown>;\n} | null {\n const content: ContentPart[] = [];\n let toolCallCounter = 0;\n let runError: {\n message: string;\n errorCode?: string;\n details?: string;\n recoverable?: boolean;\n } | null = null;\n let endedAtInternalContinuationBoundary = false;\n\n const appendText = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"text\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"text\", text });\n }\n };\n\n const appendReasoning = (text: string) => {\n const last = content[content.length - 1];\n if (last && last.type === \"reasoning\") {\n last.text = (last.text ?? \"\") + text;\n } else {\n content.push({ type: \"reasoning\", text });\n }\n };\n\n for (const [index, { event }] of events.entries()) {\n if (event.type === \"clear\") {\n // A live stream always follows `clear` with the chunk that re-emits the\n // wiped content. A rebuild has no successor, so applying a TRAILING\n // clear can only destroy the transcript permanently.\n if (index === events.length - 1) continue;\n clearAssistantDraftContent(content);\n continue;\n }\n\n if (event.type === \"text\") {\n appendText(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"thinking\") {\n appendReasoning(event.text ?? \"\");\n continue;\n }\n\n if (event.type === \"tool_start\") {\n toolCallCounter += 1;\n const toolCallId =\n event.id?.trim() ||\n (runId ? `${runId}:tc_${toolCallCounter}` : `tc_${toolCallCounter}`);\n const args = (event.input ?? {}) as Record<string, string>;\n content.push({\n type: \"tool-call\",\n toolCallId,\n toolName: event.tool ?? \"unknown\",\n argsText: JSON.stringify(args),\n args,\n });\n continue;\n }\n\n if (event.type === \"tool_done\") {\n const eventToolCallId = event.id?.trim();\n let matchingIndex = -1;\n\n if (eventToolCallId) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolCallId === eventToolCallId &&\n part.result === undefined\n ) {\n matchingIndex = i;\n break;\n }\n }\n }\n\n if (matchingIndex === -1) {\n for (let i = content.length - 1; i >= 0; i--) {\n const part = content[i];\n if (\n part.type === \"tool-call\" &&\n part.toolName === event.tool &&\n part.result === undefined\n ) {\n matchingIndex = i;\n break;\n }\n }\n }\n\n const part = content[matchingIndex];\n if (part?.type === \"tool-call\") {\n part.result = event.result ?? \"\";\n if (event.isError !== undefined) part.isError = event.isError;\n if (event.completedSideEffect !== undefined) {\n part.completedSideEffect = event.completedSideEffect;\n }\n if (event.mcpApp) part.mcpApp = event.mcpApp;\n if (event.chatUI) part.chatUI = event.chatUI;\n }\n continue;\n }\n\n if (event.type === \"loop_limit\") {\n // Older servers emitted this as a user-visible terminal event. Treat it\n // as an internal continuation boundary when rebuilding persisted turns.\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"auto_continue\") {\n if (options.suppressInternalContinuation) {\n endedAtInternalContinuationBoundary = true;\n }\n continue;\n }\n\n if (event.type === \"error\") {\n if (\n options.suppressInternalContinuation &&\n isInternalContinuationError(event)\n ) {\n endedAtInternalContinuationBoundary = true;\n continue;\n }\n if (event.errorCode === \"run_timeout\" && event.recoverable) {\n continue;\n }\n runError = {\n message: event.error,\n ...(event.errorCode ? { errorCode: event.errorCode } : {}),\n ...(event.details ? { details: event.details } : {}),\n ...(event.recoverable ? { recoverable: event.recoverable } : {}),\n };\n appendText(`${content.length > 0 ? \"\\n\\n\" : \"\"}Error: ${event.error}`);\n continue;\n }\n\n // done, missing_api_key — terminal signals, not content\n }\n\n // Only a truly empty turn produces nothing to persist. A turn that ended at\n // an internal continuation boundary (soft-timeout auto_continue, a\n // recoverable gateway error, suppressed loop_limit) DID stream real content\n // — persist it as a partial so the continuation run can fold the next chunk\n // onto it (foldAssistantTurn) instead of the earlier text being dropped.\n if (content.length === 0) return null;\n\n const continued = endedAtInternalContinuationBoundary;\n if (!continued) {\n settleInterruptedToolCalls(content);\n }\n\n const custom: Record<string, unknown> = {};\n if (options.turnId) custom.turnId = options.turnId;\n if (runId) custom.foldedRunIds = [runId];\n if (\n typeof options.runDurationMs === \"number\" &&\n Number.isFinite(options.runDurationMs) &&\n options.runDurationMs >= 0\n ) {\n custom[ASSISTANT_RUN_DURATION_METADATA_KEY] = options.runDurationMs;\n }\n if (continued) custom.continued = true;\n if (runError) {\n custom.runError = {\n ...runError,\n ...(runId ? { runId } : {}),\n };\n }\n\n const metadata: Record<string, unknown> = {};\n if (runId) metadata.runId = runId;\n if (Object.keys(custom).length > 0) metadata.custom = custom;\n\n return {\n id: `server-${runId ?? Date.now()}`,\n createdAt: new Date(),\n role: \"assistant\",\n content,\n status: runError\n ? { type: \"incomplete\" as const, reason: \"error\" as const }\n : { type: \"complete\" as const, reason: \"stop\" as const },\n metadata,\n };\n}\n\nfunction clearAssistantDraftContent(content: ContentPart[]): void {\n for (let index = content.length - 1; index >= 0; index--) {\n const part = content[index];\n if (!part) continue;\n if (part.type === \"text\" || part.type === \"reasoning\") {\n content.splice(index, 1);\n continue;\n }\n if (part.type === \"tool-call\" && part.result === undefined) {\n // Keep materialized in-flight tool cards across retry clears so persisted\n // thread rebuilds match the live SSE processor and avoid hide→show flicker.\n const isEphemeral =\n (part as { activity?: boolean }).activity === true ||\n part.argsText === \"\" ||\n Object.keys(part.args ?? {}).length === 0;\n if (isEphemeral) content.splice(index, 1);\n }\n }\n}\n\nfunction getStoredMessage(entry: any): any {\n return entry?.message ?? entry;\n}\n\nfunction getStoredParentId(entry: any): string | null | undefined {\n return typeof entry?.parentId === \"string\" || entry?.parentId === null\n ? entry.parentId\n : undefined;\n}\n\nfunction getStoredRunConfig(entry: any): any {\n return entry && typeof entry === \"object\" && \"runConfig\" in entry\n ? entry.runConfig\n : undefined;\n}\n\nfunction messageId(message: any): string | undefined {\n return typeof message?.id === \"string\" && message.id ? message.id : undefined;\n}\n\nfunction getMessageRunId(message: any): string | undefined {\n const meta = message?.metadata;\n const direct = meta?.runId;\n const custom = meta?.custom?.runId;\n const errorRun = meta?.custom?.runError?.runId ?? meta?.runError?.runId;\n if (typeof direct === \"string\") return direct;\n if (typeof custom === \"string\") return custom;\n if (typeof errorRun === \"string\") return errorRun;\n return undefined;\n}\n\nfunction messageContentIsEmpty(content: unknown): boolean {\n if (typeof content === \"string\") return content.trim().length === 0;\n if (Array.isArray(content)) {\n return !content.some((part: any) => {\n if (!part || typeof part !== \"object\") return false;\n if (part.type === \"text\") {\n return typeof part.text === \"string\" && part.text.trim().length > 0;\n }\n return true;\n });\n }\n return content == null;\n}\n\nfunction messageText(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\");\n}\n\nfunction settleInterruptedToolCalls(content: ContentPart[]): void {\n for (const part of content) {\n if (part.type === \"tool-call\" && part.result === undefined) {\n part.result = INTERRUPTED_TOOL_RESULT;\n }\n }\n}\n\nfunction isTerminalAssistantStatus(status: unknown): boolean {\n const type = (status as { type?: unknown } | undefined)?.type;\n return type === \"complete\" || type === \"incomplete\";\n}\n\nfunction normalizeAttachmentIdentity(attachments: unknown): unknown {\n if (!Array.isArray(attachments) || attachments.length === 0) return undefined;\n return attachments.map((att: any) => ({\n type: att?.type,\n name: att?.name,\n contentType: att?.contentType,\n }));\n}\n\n// Strip the render-only `toolCallId` before fingerprinting. The id is generated\n// differently depending on who built the message — the server now scopes it by\n// run (`${runId}:tc_1`) while the client's live stream uses a bare counter\n// (`tc_1`) — so the client export and the server fold of the SAME tool-call turn\n// would otherwise hash to different fingerprints and fail to dedupe, leaving the\n// turn rendered twice. The id never participates in message identity (history\n// replay regenerates its own ids), so hashing content without it is the correct\n// notion of \"same message\".\nfunction normalizeContentForFingerprint(content: unknown): unknown {\n if (!Array.isArray(content)) return content;\n return content.map((part: any) =>\n part && typeof part === \"object\" && part.type === \"tool-call\"\n ? { ...part, toolCallId: undefined }\n : part,\n );\n}\n\nfunction messageIdentityKeys(message: any): string[] {\n const keys: string[] = [];\n if (typeof message?.id === \"string\" && message.id) {\n keys.push(`id:${message.id}`);\n }\n const runId = getMessageRunId(message);\n if (runId) keys.push(`run:${runId}`);\n // A logical turn is ONE durable assistant message even though it may span\n // several continuation runs, so two messages sharing a turnId (e.g. the\n // client export and the server fold of the same answer) must dedupe to one.\n const turnId = turnIdOf(message);\n if (turnId) keys.push(`turn:${turnId}`);\n\n // Normalize attachments through `normalizeAttachmentIdentity` so an\n // explicit empty `[]` (assistant-ui's default for messages with no\n // attachments) and an omitted/undefined `attachments` field hash to the\n // same fingerprint. Without this, every user message ended up duplicated\n // in `chat_threads`: one copy from `saveThreadData` (runtime export\n // includes `attachments: []`) and one from `persistSubmittedUserMessage`\n // → `buildUserMessage` (omits the field entirely). The merge couldn't\n // dedupe them because their fingerprints differed by exactly one\n // `[]` vs `undefined`. (Repro on slides prod: every user turn produced\n // a `client_user → assistant → server_user` triple instead of a\n // `user → assistant` pair.)\n try {\n keys.push(\n `fingerprint:${JSON.stringify({\n role: message?.role,\n content: normalizeContentForFingerprint(message?.content),\n attachments: normalizeAttachmentIdentity(message?.attachments),\n })}`,\n );\n } catch {\n // Best effort. id/runId usually exist for persisted assistant-ui rows.\n }\n if (message?.role === \"user\") {\n try {\n keys.push(\n `user-fingerprint:${JSON.stringify({\n role: message.role,\n content: normalizeContentForFingerprint(message.content),\n attachments: normalizeAttachmentIdentity(message.attachments),\n })}`,\n );\n } catch {\n // Same best-effort behavior as the full fingerprint.\n }\n }\n return keys;\n}\n\nfunction messagesMatch(a: any, b: any): boolean {\n const bKeys = new Set(messageIdentityKeys(b));\n return messageIdentityKeys(a).some((key) => bKeys.has(key));\n}\n\nfunction preserveAssistantRunDuration(chosenEntry: any, otherEntry: any): any {\n const chosen = getStoredMessage(chosenEntry);\n const other = getStoredMessage(otherEntry);\n if (chosen?.role !== \"assistant\" || other?.role !== \"assistant\") {\n return chosenEntry;\n }\n\n const chosenCustom =\n chosen.metadata?.custom && typeof chosen.metadata.custom === \"object\"\n ? (chosen.metadata.custom as Record<string, unknown>)\n : {};\n if (assistantRunDurationMs(chosenCustom) != null) return chosenEntry;\n\n const otherCustom =\n other.metadata?.custom && typeof other.metadata.custom === \"object\"\n ? (other.metadata.custom as Record<string, unknown>)\n : {};\n const durationMs = assistantRunDurationMs(otherCustom);\n if (durationMs == null) return chosenEntry;\n\n const nextMessage = {\n ...chosen,\n metadata: {\n ...chosen.metadata,\n custom: {\n ...chosenCustom,\n [ASSISTANT_RUN_DURATION_METADATA_KEY]: durationMs,\n },\n },\n };\n return chosenEntry?.message === undefined\n ? nextMessage\n : { ...chosenEntry, message: nextMessage };\n}\n\nfunction chooseMergedMessageEntry(existingEntry: any, incomingEntry: any): any {\n const existing = getStoredMessage(existingEntry);\n const incoming = getStoredMessage(incomingEntry);\n // Same logical turn (client export vs server fold of one accumulating\n // answer): never shrink — keep whichever side accumulated more content, so a\n // stale/lossy export can't overwrite the richer folded turn. Ties prefer the\n // terminal copy.\n const existingTurn = turnIdOf(existing);\n const incomingTurn = turnIdOf(incoming);\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n existingTurn &&\n existingTurn === incomingTurn\n ) {\n const existingWeight = assistantContentWeight(existing.content);\n const incomingWeight = assistantContentWeight(incoming.content);\n const chosen =\n existingWeight > incomingWeight\n ? existingEntry\n : incomingWeight > existingWeight\n ? incomingEntry\n : isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ? existingEntry\n : incomingEntry;\n return preserveAssistantRunDuration(\n chosen,\n chosen === existingEntry ? incomingEntry : existingEntry,\n );\n }\n if (\n existing?.role === \"assistant\" &&\n incoming?.role === \"assistant\" &&\n isTerminalAssistantStatus(existing?.status) &&\n !isTerminalAssistantStatus(incoming?.status)\n ) {\n return preserveAssistantRunDuration(existingEntry, incomingEntry);\n }\n return preserveAssistantRunDuration(incomingEntry, existingEntry);\n}\n\nfunction normalizeMessageEntry(\n entry: any,\n parentId: string | null,\n): { message: any; parentId: string | null; runConfig?: any } | null {\n const message = getStoredMessage(entry);\n if (!messageId(message)) return null;\n const normalizedMessage = normalizeAssistantToolCallIds(message);\n const runConfig = getStoredRunConfig(entry);\n return {\n message: normalizedMessage,\n parentId,\n ...(runConfig !== undefined ? { runConfig } : {}),\n };\n}\n\nfunction uniqueToolCallId(toolCallId: string, seen: Set<string>): string {\n if (!seen.has(toolCallId)) return toolCallId;\n let suffix = 2;\n let candidate = `${toolCallId}__dedup_${suffix}`;\n while (seen.has(candidate)) {\n suffix += 1;\n candidate = `${toolCallId}__dedup_${suffix}`;\n }\n return candidate;\n}\n\nfunction normalizeAssistantToolCallIds(message: any): any {\n if (message?.role !== \"assistant\" || !Array.isArray(message.content)) {\n return message;\n }\n\n const seen = new Set<string>();\n let changed = false;\n const content = message.content.map((part: any) => {\n if (\n part?.type !== \"tool-call\" ||\n typeof part.toolCallId !== \"string\" ||\n part.toolCallId.length === 0\n ) {\n return part;\n }\n\n const nextToolCallId = uniqueToolCallId(part.toolCallId, seen);\n seen.add(nextToolCallId);\n if (nextToolCallId === part.toolCallId) return part;\n changed = true;\n return { ...part, toolCallId: nextToolCallId };\n });\n\n return changed ? { ...message, content } : message;\n}\n\n/**\n * Convert legacy/partially merged thread data into assistant-ui's exported\n * repository shape and repair parent links so `threadRuntime.import()` cannot\n * fail with \"Parent message not found\".\n */\nexport function normalizeThreadRepository(repo: any): any {\n const normalized = repo && typeof repo === \"object\" ? { ...repo } : {};\n const sourceMessages: any[] = Array.isArray(repo?.messages)\n ? repo.messages\n : [];\n const firstIndexById = new Map<string, number>();\n const lastEntryById = new Map<string, any>();\n sourceMessages.forEach((entry, index) => {\n const id = messageId(getStoredMessage(entry));\n if (!id) return;\n if (!firstIndexById.has(id)) firstIndexById.set(id, index);\n lastEntryById.set(id, entry);\n });\n const uniqueSourceMessages = sourceMessages\n .filter((entry, index) => {\n const id = messageId(getStoredMessage(entry));\n return id && firstIndexById.get(id) === index;\n })\n .map((entry) => {\n const id = messageId(getStoredMessage(entry));\n return (id && lastEntryById.get(id)) || entry;\n });\n const messages: Array<{\n message: any;\n parentId: string | null;\n runConfig?: any;\n }> = [];\n const seenIds = new Set<string>();\n let previousId: string | null = null;\n\n for (const entry of uniqueSourceMessages) {\n const message = getStoredMessage(entry);\n const id = messageId(message);\n if (!id) continue;\n\n const requestedParentId = getStoredParentId(entry);\n const parentId =\n requestedParentId === null\n ? null\n : requestedParentId && seenIds.has(requestedParentId)\n ? requestedParentId\n : previousId;\n\n const normalizedEntry = normalizeMessageEntry(entry, parentId);\n if (!normalizedEntry) continue;\n\n messages.push(normalizedEntry);\n seenIds.add(id);\n previousId = id;\n }\n\n normalized.messages = messages;\n const headId = typeof repo?.headId === \"string\" ? repo.headId : undefined;\n normalized.headId =\n headId && seenIds.has(headId) ? headId : (previousId ?? null);\n return normalized;\n}\n\n/**\n * Rebuild a flat `EngineMessage[]` from persisted thread_data (the\n * assistant-ui ExportedMessageRepository shape). Text-only — tool calls/results\n * are flattened to their text so a continuation run gets the conversation\n * prefix as plain context (Anthropic's prompt cache makes the resume cheap).\n *\n * Used to resume a background sub-agent in a fresh function invocation (the\n * server-side analog of the browser re-POSTing history for the main chat).\n * Originally inlined in `integrations/webhook-handler.ts`.\n */\nexport function threadDataToEngineMessages(\n threadData: string | Record<string, unknown> | null | undefined,\n): EngineMessage[] {\n const messages: EngineMessage[] = [];\n if (!threadData) return messages;\n let data: any;\n try {\n data = typeof threadData === \"string\" ? JSON.parse(threadData) : threadData;\n } catch {\n return messages;\n }\n if (!Array.isArray(data?.messages)) return messages;\n for (const entry of data.messages) {\n const m = entry?.message ?? entry;\n if (!m || (m.role !== \"user\" && m.role !== \"assistant\")) continue;\n const text = threadMessageTextForEngine(m);\n if (!text.trim()) continue;\n messages.push({ role: m.role, content: [{ type: \"text\", text }] });\n }\n return messages;\n}\n\nconst MAX_INTEGRATION_ARTIFACTS_IN_CONTEXT = 12;\nconst MAX_INTEGRATION_ARTIFACT_FIELD_CHARS = 500;\n\nfunction boundedString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed\n ? trimmed.slice(0, MAX_INTEGRATION_ARTIFACT_FIELD_CHARS)\n : undefined;\n}\n\nfunction promptSafeJson(value: unknown): string {\n return JSON.stringify(value)\n .replaceAll(\"&\", \"\\\\u0026\")\n .replaceAll(\"<\", \"\\\\u003c\")\n .replaceAll(\">\", \"\\\\u003e\");\n}\n\nfunction messageTextContent(message: any): string {\n if (typeof message?.content === \"string\") return message.content;\n if (!Array.isArray(message?.content)) return \"\";\n return message.content\n .filter(\n (part: any) => part?.type === \"text\" && typeof part.text === \"string\",\n )\n .map((part: any) => part.text)\n .join(\"\\n\");\n}\n\n/**\n * Select the participant-visible delivery for integration turns while keeping\n * a compact, trusted resource ledger available to the agent. Raw tool results\n * remain in thread_data for UI/audit use but are not replayed into the prompt.\n */\nexport function threadMessageTextForEngine(message: any): string {\n const delivery = message?.metadata?.integrationDelivery;\n const deliveryAttempted =\n message?.metadata?.integrationDeliveryAttempted === true;\n const deliveredText =\n message?.role === \"assistant\" &&\n delivery?.status === \"delivered\" &&\n typeof delivery.text === \"string\" &&\n delivery.text.trim()\n ? delivery.text\n : undefined;\n let text =\n deliveredText ??\n (message?.role === \"assistant\" && deliveryAttempted\n ? \"\"\n : messageTextContent(message));\n\n if (message?.role !== \"assistant\") return text;\n const storedArtifacts = message?.metadata?.integrationArtifacts;\n if (!Array.isArray(storedArtifacts)) return text;\n\n const artifacts = storedArtifacts\n .slice(0, MAX_INTEGRATION_ARTIFACTS_IN_CONTEXT)\n .map((artifact: any) => ({\n resourceType: boundedString(artifact?.resourceType),\n id: boundedString(artifact?.id),\n sourceAction: boundedString(artifact?.sourceAction),\n titleAtAction: boundedString(artifact?.titleAtAction),\n url: boundedString(artifact?.url),\n }))\n .filter(\n (artifact: {\n resourceType?: string;\n id?: string;\n sourceAction?: string;\n }) => artifact.resourceType && artifact.id && artifact.sourceAction,\n );\n if (artifacts.length === 0) return text;\n\n const context = [\n \"<integration_artifact_context>\",\n \"Trusted action history for this conversation. Resource IDs remain stable if participants rename the resource. Fields such as titleAtAction are historical aliases from the time of that action, not current resource state. Use stable IDs to locate an earlier artifact, read its current state before changing it, and omit fields the user did not explicitly ask to change while still deciding whether to update, add, supersede, or create.\",\n promptSafeJson(artifacts),\n \"</integration_artifact_context>\",\n ].join(\"\\n\");\n text = text.trim() ? `${text.trim()}\\n\\n${context}` : context;\n return text;\n}\n\nexport interface CodeAgentThreadTranscriptEvent {\n id: string;\n runId: string;\n kind?: CoreCodeAgentTranscriptEvent[\"kind\"];\n type?: CoreCodeAgentTranscriptEvent[\"kind\"] | \"note\";\n message?: string;\n text?: string;\n createdAt: string;\n metadata?: Record<string, unknown>;\n artifactPath?: string;\n artifactUrl?: string;\n signal?: CoreCodeAgentTranscriptEvent[\"signal\"];\n}\n\nexport interface BuildRepositoryFromCodeAgentTranscriptOptions {\n hideCredentialMessages?: boolean;\n}\n\nexport function buildRepositoryFromCodeAgentTranscript(\n events: readonly CodeAgentThreadTranscriptEvent[],\n options: BuildRepositoryFromCodeAgentTranscriptOptions = {},\n): any {\n const normalized = normalizeCodeAgentTranscript(\n events.map(toCoreCodeAgentTranscriptEvent),\n );\n const repo: {\n headId: string | null;\n messages: Array<{ message: any; parentId: string | null }>;\n } = {\n headId: null,\n messages: [],\n };\n\n let headId: string | null = null;\n let assistantTurn: {\n turnIndex: number;\n id: string;\n createdAt: string;\n updatedAt: string;\n runId?: string;\n content: ContentPart[];\n eventIds: string[];\n } | null = null;\n\n const flushAssistant = () => {\n if (!assistantTurn || assistantTurn.content.length === 0) {\n assistantTurn = null;\n return;\n }\n const message = {\n id: assistantTurn.id,\n createdAt: new Date(assistantTurn.createdAt),\n role: \"assistant\" as const,\n content: assistantTurn.content,\n status: { type: \"complete\" as const, reason: \"stop\" as const },\n metadata: {\n ...(assistantTurn.runId ? { runId: assistantTurn.runId } : {}),\n custom: {\n codeAgentTranscriptEventIds: assistantTurn.eventIds,\n },\n },\n };\n repo.messages.push({ message, parentId: headId });\n headId = message.id;\n repo.headId = headId;\n assistantTurn = null;\n };\n\n for (const item of normalized.items) {\n if (item.type === \"user\") {\n flushAssistant();\n const runId = item.events[0]?.runId;\n const userMessage = buildUserMessage({\n text: item.text,\n attachments: codeAgentAttachmentsFromEvents(item.events),\n runId: runId ? `${runId}-${item.id}` : item.id,\n createdAt: new Date(item.createdAt),\n });\n userMessage.id = `code-user-${item.id}`;\n const existingCustom =\n userMessage.metadata.custom &&\n typeof userMessage.metadata.custom === \"object\"\n ? (userMessage.metadata.custom as Record<string, unknown>)\n : {};\n userMessage.metadata = {\n ...userMessage.metadata,\n custom: {\n ...existingCustom,\n submittedRunId: runId,\n codeAgentTranscriptEventIds: item.eventIds,\n },\n };\n repo.messages.push({ message: userMessage, parentId: headId });\n headId = userMessage.id;\n repo.headId = headId;\n continue;\n }\n\n const content = contentPartForCodeAgentTranscriptItem(item, options);\n if (!content) continue;\n\n if (!assistantTurn || assistantTurn.turnIndex !== item.turnIndex) {\n flushAssistant();\n assistantTurn = {\n turnIndex: item.turnIndex,\n id: `code-assistant-${item.turnIndex}-${item.id}`,\n createdAt: item.createdAt,\n updatedAt: item.updatedAt,\n runId: item.events[0]?.runId,\n content: [],\n eventIds: [],\n };\n }\n assistantTurn.updatedAt = item.updatedAt;\n assistantTurn.eventIds.push(...item.eventIds);\n if (content.type === \"text\") {\n const last = assistantTurn.content.at(-1);\n if (last?.type === \"text\") {\n last.text = `${last.text}${last.text ? \"\\n\\n\" : \"\"}${content.text}`;\n } else {\n assistantTurn.content.push(content);\n }\n } else {\n assistantTurn.content.push(content);\n }\n }\n\n flushAssistant();\n return normalizeThreadRepository(repo);\n}\n\nfunction rewriteEntryParentId(\n entry: any,\n idRewrites: Map<string, string>,\n): any {\n const parentId = getStoredParentId(entry);\n if (!parentId) return entry;\n const rewritten = idRewrites.get(parentId);\n if (!rewritten) return entry;\n return { ...entry, parentId: rewritten };\n}\n\n/**\n * Merge an incoming client-side full-thread save over the current SQL copy.\n *\n * The browser exports and PUTs the whole assistant-ui repository. If a server\n * completion save lands first, an older browser export can otherwise replace\n * `thread_data` wholesale and delete the assistant message the server just\n * reconstructed from run events. Preserve server-only messages while still\n * accepting client-only messages and metadata.\n */\nexport interface MergeThreadDataOptions {\n preserveExistingQueuedMessages?: boolean;\n preserveExistingTopLevelKeys?: boolean;\n}\n\nexport function mergeThreadDataForClientSave(\n existingRepo: any,\n incomingRepo: any,\n options: MergeThreadDataOptions = {},\n) {\n const preserveExistingQueuedMessages =\n options.preserveExistingQueuedMessages ?? true;\n const preserveExistingTopLevelKeys =\n options.preserveExistingTopLevelKeys ?? true;\n const existingNormalized = normalizeThreadRepository(existingRepo);\n const incomingNormalized = normalizeThreadRepository(incomingRepo);\n const merged =\n incomingNormalized && typeof incomingNormalized === \"object\"\n ? { ...incomingNormalized }\n : {};\n if (\n preserveExistingTopLevelKeys &&\n existingNormalized &&\n typeof existingNormalized === \"object\"\n ) {\n for (const [key, value] of Object.entries(existingNormalized)) {\n if (key === \"messages\" || key === \"headId\") continue;\n if (key === \"queuedMessages\" && !preserveExistingQueuedMessages) {\n continue;\n }\n if (!(key in merged)) {\n merged[key] = value;\n }\n }\n } else if (\n preserveExistingQueuedMessages &&\n existingNormalized &&\n typeof existingNormalized === \"object\" &&\n existingNormalized.queuedMessages !== undefined &&\n merged.queuedMessages === undefined\n ) {\n merged.queuedMessages = existingNormalized.queuedMessages;\n }\n\n const existingMessages = Array.isArray(existingNormalized?.messages)\n ? existingNormalized.messages\n : null;\n const incomingMessages = Array.isArray(merged.messages)\n ? merged.messages\n : null;\n if (!existingMessages || !incomingMessages) return merged;\n\n const incomingKeySets: Set<string>[] = incomingMessages.map(\n (entry: unknown) => new Set(messageIdentityKeys(getStoredMessage(entry))),\n );\n const usedIncoming = new Set<number>();\n const nextMessages: any[] = [];\n const idRewrites = new Map<string, string>();\n\n for (const existingEntry of existingMessages) {\n const existingMessage = getStoredMessage(existingEntry);\n if (\n existingMessage?.role === \"assistant\" &&\n messageContentIsEmpty(existingMessage.content)\n ) {\n continue;\n }\n\n const existingKeys = messageIdentityKeys(existingMessage);\n const incomingIndex = incomingKeySets.findIndex(\n (keys: Set<string>, index: number) =>\n !usedIncoming.has(index) && existingKeys.some((key) => keys.has(key)),\n );\n\n if (incomingIndex === -1) {\n nextMessages.push(existingEntry);\n continue;\n }\n\n usedIncoming.add(incomingIndex);\n const incomingEntry = incomingMessages[incomingIndex];\n const chosen = chooseMergedMessageEntry(existingEntry, incomingEntry);\n const existingId = messageId(getStoredMessage(existingEntry));\n const chosenId = messageId(getStoredMessage(chosen));\n if (existingId && chosenId && existingId !== chosenId) {\n idRewrites.set(existingId, chosenId);\n }\n nextMessages.push(chosen);\n }\n\n for (let index = 0; index < incomingMessages.length; index++) {\n if (usedIncoming.has(index)) continue;\n const incomingMessage = getStoredMessage(incomingMessages[index]);\n if (\n incomingMessage?.role === \"assistant\" &&\n messageContentIsEmpty(incomingMessage.content)\n ) {\n continue;\n }\n nextMessages.push(incomingMessages[index]);\n }\n\n merged.messages = nextMessages.map((entry) =>\n rewriteEntryParentId(entry, idRewrites),\n );\n return normalizeThreadRepository(merged);\n}\n\nfunction escapeAttachmentAttribute(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/\"/g, \"&quot;\");\n}\n\nfunction unwrapTextAttachmentEnvelope(text: string): string {\n const match = text.match(\n /^<attachment\\b[^>]*>\\n?([\\s\\S]*?)\\n?<\\/attachment>$/,\n );\n return match ? match[1] : text;\n}\n\nfunction truncateStoredAttachment(text: string): string {\n const unwrapped = unwrapTextAttachmentEnvelope(text);\n if (unwrapped.length <= MAX_STORED_ATTACHMENT_CHARS) return unwrapped;\n const omitted = unwrapped.length - MAX_STORED_ATTACHMENT_CHARS;\n return `${unwrapped.slice(0, MAX_STORED_ATTACHMENT_CHARS)}\\n\\n[Attachment truncated after ${MAX_STORED_ATTACHMENT_CHARS.toLocaleString()} characters; ${omitted.toLocaleString()} characters omitted from persisted chat history.]`;\n}\n\nfunction textAttachmentEnvelope(\n att: AgentChatAttachment,\n text: string,\n): string {\n const attrs = [\n `name=\"${escapeAttachmentAttribute(att.name || \"attachment\")}\"`,\n att.contentType\n ? `contentType=\"${escapeAttachmentAttribute(att.contentType)}\"`\n : null,\n att.type ? `type=\"${escapeAttachmentAttribute(att.type)}\"` : null,\n ].filter(Boolean);\n return `<attachment ${attrs.join(\" \")}>\\n${truncateStoredAttachment(text)}\\n</attachment>`;\n}\n\n/**\n * Cap a base64 data-URL string for storage. When the encoded string is over\n * the limit we replace the base64 payload with a truncation marker so the\n * transcript still renders the attachment chip but doesn't bloat SQL.\n */\nfunction capBase64DataUrl(dataUrl: string): string {\n const commaIdx = dataUrl.indexOf(\",\");\n if (commaIdx === -1) return dataUrl;\n const header = dataUrl.slice(0, commaIdx + 1);\n const b64 = dataUrl.slice(commaIdx + 1);\n // Each base64 char encodes 6 bits; 4 chars = 3 bytes.\n const approxBytes = Math.floor((b64.length * 3) / 4);\n if (approxBytes <= MAX_STORED_BASE64_BYTES) return dataUrl;\n return `${header}[base64 truncated — ${approxBytes.toLocaleString()} bytes exceeds storage limit]`;\n}\n\nfunction buildStoredAttachments(\n attachments: AgentChatAttachment[] | undefined,\n runId: string | undefined,\n): any[] {\n return (attachments ?? [])\n .map((att, index) => {\n const id = `server-${runId ?? Date.now()}-attachment-${index}`;\n // When the attachment was successfully pre-uploaded, store only the URL\n // reference. This keeps the SQL thread_data row compact regardless of\n // file size, and lets the transcript render from the hosted URL instead\n // of re-shipping megabytes of base64 on every poll save.\n const uploadedUrl = (att as any).url as string | undefined;\n if (uploadedUrl) {\n const referenceOnly = (att as any).referenceOnly === true;\n const storedAsImage = att.type === \"image\" && !referenceOnly;\n return {\n id,\n type: storedAsImage ? \"image\" : \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n // URL reference shape — content[0] uses the hosted URL.\n content: storedAsImage\n ? [{ type: \"image\", image: uploadedUrl }]\n : [\n {\n type: \"file\",\n url: uploadedUrl,\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n // Keep the reference metadata for tooling / read-attachment.\n metadata: {\n uploadUrl: uploadedUrl,\n uploadProvider: (att as any).uploadProvider as string | undefined,\n ...(referenceOnly\n ? {\n referenceOnly: true,\n securityNote: (att as any).securityNote as string | undefined,\n }\n : {}),\n },\n };\n }\n\n if (att.type === \"image\" && att.data) {\n return {\n id,\n type: \"image\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [{ type: \"image\", image: capBase64DataUrl(att.data) }],\n };\n }\n if (att.data) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n {\n type: \"file\",\n data: capBase64DataUrl(att.data),\n mimeType: att.contentType,\n filename: att.name,\n },\n ],\n };\n }\n if (typeof att.text === \"string\" && att.text.length > 0) {\n return {\n id,\n type: \"file\",\n name: att.name,\n contentType: att.contentType,\n status: { type: \"complete\" },\n content: [\n { type: \"text\", text: textAttachmentEnvelope(att, att.text) },\n ],\n };\n }\n return null;\n })\n .filter(Boolean);\n}\n\nexport function buildUserMessage(opts: {\n text: string;\n attachments?: AgentChatAttachment[];\n runId?: string;\n createdAt?: Date;\n}): {\n id: string;\n createdAt: Date;\n role: \"user\";\n content: ContentPart[];\n attachments?: any[];\n metadata: Record<string, unknown>;\n} {\n const attachments = buildStoredAttachments(opts.attachments, opts.runId);\n return {\n id: `server-user-${opts.runId ?? Date.now()}`,\n createdAt: opts.createdAt ?? new Date(),\n role: \"user\",\n content: [{ type: \"text\", text: opts.text }],\n ...(attachments.length > 0 ? { attachments } : {}),\n metadata: {\n custom: {\n submittedRunId: opts.runId,\n },\n },\n };\n}\n\nfunction toCoreCodeAgentTranscriptEvent(\n event: CodeAgentThreadTranscriptEvent,\n): CoreCodeAgentTranscriptEvent {\n return {\n schemaVersion: 1,\n id: event.id,\n runId: event.runId,\n kind: (event.kind ??\n event.type ??\n \"status\") as CoreCodeAgentTranscriptEvent[\"kind\"],\n message: event.message ?? event.text ?? \"\",\n createdAt: event.createdAt,\n metadata: {\n ...(event.metadata ?? {}),\n ...(event.artifactPath ? { artifactPath: event.artifactPath } : {}),\n ...(event.artifactUrl ? { artifactUrl: event.artifactUrl } : {}),\n },\n ...(event.signal ? { signal: event.signal } : {}),\n };\n}\n\nfunction contentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentTranscriptItem,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): ContentPart | null {\n if (item.type === \"assistant\") {\n return item.text.trim() ? { type: \"text\", text: item.text } : null;\n }\n if (item.type === \"tool\") {\n return toolContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"thinking\") {\n return thinkingContentPartForCodeAgentTranscriptItem(item);\n }\n if (item.type === \"status\") {\n const text = statusTextForCodeAgentTranscriptItem(item, options);\n return text ? { type: \"text\", text } : null;\n }\n return null;\n}\n\nfunction thinkingContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentThinkingEvent,\n): ContentPart | null {\n const text = item.text.trim();\n return text ? { type: \"reasoning\", text } : null;\n}\n\nfunction toolContentPartForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentToolEvent,\n): ContentPart {\n return {\n type: \"tool-call\",\n toolCallId: `code-tool-${item.id}`,\n toolName: item.tool ?? item.label ?? \"code-agent\",\n argsText: previewCodeAgentTranscriptValue(item.input) ?? \"\",\n args: recordArgsForCodeAgentTool(item.input),\n ...(item.result !== undefined\n ? { result: previewCodeAgentTranscriptValue(item.result) ?? \"\" }\n : {}),\n ...(item.structuredMeta ? { structuredMeta: item.structuredMeta } : {}),\n ...(item.pendingApprovalKey\n ? { approval: { approvalKey: item.pendingApprovalKey } }\n : {}),\n };\n}\n\nfunction statusTextForCodeAgentTranscriptItem(\n item: NormalizedCodeAgentStatusEvent,\n options: BuildRepositoryFromCodeAgentTranscriptOptions,\n): string | null {\n if (options.hideCredentialMessages && isCredentialGapCodeAgentEvent(item)) {\n return null;\n }\n if (item.statusKind === \"artifact\") {\n const event = item.events[0];\n const path =\n stringRecordValue(event?.metadata, \"artifactPath\") ??\n stringRecordValue(event?.metadata, \"path\");\n const url = stringRecordValue(event?.metadata, \"artifactUrl\");\n const target = url ?? path;\n return target\n ? `Artifact: ${item.text}\\n${target}`\n : `Artifact: ${item.text}`;\n }\n if (item.level === \"info\" && item.statusKind !== \"note\") return null;\n return item.text;\n}\n\nfunction codeAgentAttachmentsFromEvents(\n events: readonly CoreCodeAgentTranscriptEvent[],\n): AgentChatAttachment[] {\n for (const event of events) {\n const raw = event.metadata?.attachments;\n if (!Array.isArray(raw) || raw.length === 0) continue;\n const attachments: AgentChatAttachment[] = [];\n for (const item of raw) {\n if (!item || typeof item !== \"object\") continue;\n const record = item as Record<string, unknown>;\n const name = stringRecordValue(record, \"name\");\n if (!name) continue;\n const contentType = stringRecordValue(record, \"type\");\n const text = stringRecordValue(record, \"text\");\n const dataUrl = stringRecordValue(record, \"dataUrl\");\n attachments.push({\n type: dataUrl ? \"image\" : \"file\",\n name,\n ...(contentType ? { contentType } : {}),\n ...(text ? { text } : {}),\n ...(dataUrl ? { data: dataUrl } : {}),\n });\n }\n if (attachments.length > 0) return attachments;\n }\n return [];\n}\n\nfunction recordArgsForCodeAgentTool(value: unknown): Record<string, string> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return {};\n const result: Record<string, string> = {};\n for (const [key, entry] of Object.entries(value)) {\n result[key] =\n typeof entry === \"string\"\n ? entry\n : (previewCodeAgentTranscriptValue(entry) ?? \"\");\n }\n return result;\n}\n\nfunction previewCodeAgentTranscriptValue(value: unknown): string | undefined {\n if (value === undefined || value === null) return undefined;\n const text =\n typeof value === \"string\" ? value : (JSON.stringify(value, null, 2) ?? \"\");\n const trimmed = text.trim();\n if (!trimmed) return undefined;\n return trimmed.length > 4000 ? `${trimmed.slice(0, 4000)}\\n...` : trimmed;\n}\n\nfunction stringRecordValue(\n record: Record<string, unknown> | undefined,\n key: string,\n): string | undefined {\n const value = record?.[key];\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nexport function upsertUserMessage(repo: any, userMsg: UserMessage): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n if (lastMsg?.role === \"user\" && messagesMatch(lastMsg, userMsg)) {\n return nextRepo;\n }\n\n const parentId =\n lastIndex >= 0 ? (messageId(getStoredMessage(lastEntry)) ?? null) : null;\n nextRepo.messages.push({ message: userMsg, parentId });\n nextRepo.headId = userMsg.id;\n return nextRepo;\n}\n\nfunction shouldReplaceLastAssistant(\n lastMessage: any,\n assistantMsg: AssistantMessage,\n): boolean {\n const lastContent = lastMessage?.content;\n if (messageContentIsEmpty(lastContent)) return true;\n\n const lastRunId = getMessageRunId(lastMessage);\n const nextRunId = getMessageRunId(assistantMsg);\n if (lastRunId && nextRunId && lastRunId === nextRunId) return true;\n if (lastRunId && nextRunId && lastRunId !== nextRunId) return false;\n\n const lastStatus = lastMessage?.status;\n if (lastStatus && !isTerminalAssistantStatus(lastStatus)) return true;\n\n try {\n if (JSON.stringify(lastContent) === JSON.stringify(assistantMsg.content)) {\n return true;\n }\n } catch {\n // Fall through to the text-prefix check.\n }\n\n const lastText = messageText(lastContent).trim();\n const nextText = messageText(assistantMsg.content).trim();\n if (isTerminalAssistantStatus(lastStatus)) return false;\n return Boolean(lastText && nextText && nextText.startsWith(lastText));\n}\n\n/**\n * Merge the server-reconstructed assistant message into persisted\n * assistant-ui thread data.\n *\n * The browser periodically saves thread data while a run is still streaming.\n * That can leave the last assistant message non-empty but partial/pending.\n * Completion must replace that same-run partial message instead of treating\n * any assistant content as proof that the frontend already saved the final\n * turn.\n */\nexport function upsertAssistantMessage(\n repo: any,\n assistantMsg: AssistantMessage,\n): any {\n const nextRepo = normalizeThreadRepository(repo);\n\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n const lastRole = lastMsg?.role;\n\n if (\n lastRole === \"assistant\" &&\n shouldReplaceLastAssistant(lastMsg, assistantMsg)\n ) {\n nextRepo.messages[lastIndex] = { ...lastEntry, message: assistantMsg };\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n }\n\n const parentId =\n nextRepo.messages.length > 0\n ? (messageId(\n getStoredMessage(nextRepo.messages[nextRepo.messages.length - 1]),\n ) ?? null)\n : null;\n nextRepo.messages.push({ message: assistantMsg, parentId });\n nextRepo.headId = assistantMsg.id;\n return nextRepo;\n}\n\nfunction turnIdOf(message: any): string | undefined {\n const t = message?.metadata?.custom?.turnId;\n return typeof t === \"string\" && t ? t : undefined;\n}\n\nfunction foldedRunIdsOf(message: any): string[] {\n const ids = message?.metadata?.custom?.foldedRunIds;\n return Array.isArray(ids)\n ? ids.filter((x: unknown): x is string => typeof x === \"string\")\n : [];\n}\n\nfunction assistantRunDurationMs(\n custom: Record<string, unknown>,\n): number | null {\n const durationMs = custom[ASSISTANT_RUN_DURATION_METADATA_KEY];\n return typeof durationMs === \"number\" &&\n Number.isFinite(durationMs) &&\n durationMs >= 0\n ? durationMs\n : null;\n}\n\n/** Rough size of an assistant message's content, used only to pick the larger\n * of two representations of the same chunk so a fold can never shrink. */\nfunction assistantContentWeight(content: unknown): number {\n if (!Array.isArray(content)) return 0;\n let weight = 0;\n for (const part of content) {\n if (part?.type === \"text\" && typeof part.text === \"string\") {\n weight += part.text.length;\n } else {\n weight += 1;\n }\n }\n return weight;\n}\n\n/** Concatenate continuation content onto the accumulated turn, merging a\n * trailing+leading text run so the resumed answer reads as one flowing\n * message rather than two stacked fragments. */\nfunction appendFoldedContent(existing: any[], incoming: any[]): any[] {\n const merged = existing.map((p) => ({ ...p }));\n for (const part of incoming) {\n const last = merged[merged.length - 1];\n if (\n part?.type === \"text\" &&\n typeof part.text === \"string\" &&\n last?.type === \"text\" &&\n typeof last.text === \"string\"\n ) {\n last.text = `${last.text}${part.text}`;\n } else {\n merged.push({ ...part });\n }\n }\n return normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: merged,\n }).content;\n}\n\n/**\n * Fold a continuation run's assistant message onto the single durable message\n * for its logical turn (identified by `turnId`), so a turn that spans several\n * continuation runs accumulates into ONE message that only ever grows. This is\n * the server-side analog of an append-only rollout: the durable transcript is\n * a monotonic fold over every run in the turn, never a per-run snapshot that\n * drops the earlier chunks.\n *\n * Idempotent and never-shrinking, so it is safe to run alongside the client's\n * full-thread export (which may write the same turn from the other side):\n * - First chunk of a turn → appended as a fresh message.\n * - A run whose content is already represented (already folded, or the client\n * saved it) → kept as-is, choosing whichever copy has more content.\n * - A new chunk → appended onto the accumulated turn.\n * Falls back to per-run upsert when no `turnId` is available (turn == run).\n */\nexport function foldAssistantTurn(\n repo: any,\n assistantMsg: AssistantMessage,\n options: { turnId?: string; runId?: string },\n): any {\n const turnId = options.turnId;\n const runId = options.runId;\n if (!turnId) return upsertAssistantMessage(repo, assistantMsg);\n\n const nextRepo = normalizeThreadRepository(repo);\n const lastIndex = nextRepo.messages.length - 1;\n const lastEntry = lastIndex >= 0 ? nextRepo.messages[lastIndex] : undefined;\n const lastMsg = getStoredMessage(lastEntry);\n\n const sameTurn =\n lastMsg?.role === \"assistant\" &&\n (turnIdOf(lastMsg) === turnId ||\n // A message the client wrote for one of this turn's runs before it\n // carried a turnId stamp.\n (!!runId && getMessageRunId(lastMsg) === runId));\n\n if (!sameTurn) {\n // First chunk of this turn (or the previous assistant belongs to an\n // earlier turn) — append as a fresh message; buildAssistantMessage already\n // stamped turnId + foldedRunIds onto it.\n return upsertAssistantMessage(repo, assistantMsg);\n }\n\n const existingContent = Array.isArray(lastMsg.content) ? lastMsg.content : [];\n const incomingContent = Array.isArray(assistantMsg.content)\n ? assistantMsg.content\n : [];\n const existingFolded = foldedRunIdsOf(lastMsg);\n const runAlreadyFolded =\n !!runId &&\n (existingFolded.includes(runId) || getMessageRunId(lastMsg) === runId);\n\n // If this run's chunk is already represented in the turn (the client saved\n // it, or we already folded it), do not re-append — keep the larger copy so\n // the turn never shrinks. Otherwise fold this chunk onto the accumulated turn.\n const mergedContent = runAlreadyFolded\n ? assistantContentWeight(incomingContent) >\n assistantContentWeight(existingContent)\n ? incomingContent\n : existingContent\n : appendFoldedContent(existingContent, incomingContent);\n\n const mergedFolded = Array.from(\n new Set([...existingFolded, ...(runId ? [runId] : [])]),\n );\n\n const existingCustom =\n lastMsg.metadata?.custom && typeof lastMsg.metadata.custom === \"object\"\n ? (lastMsg.metadata.custom as Record<string, unknown>)\n : {};\n const incomingCustom =\n assistantMsg.metadata?.custom &&\n typeof assistantMsg.metadata.custom === \"object\"\n ? (assistantMsg.metadata.custom as Record<string, unknown>)\n : {};\n\n const mergedCustom: Record<string, unknown> = {\n ...existingCustom,\n ...incomingCustom,\n turnId,\n foldedRunIds: mergedFolded,\n };\n const existingDurationMs = assistantRunDurationMs(existingCustom);\n const incomingDurationMs = assistantRunDurationMs(incomingCustom);\n const mergedDurationMs = runAlreadyFolded\n ? existingDurationMs == null\n ? incomingDurationMs\n : incomingDurationMs == null\n ? existingDurationMs\n : Math.max(existingDurationMs, incomingDurationMs)\n : existingDurationMs == null && incomingDurationMs == null\n ? null\n : (existingDurationMs ?? 0) + (incomingDurationMs ?? 0);\n if (mergedDurationMs != null) {\n mergedCustom[ASSISTANT_RUN_DURATION_METADATA_KEY] = mergedDurationMs;\n }\n // Only the freshest chunk decides whether the turn is still continuing.\n if (incomingCustom.continued !== true) delete mergedCustom.continued;\n\n const mergedMessage = {\n ...lastMsg,\n content: normalizeAssistantToolCallIds({\n role: \"assistant\",\n content: mergedContent,\n }).content,\n // The freshest chunk's status wins: a clean done supersedes a prior\n // partial; a real error supersedes a partial.\n status: assistantMsg.status ?? lastMsg.status,\n metadata: {\n ...lastMsg.metadata,\n runId: runId ?? lastMsg.metadata?.runId,\n custom: mergedCustom,\n },\n };\n\n nextRepo.messages[lastIndex] = { ...lastEntry, message: mergedMessage };\n nextRepo.headId = mergedMessage.id ?? nextRepo.headId;\n return nextRepo;\n}\n\nexport function normalizeThreadTitle(value: unknown): string {\n if (typeof value !== \"string\") return \"\";\n return value.replace(/\\s+/g, \" \").trim().slice(0, 160);\n}\n\n/**\n * Extract title and preview from a thread runtime export.\n * Isomorphic — works on both server and client.\n */\nexport function extractThreadMeta(repo: any): {\n title: string;\n preview: string;\n} {\n const titleOverride = normalizeThreadTitle(repo?._titleOverride);\n const msgs = repo?.messages;\n if (!Array.isArray(msgs) || msgs.length === 0)\n return { title: titleOverride, preview: \"\" };\n\n let title = \"\";\n let preview = \"\";\n for (const entry of msgs) {\n // Support both wrapped ({ message: { role, content } }) and flat ({ role, content }) formats\n const msg = entry?.message ?? entry;\n if (msg.role !== \"user\") continue;\n const textParts = Array.isArray(msg.content)\n ? msg.content\n .filter((p: any) => p.type === \"text\")\n .map((p: any) => p.text)\n .join(\" \")\n : typeof msg.content === \"string\"\n ? msg.content\n : \"\";\n if (textParts.trim()) {\n if (!title) title = textParts.trim().slice(0, 80);\n preview = textParts.trim().slice(0, 120);\n }\n }\n return { title: titleOverride || title, preview };\n}\n"]}
@@ -355,16 +355,28 @@ export declare const CONTINUATION_REASONS: readonly ["run_timeout", "loop_limit"
355
355
  export type ContinuationReason = (typeof CONTINUATION_REASONS)[number];
356
356
  /**
357
357
  * True when an `agent_runs.terminal_reason` marks a CHUNK boundary rather than
358
- * the end of the turn. Both writers (`terminalReasonForRun` in run-manager and
359
- * `markBackgroundContinuationChunkTerminal` in production-agent) record
360
- * status='completed' with one of these while a chained successor run carries the
361
- * turn on, so such a row must never be reported to a client as a plain `done`.
362
- * Mirrored client-side by `BACKGROUND_CONTINUATION_TERMINAL_REASONS`.
358
+ * the end of the turn — i.e. the run was TRUNCATED at a budget/timeout/loop/
359
+ * no-progress boundary and did not finish what it was asked to do.
360
+ *
361
+ * This is the single predicate for "the reason says this run did not finish".
362
+ * `setRunTerminalReason` (run-store) uses it to record `status='truncated'`
363
+ * instead of `'completed'`, so consumers should read the status rather than
364
+ * re-deriving truncation from the reason. It stays exported for legacy
365
+ * `status='completed'` rows written before the `truncated` status existed,
366
+ * which linger for one retention window.
363
367
  */
364
368
  export declare function isContinuationTerminalReason(reason: unknown): boolean;
365
369
  export interface RunEvent {
366
370
  seq: number;
367
371
  event: AgentChatEvent;
368
372
  }
369
- export type RunStatus = "running" | "completed" | "errored" | "aborted";
373
+ /**
374
+ * `agent_runs.status`. `completed` means the turn actually finished (terminal
375
+ * reason `done`); `truncated` means it stopped at a budget/timeout/loop/
376
+ * no-progress boundary with work still outstanding. Truncations were previously
377
+ * filed as `completed`, which made them invisible to every success-rate query
378
+ * and — because retention keys off status — deleted them a week before the
379
+ * genuine failures they belong with.
380
+ */
381
+ export type RunStatus = "running" | "completed" | "truncated" | "errored" | "aborted";
370
382
  //# sourceMappingURL=types.d.ts.map