@agent-native/core 0.118.0 → 0.119.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (480) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +32 -0
  3. package/corpus/core/docs/content/a2a-protocol.mdx +15 -0
  4. package/corpus/core/docs/content/template-chat.mdx +1 -1
  5. package/corpus/core/docs/content/template-plan.mdx +3 -3
  6. package/corpus/core/package.json +1 -1
  7. package/corpus/core/src/a2a/activity.ts +371 -0
  8. package/corpus/core/src/a2a/client.ts +35 -11
  9. package/corpus/core/src/a2a/index.ts +21 -0
  10. package/corpus/core/src/a2a/types.ts +8 -0
  11. package/corpus/core/src/agent/model-config.ts +19 -23
  12. package/corpus/core/src/agent/production-agent.ts +167 -100
  13. package/corpus/core/src/agent/types.ts +16 -1
  14. package/corpus/core/src/cli/index.ts +18 -10
  15. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  16. package/corpus/core/src/cli/templates-meta.ts +0 -12
  17. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  18. package/corpus/core/src/client/AgentPanel.tsx +9 -1
  19. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  20. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  21. package/corpus/core/src/client/chat/message-components.tsx +53 -8
  22. package/corpus/core/src/client/chat/tool-call-display.tsx +214 -44
  23. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  24. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  25. package/corpus/core/src/client/chat-model-groups.ts +67 -27
  26. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  27. package/corpus/core/src/client/error-capture.ts +2 -6
  28. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  29. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  30. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -17
  31. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  32. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  33. package/corpus/core/src/client/session-replay.ts +3 -3
  34. package/corpus/core/src/client/settings/SettingsPanel.tsx +15 -6
  35. package/corpus/core/src/client/sharing/ShareButton.tsx +1 -27
  36. package/corpus/core/src/client/sharing/ShareDialog.tsx +0 -16
  37. package/corpus/core/src/client/sharing/useShareButtonController.ts +0 -7
  38. package/corpus/core/src/client/sharing/useShareDialogController.ts +0 -2
  39. package/corpus/core/src/client/sse-event-processor.ts +85 -1
  40. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  41. package/corpus/core/src/deploy/build.ts +2 -1
  42. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  43. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  44. package/corpus/core/src/integrations/index.ts +5 -1
  45. package/corpus/core/src/localization/default-messages.ts +7 -1
  46. package/corpus/core/src/mcp-client/oauth-routes.ts +45 -12
  47. package/corpus/core/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  48. package/corpus/core/src/scripts/call-agent.ts +49 -6
  49. package/corpus/core/src/server/agent-chat-plugin.ts +50 -10
  50. package/corpus/core/src/server/realtime-voice.ts +4 -1
  51. package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  53. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  54. package/corpus/core/src/vite/client.ts +166 -1
  55. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  56. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  57. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  58. package/corpus/templates/brain/app/routes/sources.tsx +181 -114
  59. package/corpus/templates/clips/AGENTS.md +8 -6
  60. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  61. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  62. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  63. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  64. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  65. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  66. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  67. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  68. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  69. package/corpus/templates/clips/changelog/2026-07-23-fixed-recordings-failing-to-save-with-a-cancelled-or-cleanup.md +6 -0
  70. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  71. package/corpus/templates/clips/server/plugins/db.ts +9 -1
  72. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  73. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  74. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  75. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  76. package/corpus/templates/content/app/i18n-data.ts +10 -0
  77. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  78. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  79. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  80. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  81. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  82. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  83. package/corpus/toolkit/CHANGELOG.md +9 -0
  84. package/corpus/toolkit/package.json +1 -1
  85. package/corpus/toolkit/src/composer/PromptComposer.tsx +5 -1
  86. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  87. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +30 -0
  88. package/corpus/toolkit/src/conformance/runner.tsx +153 -1
  89. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  90. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  91. package/corpus/toolkit/src/editor/index.ts +2 -0
  92. package/corpus/toolkit/src/styles.css +52 -23
  93. package/dist/a2a/activity.d.ts +50 -0
  94. package/dist/a2a/activity.d.ts.map +1 -0
  95. package/dist/a2a/activity.js +236 -0
  96. package/dist/a2a/activity.js.map +1 -0
  97. package/dist/a2a/client.d.ts +5 -1
  98. package/dist/a2a/client.d.ts.map +1 -1
  99. package/dist/a2a/client.js +18 -13
  100. package/dist/a2a/client.js.map +1 -1
  101. package/dist/a2a/index.d.ts +2 -1
  102. package/dist/a2a/index.d.ts.map +1 -1
  103. package/dist/a2a/index.js +1 -0
  104. package/dist/a2a/index.js.map +1 -1
  105. package/dist/a2a/types.d.ts +1 -0
  106. package/dist/a2a/types.d.ts.map +1 -1
  107. package/dist/a2a/types.js.map +1 -1
  108. package/dist/agent/engine/anthropic-engine.d.ts +1 -1
  109. package/dist/agent/engine/builder-engine.d.ts +2 -2
  110. package/dist/agent/engine/builder-engine.d.ts.map +1 -1
  111. package/dist/agent/model-config.d.ts +16 -16
  112. package/dist/agent/model-config.d.ts.map +1 -1
  113. package/dist/agent/model-config.js +19 -23
  114. package/dist/agent/model-config.js.map +1 -1
  115. package/dist/agent/production-agent.d.ts +26 -0
  116. package/dist/agent/production-agent.d.ts.map +1 -1
  117. package/dist/agent/production-agent.js +137 -80
  118. package/dist/agent/production-agent.js.map +1 -1
  119. package/dist/agent/types.d.ts +10 -0
  120. package/dist/agent/types.d.ts.map +1 -1
  121. package/dist/agent/types.js.map +1 -1
  122. package/dist/cli/index.js +18 -8
  123. package/dist/cli/index.js.map +1 -1
  124. package/dist/cli/multi-frontier-runs.js +3 -3
  125. package/dist/cli/multi-frontier-runs.js.map +1 -1
  126. package/dist/cli/templates-meta.d.ts.map +1 -1
  127. package/dist/cli/templates-meta.js +0 -12
  128. package/dist/cli/templates-meta.js.map +1 -1
  129. package/dist/cli/workspace-dev.js +1 -1
  130. package/dist/cli/workspace-dev.js.map +1 -1
  131. package/dist/client/AgentPanel.d.ts.map +1 -1
  132. package/dist/client/AgentPanel.js +4 -1
  133. package/dist/client/AgentPanel.js.map +1 -1
  134. package/dist/client/RunStuckBanner.d.ts +3 -5
  135. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  136. package/dist/client/RunStuckBanner.js +17 -18
  137. package/dist/client/RunStuckBanner.js.map +1 -1
  138. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  139. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  140. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  141. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  142. package/dist/client/chat/message-components.d.ts +3 -0
  143. package/dist/client/chat/message-components.d.ts.map +1 -1
  144. package/dist/client/chat/message-components.js +40 -7
  145. package/dist/client/chat/message-components.js.map +1 -1
  146. package/dist/client/chat/tool-call-display.d.ts +3 -1
  147. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  148. package/dist/client/chat/tool-call-display.js +76 -23
  149. package/dist/client/chat/tool-call-display.js.map +1 -1
  150. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  151. package/dist/client/chat/widgets/InlineExtensionWidget.js +1 -1
  152. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  153. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  154. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  155. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  156. package/dist/client/chat-model-groups.d.ts.map +1 -1
  157. package/dist/client/chat-model-groups.js +44 -21
  158. package/dist/client/chat-model-groups.js.map +1 -1
  159. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  160. package/dist/client/conversation/AgentConversation.js +3 -2
  161. package/dist/client/conversation/AgentConversation.js.map +1 -1
  162. package/dist/client/error-capture.d.ts.map +1 -1
  163. package/dist/client/error-capture.js +2 -2
  164. package/dist/client/error-capture.js.map +1 -1
  165. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  166. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  167. package/dist/client/resources/McpConnectionSuggestion.js +9 -8
  168. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  169. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  170. package/dist/client/resources/ResourcesPanel.js +3 -1
  171. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  172. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  173. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  174. package/dist/client/resources/mcp-integration-catalog.js +4 -17
  175. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  176. package/dist/client/resources/mcp-integration-logos.js +2 -2
  177. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  178. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  179. package/dist/client/route-chunk-recovery.js +5 -3
  180. package/dist/client/route-chunk-recovery.js.map +1 -1
  181. package/dist/client/session-replay.js +3 -3
  182. package/dist/client/session-replay.js.map +1 -1
  183. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  184. package/dist/client/settings/SettingsPanel.js +2 -2
  185. package/dist/client/settings/SettingsPanel.js.map +1 -1
  186. package/dist/client/sharing/ShareButton.d.ts +1 -1
  187. package/dist/client/sharing/ShareButton.d.ts.map +1 -1
  188. package/dist/client/sharing/ShareButton.js +3 -4
  189. package/dist/client/sharing/ShareButton.js.map +1 -1
  190. package/dist/client/sharing/ShareDialog.d.ts.map +1 -1
  191. package/dist/client/sharing/ShareDialog.js +1 -2
  192. package/dist/client/sharing/ShareDialog.js.map +1 -1
  193. package/dist/client/sharing/useShareButtonController.d.ts +0 -1
  194. package/dist/client/sharing/useShareButtonController.d.ts.map +1 -1
  195. package/dist/client/sharing/useShareButtonController.js +0 -6
  196. package/dist/client/sharing/useShareButtonController.js.map +1 -1
  197. package/dist/client/sharing/useShareDialogController.d.ts +0 -1
  198. package/dist/client/sharing/useShareDialogController.d.ts.map +1 -1
  199. package/dist/client/sharing/useShareDialogController.js +0 -1
  200. package/dist/client/sharing/useShareDialogController.js.map +1 -1
  201. package/dist/client/sse-event-processor.d.ts +12 -0
  202. package/dist/client/sse-event-processor.d.ts.map +1 -1
  203. package/dist/client/sse-event-processor.js +63 -1
  204. package/dist/client/sse-event-processor.js.map +1 -1
  205. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  206. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  207. package/dist/client/transcription/use-live-transcription.js +22 -11
  208. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  209. package/dist/collab/awareness.d.ts +2 -2
  210. package/dist/collab/awareness.d.ts.map +1 -1
  211. package/dist/deploy/build.d.ts.map +1 -1
  212. package/dist/deploy/build.js +1 -1
  213. package/dist/deploy/build.js.map +1 -1
  214. package/dist/guards/db-tool-scoping.js +1 -1
  215. package/dist/guards/db-tool-scoping.js.map +1 -1
  216. package/dist/integrations/adapters/slack.d.ts +1 -0
  217. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  218. package/dist/integrations/adapters/slack.js +61 -5
  219. package/dist/integrations/adapters/slack.js.map +1 -1
  220. package/dist/integrations/index.d.ts +1 -1
  221. package/dist/integrations/index.d.ts.map +1 -1
  222. package/dist/integrations/index.js +1 -1
  223. package/dist/integrations/index.js.map +1 -1
  224. package/dist/localization/default-messages.d.ts +6 -0
  225. package/dist/localization/default-messages.d.ts.map +1 -1
  226. package/dist/localization/default-messages.js +7 -1
  227. package/dist/localization/default-messages.js.map +1 -1
  228. package/dist/mcp-client/oauth-routes.d.ts +3 -0
  229. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  230. package/dist/mcp-client/oauth-routes.js +41 -12
  231. package/dist/mcp-client/oauth-routes.js.map +1 -1
  232. package/dist/observability/routes.d.ts +3 -3
  233. package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
  234. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  235. package/dist/scripts/agent-engines/list-agent-engines.d.ts.map +1 -1
  236. package/dist/scripts/agent-engines/list-agent-engines.js +1 -18
  237. package/dist/scripts/agent-engines/list-agent-engines.js.map +1 -1
  238. package/dist/scripts/call-agent.d.ts.map +1 -1
  239. package/dist/scripts/call-agent.js +49 -6
  240. package/dist/scripts/call-agent.js.map +1 -1
  241. package/dist/secrets/routes.d.ts +6 -6
  242. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  243. package/dist/server/agent-chat-plugin.js +38 -10
  244. package/dist/server/agent-chat-plugin.js.map +1 -1
  245. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  246. package/dist/server/realtime-voice.d.ts.map +1 -1
  247. package/dist/server/realtime-voice.js +1 -1
  248. package/dist/server/realtime-voice.js.map +1 -1
  249. package/dist/server/transcribe-voice.d.ts +1 -1
  250. package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  251. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  252. package/dist/terminal/cli-registry.js +1 -1
  253. package/dist/terminal/cli-registry.js.map +1 -1
  254. package/dist/vite/client.d.ts +8 -1
  255. package/dist/vite/client.d.ts.map +1 -1
  256. package/dist/vite/client.js +113 -2
  257. package/dist/vite/client.js.map +1 -1
  258. package/docs/content/a2a-protocol.mdx +15 -0
  259. package/docs/content/template-chat.mdx +1 -1
  260. package/docs/content/template-plan.mdx +3 -3
  261. package/package.json +2 -2
  262. package/src/a2a/activity.ts +371 -0
  263. package/src/a2a/client.ts +35 -11
  264. package/src/a2a/index.ts +21 -0
  265. package/src/a2a/types.ts +8 -0
  266. package/src/agent/model-config.ts +19 -23
  267. package/src/agent/production-agent.ts +167 -100
  268. package/src/agent/types.ts +16 -1
  269. package/src/cli/index.ts +18 -10
  270. package/src/cli/multi-frontier-runs.ts +5 -3
  271. package/src/cli/templates-meta.ts +0 -12
  272. package/src/cli/workspace-dev.ts +1 -1
  273. package/src/client/AgentPanel.tsx +9 -1
  274. package/src/client/RunStuckBanner.tsx +39 -47
  275. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  276. package/src/client/chat/message-components.tsx +53 -8
  277. package/src/client/chat/tool-call-display.tsx +214 -44
  278. package/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  279. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  280. package/src/client/chat-model-groups.ts +67 -27
  281. package/src/client/conversation/AgentConversation.tsx +12 -1
  282. package/src/client/error-capture.ts +2 -6
  283. package/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  284. package/src/client/resources/ResourcesPanel.tsx +5 -1
  285. package/src/client/resources/mcp-integration-catalog.ts +7 -17
  286. package/src/client/resources/mcp-integration-logos.ts +2 -2
  287. package/src/client/route-chunk-recovery.ts +5 -3
  288. package/src/client/session-replay.ts +3 -3
  289. package/src/client/settings/SettingsPanel.tsx +15 -6
  290. package/src/client/sharing/ShareButton.tsx +1 -27
  291. package/src/client/sharing/ShareDialog.tsx +0 -16
  292. package/src/client/sharing/useShareButtonController.ts +0 -7
  293. package/src/client/sharing/useShareDialogController.ts +0 -2
  294. package/src/client/sse-event-processor.ts +85 -1
  295. package/src/client/transcription/use-live-transcription.ts +64 -45
  296. package/src/deploy/build.ts +2 -1
  297. package/src/guards/db-tool-scoping.ts +1 -1
  298. package/src/integrations/adapters/slack.ts +84 -5
  299. package/src/integrations/index.ts +5 -1
  300. package/src/localization/default-messages.ts +7 -1
  301. package/src/mcp-client/oauth-routes.ts +45 -12
  302. package/src/scripts/agent-engines/list-agent-engines.ts +1 -18
  303. package/src/scripts/call-agent.ts +49 -6
  304. package/src/server/agent-chat-plugin.ts +50 -10
  305. package/src/server/realtime-voice.ts +4 -1
  306. package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +16 -0
  307. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  308. package/src/terminal/cli-registry.ts +1 -1
  309. package/src/vite/client.ts +166 -1
  310. package/corpus/core/src/observability/hosted-model-experiment.ts +0 -118
  311. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  312. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
  313. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  314. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -220
  315. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  316. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  317. package/corpus/templates/crm/.env.example +0 -5
  318. package/corpus/templates/crm/AGENTS.md +0 -120
  319. package/corpus/templates/crm/CHANGELOG.md +0 -1
  320. package/corpus/templates/crm/DEVELOPING.md +0 -66
  321. package/corpus/templates/crm/README.md +0 -106
  322. package/corpus/templates/crm/_gitignore +0 -12
  323. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  324. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  325. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  326. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  327. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  328. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  329. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  330. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  331. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  332. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  333. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  334. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  335. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  336. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  337. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  338. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  339. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  340. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  341. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  342. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  343. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  344. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  345. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  346. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  347. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  348. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  349. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  350. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  351. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  352. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  353. package/corpus/templates/crm/actions/navigate.ts +0 -63
  354. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  355. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  356. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  357. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  358. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  359. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  360. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  361. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  362. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  363. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  364. package/corpus/templates/crm/actions/run.ts +0 -7
  365. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  366. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  367. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  368. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  369. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  370. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  371. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  372. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -78
  373. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -226
  374. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -414
  375. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  376. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  377. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -362
  378. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -93
  379. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -97
  380. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  381. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  382. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  383. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +0 -1
  384. package/corpus/templates/crm/app/components/ui/badge.tsx +0 -1
  385. package/corpus/templates/crm/app/components/ui/button.tsx +0 -1
  386. package/corpus/templates/crm/app/components/ui/card.tsx +0 -1
  387. package/corpus/templates/crm/app/components/ui/dialog.tsx +0 -1
  388. package/corpus/templates/crm/app/components/ui/input.tsx +0 -1
  389. package/corpus/templates/crm/app/components/ui/label.tsx +0 -1
  390. package/corpus/templates/crm/app/components/ui/select.tsx +0 -1
  391. package/corpus/templates/crm/app/components/ui/sheet.tsx +0 -1
  392. package/corpus/templates/crm/app/components/ui/skeleton.tsx +0 -1
  393. package/corpus/templates/crm/app/components/ui/switch.tsx +0 -1
  394. package/corpus/templates/crm/app/components/ui/table.tsx +0 -1
  395. package/corpus/templates/crm/app/components/ui/tabs.tsx +0 -1
  396. package/corpus/templates/crm/app/components/ui/textarea.tsx +0 -1
  397. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +0 -17
  398. package/corpus/templates/crm/app/design-system.ts +0 -3
  399. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  400. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  401. package/corpus/templates/crm/app/global.css +0 -167
  402. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  403. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  404. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  405. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  406. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  407. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  408. package/corpus/templates/crm/app/lib/types.ts +0 -172
  409. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  410. package/corpus/templates/crm/app/root.tsx +0 -91
  411. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  412. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  413. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  414. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  415. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  416. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  417. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  418. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  419. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  420. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  421. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  422. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  423. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  424. package/corpus/templates/crm/app/routes.ts +0 -17
  425. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  426. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  427. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  428. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  429. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  430. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  431. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  432. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  433. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  434. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  435. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  436. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  437. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  438. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  439. package/corpus/templates/crm/components.json +0 -20
  440. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  441. package/corpus/templates/crm/learnings.defaults.md +0 -5
  442. package/corpus/templates/crm/package.json +0 -59
  443. package/corpus/templates/crm/public/favicon.svg +0 -1
  444. package/corpus/templates/crm/public/icon-180.svg +0 -1
  445. package/corpus/templates/crm/public/manifest.json +0 -11
  446. package/corpus/templates/crm/react-router.config.ts +0 -7
  447. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  448. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  449. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  450. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  451. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  452. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  453. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  454. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  455. package/corpus/templates/crm/server/db/index.ts +0 -169
  456. package/corpus/templates/crm/server/db/schema.ts +0 -441
  457. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  458. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  459. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  460. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  461. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  462. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  463. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  464. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  465. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  466. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  467. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  468. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  469. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  470. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  471. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  472. package/corpus/templates/crm/ssr-entry.ts +0 -11
  473. package/corpus/templates/crm/tsconfig.json +0 -24
  474. package/corpus/templates/crm/vite.config.ts +0 -15
  475. package/corpus/templates/crm/vitest.config.ts +0 -5
  476. package/dist/observability/hosted-model-experiment.d.ts +0 -39
  477. package/dist/observability/hosted-model-experiment.d.ts.map +0 -1
  478. package/dist/observability/hosted-model-experiment.js +0 -90
  479. package/dist/observability/hosted-model-experiment.js.map +0 -1
  480. package/src/observability/hosted-model-experiment.ts +0 -118
