@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
@@ -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