@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
@@ -6,9 +6,9 @@
6
6
  * stop when the user hits stop. The accumulated transcript is available
7
7
  * immediately — no round-trip to Whisper needed.
8
8
  *
9
- * Higher-quality backends (Groq Whisper, OpenAI Whisper, Deepgram) can
10
- * refine the result afterward, but this gives users something useful
11
- * from second zero even without an API key.
9
+ * Builder can transcribe the original recording afterward if native capture
10
+ * produces no text, but this gives users something useful from second zero
11
+ * without a cloud transcription request.
12
12
  */
13
13
 
14
14
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -58,12 +58,21 @@ export function useLiveTranscription(
58
58
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
59
  const recognitionRef = useRef<any>(null);
60
60
  const transcriptRef = useRef("");
61
+ const interimRef = useRef("");
61
62
  const stoppedManuallyRef = useRef(false);
62
63
  const stopWaiterRef = useRef<((text: string) => void) | null>(null);
63
64
  const restartTimerRef = useRef<number | null>(null);
64
65
  const networkErrorCountRef = useRef(0);
65
66
  const restartDelayRef = useRef(0);
66
67
 
68
+ const currentTranscript = useCallback(
69
+ () =>
70
+ [transcriptRef.current.trim(), interimRef.current.trim()]
71
+ .filter(Boolean)
72
+ .join(" "),
73
+ [],
74
+ );
75
+
67
76
  const supported = !!getSpeechRecognitionCtor();
68
77
 
69
78
  const start = useCallback(() => {
@@ -89,6 +98,7 @@ export function useLiveTranscription(
89
98
  recognition.lang = lang;
90
99
  recognitionRef.current = recognition;
91
100
  transcriptRef.current = "";
101
+ interimRef.current = "";
92
102
  stoppedManuallyRef.current = false;
93
103
  networkErrorCountRef.current = 0;
94
104
  restartDelayRef.current = 0;
@@ -107,6 +117,7 @@ export function useLiveTranscription(
107
117
  interim += text;
108
118
  }
109
119
  }
120
+ interimRef.current = interim;
110
121
  setInterimText(interim);
111
122
  if (event.results.length > 0) {
112
123
  networkErrorCountRef.current = 0;
@@ -167,7 +178,7 @@ export function useLiveTranscription(
167
178
  }
168
179
  setIsActive(false);
169
180
  if (stopWaiterRef.current) {
170
- stopWaiterRef.current(transcriptRef.current);
181
+ stopWaiterRef.current(currentTranscript());
171
182
  }
172
183
  };
173
184
 
@@ -177,14 +188,16 @@ export function useLiveTranscription(
177
188
  } catch {
178
189
  /* browser may block without user gesture */
179
190
  }
180
- }, [lang]);
191
+ }, [currentTranscript, lang]);
181
192
 
182
193
  const stop = useCallback((): string => {
194
+ const text = currentTranscript();
183
195
  stoppedManuallyRef.current = true;
184
196
  if (restartTimerRef.current !== null) {
185
197
  window.clearTimeout(restartTimerRef.current);
186
198
  restartTimerRef.current = null;
187
199
  }
200
+ interimRef.current = "";
188
201
  setInterimText("");
189
202
  if (recognitionRef.current) {
190
203
  try {
@@ -195,51 +208,57 @@ export function useLiveTranscription(
195
208
  recognitionRef.current = null;
196
209
  }
197
210
  setIsActive(false);
198
- return transcriptRef.current;
199
- }, []);
211
+ return text;
212
+ }, [currentTranscript]);
200
213
 
