@agent-native/core 0.117.2 → 0.118.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 (776) hide show
  1. package/corpus/README.md +3 -3
  2. package/corpus/core/CHANGELOG.md +51 -0
  3. package/corpus/core/docs/content/custom-design-system.mdx +445 -0
  4. package/corpus/core/docs/content/toolkit-ui.mdx +16 -0
  5. package/corpus/core/package.json +1 -1
  6. package/corpus/core/src/a2a/client.ts +32 -10
  7. package/corpus/core/src/a2a/types.ts +1 -0
  8. package/corpus/core/src/agent/types.ts +1 -1
  9. package/corpus/core/src/cli/index.ts +18 -10
  10. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  11. package/corpus/core/src/cli/templates-meta.ts +0 -12
  12. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  13. package/corpus/core/src/client/AgentPanel.tsx +99 -108
  14. package/corpus/core/src/client/AssistantChat.tsx +30 -13
  15. package/corpus/core/src/client/CommandMenu.tsx +68 -178
  16. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  17. package/corpus/core/src/client/agent-chat-adapter.ts +3 -1
  18. package/corpus/core/src/client/app-providers.tsx +1 -1
  19. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  20. package/corpus/core/src/client/chat/message-components.tsx +169 -18
  21. package/corpus/core/src/client/chat/tool-call-display.tsx +50 -14
  22. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
  23. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  24. package/corpus/core/src/client/components/ui/message-scroller.tsx +15 -1
  25. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  26. package/corpus/core/src/client/error-capture.ts +2 -6
  27. package/corpus/core/src/client/i18n.tsx +22 -0
  28. package/corpus/core/src/client/index.ts +17 -0
  29. package/corpus/core/src/client/org/TeamPage.tsx +257 -153
  30. package/corpus/core/src/client/progress/RunsTray.tsx +89 -88
  31. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +25 -16
  32. package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +34 -13
  33. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  34. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +20 -17
  35. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  36. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  37. package/corpus/core/src/client/session-replay.ts +3 -3
  38. package/corpus/core/src/client/settings/DemoModeSection.tsx +6 -18
  39. package/corpus/core/src/client/settings/SecretsSection.tsx +97 -52
  40. package/corpus/core/src/client/settings/SettingsPanel.tsx +217 -252
  41. package/corpus/core/src/client/settings/SettingsTabsPage.tsx +23 -2
  42. package/corpus/core/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  43. package/corpus/core/src/client/settings/index.ts +7 -0
  44. package/corpus/core/src/client/settings/useSettingsPanelController.ts +155 -0
  45. package/corpus/core/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  46. package/corpus/core/src/client/setup-connections/index.ts +10 -0
  47. package/corpus/core/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  48. package/corpus/core/src/client/sharing/ShareButton.tsx +64 -586
  49. package/corpus/core/src/client/sharing/ShareDialog.tsx +299 -633
  50. package/corpus/core/src/client/sharing/index.ts +42 -0
  51. package/corpus/core/src/client/sharing/share-controller-helpers.ts +318 -0
  52. package/corpus/core/src/client/sharing/useShareButtonController.ts +600 -0
  53. package/corpus/core/src/client/sharing/useShareDialogController.ts +559 -0
  54. package/corpus/core/src/client/sse-event-processor.ts +23 -0
  55. package/corpus/core/src/client/tool-display.ts +71 -0
  56. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  57. package/corpus/core/src/client/use-agent-engine-configured.ts +12 -19
  58. package/corpus/core/src/client/use-chat-threads.ts +33 -12
  59. package/corpus/core/src/deploy/build.ts +2 -1
  60. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  61. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  62. package/corpus/core/src/integrations/index.ts +5 -1
  63. package/corpus/core/src/localization/default-messages.ts +6 -1
  64. package/corpus/core/src/mcp-client/oauth-routes.ts +61 -14
  65. package/corpus/core/src/scripts/call-agent.ts +5 -1
  66. package/corpus/core/src/server/realtime-voice.ts +5 -2
  67. package/corpus/core/src/styles/agent-native.css +0 -24
  68. package/corpus/core/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  69. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  70. package/corpus/core/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  71. package/corpus/core/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  72. package/corpus/core/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  73. package/corpus/core/src/templates/default/app/design-system.ts +3 -0
  74. package/corpus/core/src/templates/default/app/root.tsx +5 -2
  75. package/corpus/core/src/templates/default/package.json +1 -0
  76. package/corpus/core/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  77. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  78. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  79. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  80. package/corpus/core/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  81. package/corpus/core/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  82. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  83. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  84. package/corpus/core/src/vite/client.ts +205 -1
  85. package/corpus/templates/analytics/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  86. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  87. package/corpus/templates/analytics/.agents/skills/frontend-design/SKILL.md +22 -2
  88. package/corpus/templates/analytics/.agents/skills/shadcn-ui/SKILL.md +28 -4
  89. package/corpus/templates/analytics/app/components/ui/toolkit-provider.tsx +6 -1
  90. package/corpus/templates/analytics/app/design-system.ts +3 -0
  91. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  92. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  93. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  94. package/corpus/templates/assets/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  95. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  96. package/corpus/templates/assets/.agents/skills/frontend-design/SKILL.md +22 -2
  97. package/corpus/templates/assets/.agents/skills/shadcn-ui/SKILL.md +28 -4
  98. package/corpus/templates/assets/app/components/ui/alert.tsx +1 -0
  99. package/corpus/templates/assets/app/components/ui/toolkit-provider.tsx +6 -1
  100. package/corpus/templates/assets/app/design-system.ts +3 -0
  101. package/corpus/templates/assets/app/routes/brand-kits.$id_.presets.$presetId.tsx +26 -30
  102. package/corpus/templates/brain/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  103. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  104. package/corpus/templates/brain/.agents/skills/frontend-design/SKILL.md +22 -2
  105. package/corpus/templates/brain/.agents/skills/shadcn-ui/SKILL.md +28 -4
  106. package/corpus/templates/brain/app/components/ui/dialog.tsx +1 -0
  107. package/corpus/templates/brain/app/components/ui/toolkit-provider.tsx +6 -1
  108. package/corpus/templates/brain/app/design-system.ts +3 -0
  109. package/corpus/templates/brain/app/routes/sources.tsx +189 -122
  110. package/corpus/templates/calendar/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  111. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  112. package/corpus/templates/calendar/.agents/skills/frontend-design/SKILL.md +22 -2
  113. package/corpus/templates/calendar/.agents/skills/shadcn-ui/SKILL.md +28 -4
  114. package/corpus/templates/calendar/app/components/ui/toolkit-provider.tsx +6 -1
  115. package/corpus/templates/calendar/app/design-system.ts +3 -0
  116. package/corpus/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  117. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  118. package/corpus/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  119. package/corpus/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  120. package/corpus/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  121. package/corpus/templates/chat/app/design-system.ts +3 -0
  122. package/corpus/templates/clips/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  123. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  124. package/corpus/templates/clips/.agents/skills/frontend-design/SKILL.md +22 -2
  125. package/corpus/templates/clips/.agents/skills/shadcn-ui/SKILL.md +28 -4
  126. package/corpus/templates/clips/AGENTS.md +8 -6
  127. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  128. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  129. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  130. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  131. package/corpus/templates/clips/app/components/ui/toolkit-provider.tsx +6 -1
  132. package/corpus/templates/clips/app/design-system.ts +3 -0
  133. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  134. package/corpus/templates/clips/app/routes/_app.library._index.tsx +1 -1
  135. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  136. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  137. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  138. package/corpus/templates/clips/changelog/2026-07-22-fixed-windows-recordings-aborting-during-the-countdown.md +6 -0
  139. package/corpus/templates/clips/changelog/2026-07-22-permissions-and-rewind-controls-are-now-grouped-with-clearer.md +6 -0
  140. package/corpus/templates/clips/changelog/2026-07-22-the-desktop-popover-opens-centered-under-the-menu-bar-icon-o.md +6 -0
  141. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  142. package/corpus/templates/clips/desktop/src/app.tsx +86 -82
  143. package/corpus/templates/clips/desktop/src/styles.css +13 -0
  144. package/corpus/templates/clips/desktop/src-tauri/src/lib.rs +10 -1
  145. package/corpus/templates/clips/desktop/src-tauri/src/shortcuts.rs +37 -2
  146. package/corpus/templates/clips/desktop/src-tauri/src/tray.rs +18 -0
  147. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  148. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  149. package/corpus/templates/content/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  150. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  151. package/corpus/templates/content/.agents/skills/frontend-design/SKILL.md +22 -2
  152. package/corpus/templates/content/.agents/skills/shadcn-ui/SKILL.md +28 -4
  153. package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +41 -59
  154. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  155. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  156. package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +41 -41
  157. package/corpus/templates/content/app/components/editor/database/GalleryView.tsx +2 -1
  158. package/corpus/templates/content/app/components/editor/database/ListView.tsx +2 -1
  159. package/corpus/templates/content/app/components/editor/database/TimelineView.tsx +9 -9
  160. package/corpus/templates/content/app/components/editor/database/sidebar.tsx +7 -7
  161. package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +11 -11
  162. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  163. package/corpus/templates/content/app/components/ui/checkbox.tsx +1 -0
  164. package/corpus/templates/content/app/components/ui/collapsible.tsx +1 -0
  165. package/corpus/templates/content/app/components/ui/toolkit-provider.tsx +6 -1
  166. package/corpus/templates/content/app/design-system.ts +3 -0
  167. package/corpus/templates/content/app/global.css +29 -3
  168. package/corpus/templates/content/app/i18n-data.ts +10 -0
  169. package/corpus/templates/content/changelog/2026-07-22-page-actions-are-grouped-into-the-three-dots-menu-for-a-clea.md +6 -0
  170. package/corpus/templates/design/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  171. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  172. package/corpus/templates/design/.agents/skills/frontend-design/SKILL.md +22 -2
  173. package/corpus/templates/design/.agents/skills/shadcn-ui/SKILL.md +28 -4
  174. package/corpus/templates/design/app/components/editor/PromptDialog.tsx +8 -8
  175. package/corpus/templates/design/app/components/ui/command.tsx +1 -0
  176. package/corpus/templates/design/app/components/ui/toolkit-provider.tsx +6 -1
  177. package/corpus/templates/design/app/design-system.ts +3 -0
  178. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  179. package/corpus/templates/dispatch/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  180. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  181. package/corpus/templates/dispatch/.agents/skills/frontend-design/SKILL.md +22 -2
  182. package/corpus/templates/dispatch/.agents/skills/shadcn-ui/SKILL.md +28 -4
  183. package/corpus/templates/dispatch/app/components/ui/button.tsx +1 -0
  184. package/corpus/templates/dispatch/app/components/ui/toolkit-provider.tsx +17 -0
  185. package/corpus/templates/dispatch/app/design-system.ts +3 -0
  186. package/corpus/templates/dispatch/app/root.tsx +10 -7
  187. package/corpus/templates/dispatch/package.json +1 -0
  188. package/corpus/templates/forms/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  189. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  190. package/corpus/templates/forms/.agents/skills/frontend-design/SKILL.md +22 -2
  191. package/corpus/templates/forms/.agents/skills/shadcn-ui/SKILL.md +28 -4
  192. package/corpus/templates/forms/app/components/ui/toolkit-provider.tsx +6 -1
  193. package/corpus/templates/forms/app/design-system.ts +3 -0
  194. package/corpus/templates/macros/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  195. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  196. package/corpus/templates/macros/.agents/skills/frontend-design/SKILL.md +22 -2
  197. package/corpus/templates/macros/.agents/skills/shadcn-ui/SKILL.md +28 -4
  198. package/corpus/templates/macros/app/components/ui/toolkit-provider.tsx +6 -1
  199. package/corpus/templates/macros/app/design-system.ts +3 -0
  200. package/corpus/templates/mail/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  201. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  202. package/corpus/templates/mail/.agents/skills/frontend-design/SKILL.md +22 -2
  203. package/corpus/templates/mail/.agents/skills/shadcn-ui/SKILL.md +28 -4
  204. package/corpus/templates/mail/app/components/email/EmailThread.tsx +134 -93
  205. package/corpus/templates/mail/app/components/email/email-iframe-document.ts +8 -2
  206. package/corpus/templates/mail/app/components/ui/textarea.tsx +1 -21
  207. package/corpus/templates/mail/app/components/ui/toolkit-provider.tsx +6 -1
  208. package/corpus/templates/mail/app/design-system.ts +3 -0
  209. package/corpus/templates/mail/changelog/2026-07-22-email-messages-no-longer-flash-with-an-unstyled-page-while-l.md +6 -0
  210. package/corpus/templates/plan/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  211. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  212. package/corpus/templates/plan/.agents/skills/frontend-design/SKILL.md +22 -2
  213. package/corpus/templates/plan/.agents/skills/shadcn-ui/SKILL.md +28 -4
  214. package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +1 -1
  215. package/corpus/templates/plan/app/components/ui/toolkit-provider.tsx +6 -1
  216. package/corpus/templates/plan/app/design-system.ts +3 -0
  217. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  218. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  219. package/corpus/templates/slides/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  220. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  221. package/corpus/templates/slides/.agents/skills/frontend-design/SKILL.md +22 -2
  222. package/corpus/templates/slides/.agents/skills/shadcn-ui/SKILL.md +28 -4
  223. package/corpus/templates/slides/app/components/ui/toolkit-provider.tsx +6 -1
  224. package/corpus/templates/slides/app/design-system.ts +3 -0
  225. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  226. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  227. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  228. package/corpus/templates/tasks/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  229. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  230. package/corpus/templates/tasks/.agents/skills/frontend-design/SKILL.md +22 -2
  231. package/corpus/templates/tasks/.agents/skills/shadcn-ui/SKILL.md +28 -4
  232. package/corpus/templates/tasks/app/components/ui/toolkit-provider.tsx +17 -0
  233. package/corpus/templates/tasks/app/design-system.ts +3 -0
  234. package/corpus/templates/tasks/app/root.tsx +5 -2
  235. package/corpus/toolkit/CHANGELOG.md +23 -0
  236. package/corpus/toolkit/agent-native.eject.json +71 -0
  237. package/corpus/toolkit/package.json +31 -1
  238. package/corpus/toolkit/src/chat-history/ChatHistoryRail.tsx +100 -39
  239. package/corpus/toolkit/src/chat-history/index.ts +9 -0
  240. package/corpus/toolkit/src/chat-history/useChatHistoryRailController.ts +76 -0
  241. package/corpus/toolkit/src/chat-history.css +2 -0
  242. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +11 -8
  243. package/corpus/toolkit/src/composer/PromptComposer.tsx +32 -7
  244. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  245. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +124 -9
  246. package/corpus/toolkit/src/conformance/__fixtures__/css-in-js-adapter.tsx +401 -0
  247. package/corpus/toolkit/src/conformance/index.ts +3 -0
  248. package/corpus/toolkit/src/conformance/runner.tsx +862 -0
  249. package/corpus/toolkit/src/conformance/types.ts +45 -0
  250. package/corpus/toolkit/src/conformance/version.ts +22 -0
  251. package/corpus/toolkit/src/design-system/components.tsx +146 -0
  252. package/corpus/toolkit/src/design-system/context.tsx +31 -0
  253. package/corpus/toolkit/src/design-system/default-adapter.tsx +915 -0
  254. package/corpus/toolkit/src/design-system/definition.ts +14 -0
  255. package/corpus/toolkit/src/design-system/error-boundary.tsx +37 -0
  256. package/corpus/toolkit/src/design-system/index.ts +7 -0
  257. package/corpus/toolkit/src/design-system/theme.ts +145 -0
  258. package/corpus/toolkit/src/design-system/types.ts +363 -0
  259. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  260. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  261. package/corpus/toolkit/src/editor/index.ts +2 -0
  262. package/corpus/toolkit/src/provider.tsx +98 -5
  263. package/corpus/toolkit/src/styles.css +52 -23
  264. package/corpus/toolkit/src/ui/button.tsx +95 -6
  265. package/corpus/toolkit/src/ui/dialog.tsx +48 -23
  266. package/corpus/toolkit/src/ui/popover.tsx +16 -2
  267. package/corpus/toolkit/src/ui/select.tsx +7 -3
  268. package/corpus/toolkit/src/ui/sidebar.tsx +47 -48
  269. package/corpus/toolkit/src/ui/tooltip.tsx +7 -3
  270. package/dist/a2a/client.d.ts +3 -1
  271. package/dist/a2a/client.d.ts.map +1 -1
  272. package/dist/a2a/client.js +17 -12
  273. package/dist/a2a/client.js.map +1 -1
  274. package/dist/a2a/types.d.ts +1 -1
  275. package/dist/a2a/types.d.ts.map +1 -1
  276. package/dist/a2a/types.js.map +1 -1
  277. package/dist/agent/types.d.ts +1 -1
  278. package/dist/agent/types.d.ts.map +1 -1
  279. package/dist/agent/types.js.map +1 -1
  280. package/dist/cli/index.js +18 -8
  281. package/dist/cli/index.js.map +1 -1
  282. package/dist/cli/multi-frontier-runs.js +3 -3
  283. package/dist/cli/multi-frontier-runs.js.map +1 -1
  284. package/dist/cli/templates-meta.d.ts.map +1 -1
  285. package/dist/cli/templates-meta.js +0 -12
  286. package/dist/cli/templates-meta.js.map +1 -1
  287. package/dist/cli/workspace-dev.js +1 -1
  288. package/dist/cli/workspace-dev.js.map +1 -1
  289. package/dist/client/AgentPanel.d.ts.map +1 -1
  290. package/dist/client/AgentPanel.js +18 -15
  291. package/dist/client/AgentPanel.js.map +1 -1
  292. package/dist/client/AssistantChat.d.ts.map +1 -1
  293. package/dist/client/AssistantChat.js +26 -15
  294. package/dist/client/AssistantChat.js.map +1 -1
  295. package/dist/client/CommandMenu.d.ts.map +1 -1
  296. package/dist/client/CommandMenu.js +18 -106
  297. package/dist/client/CommandMenu.js.map +1 -1
  298. package/dist/client/RunStuckBanner.d.ts +3 -5
  299. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  300. package/dist/client/RunStuckBanner.js +17 -18
  301. package/dist/client/RunStuckBanner.js.map +1 -1
  302. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  303. package/dist/client/agent-chat-adapter.js +2 -1
  304. package/dist/client/agent-chat-adapter.js.map +1 -1
  305. package/dist/client/app-providers.d.ts.map +1 -1
  306. package/dist/client/app-providers.js +1 -1
  307. package/dist/client/app-providers.js.map +1 -1
  308. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  309. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  310. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  311. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  312. package/dist/client/chat/message-components.d.ts +12 -1
  313. package/dist/client/chat/message-components.d.ts.map +1 -1
  314. package/dist/client/chat/message-components.js +102 -14
  315. package/dist/client/chat/message-components.js.map +1 -1
  316. package/dist/client/chat/tool-call-display.d.ts +3 -1
  317. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  318. package/dist/client/chat/tool-call-display.js +33 -14
  319. package/dist/client/chat/tool-call-display.js.map +1 -1
  320. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  321. package/dist/client/chat/widgets/InlineExtensionWidget.js +9 -12
  322. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  323. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  324. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  325. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  326. package/dist/client/components/ui/message-scroller.d.ts +1 -1
  327. package/dist/client/components/ui/message-scroller.d.ts.map +1 -1
  328. package/dist/client/components/ui/message-scroller.js +4 -3
  329. package/dist/client/components/ui/message-scroller.js.map +1 -1
  330. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  331. package/dist/client/conversation/AgentConversation.js +3 -2
  332. package/dist/client/conversation/AgentConversation.js.map +1 -1
  333. package/dist/client/error-capture.d.ts.map +1 -1
  334. package/dist/client/error-capture.js +2 -2
  335. package/dist/client/error-capture.js.map +1 -1
  336. package/dist/client/i18n.d.ts.map +1 -1
  337. package/dist/client/i18n.js +9 -0
  338. package/dist/client/i18n.js.map +1 -1
  339. package/dist/client/index.d.ts +2 -2
  340. package/dist/client/index.d.ts.map +1 -1
  341. package/dist/client/index.js +2 -2
  342. package/dist/client/index.js.map +1 -1
  343. package/dist/client/org/TeamPage.d.ts.map +1 -1
  344. package/dist/client/org/TeamPage.js +41 -33
  345. package/dist/client/org/TeamPage.js.map +1 -1
  346. package/dist/client/progress/RunsTray.d.ts.map +1 -1
  347. package/dist/client/progress/RunsTray.js +9 -10
  348. package/dist/client/progress/RunsTray.js.map +1 -1
  349. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  350. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  351. package/dist/client/resources/McpConnectionSuggestion.js +14 -12
  352. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  353. package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
  354. package/dist/client/resources/McpIntegrationDialog.js +10 -8
  355. package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
  356. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  357. package/dist/client/resources/ResourcesPanel.js +3 -1
  358. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  359. package/dist/client/resources/mcp-integration-catalog.d.ts +2 -0
  360. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  361. package/dist/client/resources/mcp-integration-catalog.js +17 -17
  362. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  363. package/dist/client/resources/mcp-integration-logos.js +2 -2
  364. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  365. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  366. package/dist/client/route-chunk-recovery.js +5 -3
  367. package/dist/client/route-chunk-recovery.js.map +1 -1
  368. package/dist/client/session-replay.js +3 -3
  369. package/dist/client/session-replay.js.map +1 -1
  370. package/dist/client/settings/DemoModeSection.d.ts.map +1 -1
  371. package/dist/client/settings/DemoModeSection.js +2 -5
  372. package/dist/client/settings/DemoModeSection.js.map +1 -1
  373. package/dist/client/settings/SecretsSection.d.ts.map +1 -1
  374. package/dist/client/settings/SecretsSection.js +18 -6
  375. package/dist/client/settings/SecretsSection.js.map +1 -1
  376. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  377. package/dist/client/settings/SettingsPanel.js +53 -118
  378. package/dist/client/settings/SettingsPanel.js.map +1 -1
  379. package/dist/client/settings/SettingsTabsPage.d.ts.map +1 -1
  380. package/dist/client/settings/SettingsTabsPage.js +16 -1
  381. package/dist/client/settings/SettingsTabsPage.js.map +1 -1
  382. package/dist/client/settings/VoiceTranscriptionSection.d.ts.map +1 -1
  383. package/dist/client/settings/VoiceTranscriptionSection.js +2 -5
  384. package/dist/client/settings/VoiceTranscriptionSection.js.map +1 -1
  385. package/dist/client/settings/index.d.ts +1 -0
  386. package/dist/client/settings/index.d.ts.map +1 -1
  387. package/dist/client/settings/index.js +1 -0
  388. package/dist/client/settings/index.js.map +1 -1
  389. package/dist/client/settings/useSettingsPanelController.d.ts +22 -0
  390. package/dist/client/settings/useSettingsPanelController.d.ts.map +1 -0
  391. package/dist/client/settings/useSettingsPanelController.js +103 -0
  392. package/dist/client/settings/useSettingsPanelController.js.map +1 -0
  393. package/dist/client/setup-connections/BuilderConnectCard.d.ts +14 -6
  394. package/dist/client/setup-connections/BuilderConnectCard.d.ts.map +1 -1
  395. package/dist/client/setup-connections/BuilderConnectCard.js +24 -16
  396. package/dist/client/setup-connections/BuilderConnectCard.js.map +1 -1
  397. package/dist/client/setup-connections/index.d.ts +2 -1
  398. package/dist/client/setup-connections/index.d.ts.map +1 -1
  399. package/dist/client/setup-connections/index.js +2 -1
  400. package/dist/client/setup-connections/index.js.map +1 -1
  401. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts +34 -0
  402. package/dist/client/setup-connections/useBuilderConnectCardController.d.ts.map +1 -0
  403. package/dist/client/setup-connections/useBuilderConnectCardController.js +39 -0
  404. package/dist/client/setup-connections/useBuilderConnectCardController.js.map +1 -0
  405. package/dist/client/sharing/ShareButton.d.ts +2 -1
  406. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  407. package/dist/client/sharing/ShareButton.js +17 -463
  408. package/dist/client/sharing/ShareButton.js.map +1 -1
  409. package/dist/client/sharing/ShareDialog.d.ts +6 -6
  410. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  411. package/dist/client/sharing/ShareDialog.js +69 -283
  412. package/dist/client/sharing/ShareDialog.js.map +1 -1
  413. package/dist/client/sharing/index.d.ts +3 -0
  414. package/dist/client/sharing/index.d.ts.map +1 -1
  415. package/dist/client/sharing/index.js +3 -0
  416. package/dist/client/sharing/index.js.map +1 -1
  417. package/dist/client/sharing/share-controller-helpers.d.ts +70 -0
  418. package/dist/client/sharing/share-controller-helpers.d.ts.map +1 -0
  419. package/dist/client/sharing/share-controller-helpers.js +224 -0
  420. package/dist/client/sharing/share-controller-helpers.js.map +1 -0
  421. package/dist/client/sharing/useShareButtonController.d.ts +91 -0
  422. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -0
  423. package/dist/client/sharing/useShareButtonController.js +397 -0
  424. package/dist/client/sharing/useShareButtonController.js.map +1 -0
  425. package/dist/client/sharing/useShareDialogController.d.ts +109 -0
  426. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -0
  427. package/dist/client/sharing/useShareDialogController.js +348 -0
  428. package/dist/client/sharing/useShareDialogController.js.map +1 -0
  429. package/dist/client/sse-event-processor.d.ts.map +1 -1
  430. package/dist/client/sse-event-processor.js +21 -0
  431. package/dist/client/sse-event-processor.js.map +1 -1
  432. package/dist/client/tool-display.d.ts +16 -0
  433. package/dist/client/tool-display.d.ts.map +1 -1
  434. package/dist/client/tool-display.js +52 -0
  435. package/dist/client/tool-display.js.map +1 -1
  436. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  437. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  438. package/dist/client/transcription/use-live-transcription.js +22 -11
  439. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  440. package/dist/client/use-agent-engine-configured.d.ts +3 -2
  441. package/dist/client/use-agent-engine-configured.d.ts.map +1 -1
  442. package/dist/client/use-agent-engine-configured.js +7 -19
  443. package/dist/client/use-agent-engine-configured.js.map +1 -1
  444. package/dist/client/use-chat-threads.d.ts.map +1 -1
  445. package/dist/client/use-chat-threads.js +21 -8
  446. package/dist/client/use-chat-threads.js.map +1 -1
  447. package/dist/collab/routes.d.ts +1 -1
  448. package/dist/collab/struct-routes.d.ts +1 -1
  449. package/dist/deploy/build.d.ts.map +1 -1
  450. package/dist/deploy/build.js +1 -1
  451. package/dist/deploy/build.js.map +1 -1
  452. package/dist/guards/db-tool-scoping.js +1 -1
  453. package/dist/guards/db-tool-scoping.js.map +1 -1
  454. package/dist/integrations/adapters/slack.d.ts +1 -0
  455. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  456. package/dist/integrations/adapters/slack.js +61 -5
  457. package/dist/integrations/adapters/slack.js.map +1 -1
  458. package/dist/integrations/index.d.ts +1 -1
  459. package/dist/integrations/index.d.ts.map +1 -1
  460. package/dist/integrations/index.js +1 -1
  461. package/dist/integrations/index.js.map +1 -1
  462. package/dist/localization/default-messages.d.ts +4 -0
  463. package/dist/localization/default-messages.d.ts.map +1 -1
  464. package/dist/localization/default-messages.js +5 -1
  465. package/dist/localization/default-messages.js.map +1 -1
  466. package/dist/mcp-client/oauth-routes.d.ts +5 -0
  467. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  468. package/dist/mcp-client/oauth-routes.js +53 -14
  469. package/dist/mcp-client/oauth-routes.js.map +1 -1
  470. package/dist/notifications/routes.d.ts +2 -2
  471. package/dist/observability/routes.d.ts +1 -1
  472. package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
  473. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  474. package/dist/scripts/call-agent.d.ts.map +1 -1
  475. package/dist/scripts/call-agent.js +5 -1
  476. package/dist/scripts/call-agent.js.map +1 -1
  477. package/dist/secrets/routes.d.ts +6 -6
  478. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  479. package/dist/server/realtime-voice.d.ts.map +1 -1
  480. package/dist/server/realtime-voice.js +2 -2
  481. package/dist/server/realtime-voice.js.map +1 -1
  482. package/dist/styles/agent-native.css +0 -24
  483. package/dist/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  484. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  485. package/dist/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  486. package/dist/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  487. package/dist/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  488. package/dist/templates/chat/app/design-system.ts +3 -0
  489. package/dist/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  490. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  491. package/dist/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  492. package/dist/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  493. package/dist/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  494. package/dist/templates/default/app/design-system.ts +3 -0
  495. package/dist/templates/default/app/root.tsx +5 -2
  496. package/dist/templates/default/package.json +1 -0
  497. package/dist/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  498. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  499. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  500. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  501. package/dist/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  502. package/dist/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  503. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  504. package/dist/terminal/cli-registry.js +1 -1
  505. package/dist/terminal/cli-registry.js.map +1 -1
  506. package/dist/vite/client.d.ts +11 -1
  507. package/dist/vite/client.d.ts.map +1 -1
  508. package/dist/vite/client.js +144 -2
  509. package/dist/vite/client.js.map +1 -1
  510. package/docs/content/custom-design-system.mdx +445 -0
  511. package/docs/content/toolkit-ui.mdx +16 -0
  512. package/package.json +2 -2
  513. package/src/a2a/client.ts +32 -10
  514. package/src/a2a/types.ts +1 -0
  515. package/src/agent/types.ts +1 -1
  516. package/src/cli/index.ts +18 -10
  517. package/src/cli/multi-frontier-runs.ts +5 -3
  518. package/src/cli/templates-meta.ts +0 -12
  519. package/src/cli/workspace-dev.ts +1 -1
  520. package/src/client/AgentPanel.tsx +99 -108
  521. package/src/client/AssistantChat.tsx +30 -13
  522. package/src/client/CommandMenu.tsx +68 -178
  523. package/src/client/RunStuckBanner.tsx +39 -47
  524. package/src/client/agent-chat-adapter.ts +3 -1
  525. package/src/client/app-providers.tsx +1 -1
  526. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  527. package/src/client/chat/message-components.tsx +169 -18
  528. package/src/client/chat/tool-call-display.tsx +50 -14
  529. package/src/client/chat/widgets/InlineExtensionWidget.tsx +13 -40
  530. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  531. package/src/client/components/ui/message-scroller.tsx +15 -1
  532. package/src/client/conversation/AgentConversation.tsx +12 -1
  533. package/src/client/error-capture.ts +2 -6
  534. package/src/client/i18n.tsx +22 -0
  535. package/src/client/index.ts +17 -0
  536. package/src/client/org/TeamPage.tsx +257 -153
  537. package/src/client/progress/RunsTray.tsx +89 -88
  538. package/src/client/resources/McpConnectionSuggestion.tsx +25 -16
  539. package/src/client/resources/McpIntegrationDialog.tsx +34 -13
  540. package/src/client/resources/ResourcesPanel.tsx +5 -1
  541. package/src/client/resources/mcp-integration-catalog.ts +20 -17
  542. package/src/client/resources/mcp-integration-logos.ts +2 -2
  543. package/src/client/route-chunk-recovery.ts +5 -3
  544. package/src/client/session-replay.ts +3 -3
  545. package/src/client/settings/DemoModeSection.tsx +6 -18
  546. package/src/client/settings/SecretsSection.tsx +97 -52
  547. package/src/client/settings/SettingsPanel.tsx +217 -252
  548. package/src/client/settings/SettingsTabsPage.tsx +23 -2
  549. package/src/client/settings/VoiceTranscriptionSection.tsx +7 -18
  550. package/src/client/settings/index.ts +7 -0
  551. package/src/client/settings/useSettingsPanelController.ts +155 -0
  552. package/src/client/setup-connections/BuilderConnectCard.tsx +116 -51
  553. package/src/client/setup-connections/index.ts +10 -0
  554. package/src/client/setup-connections/useBuilderConnectCardController.ts +82 -0
  555. package/src/client/sharing/ShareButton.tsx +64 -586
  556. package/src/client/sharing/ShareDialog.tsx +299 -633
  557. package/src/client/sharing/index.ts +42 -0
  558. package/src/client/sharing/share-controller-helpers.ts +318 -0
  559. package/src/client/sharing/useShareButtonController.ts +600 -0
  560. package/src/client/sharing/useShareDialogController.ts +559 -0
  561. package/src/client/sse-event-processor.ts +23 -0
  562. package/src/client/tool-display.ts +71 -0
  563. package/src/client/transcription/use-live-transcription.ts +64 -45
  564. package/src/client/use-agent-engine-configured.ts +12 -19
  565. package/src/client/use-chat-threads.ts +33 -12
  566. package/src/deploy/build.ts +2 -1
  567. package/src/guards/db-tool-scoping.ts +1 -1
  568. package/src/integrations/adapters/slack.ts +84 -5
  569. package/src/integrations/index.ts +5 -1
  570. package/src/localization/default-messages.ts +6 -1
  571. package/src/mcp-client/oauth-routes.ts +61 -14
  572. package/src/scripts/call-agent.ts +5 -1
  573. package/src/server/realtime-voice.ts +5 -2
  574. package/src/styles/agent-native.css +0 -24
  575. package/src/templates/chat/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  576. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  577. package/src/templates/chat/.agents/skills/frontend-design/SKILL.md +22 -2
  578. package/src/templates/chat/.agents/skills/shadcn-ui/SKILL.md +28 -4
  579. package/src/templates/chat/app/components/ui/toolkit-provider.tsx +6 -1
  580. package/src/templates/chat/app/design-system.ts +3 -0
  581. package/src/templates/default/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  582. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  583. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +22 -2
  584. package/src/templates/default/.agents/skills/shadcn-ui/SKILL.md +28 -4
  585. package/src/templates/default/app/components/ui/toolkit-provider.tsx +10 -0
  586. package/src/templates/default/app/design-system.ts +3 -0
  587. package/src/templates/default/app/root.tsx +5 -2
  588. package/src/templates/default/package.json +1 -0
  589. package/src/templates/headless/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  590. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  591. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +37 -2
  592. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +86 -11
  593. package/src/templates/workspace-core/.agents/skills/frontend-design/SKILL.md +22 -2
  594. package/src/templates/workspace-core/.agents/skills/shadcn-ui/SKILL.md +28 -4
  595. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  596. package/src/terminal/cli-registry.ts +1 -1
  597. package/src/vite/client.ts +205 -1
  598. package/corpus/templates/analytics/app/components/ui/calendar.tsx +0 -70
  599. package/corpus/templates/analytics/app/components/ui/chart.tsx +0 -386
  600. package/corpus/templates/calendar/app/components/ui/sonner.tsx +0 -58
  601. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  602. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -142
  603. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  604. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -145
  605. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  606. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  607. package/corpus/templates/crm/.env.example +0 -5
  608. package/corpus/templates/crm/AGENTS.md +0 -120
  609. package/corpus/templates/crm/CHANGELOG.md +0 -1
  610. package/corpus/templates/crm/DEVELOPING.md +0 -66
  611. package/corpus/templates/crm/README.md +0 -106
  612. package/corpus/templates/crm/_gitignore +0 -12
  613. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  614. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  615. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  616. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  617. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  618. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  619. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  620. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  621. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  622. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  623. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  624. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  625. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  626. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  627. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  628. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  629. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  630. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  631. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  632. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  633. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  634. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  635. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  636. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  637. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  638. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  639. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  640. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  641. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  642. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  643. package/corpus/templates/crm/actions/navigate.ts +0 -63
  644. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  645. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  646. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  647. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  648. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  649. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  650. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  651. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  652. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  653. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  654. package/corpus/templates/crm/actions/run.ts +0 -7
  655. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  656. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  657. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  658. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  659. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  660. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  661. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  662. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -83
  663. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -225
  664. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -413
  665. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  666. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  667. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -367
  668. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -92
  669. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -96
  670. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  671. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  672. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  673. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  674. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  675. package/corpus/templates/crm/app/global.css +0 -167
  676. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  677. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  678. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  679. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  680. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  681. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  682. package/corpus/templates/crm/app/lib/types.ts +0 -172
  683. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  684. package/corpus/templates/crm/app/root.tsx +0 -88
  685. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  686. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  687. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  688. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  689. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  690. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  691. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  692. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  693. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  694. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  695. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  696. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  697. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  698. package/corpus/templates/crm/app/routes.ts +0 -17
  699. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  700. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  701. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  702. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  703. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  704. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  705. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  706. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  707. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  708. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  709. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  710. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  711. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  712. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  713. package/corpus/templates/crm/components.json +0 -20
  714. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  715. package/corpus/templates/crm/learnings.defaults.md +0 -5
  716. package/corpus/templates/crm/package.json +0 -59
  717. package/corpus/templates/crm/public/favicon.svg +0 -1
  718. package/corpus/templates/crm/public/icon-180.svg +0 -1
  719. package/corpus/templates/crm/public/manifest.json +0 -11
  720. package/corpus/templates/crm/react-router.config.ts +0 -7
  721. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  722. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  723. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  724. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  725. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  726. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  727. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  728. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  729. package/corpus/templates/crm/server/db/index.ts +0 -169
  730. package/corpus/templates/crm/server/db/schema.ts +0 -441
  731. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  732. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  733. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  734. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  735. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  736. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  737. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  738. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  739. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  740. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  741. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  742. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  743. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  744. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  745. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  746. package/corpus/templates/crm/ssr-entry.ts +0 -11
  747. package/corpus/templates/crm/tsconfig.json +0 -24
  748. package/corpus/templates/crm/vite.config.ts +0 -15
  749. package/corpus/templates/crm/vitest.config.ts +0 -5
  750. package/corpus/templates/forms/app/components/ui/calendar.tsx +0 -214
  751. package/corpus/templates/forms/app/components/ui/chart.tsx +0 -379
  752. package/corpus/templates/forms/app/components/ui/command.tsx +0 -153
  753. package/corpus/templates/forms/app/components/ui/context-menu.tsx +0 -198
  754. package/corpus/templates/forms/app/components/ui/menubar.tsx +0 -254
  755. package/corpus/templates/macros/app/components/ui/menubar.tsx +0 -238
  756. package/corpus/templates/macros/app/components/ui/progress.tsx +0 -26
  757. package/corpus/templates/mail/app/components/ui/calendar.tsx +0 -211
  758. package/corpus/templates/mail/app/components/ui/chart.tsx +0 -379
  759. package/corpus/templates/mail/app/components/ui/command.tsx +0 -153
  760. package/corpus/templates/mail/app/components/ui/context-menu.tsx +0 -198
  761. package/corpus/templates/mail/app/components/ui/menubar.tsx +0 -254
  762. package/corpus/templates/tasks/app/components/ui/accordion.tsx +0 -56
  763. package/corpus/templates/tasks/app/components/ui/aspect-ratio.tsx +0 -5
  764. package/corpus/templates/tasks/app/components/ui/breadcrumb.tsx +0 -115
  765. package/corpus/templates/tasks/app/components/ui/calendar.tsx +0 -70
  766. package/corpus/templates/tasks/app/components/ui/carousel.tsx +0 -260
  767. package/corpus/templates/tasks/app/components/ui/chart.tsx +0 -379
  768. package/corpus/templates/tasks/app/components/ui/form.tsx +0 -177
  769. package/corpus/templates/tasks/app/components/ui/hover-card.tsx +0 -27
  770. package/corpus/templates/tasks/app/components/ui/input-otp.tsx +0 -69
  771. package/corpus/templates/tasks/app/components/ui/menubar.tsx +0 -254
  772. package/corpus/templates/tasks/app/components/ui/navigation-menu.tsx +0 -128
  773. package/corpus/templates/tasks/app/components/ui/pagination.tsx +0 -121
  774. package/corpus/templates/tasks/app/components/ui/resizable.tsx +0 -43
  775. package/corpus/templates/tasks/app/components/ui/sidebar.tsx +0 -782
  776. package/corpus/templates/tasks/app/components/ui/toggle.tsx +0 -43
