@agent-native/core 0.118.0 → 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 (375) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +21 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +32 -10
  5. package/corpus/core/src/cli/index.ts +18 -10
  6. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  7. package/corpus/core/src/cli/templates-meta.ts +0 -12
  8. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  9. package/corpus/core/src/client/AgentPanel.tsx +9 -1
  10. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  11. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  12. package/corpus/core/src/client/chat/message-components.tsx +53 -8
  13. package/corpus/core/src/client/chat/tool-call-display.tsx +24 -9
  14. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  15. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  16. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  17. package/corpus/core/src/client/error-capture.ts +2 -6
  18. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  19. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  20. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -17
  21. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  22. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  23. package/corpus/core/src/client/session-replay.ts +3 -3
  24. package/corpus/core/src/client/settings/SettingsPanel.tsx +15 -6
  25. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  26. package/corpus/core/src/deploy/build.ts +2 -1
  27. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  28. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  29. package/corpus/core/src/integrations/index.ts +5 -1
  30. package/corpus/core/src/localization/default-messages.ts +1 -1
  31. package/corpus/core/src/mcp-client/oauth-routes.ts +45 -12
  32. package/corpus/core/src/server/realtime-voice.ts +4 -1
  33. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  34. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  35. package/corpus/core/src/vite/client.ts +166 -1
  36. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  37. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  38. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  39. package/corpus/templates/brain/app/routes/sources.tsx +181 -114
  40. package/corpus/templates/clips/AGENTS.md +8 -6
  41. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  42. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  43. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  44. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  45. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  46. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  47. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  48. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  50. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  51. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  52. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  53. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  54. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  55. package/corpus/templates/content/app/i18n-data.ts +10 -0
  56. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  57. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  58. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  59. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  60. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  61. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  62. package/corpus/toolkit/CHANGELOG.md +9 -0
  63. package/corpus/toolkit/package.json +1 -1
  64. package/corpus/toolkit/src/composer/PromptComposer.tsx +5 -1
  65. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  66. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +30 -0
  67. package/corpus/toolkit/src/conformance/runner.tsx +153 -1
  68. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  69. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  70. package/corpus/toolkit/src/editor/index.ts +2 -0
  71. package/corpus/toolkit/src/styles.css +52 -23
  72. package/dist/a2a/client.d.ts +3 -1
  73. package/dist/a2a/client.d.ts.map +1 -1
  74. package/dist/a2a/client.js +17 -12
  75. package/dist/a2a/client.js.map +1 -1
  76. package/dist/cli/index.js +18 -8
  77. package/dist/cli/index.js.map +1 -1
  78. package/dist/cli/multi-frontier-runs.js +3 -3
  79. package/dist/cli/multi-frontier-runs.js.map +1 -1
  80. package/dist/cli/templates-meta.d.ts.map +1 -1
  81. package/dist/cli/templates-meta.js +0 -12
  82. package/dist/cli/templates-meta.js.map +1 -1
  83. package/dist/cli/workspace-dev.js +1 -1
  84. package/dist/cli/workspace-dev.js.map +1 -1
  85. package/dist/client/AgentPanel.d.ts.map +1 -1
  86. package/dist/client/AgentPanel.js +4 -1
  87. package/dist/client/AgentPanel.js.map +1 -1
  88. package/dist/client/RunStuckBanner.d.ts +3 -5
  89. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  90. package/dist/client/RunStuckBanner.js +17 -18
  91. package/dist/client/RunStuckBanner.js.map +1 -1
  92. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  93. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  94. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  95. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  96. package/dist/client/chat/message-components.d.ts +3 -0
  97. package/dist/client/chat/message-components.d.ts.map +1 -1
  98. package/dist/client/chat/message-components.js +40 -7
  99. package/dist/client/chat/message-components.js.map +1 -1
  100. package/dist/client/chat/tool-call-display.d.ts +3 -1
  101. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  102. package/dist/client/chat/tool-call-display.js +13 -9
  103. package/dist/client/chat/tool-call-display.js.map +1 -1
  104. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  105. package/dist/client/chat/widgets/InlineExtensionWidget.js +1 -1
  106. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  107. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  108. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  109. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  110. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  111. package/dist/client/conversation/AgentConversation.js +3 -2
  112. package/dist/client/conversation/AgentConversation.js.map +1 -1
  113. package/dist/client/error-capture.d.ts.map +1 -1
  114. package/dist/client/error-capture.js +2 -2
  115. package/dist/client/error-capture.js.map +1 -1
  116. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  117. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  118. package/dist/client/resources/McpConnectionSuggestion.js +9 -8
  119. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  120. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  121. package/dist/client/resources/ResourcesPanel.js +3 -1
  122. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  123. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  124. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  125. package/dist/client/resources/mcp-integration-catalog.js +4 -17
  126. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  127. package/dist/client/resources/mcp-integration-logos.js +2 -2
  128. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  129. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  130. package/dist/client/route-chunk-recovery.js +5 -3
  131. package/dist/client/route-chunk-recovery.js.map +1 -1
  132. package/dist/client/session-replay.js +3 -3
  133. package/dist/client/session-replay.js.map +1 -1
  134. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  135. package/dist/client/settings/SettingsPanel.js +2 -2
  136. package/dist/client/settings/SettingsPanel.js.map +1 -1
  137. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  138. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  139. package/dist/client/transcription/use-live-transcription.js +22 -11
  140. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  141. package/dist/collab/routes.d.ts +1 -1
  142. package/dist/collab/struct-routes.d.ts +1 -1
  143. package/dist/deploy/build.d.ts.map +1 -1
  144. package/dist/deploy/build.js +1 -1
  145. package/dist/deploy/build.js.map +1 -1
  146. package/dist/guards/db-tool-scoping.js +1 -1
  147. package/dist/guards/db-tool-scoping.js.map +1 -1
  148. package/dist/integrations/adapters/slack.d.ts +1 -0
  149. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  150. package/dist/integrations/adapters/slack.js +61 -5
  151. package/dist/integrations/adapters/slack.js.map +1 -1
  152. package/dist/integrations/index.d.ts +1 -1
  153. package/dist/integrations/index.d.ts.map +1 -1
  154. package/dist/integrations/index.js +1 -1
  155. package/dist/integrations/index.js.map +1 -1
  156. package/dist/localization/default-messages.js +1 -1
  157. package/dist/localization/default-messages.js.map +1 -1
  158. package/dist/mcp-client/oauth-routes.d.ts +3 -0
  159. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  160. package/dist/mcp-client/oauth-routes.js +41 -12
  161. package/dist/mcp-client/oauth-routes.js.map +1 -1
  162. package/dist/notifications/routes.d.ts +2 -2
  163. package/dist/observability/routes.d.ts +3 -3
  164. package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
  165. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  166. package/dist/secrets/routes.d.ts +6 -6
  167. package/dist/server/realtime-voice.d.ts.map +1 -1
  168. package/dist/server/realtime-voice.js +1 -1
  169. package/dist/server/realtime-voice.js.map +1 -1
  170. package/dist/server/transcribe-voice.d.ts +1 -1
  171. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  172. package/dist/terminal/cli-registry.js +1 -1
  173. package/dist/terminal/cli-registry.js.map +1 -1
  174. package/dist/vite/client.d.ts +8 -1
  175. package/dist/vite/client.d.ts.map +1 -1
  176. package/dist/vite/client.js +113 -2
  177. package/dist/vite/client.js.map +1 -1
  178. package/package.json +2 -2
  179. package/src/a2a/client.ts +32 -10
  180. package/src/cli/index.ts +18 -10
  181. package/src/cli/multi-frontier-runs.ts +5 -3
  182. package/src/cli/templates-meta.ts +0 -12
  183. package/src/cli/workspace-dev.ts +1 -1
  184. package/src/client/AgentPanel.tsx +9 -1
  185. package/src/client/RunStuckBanner.tsx +39 -47
  186. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  187. package/src/client/chat/message-components.tsx +53 -8
  188. package/src/client/chat/tool-call-display.tsx +24 -9
  189. package/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  190. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  191. package/src/client/conversation/AgentConversation.tsx +12 -1
  192. package/src/client/error-capture.ts +2 -6
  193. package/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  194. package/src/client/resources/ResourcesPanel.tsx +5 -1
  195. package/src/client/resources/mcp-integration-catalog.ts +7 -17
  196. package/src/client/resources/mcp-integration-logos.ts +2 -2
  197. package/src/client/route-chunk-recovery.ts +5 -3
  198. package/src/client/session-replay.ts +3 -3
  199. package/src/client/settings/SettingsPanel.tsx +15 -6
  200. package/src/client/transcription/use-live-transcription.ts +64 -45
  201. package/src/deploy/build.ts +2 -1
  202. package/src/guards/db-tool-scoping.ts +1 -1
  203. package/src/integrations/adapters/slack.ts +84 -5
  204. package/src/integrations/index.ts +5 -1
  205. package/src/localization/default-messages.ts +1 -1
  206. package/src/mcp-client/oauth-routes.ts +45 -12
  207. package/src/server/realtime-voice.ts +4 -1
  208. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  209. package/src/terminal/cli-registry.ts +1 -1
  210. package/src/vite/client.ts +166 -1
  211. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  212. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
  213. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  214. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -220
  215. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  216. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  217. package/corpus/templates/crm/.env.example +0 -5
  218. package/corpus/templates/crm/AGENTS.md +0 -120
  219. package/corpus/templates/crm/CHANGELOG.md +0 -1
  220. package/corpus/templates/crm/DEVELOPING.md +0 -66
  221. package/corpus/templates/crm/README.md +0 -106
  222. package/corpus/templates/crm/_gitignore +0 -12
  223. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  224. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  225. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  226. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  227. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  228. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  229. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  230. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  231. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  232. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  233. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  234. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  235. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  236. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  237. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  238. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  239. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  240. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  241. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  242. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  243. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  244. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  245. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  246. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  247. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  248. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  249. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  250. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  251. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  252. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  253. package/corpus/templates/crm/actions/navigate.ts +0 -63
  254. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  255. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  256. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  257. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  258. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  259. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  260. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  261. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  262. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  263. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  264. package/corpus/templates/crm/actions/run.ts +0 -7
  265. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  266. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  267. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  268. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  269. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  270. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  271. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  272. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -78
  273. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -226
  274. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -414
  275. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  276. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  277. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -362
  278. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -93
  279. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -97
  280. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  281. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  282. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  283. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +0 -1
  284. package/corpus/templates/crm/app/components/ui/badge.tsx +0 -1
  285. package/corpus/templates/crm/app/components/ui/button.tsx +0 -1
  286. package/corpus/templates/crm/app/components/ui/card.tsx +0 -1
  287. package/corpus/templates/crm/app/components/ui/dialog.tsx +0 -1
  288. package/corpus/templates/crm/app/components/ui/input.tsx +0 -1
  289. package/corpus/templates/crm/app/components/ui/label.tsx +0 -1
  290. package/corpus/templates/crm/app/components/ui/select.tsx +0 -1
  291. package/corpus/templates/crm/app/components/ui/sheet.tsx +0 -1
  292. package/corpus/templates/crm/app/components/ui/skeleton.tsx +0 -1
  293. package/corpus/templates/crm/app/components/ui/switch.tsx +0 -1
  294. package/corpus/templates/crm/app/components/ui/table.tsx +0 -1
  295. package/corpus/templates/crm/app/components/ui/tabs.tsx +0 -1
  296. package/corpus/templates/crm/app/components/ui/textarea.tsx +0 -1
  297. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +0 -17
  298. package/corpus/templates/crm/app/design-system.ts +0 -3
  299. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  300. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  301. package/corpus/templates/crm/app/global.css +0 -167
  302. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  303. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  304. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  305. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  306. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  307. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  308. package/corpus/templates/crm/app/lib/types.ts +0 -172
  309. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  310. package/corpus/templates/crm/app/root.tsx +0 -91
  311. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  312. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  313. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  314. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  315. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  316. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  317. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  318. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  319. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  320. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  321. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  322. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  323. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  324. package/corpus/templates/crm/app/routes.ts +0 -17
  325. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  326. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  327. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  328. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  329. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  330. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  331. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  332. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  333. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  334. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  335. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  336. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  337. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  338. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  339. package/corpus/templates/crm/components.json +0 -20
  340. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  341. package/corpus/templates/crm/learnings.defaults.md +0 -5
  342. package/corpus/templates/crm/package.json +0 -59
  343. package/corpus/templates/crm/public/favicon.svg +0 -1
  344. package/corpus/templates/crm/public/icon-180.svg +0 -1
  345. package/corpus/templates/crm/public/manifest.json +0 -11
  346. package/corpus/templates/crm/react-router.config.ts +0 -7
  347. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  348. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  349. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  350. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  351. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  352. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  353. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  354. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  355. package/corpus/templates/crm/server/db/index.ts +0 -169
  356. package/corpus/templates/crm/server/db/schema.ts +0 -441
  357. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  358. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  359. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  360. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  361. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  362. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  363. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  364. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  365. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  366. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  367. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  368. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  369. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  370. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  371. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  372. package/corpus/templates/crm/ssr-entry.ts +0 -11
  373. package/corpus/templates/crm/tsconfig.json +0 -24
  374. package/corpus/templates/crm/vite.config.ts +0 -15
  375. package/corpus/templates/crm/vitest.config.ts +0 -5