201
- const stopAndWait = useCallback((timeoutMs = 1200): Promise<string> => {
202
- stoppedManuallyRef.current = true;
203
- if (restartTimerRef.current !== null) {
204
- window.clearTimeout(restartTimerRef.current);
205
- restartTimerRef.current = null;
206
- }
207
- setInterimText("");
208
-
209
- const recognition = recognitionRef.current;
210
- if (!recognition) {
211
- setIsActive(false);
212
- return Promise.resolve(transcriptRef.current);
213
- }
214
+ const stopAndWait = useCallback(
215
+ (timeoutMs = 1200): Promise<string> => {
216
+ stoppedManuallyRef.current = true;
217
+ if (restartTimerRef.current !== null) {
218
+ window.clearTimeout(restartTimerRef.current);
219
+ restartTimerRef.current = null;
220
+ }
221
+ setInterimText("");
214
222
 
215
- return new Promise((resolve) => {
216
- let settled = false;
217
- const finish = (text: string) => {
218
- if (settled) return;
219
- settled = true;
220
- window.clearTimeout(timeout);
221
- if (stopWaiterRef.current === finish) {
222
- stopWaiterRef.current = null;
223
- }
224
- if (recognitionRef.current === recognition) {
225
- recognitionRef.current = null;
226
- }
223
+ const recognition = recognitionRef.current;
224
+ if (!recognition) {
225
+ const text = currentTranscript();
226
+ interimRef.current = "";
227
227
  setIsActive(false);
228
- resolve(text);
229
- };
228
+ return Promise.resolve(text);
229
+ }
230
230
 
231
- const timeout = window.setTimeout(() => {
232
- finish(transcriptRef.current);
233
- }, timeoutMs);
231
+ return new Promise((resolve) => {
232
+ let settled = false;
233
+ const finish = (text: string) => {
234
+ if (settled) return;
235
+ settled = true;
236
+ window.clearTimeout(timeout);
237
+ if (stopWaiterRef.current === finish) {
238
+ stopWaiterRef.current = null;
239
+ }
240
+ if (recognitionRef.current === recognition) {
241
+ recognitionRef.current = null;
242
+ }
243
+ interimRef.current = "";
244
+ setIsActive(false);
245
+ resolve(text);
246
+ };
234
247
 
235
- stopWaiterRef.current = finish;
236
- try {
237
- recognition.stop();
238
- } catch {
239
- finish(transcriptRef.current);
240
- }
241
- });
242
- }, []);
248
+ const timeout = window.setTimeout(() => {
249
+ finish(currentTranscript());
250
+ }, timeoutMs);
251
+
252
+ stopWaiterRef.current = finish;
253
+ try {
254
+ recognition.stop();
255
+ } catch {
256
+ finish(currentTranscript());
257
+ }
258
+ });
259
+ },
260
+ [currentTranscript],
261
+ );
243
262
 