@@ -64,6 +64,10 @@ import {
64
64
  import { ThumbsFeedback } from "../observability/ThumbsFeedback.js";
65
65
  import { McpConnectionSuggestion } from "../resources/McpConnectionSuggestion.js";
66
66
  import type { ContentPart } from "../sse-event-processor.js";
67
+ import {
68
+ isCallAgentToolCallShadowed,
69
+ shadowedCallAgentToolCallIds,
70
+ } from "../tool-display.js";
67
71
  import { cn } from "../utils.js";
68
72
  import {
69
73
  MarkdownText,
@@ -118,6 +122,9 @@ interface FormattedMessageTimestamp {
118
122
  full: string;
119
123
  }
120
124
 
125
+ const messageFooterFadeClassName =
126
+ "opacity-0 transition-[color,opacity] duration-150 group-hover:opacity-100 group-focus-within:opacity-100";
127
+
121
128
  function coerceMessageDate(value: unknown): Date | null {
122
129
  if (value instanceof Date) {
123
130
  return Number.isNaN(value.getTime()) ? null : value;
@@ -789,7 +796,7 @@ export function UserMessage() {
789
796
  {timestamp && (
790
797
  <MessageTimestamp
791
798
  timestamp={timestamp}
792
- className="opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100"
799
+ className={messageFooterFadeClassName}
793
800
  />
794
801
  )}
795
802
  </div>
@@ -841,12 +848,33 @@ export function messageTextFromContent(content: unknown): string {
841
848
  .join("\n");
842
849
  }
843
850
 
844
- function latestUserMessageText(messages: readonly unknown[]): string {
851
+ export function latestUserMessageText(messages: readonly unknown[]): string {
845
852
  for (let index = messages.length - 1; index >= 0; index -= 1) {
846
853
  const message = messages[index];
847
854
  if (!message || typeof message !== "object") continue;
848
855
  const record = message as { role?: unknown; content?: unknown };
849
- if (record.role === "user") return messageTextFromContent(record.content);
856
+ if (record.role !== "user" || isHiddenUserMessage(message)) continue;
857
+ return displayableUserMessageText(messageTextFromContent(record.content));
858
+ }
859
+ return "";
860
+ }
861
+
862
+ export function userMessageTextBeforeAssistant(
863
+ messages: readonly unknown[],
864
+ assistantMessageId: string,
865
+ ): string {
866
+ const assistantIndex = messages.findIndex((message) => {
867
+ if (!message || typeof message !== "object") return false;
868
+ return (message as { id?: unknown }).id === assistantMessageId;
869
+ });
870
+ if (assistantIndex < 1) return "";
871
+
872
+ for (let index = assistantIndex - 1; index >= 0; index -= 1) {
873
+ const message = messages[index];
874
+ if (!message || typeof message !== "object") continue;
875
+ const record = message as { role?: unknown; content?: unknown };
876
+ if (record.role !== "user" || isHiddenUserMessage(message)) continue;
877
+ return displayableUserMessageText(messageTextFromContent(record.content));
850
878
  }
851
879
  return "";
852
880
  }
@@ -860,6 +888,65 @@ export function assistantMessageHasUnresolvedTool(content: unknown): boolean {
860
888
  });
861
889
  }
862
890
 
891
+ export function assistantMessageHasCompletedCustomUi(
892
+ content: unknown,
893
+ ): boolean {
894
+ if (!Array.isArray(content)) return false;
895
+ let lastTextIndex = -1;
896
+ for (let index = 0; index < content.length; index++) {
897
+ const part = content[index];
898
+ if (
899
+ part &&
900
+ typeof part === "object" &&
901
+ (part as { type?: unknown }).type === "text"
902
+ ) {
903
+ lastTextIndex = index;
904
+ }
905
+ }
906
+ let hasCompletedTool = false;
907
+ let lastCompletedToolIsCustomUi = false;
908
+ for (let index = lastTextIndex + 1; index < content.length; index++) {
909
+ const part = content[index];
910
+ if (!part || typeof part !== "object") continue;
911
+ const record = part as {
912
+ type?: unknown;
913
+ result?: unknown;
914
+ isError?: unknown;
915
+ activity?: unknown;
916
+ chatUI?: unknown;
917
+ mcpApp?: unknown;
918
+ };
919
+ if (
920
+ record.type !== "tool-call" ||
921
+ record.activity === true ||
922
+ record.result === undefined ||
923
+ record.isError === true
924
+ ) {
925
+ continue;
926
+ }
927
+ hasCompletedTool = true;
928
+ lastCompletedToolIsCustomUi =
929
+ record.chatUI !== undefined || record.mcpApp !== undefined;
930
+ }
931
+ return hasCompletedTool && lastCompletedToolIsCustomUi;
932
+ }
933
+
934
+ export function assistantMessageHasCustomUi(content: unknown): boolean {
935
+ if (!Array.isArray(content)) return false;
936
+ return content.some((part) => {
937
+ if (!part || typeof part !== "object") return false;
938
+ const record = part as {
939
+ type?: unknown;
940
+ chatUI?: unknown;
941
+ mcpApp?: unknown;
942
+ };
943
+ return (
944
+ record.type === "tool-call" &&
945
+ (record.chatUI !== undefined || record.mcpApp !== undefined)
946
+ );
947
+ });
948
+ }
949
+
863
950
  // Only the last assistant message may shimmer as "the currently running
864
951
  // tool" — an older message's dangling unresolved tool-call must never
865
952
  // shimmer once a later run is active.
@@ -870,8 +957,10 @@ export function computeActiveTailToolCallId(
870
957
  if (!isLast) return null;
871
958
  return (
872
959
  content?.reduce(
873
- (latestToolCallId, part) =>
874
- part.type === "tool-call" && (chatRunning || part.activity === true)
960
+ (latestToolCallId, part, index) =>
961
+ part.type === "tool-call" &&
962
+ !isCallAgentToolCallShadowed(content, index) &&
963
+ (chatRunning || part.activity === true)
875
964
  ? part.toolCallId
876
965
  : latestToolCallId,
877
966
  null as string | null,
@@ -903,12 +992,19 @@ export function shouldShowMissingFinalResponse({
903
992
  statusIsTerminal,
904
993
  hasAssistantText,
905
994
  hasUnresolvedTool,
995
+ hasCompletedCustomUi,
906
996
  }: {
907
997
  statusIsTerminal: boolean;
908
998
  hasAssistantText: boolean;
909
999
  hasUnresolvedTool: boolean;
1000
+ hasCompletedCustomUi?: boolean;
910
1001
  }): boolean {
911
- return statusIsTerminal && !hasAssistantText && !hasUnresolvedTool;
1002
+ return (
1003
+ statusIsTerminal &&
1004
+ !hasAssistantText &&
1005
+ !hasUnresolvedTool &&
1006
+ !hasCompletedCustomUi
1007
+ );
912
1008
  }
913
1009
 
914
1010
  export function shouldShowAssistantWorkSummary({
@@ -977,19 +1073,34 @@ const ALWAYS_VISIBLE_ASSISTANT_TOOLS = new Set(["connect-builder"]);
977
1073
  export function isCollapsibleAssistantWorkPart(part: {
978
1074
  type?: string;
979
1075
  toolName?: string;
1076
+ chatUI?: unknown;
1077
+ mcpApp?: unknown;
980
1078
  }): boolean {
981
1079
  if (part.type === "reasoning") return true;
982
1080
  return (
983
1081
  part.type === "tool-call" &&
984
- !ALWAYS_VISIBLE_ASSISTANT_TOOLS.has(part.toolName ?? "")
1082
+ !ALWAYS_VISIBLE_ASSISTANT_TOOLS.has(part.toolName ?? "") &&
1083
+ part.chatUI === undefined &&
1084
+ part.mcpApp === undefined
985
1085
  );
986
1086
  }
987
1087
 
988
1088
  export function getAssistantToolSummaryInfo(
989
- parts: readonly { type?: string; toolName?: string }[],
1089
+ parts: readonly {
1090
+ type?: string;
1091
+ toolCallId?: string;
1092
+ toolName?: string;
1093
+ args?: Record<string, unknown>;
1094
+ chatUI?: unknown;
1095
+ mcpApp?: unknown;
1096
+ }[],
990
1097
  ): { startIndex: number; hiddenToolCount: number } {
991
1098
  const toolCallIndices = parts.reduce<number[]>((indices, part, index) => {
992
- if (part.type === "tool-call" && isCollapsibleAssistantWorkPart(part)) {
1099
+ if (
1100
+ part.type === "tool-call" &&
1101
+ !isCallAgentToolCallShadowed(parts, index) &&
1102
+ isCollapsibleAssistantWorkPart(part)
1103
+ ) {
993
1104
  indices.push(index);
994
1105
  }
995
1106
  return indices;
@@ -1012,11 +1123,23 @@ export function getAssistantToolSummaryInfo(
1012
1123
  function groupAssistantWorkParts(
1013
1124
  part: {
1014
1125
  type?: string;
1126
+ toolCallId?: string;
1015
1127
  toolName?: string;
1128
+ args?: Record<string, unknown>;
1129
+ chatUI?: unknown;
1130
+ mcpApp?: unknown;
1016
1131
  },
1017
1132
  index: number,
1018
- parts: readonly { type?: string; toolName?: string }[],
1133
+ parts: readonly {
1134
+ type?: string;
1135
+ toolCallId?: string;
1136
+ toolName?: string;
1137
+ args?: Record<string, unknown>;
1138
+ chatUI?: unknown;
1139
+ mcpApp?: unknown;
1140
+ }[],
1019
1141
  ): ["group-work"] | ["group-work", "group-ran-tools"] | null {
1142
+ if (isCallAgentToolCallShadowed(parts, index)) return null;
1020
1143
  if (isCollapsibleAssistantWorkPart(part)) {
1021
1144
  const { startIndex } = getAssistantToolSummaryInfo(parts);
1022
1145
  if (isAssistantToolSummaryPart(parts, index, startIndex)) {
@@ -1028,16 +1151,29 @@ function groupAssistantWorkParts(
1028
1151
  }
1029
1152
 
1030
1153
  function isAssistantToolSummaryPart(
1031
- parts: readonly { type?: string; toolName?: string }[],
1154
+ parts: readonly {
1155
+ type?: string;
1156
+ toolCallId?: string;
1157
+ toolName?: string;
1158
+ args?: Record<string, unknown>;
1159
+ chatUI?: unknown;
1160
+ mcpApp?: unknown;
1161
+ }[],
1032
1162
  index: number,
1033
1163
  startIndex: number,
1034
1164
  ): boolean {
1035
1165
  if (startIndex < 0 || index >= startIndex) return false;
1036
- if (!isCollapsibleAssistantWorkPart(parts[index]!)) return false;
1166
+ if (
1167
+ isCallAgentToolCallShadowed(parts, index) ||
1168
+ !isCollapsibleAssistantWorkPart(parts[index]!)
1169
+ ) {
1170
+ return false;
1171
+ }
1037
1172
 
1038
1173
  let segmentStart = index;
1039
1174
  while (
1040
1175
  segmentStart > 0 &&
1176
+ !isCallAgentToolCallShadowed(parts, segmentStart - 1) &&
1041
1177
  isCollapsibleAssistantWorkPart(parts[segmentStart - 1]!)
1042
1178
  ) {
1043
1179
  segmentStart--;
@@ -1046,6 +1182,7 @@ function isAssistantToolSummaryPart(
1046
1182
  let segmentEnd = index + 1;
1047
1183
  while (
1048
1184
  segmentEnd < startIndex &&
1185
+ !isCallAgentToolCallShadowed(parts, segmentEnd) &&
1049
1186
  isCollapsibleAssistantWorkPart(parts[segmentEnd]!)
1050
1187
  ) {
1051
1188
  segmentEnd++;
@@ -1073,12 +1210,20 @@ export function AssistantMessage() {
1073
1210
  const hasUnresolvedTool = assistantMessageHasUnresolvedTool(msg.content);
1074
1211
  const responseConnectionText = messageTextFromContent(msg.content);
1075
1212
  const statusIsTerminal = assistantMessageStatusIsTerminal(msg);
1213
+ const hasCompletedCustomUi = assistantMessageHasCompletedCustomUi(
1214
+ msg.content,
1215
+ );
1216
+ const hasCustomUi = assistantMessageHasCustomUi(msg.content);
1076
1217
  const showMissingFinalResponse = shouldShowMissingFinalResponse({
1077
1218
  statusIsTerminal,
1078
1219
  hasAssistantText: responseConnectionText.trim().length > 0,
1079
1220
  hasUnresolvedTool,
1221
+ hasCompletedCustomUi,
1080
1222
  });
1081
- const responseConnectionContext = latestUserMessageText(thread.messages);
1223
+ const responseConnectionContext = userMessageTextBeforeAssistant(
1224
+ thread.messages,
1225
+ msg.id,
1226
+ );
1082
1227
  const isComplete = shouldShowAssistantMessageFooter({
1083
1228
  isLast,
1084
1229
  chatRunning,
@@ -1191,10 +1336,14 @@ export function AssistantMessage() {
1191
1336
  const hasCollapsibleWork =
1192
1337
  Array.isArray(msgContent) &&
1193
1338
  msgContent.some(
1194
- (p) =>
1339
+ (p, index) =>
1340
+ !isCallAgentToolCallShadowed(msgContent, index) &&
1195
1341
  (p.type !== "tool-call" || p.activity !== true) &&
1196
1342
  isCollapsibleAssistantWorkPart(p),
1197
1343
  );
1344
+ const shadowedToolCallIds = Array.isArray(msgContent)
1345
+ ? shadowedCallAgentToolCallIds(msgContent)
1346
+ : new Set<string>();
1198
1347
  const activeTailToolCallId = computeActiveTailToolCallId(msgContent, {
1199
1348
  chatRunning,
1200
1349
  isLast,
@@ -1222,7 +1371,8 @@ export function AssistantMessage() {
1222
1371
  return (
1223
1372
  <WorkedForSummary
1224
1373
  durationMs={capturedDurationMs}
1225
- autoCollapse={animateCollapse}
1374
+ defaultOpen={hasCustomUi}
1375
+ autoCollapse={animateCollapse && !hasCustomUi}
1226
1376
  >
1227
1377
  {children}
1228
1378
  </WorkedForSummary>
@@ -1243,6 +1393,7 @@ export function AssistantMessage() {
1243
1393
  case "reasoning":
1244
1394
  return <ReasoningMessagePart />;
1245
1395
  case "tool-call":
1396
+ if (shadowedToolCallIds.has(part.toolCallId)) return null;
1246
1397
  return part.toolUI ? (
1247
1398
  <ToolActivityPresentation
1248
1399
  toolName={part.toolName}
@@ -1271,7 +1422,7 @@ export function AssistantMessage() {
1271
1422
  {isComplete && hasCodeAgentTools && msgContent && (
1272
1423
  <FilesChangedSummary parts={msgContent} />
1273
1424
  )}
1274
- {isComplete && isLast && (
1425
+ {isComplete && (
1275
1426
  <McpConnectionSuggestion
1276
1427
  text={responseConnectionText}
1277
1428
  contextText={responseConnectionContext}
@@ -1298,7 +1449,7 @@ export function AssistantMessage() {
1298
1449
  <button
1299
1450
  type="button"
1300
1451
  aria-label="Regenerate response"
1301
- className="flex h-6 w-6 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 transition-colors duration-150 hover:bg-accent hover:text-foreground opacity-0 group-hover:opacity-100 group-focus-within:opacity-100 disabled:cursor-not-allowed disabled:opacity-40"
1452
+ className={`flex h-6 w-6 cursor-pointer items-center justify-center rounded-md text-muted-foreground/70 hover:bg-accent hover:text-foreground ${messageFooterFadeClassName} disabled:cursor-not-allowed disabled:opacity-40`}
1302
1453
  >
1303
1454
  <IconRefresh className="h-3.5 w-3.5" />
1304
1455
  </button>
@@ -1314,7 +1465,7 @@ export function AssistantMessage() {
1314
1465
  {timestamp && (
1315
1466
  <MessageTimestamp
1316
1467
  timestamp={timestamp}
1317
- className="opacity-0 transition-opacity duration-150 group-hover:opacity-100 group-focus-within:opacity-100"
1468
+ className={messageFooterFadeClassName}
1318
1469
  />
1319
1470
  )}
1320
1471
  </div>
@@ -43,8 +43,12 @@ import {
43
43
  WriteCell,
44
44
  FilesChangedSummary,
45
45
  } from "../tool-cells/index.js";
46
- import { humanizeToolName } from "../tool-display.js";
46
+ import {
47
+ humanizeToolName,
48
+ isCallAgentToolCallShadowed,
49
+ } from "../tool-display.js";
47
50
  import { cn } from "../utils.js";
51
+ import { ActionChatUiSurface } from "./action-chat-ui-surface.js";
48
52
  import {
49
53
  SmoothMarkdownText,
50
54
  HighlightedCodeBlock,
@@ -130,11 +134,10 @@ export function ToolActivityPresentation({
130
134
  animateEntry && "agent-tool-call--entering",
131
135
  )}
132
136
  data-running={isRunning ? "true" : undefined}
133
- data-active-tail={isActiveTail ? "true" : undefined}
134
137
  >
135
138
  {children}
136
139
  {isRunning && showLongRunningHint && (
137
- <div className="mt-0.5 px-2.5 text-[11px] leading-snug text-muted-foreground/80">
140
+ <div className="mt-0.5 px-2.5 pb-2 text-[11px] leading-snug text-muted-foreground/80">
138
141
  Still working. Large updates can take a minute or two.
139
142
  </div>
140
143
  )}
@@ -756,7 +759,16 @@ function ToolCallDisplayGeneric({
756
759
  (skipRegistryRenderer ? null : resolveToolRenderer(nativeToolContext)) ??
757
760
  resolveBuiltinFallbackToolRenderer(nativeToolContext));
758
761
  if (NativeToolRenderer) {
759
- return <NativeToolRenderer context={nativeToolContext} />;
762
+ return (
763
+ <ActionChatUiSurface
764
+ context={nativeToolContext}
765
+ isBuiltinDataWidget={isBuiltinDataWidgetActionRenderer(
766
+ nativeToolContext,
767
+ )}
768
+ >
769
+ <NativeToolRenderer context={nativeToolContext} />
770
+ </ActionChatUiSurface>
771
+ );
760
772
  }
761
773
 
762
774
  const inputPayload = hasArgs ? toolInputPayload(toolName, args) : null;
@@ -951,13 +963,16 @@ export function ReconnectStreamMessage({
951
963
  content.at(-1)?.type === "reasoning" ? content.length - 1 : -1;
952
964
  const latestActiveToolIndex = content.reduce(
953
965
  (latestIndex, part, index) =>
954
- part.type === "tool-call" && (chatRunning || part.activity === true)
966
+ part.type === "tool-call" &&
967
+ !isCallAgentToolCallShadowed(content, index) &&
968
+ (chatRunning || part.activity === true)
955
969
  ? index
956
970
  : latestIndex,
957
971
  -1,
958
972
  );
959
973
 
960
974
  const renderPart = (part: ContentPart, i: number) => {
975
+ if (isCallAgentToolCallShadowed(content, i)) return null;
961
976
  if (part.type === "text") {
962
977
  const partStreaming = chatRunning && i === streamingTextPartIndex;
963
978
  return (
@@ -1023,6 +1038,7 @@ export function ReconnectStreamMessage({
1023
1038
 
1024
1039
  for (let i = 0; i < content.length; i++) {
1025
1040
  const part = content[i]!;
1041
+ if (isCallAgentToolCallShadowed(content, i)) continue;
1026
1042
  const isOlderToolWork =
1027
1043
  toolSummary.startIndex >= 0 &&
1028
1044
  i < toolSummary.startIndex &&
@@ -1048,7 +1064,11 @@ export function ReconnectStreamMessage({
1048
1064
 
1049
1065
  function getReconnectToolSummaryInfo(content: readonly ContentPart[]) {
1050
1066
  const toolCallIndices = content.reduce<number[]>((indices, part, index) => {
1051
- if (part.type === "tool-call" && isReconnectSummarizablePart(part)) {
1067
+ if (
1068
+ part.type === "tool-call" &&
1069
+ !isCallAgentToolCallShadowed(content, index) &&
1070
+ isReconnectSummarizablePart(part)
1071
+ ) {
1052
1072
  indices.push(index);
1053
1073
  }
1054
1074
  return indices;
@@ -1067,7 +1087,10 @@ function getReconnectToolSummaryInfo(content: readonly ContentPart[]) {
1067
1087
  function isReconnectSummarizablePart(part: ContentPart): boolean {
1068
1088
  return (
1069
1089
  part.type === "reasoning" ||
1070
- (part.type === "tool-call" && part.toolName !== "connect-builder")
1090
+ (part.type === "tool-call" &&
1091
+ part.toolName !== "connect-builder" &&
1092
+ part.chatUI === undefined &&
1093
+ part.mcpApp === undefined)
1071
1094
  );
1072
1095
  }
1073
1096
 
@@ -1077,11 +1100,17 @@ function isReconnectToolSummaryPart(
1077
1100
  startIndex: number,
1078
1101
  ): boolean {
1079
1102
  if (startIndex < 0 || index >= startIndex) return false;
1080
- if (!isReconnectSummarizablePart(content[index]!)) return false;
1103
+ if (
1104
+ isCallAgentToolCallShadowed(content, index) ||
1105
+ !isReconnectSummarizablePart(content[index]!)
1106
+ ) {
1107
+ return false;
1108
+ }
1081
1109
 
1082
1110
  let segmentStart = index;
1083
1111
  while (
1084
1112
  segmentStart > 0 &&
1113
+ !isCallAgentToolCallShadowed(content, segmentStart - 1) &&
1085
1114
  isReconnectSummarizablePart(content[segmentStart - 1]!)
1086
1115
  ) {
1087
1116
  segmentStart--;
@@ -1090,6 +1119,7 @@ function isReconnectToolSummaryPart(
1090
1119
  let segmentEnd = index + 1;
1091
1120
  while (
1092
1121
  segmentEnd < startIndex &&
1122
+ !isCallAgentToolCallShadowed(content, segmentEnd) &&
1093
1123
  isReconnectSummarizablePart(content[segmentEnd]!)
1094
1124
  ) {
1095
1125
  segmentEnd++;
@@ -1231,22 +1261,28 @@ export function formatWorkedDuration(ms: number): string {
1231
1261
 
1232
1262
  export function WorkedForSummary({
1233
1263
  durationMs,
1264
+ defaultOpen = false,
1234
1265
  autoCollapse = false,
1235
1266
  children,
1236
1267
  }: {
1237
1268
  durationMs?: number | null;
1269
+ /** Keep completed work visible when the turn contains interactive UI. */
1270
+ defaultOpen?: boolean;
1238
1271
  /** When true, close the summary after a run has completed. */
1239
1272
  autoCollapse?: boolean;
1240
1273
  children: React.ReactNode;
1241
1274
  }) {
1242
- // Start closed so a remounted completed message never flashes its work
1243
- // details open while auto-collapse settles. If the summary was already
1244
- // open when autoCollapse changes, AnimatedCollapse still animates it shut.
1245
- const [open, setOpen] = useState(false);
1275
+ // Ordinary completed work starts closed so a remount never flashes details
1276
+ // while auto-collapse settles. Interactive UI opts into an open summary.
1277
+ const [open, setOpen] = useState(defaultOpen);
1246
1278
 
1247
1279
  useEffect(() => {
1248
- if (autoCollapse) setOpen(false);
1249
- }, [autoCollapse]);
1280
+ if (defaultOpen) {
1281
+ setOpen(true);
1282
+ } else if (autoCollapse) {
1283
+ setOpen(false);
1284
+ }
1285
+ }, [autoCollapse, defaultOpen]);
1250
1286
 
1251
1287
  const label =
1252
1288
  durationMs != null && durationMs >= 1000
@@ -1,6 +1,3 @@
1
- import { IconExternalLink, IconSparkles } from "@tabler/icons-react";
2
-
3
- import { appPath } from "../../api-path.js";
4
1
  import { InlineExtensionFrame } from "../../extensions/InlineExtensionFrame.js";
5
2
  import type { ToolRendererContext } from "../tool-render-registry.js";
6
3
  import { normalizeInlineExtensionToolResult } from "./inline-extension-result.js";
@@ -18,43 +15,19 @@ export function InlineExtensionWidget({
18
15
  const result = normalizeInlineExtensionToolResult(context);
19
16
  if (!result) return null;
20
17
 
21
- const href = result.path ? appPath(result.path) : undefined;
22
-
23
18
  return (
24
- <div className="my-1.5 overflow-hidden rounded-lg border border-border bg-background text-foreground shadow-sm">
25
- <div className="flex items-center gap-2 border-b border-border px-3 py-2">
26
- <IconSparkles className="h-4 w-4 shrink-0 text-muted-foreground" />
27
- <div className="min-w-0 flex-1">
28
- <div className="truncate text-sm font-medium">{result.name}</div>
29
- {result.description ? (
30
- <div className="truncate text-[11px] text-muted-foreground">
31
- {result.description}
32
- </div>
33
- ) : null}
34
- </div>
35
- {href ? (
36
- <a
37
- href={href}
38
- className="inline-flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-accent-foreground"
39
- aria-label="Open extension"
40
- >
41
- <IconExternalLink className="h-4 w-4" />
42
- </a>
43
- ) : null}
44
- </div>
45
- <InlineExtensionFrame
46
- extensionId={result.mode === "persisted" ? result.id : undefined}
47
- extension={{
48
- id: result.id,
49
- name: result.name,
50
- description: result.description,
51
- content: result.mode === "transient" ? result.content : undefined,
52
- updatedAt: result.updatedAt,
53
- mode: result.mode,
54
- }}
55
- context={result.context}
56
- initialHeight={result.initialHeight ?? 260}
57
- />
58
- </div>
19
+ <InlineExtensionFrame
20
+ extensionId={result.mode === "persisted" ? result.id : undefined}
21
+ extension={{
22
+ id: result.id,
23
+ name: result.name,
24
+ description: result.description,
25
+ content: result.mode === "transient" ? result.content : undefined,
26
+ updatedAt: result.updatedAt,
27
+ mode: result.mode,
28
+ }}
29
+ context={result.context}
30
+ initialHeight={result.initialHeight ?? 260}
31
+ />
59
32
  );
60
33
  }
@@ -126,11 +126,15 @@ function renderDataWidget(context: ToolRendererContext) {
126
126
  return null;
127
127
  }
128
128
 
129
- function BuiltinToolRendererSkeleton() {
129
+ function BuiltinToolRendererSkeleton({ framed = true }: { framed?: boolean }) {
130
130
  return (
131
131
  <div
132
132
  aria-label="Loading tool result"
133
- className="my-1.5 h-24 animate-pulse rounded-lg border border-border bg-muted/30"
133
+ className={
134
+ framed
135
+ ? "my-1.5 h-24 animate-pulse rounded-lg border border-border bg-muted/30"
136
+ : "h-24 animate-pulse bg-muted/30"
137
+ }
134
138
  />
135
139
  );
136
140
  }
@@ -140,7 +144,7 @@ const BuiltinDataWidgetRenderer: ToolRendererComponent = ({ context }) =>
140
144
 
141
145
  const BuiltinInlineExtensionRenderer: ToolRendererComponent = ({ context }) =>
142
146
  normalizeInlineExtensionToolResult(context) ? (
143
- <Suspense fallback={<BuiltinToolRendererSkeleton />}>
147
+ <Suspense fallback={<BuiltinToolRendererSkeleton framed={false} />}>
144
148
  <LazyInlineExtensionWidget context={context} />
145
149
  </Suspense>
146
150
  ) : null;
@@ -48,8 +48,11 @@ function MessageScroller({ className, ...props }: MessageScrollerRootProps) {
48
48
 
49
49
  function MessageScrollerViewport({
50
50
  className,
51
+ children,
51
52
  ...props
52
53
  }: MessageScrollerViewportProps) {
54
+ const { start: hasContentAbove } = useMessageScrollerScrollable();
55
+
53
56
  return (
54
57
  <ShadcnMessageScroller.Viewport
55
58
  className={cn(
@@ -57,7 +60,18 @@ function MessageScrollerViewport({
57
60
  className,
58
61
  )}
59
62
  {...props}
60
- />
63
+ >
64
+ {hasContentAbove && (
65
+ <div
66
+ aria-hidden="true"
67
+ className="pointer-events-none sticky top-0 z-10 h-0"
68
+ data-message-scroller-top-fade
69
+ >
70
+ <div className="absolute inset-x-0 top-0 h-12 bg-gradient-to-b from-background via-background/90 to-transparent" />
71
+ </div>
72
+ )}
73
+ {children}
74
+ </ShadcnMessageScroller.Viewport>
61
75
  );
62
76
  }
63
77
 
@@ -13,10 +13,12 @@ import React from "react";
13
13
  import ReactMarkdown, { defaultUrlTransform } from "react-markdown";
14
14
  import remarkGfm from "remark-gfm";
15
15
 
16
+ import { ActionChatUiSurface } from "../chat/action-chat-ui-surface.js";
16
17
  import { resolveToolRenderer } from "../chat/tool-render-registry.js";
17
18
  import {
18
19
  resolveBuiltinActionChatRenderer,
19
20
  resolveBuiltinFallbackToolRenderer,
21
+ isBuiltinDataWidgetActionRenderer,
20
22
  } from "../chat/widgets/builtin-tool-renderers.js";
21
23
  import {
22
24
  MessageScroller,
@@ -414,7 +416,16 @@ function ConversationToolCall({ tool }: { tool: AgentConversationToolCall }) {
414
416
  resolveToolRenderer(nativeToolContext) ??
415
417
  resolveBuiltinFallbackToolRenderer(nativeToolContext);
416
418
  if (NativeToolRenderer) {
417
- return <NativeToolRenderer context={nativeToolContext} />;
419
+ return (
420
+ <ActionChatUiSurface
421
+ context={nativeToolContext}
422
+ isBuiltinDataWidget={isBuiltinDataWidgetActionRenderer(
423
+ nativeToolContext,
424
+ )}
425
+ >
426
+ <NativeToolRenderer context={nativeToolContext} />
427
+ </ActionChatUiSurface>
428
+ );
418
429
  }
419
430
 
420
431
  const hasDetails = Boolean(tool.input || tool.result || tool.mcpApp);
@@ -21,6 +21,7 @@
21
21
  * the server normalizes + groups it. That keeps one tested source of truth for
22
22
  * grouping instead of duplicating parser logic across the wire.
23
23
  */
24
+ import { isDynamicImportFailureMessage } from "./route-chunk-recovery.js";
24
25
  import { scrubUrl } from "./url-scrub.js";
25
26
 
26
27
  export type ExceptionLevel = "fatal" | "error" | "warning" | "info" | "debug";
@@ -358,12 +359,7 @@ function shouldIgnoreAutoCapturedError(normalized: {
358
359
  // Route-chunk recovery reloads the current page after stale lazy chunks or
359
360
  // module scripts fail. Browser-level failures have no useful stack, so do
360
361
  // not retain the transient loader noise as an application issue.
361
- if (
362
- !stack &&
363
- /^(?:Importing a module script failed\.?|(?:Failed to fetch|error loading) dynamically imported module(?::.*)?)$/i.test(
364
- message,
365
- )
366
- ) {
362
+ if (!stack && isDynamicImportFailureMessage(message)) {
367
363
  return true;
368
364
  }
369
365