@@ -9,6 +9,7 @@ import {
9
9
  IconBrandGithub,
10
10
  IconBrandSlack,
11
11
  IconChecks,
12
+ IconChevronDown,
12
13
  IconCircleCheck,
13
14
  IconCircleDashed,
14
15
  IconClock,
@@ -40,7 +41,6 @@ import {
40
41
  } from "@/components/brain/Surface";
41
42
  import { Badge } from "@/components/ui/badge";
42
43
  import { Button } from "@/components/ui/button";
43
- import { Card, CardContent } from "@/components/ui/card";
44
44
  import {
45
45
  Dialog,
46
46
  DialogContent,
@@ -75,6 +75,11 @@ import {
75
75
  } from "@/components/ui/sheet";
76
76
  import { Switch } from "@/components/ui/switch";
77
77
  import { Textarea } from "@/components/ui/textarea";
78
+ import {
79
+ Tooltip,
80
+ TooltipContent,
81
+ TooltipTrigger,
82
+ } from "@/components/ui/tooltip";
78
83
  import {
79
84
  type BrainConnectionProvider,
80
85
  type BrainHealthResponse,
@@ -104,6 +109,7 @@ import {
104
109
  createOneTimeIngestHandoff,
105
110
  type OneTimeIngestHandoff,
106
111
  } from "@/lib/ingest-handoff";
112
+ import { cn } from "@/lib/utils";
107
113
 
108
114
  type Provider = "manual" | "generic" | "clips" | "slack" | "granola" | "github";
109
115
  type CaptureStatusFilter = BrainCaptureReviewStatus | "all";
@@ -1536,6 +1542,7 @@ function SourceListItem({
1536
1542
  onTune: () => void;
1537
1543
  }) {
1538
1544
  const t = useT();
1545
+ const [expanded, setExpanded] = useState(false);
1539
1546
  const Icon = sourceProviderIcon(source.provider);
1540
1547
  const retry = sourceRetryAfter(source);
1541
1548
  const hasSyncNotice = Boolean(
@@ -1546,113 +1553,171 @@ function SourceListItem({
1546
1553
  : null;
1547
1554
  const coverage =
1548
1555
  typeof source.coverage === "number" ? formatPercent(source.coverage) : null;
1556
+ const captureCount = (source.recordCount ?? 0).toLocaleString();
1557
+ const lastSync = shortDate(sourceLastSync(source)) ?? t("sources.never");
1549
1558
 
1550
1559
  return (
1551
- <Card className="overflow-hidden shadow-none">
1552
- <CardContent className="p-4">
1553
- <div className="brain-source-card-grid grid gap-4">
1554
- <div className="flex min-w-0 items-start gap-3">
1555
- <span className="mt-0.5 flex size-9 shrink-0 items-center justify-center rounded-md border border-border bg-muted/35">
1556
- <Icon className="size-4 text-muted-foreground" />
1560
+ <div className="group bg-card transition-colors hover:bg-muted/20">
1561
+ <div className="flex min-w-0 items-center gap-3 px-4 py-3 sm:px-5">
1562
+ <span className="flex size-8 shrink-0 items-center justify-center rounded-md border border-border bg-muted/35">
1563
+ <Icon className="size-4 text-muted-foreground" />
1564
+ </span>
1565
+
1566
+ <div className="min-w-0 flex-1">
1567
+ <div className="flex min-w-0 flex-wrap items-center gap-2">
1568
+ <h2 className="truncate text-sm font-medium text-foreground sm:text-[0.9375rem]">
1569
+ {sourceName(source)}
1570
+ </h2>
1571
+ <StatusBadge status={sourceHealth(source)} />
1572
+ </div>
1573
+ <div className="mt-1 flex min-w-0 flex-wrap items-center gap-x-2 gap-y-0.5 text-xs text-muted-foreground">
1574
+ <span className="capitalize">{sourceType(source)}</span>
1575
+ <span aria-hidden="true">·</span>
1576
+ <span>
1577
+ {captureCount} {t("sources.captures").toLocaleLowerCase()}
1557
1578
  </span>
1558
- <div className="min-w-0">
1559
- <div className="flex min-w-0 flex-wrap items-center gap-2">
1560
- <h2 className="truncate text-base font-medium text-foreground">
1561
- {sourceName(source)}
1562
- </h2>
1563
- <StatusBadge status={sourceHealth(source)} />
1564
- </div>
1565
- <div className="mt-1 flex flex-wrap items-center gap-2">
1566
- <Badge variant="outline" className="max-w-full capitalize">
1567
- {sourceType(source)}
1568
- </Badge>
1569
- {nextSync ? (
1570
- <span className="text-xs text-muted-foreground">
1571
- {t("sources.nextSync", { date: nextSync })}
1579
+ <span aria-hidden="true">·</span>
1580
+ <span className="truncate">
1581
+ {t("sources.lastSyncWithDate", { date: lastSync })}
1582
+ </span>
1583
+ {hasSyncNotice ? (
1584
+ <Tooltip>
1585
+ <TooltipTrigger asChild>
1586
+ <span
1587
+ className="ms-1 inline-flex size-4 items-center justify-center text-destructive"
1588
+ aria-label={t("sources.actionFailedTitle")}
1589
+ >
1590
+ <IconAlertTriangle className="size-3.5" />
1572
1591
  </span>
1573
- ) : null}
1574
- </div>
1575
- <p className="mt-2 line-clamp-2 text-sm leading-6 text-muted-foreground">
1576
- {sourceDescription(source)}
1577
- </p>
1578
- </div>
1579
- </div>
1580
-
1581
- <div
1582
- className={
1583
- coverage
1584
- ? "grid grid-cols-2 gap-4 sm:grid-cols-3 xl:min-w-80"
1585
- : "grid grid-cols-2 gap-4 xl:min-w-64"
1586
- }
1587
- >
1588
- <SourceFact
1589
- label={t("sources.captures")}
1590
- value={(source.recordCount ?? 0).toLocaleString()}
1591
- />
1592
- <SourceFact
1593
- label={t("sources.lastSync")}
1594
- value={shortDate(sourceLastSync(source)) ?? t("sources.never")}
1595
- />
1596
- {coverage ? (
1597
- <SourceFact label={t("sources.coverage")} value={coverage} />
1592
+ </TooltipTrigger>
1593
+ <TooltipContent>
1594
+ {t("sources.actionFailedTitle")}
1595
+ </TooltipContent>
1596
+ </Tooltip>
1598
1597
  ) : null}
1599
1598
  </div>
1599
+ </div>
1600
1600
 
1601
- <div className="flex items-center justify-end gap-2">
1602
- <Button size="sm" variant="outline" onClick={onReview}>
1603
- <IconFileSearch className="size-4" />
1604
- {t("sources.captures")}
1605
- </Button>
1606
- <DropdownMenu>
1607
- <DropdownMenuTrigger asChild>
1608
- <Button
1609
- size="icon"
1610
- variant="ghost"
1611
- className="size-9"
1612
- aria-label={t("sources.moreActionsFor", {
1613
- source: sourceName(source),
1614
- })}
1615
- >
1616
- <IconDotsVertical className="size-4" />
1617
- </Button>
1618
- </DropdownMenuTrigger>
1619
- <DropdownMenuContent align="end" className="w-40">
1620
- <DropdownMenuItem disabled={syncPending} onSelect={onSync}>
1601
+ <div className="flex shrink-0 items-center gap-0.5">
1602
+ <Tooltip>
1603
+ <TooltipTrigger asChild>
1604
+ <Button
1605
+ size="icon"
1606
+ variant="ghost"
1607
+ className="size-8"
1608
+ onClick={onReview}
1609
+ aria-label={`${t("sources.captures")}: ${sourceName(source)}`}
1610
+ >
1611
+ <IconFileSearch className="size-4" />
1612
+ </Button>
1613
+ </TooltipTrigger>
1614
+ <TooltipContent>{t("sources.captures")}</TooltipContent>
1615
+ </Tooltip>
1616
+
1617
+ <DropdownMenu>
1618
+ <DropdownMenuTrigger asChild>
1619
+ <Button
1620
+ size="icon"
1621
+ variant="ghost"
1622
+ className="size-8"
1623
+ aria-label={t("sources.moreActionsFor", {
1624
+ source: sourceName(source),
1625
+ })}
1626
+ >
1627
+ <IconDotsVertical className="size-4" />
1628
+ </Button>
1629
+ </DropdownMenuTrigger>
1630
+ <DropdownMenuContent align="end" className="w-40">
1631
+ <DropdownMenuItem disabled={syncPending} onSelect={onSync}>
1632
+ <IconRefresh className="size-4" />
1633
+ {t("sources.syncNow")}
1634
+ </DropdownMenuItem>
1635
+ <DropdownMenuItem onSelect={onTune}>
1636
+ <IconSettings2 className="size-4" />
1637
+ {t("sources.tuneSource")}
1638
+ </DropdownMenuItem>
1639
+ {onRotateIngestToken ? (
1640
+ <DropdownMenuItem onSelect={onRotateIngestToken}>
1621
1641
  <IconRefresh className="size-4" />
1622
- {t("sources.syncNow")}
1642
+ {t("sources.rotateIngestToken")}
1623
1643
  </DropdownMenuItem>
1624
- <DropdownMenuItem onSelect={onTune}>
1625
- <IconSettings2 className="size-4" />
1626
- {t("sources.tuneSource")}
1627
- </DropdownMenuItem>
1628
- {onRotateIngestToken ? (
1629
- <DropdownMenuItem onSelect={onRotateIngestToken}>
1630
- <IconRefresh className="size-4" />
1631
- {t("sources.rotateIngestToken")}
1632
- </DropdownMenuItem>
1633
- ) : null}
1634
- </DropdownMenuContent>
1635
- </DropdownMenu>
1636
- </div>
1644
+ ) : null}
1645
+ </DropdownMenuContent>
1646
+ </DropdownMenu>
1647
+
1648
+ <Tooltip>
1649
+ <TooltipTrigger asChild>
1650
+ <Button
1651
+ size="icon"
1652
+ variant="ghost"
1653
+ className="size-8"
1654
+ onClick={() => setExpanded((value) => !value)}
1655
+ aria-expanded={expanded}
1656
+ aria-label={
1657
+ expanded ? t("sources.hideDetails") : t("sources.details")
1658
+ }
1659
+ >
1660
+ <IconChevronDown
1661
+ className={cn(
1662
+ "size-4 transition-transform duration-200 ease-out",
1663
+ expanded && "rotate-180",
1664
+ )}
1665
+ />
1666
+ </Button>
1667
+ </TooltipTrigger>
1668
+ <TooltipContent>
1669
+ {expanded ? t("sources.hideDetails") : t("sources.details")}
1670
+ </TooltipContent>
1671
+ </Tooltip>
1637
1672
  </div>
1673
+ </div>
1638
1674
 
1639
- {coverage ? (
1640
- <Progress
1641
- value={(source.coverage ?? 0) * 100}
1642
- className="mt-4 h-1.5 bg-muted"
1643
- />
1644
- ) : null}
1675
+ {expanded ? (
1676
+ <div className="border-t border-border/70 px-4 pb-4 pt-3 sm:px-5">
1677
+ <div className="grid gap-4 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-start">
1678
+ <div className="min-w-0">
1679
+ <p className="max-w-3xl text-sm leading-6 text-muted-foreground">
1680
+ {sourceDescription(source)}
1681
+ </p>
1682
+ {hasSyncNotice ? (
1683
+ <div className="mt-3 flex gap-2 rounded-md border border-destructive/20 bg-destructive/5 px-3 py-2 text-sm">
1684
+ <IconAlertTriangle className="mt-0.5 size-4 shrink-0 text-destructive" />
1685
+ <p className="min-w-0 text-muted-foreground">
1686
+ {syncDetail(source, t)}
1687
+ </p>
1688
+ </div>
1689
+ ) : null}
1690
+ </div>
1645
1691
 
1646
- {hasSyncNotice ? (
1647
- <div className="mt-3 flex gap-2 rounded-md border border-border bg-muted/25 px-3 py-2 text-sm">
1648
- <IconAlertTriangle className="mt-0.5 size-4 shrink-0 text-muted-foreground" />
1649
- <p className="min-w-0 truncate text-muted-foreground">
1650
- {syncDetail(source, t)}
1651
- </p>
1692
+ <div
1693
+ className={cn(
1694
+ "grid grid-cols-2 gap-x-6 gap-y-3 lg:min-w-64",
1695
+ coverage && "lg:grid-cols-3 lg:min-w-80",
1696
+ )}
1697
+ >
1698
+ <SourceFact label={t("sources.captures")} value={captureCount} />
1699
+ <SourceFact label={t("sources.lastSync")} value={lastSync} />
1700
+ {coverage ? (
1701
+ <SourceFact label={t("sources.coverage")} value={coverage} />
1702
+ ) : null}
1703
+ </div>
1652
1704
  </div>
1653
- ) : null}
1654
- </CardContent>
1655
- </Card>
1705
+
1706
+ {coverage ? (
1707
+ <Progress
1708
+ value={(source.coverage ?? 0) * 100}
1709
+ className="mt-4 h-1.5 bg-muted"
1710
+ />
1711
+ ) : null}
1712
+
1713
+ {nextSync ? (
1714
+ <p className="mt-3 text-xs text-muted-foreground">
1715
+ {t("sources.nextSync", { date: nextSync })}
1716
+ </p>
1717
+ ) : null}
1718
+ </div>
1719
+ ) : null}
1720
+ </div>
1656
1721
  );
1657
1722
  }
1658
1723
 
@@ -1975,25 +2040,27 @@ export default function SourcesRoute() {
1975
2040
  <LoadingRows rows={3} />
1976
2041
  </div>
1977
2042
  ) : visibleSources.length ? (
1978
- visibleSources.map((source) => (
1979
- <SourceListItem
1980
- key={source.id}
1981
- source={source}
1982
- syncPending={
1983
- syncSource.isPending || rotateSourceIngestToken.isPending
1984
- }
1985
- onReview={() => openCaptureReview(source)}
1986
- onRotateIngestToken={
1987
- (source.provider === "clips" ||
1988
- source.provider === "generic") &&
1989
- ingestSourceKey(source)
1990
- ? () => void rotateIngestToken(source)
1991
- : undefined
1992
- }
1993
- onSync={() => syncSource.mutate({ sourceId: source.id })}
1994
- onTune={() => openEdit(source)}
1995
- />
1996
- ))
2043
+ <div className="overflow-hidden rounded-lg border border-border bg-card divide-y divide-border">
2044
+ {visibleSources.map((source) => (
2045
+ <SourceListItem
2046
+ key={source.id}
2047
+ source={source}
2048
+ syncPending={
2049
+ syncSource.isPending || rotateSourceIngestToken.isPending
2050
+ }
2051
+ onReview={() => openCaptureReview(source)}
2052
+ onRotateIngestToken={
2053
+ (source.provider === "clips" ||
2054
+ source.provider === "generic") &&
2055
+ ingestSourceKey(source)
2056
+ ? () => void rotateIngestToken(source)
2057
+ : undefined
2058
+ }
2059
+ onSync={() => syncSource.mutate({ sourceId: source.id })}
2060
+ onTune={() => openEdit(source)}
2061
+ />
2062
+ ))}
2063
+ </div>
1997
2064
  ) : (
1998
2065
  <div>
1999
2066
  <EmptyActionState
@@ -96,14 +96,16 @@ ladder.
96
96
  bounded `voiceContext` to the shared cleanup/transcription path when active
97
97
  app context, learned vocabulary, user notes, or AGENTS.md preferences are
98
98
  available.
99
- - Cloud transcription is fallback-only for Clips recordings and should use the
100
- configured Builder/Gemini or Groq paths, not OpenAI.
99
+ - Cloud transcription is fallback-only for Clips recordings. Preserve the
100
+ browser/macOS native transcript first, then use the configured Builder/Gemini
101
+ path against the original recording when native capture is unavailable.
101
102
  - AI setup must be visible and paid-account-backed: lead with Builder.io Connect
102
103
  for managed credits, object storage, uploads, and transcription. BYOK belongs
103
104
  in the agent sidebar's API Keys & Connections panel; template settings may
104
105
  signpost that panel but should not create a second credential vault.
105
106
  Anthropic/OpenAI power the agent chat; Gemini powers cleanup, titles, and
106
- meeting notes; Groq powers backup speech-to-text.
107
+ meeting notes; any optional third-party speech provider is limited to
108
+ desktop voice dictation and is not used for recording transcripts.
107
109
  - Hosted/shared recording uploads require configured storage. Do not preserve
108
110
  video bytes in SQL as a production fallback; only local SQLite/dev flows may
109
111
  keep scratch chunks while a user connects Builder.io or S3-compatible storage.
@@ -148,9 +150,9 @@ ladder.
148
150
  recordings. Do not pivot straight to frames or tell the user there is no
149
151
  transcript until the retry budget is exhausted.
150
152
  - If transcription failed because Builder transcription credits are exhausted,
151
- tell the user that clearly and point them to Builder.io credits/upgrade or a
152
- Groq key for backup speech-to-text. Generic OpenAI or Anthropic chat keys do
153
- not transcribe Clips recordings.
153
+ tell the user that clearly and point them to Builder.io credits/upgrade.
154
+ Native browser/macOS capture remains the first transcript source; Builder
155
+ transcribes the original recording only when native capture is unavailable.
154
156
  - Use `get-builder-credit-status` when the user asks whether Builder.io credit
155
157
  limits are pausing backup transcription, transcript cleanup, summaries, or AI
156
158
  title generation. Treat an exhausted status as an FYI/upgrade path, not an app