244
263
  const pause = useCallback(() => {
245
264
  if (!recognitionRef.current) return;
@@ -6,7 +6,11 @@ import { agentNativePath } from "./api-path.js";
6
6
  const PROVIDER_ENV_VAR_SET = new Set(PROVIDER_ENV_VARS);
7
7
 
8
8
  /** `unknown` until the first check resolves, so callers don't flash the gate. */
9
- export type AgentEngineConfiguredState = "unknown" | "configured" | "missing";
9
+ export type AgentEngineConfiguredState =
10
+ | "unknown"
11
+ | "configured"
12
+ | "missing"
13
+ | "unavailable";
10
14
 
11
15
  export interface UseAgentEngineConfiguredResult {
12
16
  /** True once we know nothing can run the agent (no key / Builder / BYOK). */
@@ -30,7 +34,6 @@ export interface UseAgentEngineConfiguredOptions {
30
34
  }
31
35
 
32
36
  const DEFAULT_STATUS_CHECK_TIMEOUT_MS = 2500;
33
- const UNKNOWN_STATUS_RETRY_MS = 2000;
34
37
 
35
38
  async function fetchStatusJson(
36
39
  path: string,
@@ -108,11 +111,10 @@ export async function fetchAgentEngineConfiguredState(
108
111
  fetchStatusJson("/_agent-native/agent-engine/status", timeoutMs),
109
112
  ]);
110
113
 
111
- // All three failed — likely a flaky network; keep the caller in unknown.
112
- // Even an explicit missing-key stream event should not pin the composer into
113
- // setup without a fresh authoritative status response.
114
+ // All three failed — surface a retryable unavailable state instead of
115
+ // leaving the composer in an infinite checking loop.
114
116
  if (envKeys == null && builderStatus == null && engineStatus == null) {
115
- return "unknown";
117
+ return "unavailable";
116
118
  }
117
119
 
118
120
  const envKeysKnown = Array.isArray(envKeys);
@@ -138,7 +140,7 @@ export async function fetchAgentEngineConfiguredState(
138
140
  if (engineStatusKnown) return "missing";
139
141
 
140
142
  // Compatibility fallback for older hosts without the canonical route.
141
- return envKeysKnown && builderStatusKnown ? "missing" : "unknown";
143
+ return envKeysKnown && builderStatusKnown ? "missing" : "unavailable";
142
144
  }
143
145
 
144
146
  /**
@@ -146,7 +148,8 @@ export async function fetchAgentEngineConfiguredState(
146
148
  * composer and app prompt boxes. Checks the env-key / Builder / BYOK status
147
149
  * endpoints on mount, re-checks on `agent-engine:configured-changed`, and folds
148
150
  * in the adapter's `agent-chat:missing-api-key` signal. Pass `enabled = false`
149
- * to short-circuit to configured; flaky requests stay `unknown`.
151
+ * to short-circuit to configured; unavailable checks can be retried by firing
152
+ * `agent-engine:configured-changed`.
150
153
  */
151
154
  export function useAgentEngineConfigured(
152
155
  enabled = true,
@@ -156,25 +159,16 @@ export function useAgentEngineConfigured(
156
159
 
157
160
  useEffect(() => {
158
161
  let cancelled = false;
159
- let retryId: ReturnType<typeof setTimeout> | undefined;
160
162
  // Monotonic call counter: overlapping checks (mount + a
161
163
  // `agent-engine:configured-changed` fired right after a key is saved) can
162
164
  // resolve out of order; only the latest call may write state, or a slow
163
165
  // stale "missing" response would overwrite the fresh "configured" one.
164
166
  let requestSeq = 0;
165
167
  const check = async (options?: { missingFallback?: boolean }) => {
166
- if (retryId !== undefined) {
167
- clearTimeout(retryId);
168
- retryId = undefined;
169
- }
170
168
  const seq = ++requestSeq;
171
169
  const nextState = await fetchAgentEngineConfiguredState(enabled, options);
172
170
  if (cancelled || seq !== requestSeq) return;
173
- if (nextState === "unknown") {
174
- retryId = setTimeout(() => void check(), UNKNOWN_STATUS_RETRY_MS);
175
- return;
176
- }
177
- setState(nextState);
171
+ setState(nextState === "unknown" ? "unavailable" : nextState);
178
172
  };
179
173
  const onConfiguredChanged = () => {
180
174
  void check();
@@ -198,7 +192,6 @@ export function useAgentEngineConfigured(
198
192
  window.addEventListener("agent-chat:missing-api-key", onMissing);
199
193
  return () => {
200
194
  cancelled = true;
201
- if (retryId !== undefined) clearTimeout(retryId);
202
195
  window.removeEventListener(
203
196
  "agent-engine:configured-changed",
204
197
  onConfiguredChanged,
@@ -344,6 +344,24 @@ export function useChatThreads(
344
344
  const activeThreadIdRef = useRef(activeThreadId);
345
345
  activeThreadIdRef.current = activeThreadId;
346
346
 
347
+ const persistActiveThreadId = useCallback(
348
+ (id: string) => {
349
+ try {
350
+ const threadScope = readKnownThreadScope(id);
351
+ const targetKey =
352
+ threadScope === undefined
353
+ ? activeThreadKey
354
+ : activeThreadStorageKey(storageKey, threadScope);
355
+ localStorage.setItem(targetKey, id);
356
+ localStorage.setItem(
357
+ activeThreadSeenStorageKey(targetKey),
358
+ String(Date.now()),
359
+ );
360
+ } catch {}
361
+ },
362
+ [activeThreadKey, readKnownThreadScope, storageKey],
363
+ );
364
+
347
365
  // Persist active thread ID — and rehydrate on scope flips. When the user
348
366
  // navigates from deck A to deck B, `activeThreadKey` changes; we re-read B's
349
367
  // scoped thread only if the currently visible chat is itself scoped to a
@@ -388,6 +406,9 @@ export function useChatThreads(
388
406
  setActiveThreadId(nextActiveThreadId);
389
407
  return;
390
408
  }
409
+ if (!activeThreadId && !restoreActiveThread && !routeControlsActiveThread) {
410
+ return;
411
+ }
391
412
  try {
392
413
  if (routeControlsActiveThread && !routeThreadId) {
393
414
  localStorage.removeItem(activeThreadKey);
@@ -395,14 +416,7 @@ export function useChatThreads(
395
416
  return;
396
417
  }
397
418
  if (activeThreadId) {
398
- const threadScope = readKnownThreadScope(activeThreadId);
399
- if (threadScope === undefined) return;
400
- const targetKey = activeThreadStorageKey(storageKey, threadScope);
401
- localStorage.setItem(targetKey, activeThreadId);
402
- localStorage.setItem(
403
- activeThreadSeenStorageKey(targetKey),
404
- String(Date.now()),
405
- );
419
+ persistActiveThreadId(activeThreadId);
406
420
  } else {
407
421
  localStorage.removeItem(activeThreadKey);
408
422
  localStorage.removeItem(activeThreadSeenKey);
@@ -414,7 +428,9 @@ export function useChatThreads(
414
428
  activeThreadSeenKey,
415
429
  addOptimisticThread,
416
430
  autoCreate,
431
+ persistActiveThreadId,
417
432
  readKnownThreadScope,
433
+ restoreActiveThread,
418
434
  routeControlsActiveThread,
419
435
  routeThreadId,
420
436
  storageKey,
@@ -640,10 +656,11 @@ export function useChatThreads(
640
656
  const id = preferredId || createLocalThreadId();
641
657
  newlyCreatedRef.current.add(id);
642
658
  addOptimisticThread(id, scopeRef.current ?? null);
659
+ persistActiveThreadId(id);
643
660
  setActiveThreadId(id);
644
661
  return Promise.resolve(id);
645
662
  },
646
- [addOptimisticThread],
663
+ [addOptimisticThread, persistActiveThreadId],
647
664
  );
648
665
 
649
666
  useEffect(() => {
@@ -890,9 +907,13 @@ export function useChatThreads(
890
907
  [],
891
908
  );
892
909
 
893
- const switchThread = useCallback((id: string) => {
894
- setActiveThreadId(id);
895
- }, []);
910
+ const switchThread = useCallback(
911
+ (id: string) => {
912
+ persistActiveThreadId(id);
913
+ setActiveThreadId(id);
914
+ },
915
+ [persistActiveThreadId],
916
+ );
896
917
 
897
918
  const removeThread = useCallback(
898
919
  async (id: string) => {
@@ -1805,7 +1805,8 @@ async function buildCloudflarePages() {
1805
1805
  // fails: context-xray token counts fall back to char/4 estimates and the
1806
1806
  // OG image route falls back to SVG.
1807
1807
  const heavyClientExternals = CLOUDFLARE_WORKER_ESBUILD_EXTERNALS.filter(
1808
- (p) => !Object.hasOwn(CLOUDFLARE_WORKER_STUB_MODULES, p),
1808
+ (p) =>
1809
+ !Object.prototype.hasOwnProperty.call(CLOUDFLARE_WORKER_STUB_MODULES, p),
1809
1810
  ).map((p) => `--external:${p}`);
1810
1811
 
1811
1812
  execFileSync(
@@ -103,7 +103,7 @@ export function scanDbToolScoping(options: DbToolScopingOptions): GuardResult {
103
103
  const tables = extractTableCalls(contents);
104
104
  for (const table of tables) {
105
105
  if (hasRawDbScope(table.body)) continue;
106
- if (Object.hasOwn(denylist, table.sqlName)) {
106
+ if (Object.prototype.hasOwnProperty.call(denylist, table.sqlName)) {
107
107
  seenAllowed.add(table.sqlName);
108
108
  continue;
109
109
  }
@@ -45,6 +45,17 @@ const SLACK_IDENTITY_CACHE_TTL_MS = 10 * 60 * 1_000;
45
45
  // API blip must not fail-close a sender's identity (and DMs) for 10 minutes.
46
46
  const SLACK_IDENTITY_NEGATIVE_CACHE_TTL_MS = 30 * 1_000;
47
47
  const SLACK_IDENTITY_CACHE_MAX_ENTRIES = 1_000;
48
+ const SLACK_TOKEN_IDENTITY_CACHE_TTL_MS = 10 * 60 * 1_000;
49
+ const SLACK_TOKEN_IDENTITY_NEGATIVE_CACHE_TTL_MS = 30 * 1_000;
50
+
51
+ type SlackTokenIdentity = {
52
+ teamId: string | null;
53
+ appId: string | null;
54
+ valid: boolean;
55
+ expiresAt: number;
56
+ };
57
+
58
+ const slackTokenIdentityCache = new Map<string, SlackTokenIdentity>();
48
59
 
49
60
  interface SlackUserIdentity {
50
61
  email: string | null;
@@ -116,8 +127,7 @@ export function slackAdapter(
116
127
  ): PlatformAdapter {
117
128
  const resolveBotToken = async (incoming: IncomingMessage) =>
118
129
  (await options.resolveBotToken?.(incoming)) ??
119
- (await resolveManagedSlackBotToken(incoming)) ??
120
- (await resolveSecret("SLACK_BOT_TOKEN")) ??
130
+ (await resolveSlackBotTokenForIncoming(incoming)) ??
121
131
  undefined;
122
132
 
123
133
  return {
@@ -713,6 +723,19 @@ function parseAllowlistEnv(name: string): Set<string> | null {
713
723
  return new Set(values);
714
724
  }
715
725
 
726
+ export async function resolveSlackBotTokenForIncoming(
727
+ incoming: IncomingMessage,
728
+ ): Promise<string | undefined> {
729
+ const managedToken = await resolveManagedSlackBotToken(incoming);
730
+ if (managedToken) return managedToken;
731
+
732
+ const legacyToken = await resolveSecret("SLACK_BOT_TOKEN");
733
+ if (!legacyToken) return undefined;
734
+ return (await isSlackTokenForIncoming(legacyToken, incoming))
735
+ ? legacyToken
736
+ : undefined;
737
+ }
738
+
716
739
  async function resolveManagedSlackBotToken(
717
740
  incoming: IncomingMessage,
718
741
  ): Promise<string | undefined> {
@@ -736,13 +759,13 @@ async function resolveManagedSlackBotToken(
736
759
  slackInstallationKey({ teamId, enterpriseId, apiAppId }),
737
760
  )
738
761
  : null;
739
- if (!installation && teamId) {
762
+ if (!installation && !apiAppId && teamId) {
740
763
  installation = await getActiveIntegrationInstallationForTenant(
741
764
  "slack",
742
765
  teamId,
743
766
  );
744
767
  }
745
- if (!installation && enterpriseId) {
768
+ if (!installation && !apiAppId && enterpriseId) {
746
769
  installation = await getActiveIntegrationInstallationForTenant(
747
770
  "slack",
748
771
  enterpriseId,
@@ -757,6 +780,62 @@ async function resolveManagedSlackBotToken(
757
780
  }
758
781
  }
759
782
 
783
+ async function isSlackTokenForIncoming(
784
+ token: string,
785
+ incoming: IncomingMessage,
786
+ ): Promise<boolean> {
787
+ const teamId = slackIdentityValue(incoming.platformContext.teamId);
788
+ const apiAppId = slackIdentityValue(incoming.platformContext.apiAppId);
789
+ if (!teamId && !apiAppId) return true;
790
+
791
+ const cached = slackTokenIdentityCache.get(token);
792
+ if (cached && cached.expiresAt > Date.now()) {
793
+ return (
794
+ cached.valid &&
795
+ (!teamId || cached.teamId === teamId) &&
796
+ (!apiAppId || cached.appId === apiAppId)
797
+ );
798
+ }
799
+
800
+ const auth = await slackJson(token, "auth.test", {});
801
+ const authTeamId = slackIdentityValue(auth?.team_id);
802
+ const botId = slackIdentityValue(auth?.bot_id);
803
+ let appId: string | null = null;
804
+ let valid = !!auth;
805
+
806
+ if (valid && apiAppId) {
807
+ const bot = botId
808
+ ? await slackJson(token, "bots.info", { bot: botId })
809
+ : null;
810
+ appId = slackIdentityValue(bot?.bot?.app_id);
811
+ valid = !!appId;
812
+ }
813
+
814
+ const identity: SlackTokenIdentity = {
815
+ teamId: authTeamId,
816
+ appId,
817
+ valid,
818
+ expiresAt:
819
+ Date.now() +
820
+ (valid
821
+ ? SLACK_TOKEN_IDENTITY_CACHE_TTL_MS
822
+ : SLACK_TOKEN_IDENTITY_NEGATIVE_CACHE_TTL_MS),
823
+ };
824
+ slackTokenIdentityCache.set(token, identity);
825
+
826
+ return (
827
+ valid &&
828
+ (!teamId || identity.teamId === teamId) &&
829
+ (!apiAppId || identity.appId === apiAppId)
830
+ );
831
+ }
832
+
833
+ function slackIdentityValue(value: unknown): string | null {
834
+ if (typeof value !== "string") return null;
835
+ const normalized = value.trim();
836
+ return normalized && normalized !== "unknown" ? normalized : null;
837
+ }
838
+
760
839
  let _missingAllowlistWarned = false;
761
840
 
762
841
  /**
@@ -1079,7 +1158,7 @@ async function resolveSlackThreadPermalink(
1079
1158
  if (typeof channelId !== "string" || typeof threadTs !== "string") {
1080
1159
  return undefined;
1081
1160
  }
1082
- const token = resolvedToken ?? (await resolveSecret("SLACK_BOT_TOKEN"));
1161
+ const token = resolvedToken;
1083
1162
  if (!token) return undefined;
1084
1163
 
1085
1164
  try {
@@ -114,7 +114,11 @@ export type {
114
114
  } from "./remote-types.js";
115
115
 
116
116
  // Adapters
117
- export { slackAdapter, type SlackAdapterOptions } from "./adapters/slack.js";
117
+ export {
118
+ resolveSlackBotTokenForIncoming,
119
+ slackAdapter,
120
+ type SlackAdapterOptions,
121
+ } from "./adapters/slack.js";
118
122
  export { telegramAdapter } from "./adapters/telegram.js";
119
123
  export { whatsappAdapter } from "./adapters/whatsapp.js";
120
124
  export { discordAdapter } from "./adapters/discord.js";
@@ -32,6 +32,10 @@ const messages = {
32
32
  openTeamSettings: "Open team settings",
33
33
  openResourceSettings: "Open resource settings",
34
34
  backHome: "Back to home",
35
+ mcpConnectionsTitle: "MCP connections",
36
+ mcpConnectionsDescription:
37
+ "Connect remote MCP servers so the agent can use their tools.",
38
+ openMcpConnections: "Manage MCP connections",
35
39
  profileTitle: "Account",
36
40
  profileDescription: "Your name, profile photo, and signed-in identity.",
37
41
  profileLoading: "Loading...",
@@ -332,6 +336,7 @@ const messages = {
332
336
  addOwnKeys: "Add your own keys",
333
337
  configureProviderKeys: "Configure Anthropic, OpenAI, or another provider",
334
338
  checkingAiConnection: "Checking AI connection...",
339
+ connectionUnavailable: "Unable to check AI connection. Click to retry.",
335
340
  voiceMode: {
336
341
  entryButtonLabel: "Use microphone",
337
342
  promptTitle: "Use your voice",
@@ -801,7 +806,7 @@ const messages = {
801
806
  connected: "Connected",
802
807
  configure: "Configure",
803
808
  connect: "Connect",
804
- connectWithOAuth: "Connect with OAuth",
809
+ connectWithOAuth: "Connect",
805
810
  useApiToken: "Use API token",
806
811
  connectSuggestion: "Connect {{name}} to use it in chat",
807
812
  connectSuggestionWithApiToken:
@@ -4,10 +4,11 @@ import type { OAuthClientInformationMixed } from "@modelcontextprotocol/sdk/shar
4
4
  import {
5
5
  deleteCookie,
6
6
  defineEventHandler,
7
+ getChunkedCookie,
7
8
  getCookie,
8
9
  getMethod,
9
10
  getQuery,
10
- setCookie,
11
+ setChunkedCookie,
11
12
  setResponseStatus,
12
13
  type H3Event,
13
14
  } from "h3";
@@ -32,6 +33,9 @@ import {
32
33
 
33
34
  const FLOW_COOKIE = "an_mcp_oauth_flow";
34
35
  const FLOW_TTL_SECONDS = 10 * 60;
36
+ const FLOW_COOKIE_CHUNK_SIZE = 2_800;
37
+ const FLOW_COOKIE_MAX_CHUNKS = 8;
38
+ const CHUNKED_COOKIE_PREFIX = "__chunked__";
35
39
 
36
40
  export interface McpOAuthFlow {
37
41
  name: string;
@@ -54,6 +58,20 @@ export interface McpOAuthRoutesOptions {
54
58
  reconfigure: () => Promise<void>;
55
59
  }
56
60
 
61
+ export function redirectWithStagedCookies(
62
+ event: H3Event,
63
+ location: string,
64
+ ): Response {
65
+ const headers = new Headers({
66
+ Location: location,
67
+ "Cache-Control": "no-store",
68
+ });
69
+ for (const cookie of event.res?.headers?.getSetCookie?.() ?? []) {
70
+ headers.append("set-cookie", cookie);
71
+ }
72
+ return new Response(null, { status: 302, headers });
73
+ }
74
+
57
75
  export function mountMcpOAuthRoutes(
58
76
  nitroApp: any,
59
77
  options: McpOAuthRoutesOptions,
@@ -175,14 +193,8 @@ async function handleMcpOAuthStart(
175
193
  ...(safeReturnUrl ? { returnUrl: safeReturnUrl } : {}),
176
194
  expiresAt: Date.now() + FLOW_TTL_SECONDS * 1_000,
177
195
  };
178
- setCookie(event, FLOW_COOKIE, encryptSecretValue(JSON.stringify(flow)), {
179
- httpOnly: true,
180
- secure: redirectUri.startsWith("https://"),
181
- sameSite: "lax",
182
- path: "/",
183
- maxAge: FLOW_TTL_SECONDS,
184
- });
185
- return Response.redirect(started.authorizationUrl.href, 302);
196
+ setMcpOAuthFlowCookie(event, flow, redirectUri.startsWith("https://"));
197
+ return redirectWithStagedCookies(event, started.authorizationUrl.href);
186
198
  } catch {
187
199
  setResponseStatus(event, 400);
188
200
  return {
@@ -203,8 +215,8 @@ async function handleMcpOAuthCallback(
203
215
  const code = text(query.code);
204
216
  const state = text(query.state);
205
217
  const providerError = text(query.error);
206
- const flow = readFlow(event);
207
- deleteCookie(event, FLOW_COOKIE, { path: "/" });
218
+ const flow = readMcpOAuthFlowCookie(event);
219
+ clearMcpOAuthFlowCookies(event);
208
220
  if (providerError || !code || !state) {
209
221
  setResponseStatus(event, 400);
210
222
  return { error: "MCP OAuth authorization was not completed." };
@@ -254,15 +266,43 @@ async function handleMcpOAuthCallback(
254
266
  const returnPath =
255
267
  flow.returnUrl ??
256
268
  `/settings/connections?connected=mcp-${encodeURIComponent(flow.name)}`;
257
- return Response.redirect(getAppUrl(event, returnPath), 302);
269
+ return redirectWithStagedCookies(event, getAppUrl(event, returnPath));
258
270
  } catch {
259
271
  setResponseStatus(event, 400);
260
272
  return { error: "MCP OAuth authorization could not be completed." };
261
273
  }
262
274
  }
263
275
 
264
- function readFlow(event: H3Event): McpOAuthFlow | null {
265
- const encrypted = getCookie(event, FLOW_COOKIE);
276
+ export function setMcpOAuthFlowCookie(
277
+ event: H3Event,
278
+ flow: McpOAuthFlow,
279
+ secure: boolean,
280
+ ): void {
281
+ const encrypted = encryptSecretValue(JSON.stringify(flow));
282
+ const chunkCount = Math.ceil(encrypted.length / FLOW_COOKIE_CHUNK_SIZE);
283
+ if (chunkCount > FLOW_COOKIE_MAX_CHUNKS) {
284
+ throw new Error("MCP OAuth flow state exceeds the cookie size limit.");
285
+ }
286
+ setChunkedCookie(event, FLOW_COOKIE, encrypted, {
287
+ httpOnly: true,
288
+ secure,
289
+ sameSite: "lax",
290
+ path: "/",
291
+ maxAge: FLOW_TTL_SECONDS,
292
+ chunkMaxLength: FLOW_COOKIE_CHUNK_SIZE,
293
+ });
294
+ }
295
+
296
+ export function readMcpOAuthFlowCookie(event: H3Event): McpOAuthFlow | null {
297
+ const primaryCookie = getCookie(event, FLOW_COOKIE);
298
+ if (!primaryCookie) return null;
299
+ if (primaryCookie.startsWith(CHUNKED_COOKIE_PREFIX)) {
300
+ const rawCount = primaryCookie.slice(CHUNKED_COOKIE_PREFIX.length);
301
+ if (!/^\d+$/.test(rawCount)) return null;
302
+ const chunkCount = Number(rawCount);
303
+ if (chunkCount < 2 || chunkCount > FLOW_COOKIE_MAX_CHUNKS) return null;
304
+ }
305
+ const encrypted = getChunkedCookie(event, FLOW_COOKIE);
266
306
  if (!encrypted) return null;
267
307
  try {
268
308
  const parsed = JSON.parse(decryptSecretValue(encrypted)) as McpOAuthFlow;
@@ -272,6 +312,13 @@ function readFlow(event: H3Event): McpOAuthFlow | null {
272
312
  }
273
313
  }
274
314
 
315
+ export function clearMcpOAuthFlowCookies(event: H3Event): void {
316
+ deleteCookie(event, FLOW_COOKIE, { path: "/" });
317
+ for (let index = 1; index <= FLOW_COOKIE_MAX_CHUNKS; index += 1) {
318
+ deleteCookie(event, `${FLOW_COOKIE}.${index}`, { path: "/" });
319
+ }
320
+ }
321
+
275
322
  export function isValidMcpOAuthFlow(
276
323
  flow: McpOAuthFlow,
277
324
  email: string,