@@ -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;
@@ -40,34 +40,64 @@ function addCurrentModel(
40
40
  return next;
41
41
  }
42
42
 
43
+ const MODEL_COST_ORDER = [
44
+ "luna",
45
+ "terra",
46
+ "sol",
47
+ "haiku",
48
+ "sonnet",
49
+ "opus",
50
+ "fable",
51
+ "flash",
52
+ "pro",
53
+ ] as const;
54
+
55
+ function modelCostRank(model: string): number {
56
+ const normalized = model.toLowerCase();
57
+ const rank = MODEL_COST_ORDER.findIndex((tier) => normalized.includes(tier));
58
+ return rank === -1 ? MODEL_COST_ORDER.length : rank;
59
+ }
60
+
61
+ function sortModelsByCost(models: readonly string[]): string[] {
62
+ return [...models].sort((a, b) => modelCostRank(a) - modelCostRank(b));
63
+ }
64
+
43
65
  function groupBuilderModels(models: readonly string[]): EngineModelGroup[] {
44
- const claude = models.filter((model) => model.startsWith("claude-"));
45
- const openai = models.filter((model) => model.startsWith("gpt-"));
46
- const gemini = models.filter((model) => model.startsWith("gemini-"));
47
- const other = models.filter(
48
- (model) =>
49
- !model.startsWith("claude-") &&
50
- !model.startsWith("gpt-") &&
51
- !model.startsWith("gemini-"),
66
+ const claude = sortModelsByCost(
67
+ models.filter((model) => model.startsWith("claude-")),
68
+ );
69
+ const openai = sortModelsByCost(
70
+ models.filter((model) => model.startsWith("gpt-")),
71
+ );
72
+ const gemini = sortModelsByCost(
73
+ models.filter((model) => model.startsWith("gemini-")),
74
+ );
75
+ const other = sortModelsByCost(
76
+ models.filter(
77
+ (model) =>
78
+ !model.startsWith("claude-") &&
79
+ !model.startsWith("gpt-") &&
80
+ !model.startsWith("gemini-"),
81
+ ),
52
82
  );
53
83
 
54
84
  return [
55
- ...(claude.length
85
+ ...(openai.length
56
86
  ? [
57
87
  {
58
88
  engine: "builder",
59
- label: "Claude",
60
- models: claude,
89
+ label: "OpenAI",
90
+ models: openai,
61
91
  configured: true,
62
92
  },
63
93
  ]
64
94
  : []),
65
- ...(openai.length
95
+ ...(claude.length
66
96
  ? [
67
97
  {
68
98
  engine: "builder",
69
- label: "OpenAI",
70
- models: openai,
99
+ label: "Claude",
100
+ models: claude,
71
101
  configured: true,
72
102
  },
73
103
  ]
@@ -115,16 +145,24 @@ function shouldShowDirectEngine(
115
145
  return true;
116
146
  }
117
147
 
118
- function putOpenRouterLast(
148
+ function modelPickerEngineRank(engine: ChatModelEngineEntry): number {
149
+ if (engine.name === "ai-sdk:openai" || engine.label === "OpenAI") return 0;
150
+ if (
151
+ engine.name === "anthropic" ||
152
+ engine.name === "ai-sdk:anthropic" ||
153
+ engine.label === "Claude"
154
+ ) {
155
+ return 1;
156
+ }
157
+ if (engine.name === "ai-sdk:openrouter") return 100;
158
+ return 2;
159
+ }
160
+
161
+ function sortModelPickerEngines(
119
162
  a: ChatModelEngineEntry,
120
163
  b: ChatModelEngineEntry,
121
164
  ): number {
122
- const aIsOpenRouter = a.name === "ai-sdk:openrouter";
123
- const bIsOpenRouter = b.name === "ai-sdk:openrouter";
124
- if (aIsOpenRouter === bIsOpenRouter) return 0;
125
- if (aIsOpenRouter) return 1;
126
- if (bIsOpenRouter) return -1;
127
- return 0;
165
+ return modelPickerEngineRank(a) - modelPickerEngineRank(b);
128
166
  }
129
167
 
130
168
  export function buildChatModelGroups({
@@ -150,17 +188,19 @@ export function buildChatModelGroups({
150
188
  return engines
151
189
  .filter((engine) => engine.packageInstalled !== false)
152
190
  .filter((engine) => shouldShowDirectEngine(engine, currentEngineName))
153
- .sort(putOpenRouterLast)
191
+ .sort(sortModelPickerEngines)
154
192
  .map((engine) => {
155
193
  const requiredEnvVars = engine.requiredEnvVars ?? [];
156
194
  return {
157
195
  engine: engine.name,
158
196
  label: engine.label,
159
- models: addCurrentModel(
160
- engine.supportedModels ?? [],
161
- engine.name,
162
- currentEngineName,
163
- currentModel,
197
+ models: sortModelsByCost(
198
+ addCurrentModel(
199
+ engine.supportedModels ?? [],
200
+ engine.name,
201
+ currentEngineName,
202
+ currentModel,
203
+ ),
164
204
  ),
165
205
  configured:
166
206
  requiredEnvVars.length === 0 ||
@@ -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
 
@@ -39,6 +39,18 @@ export interface McpConnectionSuggestionProps {
39
39
  integrations?: DefaultMcpIntegration[];
40
40
  }
41
41
 
42
+ export function findMcpConnectionSuggestionIntegration({
43
+ text,
44
+ contextText = "",
45
+ variant = "composer",
46
+ integrations = getDefaultMcpIntegrations(),
47
+ }: McpConnectionSuggestionProps): DefaultMcpIntegration | null {
48
+ return findMcpIntegrationForText(
49
+ variant === "response" ? contextText : text,
50
+ integrations,
51
+ );
52
+ }
53
+
42
54
  function compareUrl(value: string): string {
43
55
  try {
44
56
  const url = new URL(value.trim());
@@ -99,22 +111,16 @@ export function McpConnectionSuggestion({
99
111
  () => integrationOptions ?? getDefaultMcpIntegrations(),
100
112
  [integrationOptions],
101
113
  );
102
- const textIntegration = useMemo(
103
- () => findMcpIntegrationForText(text, integrations),
104
- [integrations, text],
105
- );
106
- const contextIntegration = useMemo(
114
+ const integration = useMemo(
107
115
  () =>
108
- contextText ? findMcpIntegrationForText(contextText, integrations) : null,
109
- [contextText, integrations],
116
+ findMcpConnectionSuggestionIntegration({
117
+ text,
118
+ contextText,
119
+ variant,
120
+ integrations,
121
+ }),
122
+ [contextText, integrations, text, variant],
110
123
  );
111
- const integration =
112
- variant === "response" &&
113
- textIntegration &&
114
- contextIntegration &&
115
- textIntegration.id !== contextIntegration.id
116
- ? null
117
- : (textIntegration ?? contextIntegration);
118
124
  const apiFallback = integration
119
125
  ? getMcpIntegrationApiFallback(integration)
120
126
  : null;
@@ -338,7 +338,11 @@ function CreateMenu({
338
338
  window.clearTimeout(skillFlyoutCloseTimerRef.current);
339
339
  skillFlyoutCloseTimerRef.current = null;
340
340
  }
341
- if (rowEl && typeof window !== "undefined") {
341
+ if (
342
+ rowEl &&
343
+ typeof window !== "undefined" &&
344
+ typeof rowEl.getBoundingClientRect === "function"
345
+ ) {
342
346
  const rect = rowEl.getBoundingClientRect();
343
347
  const FLYOUT_WIDTH = 248;
344
348
  setSkillFlyoutSide(
@@ -49,6 +49,7 @@ export interface DefaultMcpIntegration {
49
49
  templateUses?: readonly string[];
50
50
  };
51
51
  headerPlaceholder?: string;
52
+ brandAliases?: string[];
52
53
  aliases?: string[];
53
54
  keywords: string[];
54
55
  }
@@ -138,16 +139,6 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
138
139
  logoUrl: mcpIntegrationLogo("granola"),
139
140
  docsUrl: "https://docs.granola.ai/help-center/sharing/integrations/mcp",
140
141
  setupNoteKey: "mcpIntegrations.catalog.granola.setupNote",
141
- aliases: [
142
- "meeting notes",
143
- "meeting recordings",
144
- "recordings",
145
- "transcripts",
146
- "action items",
147
- "follow-ups",
148
- "follow ups",
149
- "decisions",
150
- ],
151
142
  keywords: [
152
143
  "meetings",
153
144
  "meeting notes",
@@ -210,7 +201,7 @@ export const DEFAULT_MCP_INTEGRATIONS: DefaultMcpIntegration[] = [
210
201
  docsUrl:
211
202
  "https://developer.atlassian.com/cloud/rovo-mcp/guides/getting-started/",
212
203
  setupNoteKey: "mcpIntegrations.catalog.atlassian.setupNote",
213
- aliases: ["jira", "confluence", "rovo"],
204
+ brandAliases: ["Jira", "Confluence", "Rovo"],
214
205
  keywords: ["atlassian", "jira", "confluence", "issues", "tickets"],
215
206
  },
216
207
  {
@@ -721,6 +712,8 @@ export function filterMcpIntegrations(
721
712
  integration.description,
722
713
  integration.useCase,
723
714
  integration.url,
715
+ ...(integration.brandAliases ?? []),
716
+ ...(integration.aliases ?? []),
724
717
  ...integration.keywords,
725
718
  ]
726
719
  .join(" ")
@@ -802,12 +795,9 @@ export function findMcpIntegrationForText(
802
795
  isMcpConnectionFailureText(normalizedText);
803
796
  if (!hasResourceIntent) return null;
804
797
  const matchesCanonicalName = (integration: DefaultMcpIntegration) =>
805
- [
806
- integration.name,
807
- integration.provider,
808
- integration.id,
809
- ...(integration.aliases ?? []),
810
- ].some((alias) => textContainsTerm(normalizedText, alias));
798
+ [integration.name, ...(integration.brandAliases ?? [])].some((alias) =>
799
+ textContainsTerm(normalizedText, alias),
800
+ );
811
801
  const canonicalMatch = integrations.find(matchesCanonicalName);
812
802
  if (canonicalMatch) return canonicalMatch;
813
803
  return null;
@@ -24,8 +24,8 @@ const LOGOS = {
24
24
  data: "PHN2ZyBmaWxsPSIjMDAwMDAwIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+Tm90aW9uPC90aXRsZT48cGF0aCBkPSJNNC40NTkgNC4yMDhjLjc0Ni42MDYgMS4wMjYuNTYgMi40MjguNDY2bDEzLjIxNS0uNzkzYy4yOCAwIC4wNDctLjI4LS4wNDYtLjMyNkwxNy44NiAxLjk2OGMtLjQyLS4zMjYtLjk4MS0uNy0yLjA1NS0uNjA3TDMuMDEgMi4yOTVjLS40NjYuMDQ2LS41Ni4yOC0uMzc0LjQ2NnptLjc5MyAzLjA4djEzLjkwNGMwIC43NDcuMzczIDEuMDI3IDEuMjE0Ljk4bDE0LjUyMy0uODRjLjg0MS0uMDQ2LjkzNS0uNTYuOTM1LTEuMTY3VjYuMzU0YzAtLjYwNi0uMjMzLS45MzMtLjc0OC0uODg3bC0xNS4xNzcuODg3Yy0uNTYuMDQ3LS43NDcuMzI3LS43NDcuOTMzem0xNC4zMzcuNzQ1Yy4wOTMuNDIgMCAuODQtLjQyLjg4OGwtLjcuMTR2MTAuMjY0Yy0uNjA4LjMyNy0xLjE2OC41MTQtMS42MzUuNTE0LS43NDggMC0uOTM1LS4yMzQtMS40OTUtLjkzM2wtNC41NzctNy4xODZ2Ni45NTJMMTIuMjEgMTlzMCAuODQtMS4xNjguODRsLTMuMjIyLjE4NmMtLjA5My0uMTg2IDAtLjY1My4zMjctLjc0NmwuODQtLjIzM1Y5Ljg1NEw3LjgyMiA5Ljc2Yy0uMDk0LS40Mi4xNC0xLjAyNi43OTMtMS4wNzNsMy40NTYtLjIzMyA0Ljc2NCA3LjI3OXYtNi40NGwtMS4yMTUtLjEzOWMtLjA5My0uNTE0LjI4LS44ODcuNzQ3LS45MzN6TTEuOTM2IDEuMDM1bDEzLjMxLS45OGMxLjYzNC0uMTQgMi4wNTUtLjA0NyAzLjA4Mi43bDQuMjQ5IDIuOTg2Yy43LjUxMy45MzQuNjUzLjkzNCAxLjIxM3YxNi4zNzhjMCAxLjAyNi0uMzczIDEuNjM0LTEuNjggMS43MjZsLTE1LjQ1OC45MzRjLS45OC4wNDctMS40NDgtLjA5My0xLjk2Mi0uNzQ3bC0zLjEyOS00LjA2Yy0uNTYtLjc0Ny0uNzkzLTEuMzA2LS43OTMtMS45NlYyLjY2N2MwLS44MzkuMzc0LTEuNTQgMS40NDctMS42MzJ6Ii8+PC9zdmc+",
25
25
  },
26
26
  granola: {
27
- mime: "image/svg+xml",
28
- data: "PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHJlY3Qgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiByeD0iNiIgZmlsbD0iI2Y0ZWZlNyIvPjxwYXRoIGQ9Ik00IDkuNWMyLjEtMi42IDQuOC0zLjkgOC0zLjlzNS45IDEuMyA4IDMuOWMtMi4xIDIuNi00LjggMy45LTggMy45cy01LjktMS4zLTgtMy45WiIgZmlsbD0iIzI4YTg3OCIvPjxwYXRoIGQ9Ik01LjMgMTIuMmMxLjkgMS43IDQuMSAyLjYgNi43IDIuNnM0LjgtLjkgNi43LTIuNmMtLjUgMy44LTMuMSA2LjItNi43IDYuMnMtNi4yLTIuNC02LjctNi4yWiIgZmlsbD0iIzEzOGY2OCIvPjxjaXJjbGUgY3g9IjkiIGN5PSI5LjUiIHI9IjEiIGZpbGw9IiNmZmYiLz48Y2lyY2xlIGN4PSIxMiIgY3k9IjkuNSIgcj0iMSIgZmlsbD0iI2ZmZiIvPjxjaXJjbGUgY3g9IjE1IiBjeT0iOS41IiByPSIxIiBmaWxsPSIjZmZmIi8+PC9zdmc+",
27
+ mime: "image/png",
28
+ data: "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",
29
29
  },
30
30
  linear: {
31
31
  mime: "image/svg+xml",
@@ -33,10 +33,12 @@ export function isRouteModuleReloadMessage(value: unknown): boolean {
33
33
 
34
34
  export function isDynamicImportFailureMessage(value: unknown): boolean {
35
35
  if (typeof value !== "string") return false;
36
+ const message = value.toLowerCase();
36
37
  return (
37
- value.includes("Failed to fetch dynamically imported module") ||
38
- value.includes("error loading dynamically imported module") ||
39
- value.includes("Importing a module script failed")
38
+ message.includes("failed to fetch dynamically imported module") ||
39
+ message.includes("error loading dynamically imported module") ||
40
+ message.includes("importing a module script failed") ||
41
+ message.includes("failed to fetch dynamically imported")
40
42
  );
41
43
  }
42
44
 
@@ -1158,13 +1158,13 @@ function updateReplayResourceNode(
1158
1158
  ): ReplayResourceNode {
1159
1159
  return {
1160
1160
  tagName: current.tagName,
1161
- rel: Object.hasOwn(attributes, "rel")
1161
+ rel: Object.prototype.hasOwnProperty.call(attributes, "rel")
1162
1162
  ? replayAttributeString(attributes, "rel")
1163
1163
  : current.rel,
1164
- as: Object.hasOwn(attributes, "as")
1164
+ as: Object.prototype.hasOwnProperty.call(attributes, "as")
1165
1165
  ? replayAttributeString(attributes, "as")
1166
1166
  : current.as,
1167
- type: Object.hasOwn(attributes, "type")
1167
+ type: Object.prototype.hasOwnProperty.call(attributes, "type")
1168
1168
  ? replayAttributeString(attributes, "type")
1169
1169
  : current.type,
1170
1170
  };
@@ -1119,12 +1119,7 @@ function LLMSectionInner({
1119
1119
  label="Connect Builder.io"
1120
1120
  />
1121
1121
  {!builderConnected && (
1122
- <ManualSetupCard
1123
- hint={manualSetupHint}
1124
- docsUrl={PROVIDER_DOCS[selectedEngine]}
1125
- sourceBadge={sourceBadge}
1126
- docsLabel="Get an API key"
1127
- >
1122
+ <ManualSetupCard hint={manualSetupHint} sourceBadge={sourceBadge}>
1128
1123
  <div className="space-y-2 mb-1">
1129
1124
  <SettingsSelect
1130
1125
  label="Provider"
@@ -1330,6 +1325,20 @@ function LLMSectionInner({
1330
1325
  "Test"
1331
1326
  )}
1332
1327
  </Button>
1328
+ {PROVIDER_DOCS[selectedEngine] ? (
1329
+ <a
1330
+ href={PROVIDER_DOCS[selectedEngine]}
1331
+ target="_blank"
1332
+ rel="noopener noreferrer"
1333
+ className={cn(
1334
+ pillButtonClass(isPage, "outline"),
1335
+ "no-underline",
1336
+ )}
1337
+ >
1338
+ Get an API key
1339
+ <IconExternalLink size={isPage ? 14 : 10} />
1340
+ </a>
1341
+ ) : null}
1333
1342
  {engineChanged && (
1334
1343
  <Button
1335
1344
  intent="primary"
@@ -77,7 +77,7 @@ export interface ShareButtonProps {
77
77
  shareUrlPlacement?: "top" | "bottom";
78
78
  /** Whether to render copyable share URL fields. Defaults to true. */
79
79
  showShareLinks?: boolean;
80
- /** Whether to render the bottom Done button. Defaults to true. */
80
+ /** @deprecated The Done action was removed; share popovers dismiss directly. */
81
81
  showDoneButton?: boolean;
82
82
  /** Optional placeholder shown in the share-URL slot when `shareUrl` is
83
83
  * undefined. Use this to explain *why* there's no link yet (e.g. "Publish
@@ -301,7 +301,6 @@ function SharePanel(
301
301
  const {
302
302
  inviteEmail,
303
303
  setInviteEmail: onInviteEmailChange,
304
- handleOpenChange,
305
304
  activeShareTab,
306
305
  handleShareTabChange,
307
306
  data,
@@ -326,7 +325,6 @@ function SharePanel(
326
325
  handleAdd,
327
326
  handleChangeRole,
328
327
  handleRemove,
329
- handleDone,
330
328
  } = controller;
331
329
  const hasInviteEmail = inviteEmail.trim().length > 0;
332
330
 
@@ -367,7 +365,6 @@ function SharePanel(
367
365
  (Boolean(props.shareUrl) ||
368
366
  Boolean(props.shareUrlPlaceholder) ||
369
367
  Boolean(props.secondaryShareUrl));
370
- const showDoneButton = props.showDoneButton ?? true;
371
368
  const shareUrlPlacement = props.shareUrlPlacement ?? "bottom";
372
369
  const extraTabs = props.shareTabs?.tabs ?? [];
373
370
  const hasTabs = extraTabs.length > 0;
@@ -392,17 +389,6 @@ function SharePanel(
392
389
  <div className="mb-4 h-7 rounded-md bg-muted animate-pulse" />
393
390
  <div className="mb-2 text-sm font-semibold">{generalAccessLabel}</div>
394
391
  <div className="mb-4 h-9 rounded-md bg-muted animate-pulse" />
395
- {showDoneButton ? (
396
- <div className="mt-2 flex justify-end">
397
- <button
398
- type="button"
399
- onClick={() => handleOpenChange(false)}
400
- className={BUTTON_PRIMARY_SM}
401
- >
402
- Done
403
- </button>
404
- </div>
405
- ) : null}
406
392
  </div>
407
393
  ) : (
408
394
  <div>
@@ -579,18 +565,6 @@ function SharePanel(
579
565
  {showShareLinks && shareUrlPlacement === "bottom" ? shareLinks : null}
580
566
 
581
567
  {props.shareFooterContent}
582
-
583
- {showDoneButton ? (
584
- <div className="mt-2 flex justify-end">
585
- <button
586
- type="button"
587
- onClick={handleDone}
588
- className={BUTTON_PRIMARY_SM}
589
- >
590
- Done
591
- </button>
592
- </div>
593
- ) : null}
594
568
  </div>
595
569
  );
596
570
 
@@ -61,10 +61,6 @@ const BUTTON_OUTLINE_SM = cn(
61
61
  BUTTON_BASE,
62
62
  "!h-9 !px-3 border border-input bg-background hover:bg-accent hover:text-accent-foreground",
63
63
  );
64
- const BUTTON_PRIMARY_SM = cn(
65
- BUTTON_BASE,
66
- "!h-9 !px-4 bg-primary text-primary-foreground hover:bg-primary/90",
67
- );
68
64
  const BUTTON_GHOST_ICON = cn(
69
65
  BUTTON_BASE,
70
66
  "!h-8 !w-8 !p-0 text-muted-foreground hover:bg-accent hover:text-accent-foreground",
@@ -171,18 +167,6 @@ export function ShareDialog({
171
167
  ? (embedTabContent ?? <DefaultEmbedBody controller={controller} />)
172
168
  : null}
173
169
  </div>
174
-
175
- <div className="flex justify-end border-t border-border px-5 py-3">
176
- <ActionButton
177
- type="button"
178
- intent="primary"
179
- emphasis="solid"
180
- onPress={controller.close}
181
- className={BUTTON_PRIMARY_SM}
182
- >
183
- {controller.labels.done}
184
- </ActionButton>
185
- </div>
186
170
  </DesignSystemDialog>
187
171
  );
188
172
  }
@@ -105,7 +105,6 @@ export interface ShareButtonController {
105
105
  handleAdd: () => void;
106
106
  handleChangeRole: (share: ShareButtonShare, role: ShareButtonRole) => void;
107
107
  handleRemove: (share: ShareButtonShare) => void;
108
- handleDone: () => void;
109
108
  }
110
109
 
111
110
  export function useShareButtonController(
@@ -547,11 +546,6 @@ export function useShareButtonController(
547
546
  ],
548
547
  );
549
548
 
550
- const handleDone = useCallback(() => {
551
- if (canManage && inviteEmail.trim()) handleAdd();
552
- handleOpenChange(false);
553
- }, [canManage, handleAdd, handleOpenChange, inviteEmail]);
554
-
555
549
  return {
556
550
  open,
557
551
  handleOpenChange,
@@ -585,7 +579,6 @@ export function useShareButtonController(
585
579
  handleAdd,
586
580
  handleChangeRole,
587
581
  handleRemove,
588
- handleDone,
589
582
  };
590
583
  }
591
584
 
@@ -71,7 +71,6 @@ export interface ShareDialogController {
71
71
  tabs: Array<{ value: ShareDialogTab; label: string }>;
72
72
  labels: {
73
73
  close: string;
74
- done: string;
75
74
  shareOptions: string;
76
75
  generalAccess: string;
77
76
  shareLink: string;
@@ -407,7 +406,6 @@ export function useShareDialogController({
407
406
  ],
408
407
  labels: {
409
408
  close: t("share.close"),
410
- done: t("share.done"),
411
409
  shareOptions: t("share.shareOptions"),
412
410
  generalAccess: t("share.generalAccess"),
413
411
  shareLink: t("share.shareLink"),