@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
@@ -1,60 +0,0 @@
1
- import { appPath } from "@agent-native/core/client/api-path";
2
- import { useAgentRouteState } from "@agent-native/core/client/navigation";
3
-
4
- import { pathForView, viewFromPath, type CrmView } from "@/lib/navigation";
5
- import { TAB_ID } from "@/lib/tab-id";
6
-
7
- export interface CrmNavigationState {
8
- view: CrmView;
9
- path: string;
10
- recordId?: string;
11
- viewId?: string;
12
- query?: string;
13
- settingsSection?: "intelligence";
14
- dashboardId?: string;
15
- }
16
-
17
- export interface CrmNavigateCommand {
18
- view?: CrmView;
19
- recordId?: string;
20
- viewId?: string;
21
- query?: string;
22
- settingsSection?: "intelligence";
23
- dashboardId?: string;
24
- }
25
-
26
- export function useNavigationState() {
27
- useAgentRouteState<CrmNavigationState, CrmNavigateCommand>({
28
- browserTabId: TAB_ID,
29
- requestSource: TAB_ID,
30
- getNavigationState: ({ pathname, search }) => {
31
- const params = new URLSearchParams(search);
32
- const recordMatch = pathname.match(/^\/records\/([^/?#]+)/);
33
- const settingsMatch = pathname.match(/^\/settings\/([^/?#]+)/);
34
- return {
35
- view: viewFromPath(pathname),
36
- path: appPath(`${pathname}${search}`),
37
- recordId: recordMatch?.[1]
38
- ? decodeURIComponent(recordMatch[1])
39
- : undefined,
40
- viewId: params.get("view") ?? undefined,
41
- dashboardId: params.get("id") ?? undefined,
42
- query: params.get("q") ?? undefined,
43
- settingsSection:
44
- settingsMatch?.[1] === "intelligence" ? "intelligence" : undefined,
45
- };
46
- },
47
- getCommandPath: (command) => {
48
- const params = new URLSearchParams();
49
- if (command.viewId) params.set("view", command.viewId);
50
- if (command.dashboardId) params.set("id", command.dashboardId);
51
- if (command.query) params.set("q", command.query);
52
- const path = pathForView(
53
- command.view,
54
- command.recordId,
55
- command.settingsSection,
56
- );
57
- return `${path}${params.size ? `?${params}` : ""}`;
58
- },
59
- });
60
- }
@@ -1,89 +0,0 @@
1
- const messages = {
2
- intelligence: {
3
- title: "Intelligence",
4
- description:
5
- "Choose the moments CRM should notice in bounded call evidence. Smart trackers are evaluated through Ask CRM, never directly in the settings screen.",
6
- loading: "Loading trackers…",
7
- kindKeyword: "Keyword",
8
- kindSmart: "Smart",
9
- enable: "Enable",
10
- disable: "Disable",
11
- toggleTracker: "{{action}} {{name}}",
12
- emptyTitle: "No signal trackers yet",
13
- emptyDescription:
14
- "Add a keyword for deterministic matching or a smart criterion for Ask CRM to review.",
15
- trackerDeleted: "Tracker deleted.",
16
- trackerEnabled: "Tracker enabled.",
17
- trackerDisabled: "Tracker disabled.",
18
- trackerUpdateFailed: "Tracker update failed.",
19
- trackerCreated: "Tracker created.",
20
- trackerCreationFailed: "Tracker creation failed.",
21
- newTracker: "New tracker",
22
- createTitle: "Create signal tracker",
23
- createDescription:
24
- "Track deterministic keywords or define a bounded smart criterion for Ask CRM to evaluate against call evidence.",
25
- name: "Name",
26
- trackerDescription: "Description",
27
- detector: "Detector",
28
- keywords: "Keywords",
29
- keywordsPlaceholder: "pricing, renewal, security review",
30
- keywordsHelp: "Separate up to 40 keywords with commas.",
31
- classificationCriterion: "Classification criterion",
32
- criterionPlaceholder: "Match a clear concern about implementation timing.",
33
- creating: "Creating…",
34
- create: "Create tracker",
35
- deleteTrackerAria: "Delete {{name}}",
36
- deleteTrackerTitle: "Delete {{name}}?",
37
- deleteTrackerDescription:
38
- "This stops future signal runs from using this tracker. Existing reviewed signals stay unchanged.",
39
- cancel: "Cancel",
40
- deleteTracker: "Delete tracker",
41
- keywordsSummary: "Keywords: {{keywords}}",
42
- noKeywordsConfigured: "No keywords configured.",
43
- evaluatedThroughAsk: "Evaluated through Ask CRM.",
44
- },
45
- recordActions: {
46
- evidenceAttached: "Call evidence attached.",
47
- evidenceAttachFailed: "Evidence could not be attached.",
48
- addEvidence: "Add evidence",
49
- attachEvidenceTitle: "Attach Clips evidence",
50
- attachEvidenceDescription:
51
- "Use a durable Clips page link. CRM stores only the artifact reference, page URL, and a bounded excerpt—never media or a transcript.",
52
- artifactId: "Artifact ID",
53
- clipsUrl: "Clips URL",
54
- summary: "Summary",
55
- shortExcerpt: "Short excerpt",
56
- attachEvidence: "Attach evidence",
57
- automate: "Automate",
58
- reviewNewClipsCalls: "Review new Clips calls",
59
- reviewDescription:
60
- "Prepare a review recipe for this CRM record without copying Clips media or transcripts.",
61
- disabledAutomationDescription:
62
- "This starts disabled and stays tied to {{name}}. Once explicitly activated, each new clip may attach only its access-checked recording-page reference to this record.",
63
- handoffDescription:
64
- "The handoff keeps only an opaque clip ID, a durable {{path}} page URL, and capture time. It rejects event URLs, media, access tokens, transcripts, inferred records, and provider writes.",
65
- manageAutomations: "Manage automations",
66
- configureWithAgent: "Configure with agent",
67
- },
68
- dashboard: {
69
- metaTitle: "Pipeline · CRM",
70
- pipeline: "Pipeline",
71
- ready: "Pipeline dashboard is ready.",
72
- installFailed: "Pipeline dashboard could not be installed.",
73
- loadingDescription: "Loading your access-scoped pipeline dashboard…",
74
- emptyDescription:
75
- "A live, permission-aware view of opportunity value by stage.",
76
- installTitle: "Install the Pipeline dashboard",
77
- installDescription:
78
- "It creates a CRM-owned data program and a private dashboard for your current workspace.",
79
- installAction: "Install Pipeline dashboard",
80
- liveDescription:
81
- "Live opportunity totals use the current viewer’s CRM access and refresh from a cached data program.",
82
- updating: "Updating…",
83
- updatePack: "Update pack",
84
- },
85
- };
86
-
87
- export const crmDashboardMetaTitle = messages.dashboard.metaTitle;
88
-
89
- export default messages;
@@ -1,34 +0,0 @@
1
- import { type AgentNativeI18nCatalog } from "@agent-native/core/client/i18n";
2
-
3
- import enUS from "./en-US";
4
-
5
- export const i18nCatalog = {
6
- sourceLocale: "en-US",
7
- messages: enUS,
8
- loadMessages: async (locale) => {
9
- switch (locale) {
10
- case "ar-SA":
11
- return (await import("./ar-SA")).default;
12
- case "de-DE":
13
- return (await import("./de-DE")).default;
14
- case "es-ES":
15
- return (await import("./es-ES")).default;
16
- case "fr-FR":
17
- return (await import("./fr-FR")).default;
18
- case "hi-IN":
19
- return (await import("./hi-IN")).default;
20
- case "ja-JP":
21
- return (await import("./ja-JP")).default;
22
- case "ko-KR":
23
- return (await import("./ko-KR")).default;
24
- case "pt-BR":
25
- return (await import("./pt-BR")).default;
26
- case "zh-CN":
27
- return (await import("./zh-CN")).default;
28
- case "zh-TW":
29
- return (await import("./zh-TW")).default;
30
- default:
31
- return null;
32
- }
33
- },
34
- } satisfies AgentNativeI18nCatalog;
@@ -1,13 +0,0 @@
1
- import type { CrmDashboardPanelConfig } from "./types";
2
-
3
- export function dashboardDataPanelId(
4
- panels: CrmDashboardPanelConfig[],
5
- panel: CrmDashboardPanelConfig,
6
- ): string {
7
- return (
8
- panels.find(
9
- (candidate) =>
10
- candidate.source === panel.source && candidate.query === panel.query,
11
- )?.id ?? panel.id
12
- );
13
- }
@@ -1,54 +0,0 @@
1
- import type { CrmKind } from "@/lib/types";
2
-
3
- export type CrmView =
4
- | "work"
5
- | CrmKind
6
- | "record"
7
- | "tasks"
8
- | "proposals"
9
- | "views"
10
- | "dashboard"
11
- | "ask"
12
- | "setup"
13
- | "settings";
14
-
15
- export const CRM_VIEW_PATHS: Record<Exclude<CrmView, "record">, string> = {
16
- work: "/",
17
- account: "/accounts",
18
- person: "/people",
19
- opportunity: "/opportunities",
20
- tasks: "/tasks",
21
- proposals: "/proposals",
22
- views: "/views",
23
- dashboard: "/dashboard",
24
- ask: "/ask",
25
- setup: "/setup",
26
- settings: "/settings",
27
- };
28
-
29
- export function viewFromPath(pathname: string): CrmView {
30
- if (pathname.startsWith("/records/")) return "record";
31
- if (pathname.startsWith("/accounts")) return "account";
32
- if (pathname.startsWith("/people")) return "person";
33
- if (pathname.startsWith("/opportunities")) return "opportunity";
34
- if (pathname.startsWith("/tasks")) return "tasks";
35
- if (pathname.startsWith("/proposals")) return "proposals";
36
- if (pathname.startsWith("/views")) return "views";
37
- if (pathname.startsWith("/dashboard")) return "dashboard";
38
- if (pathname.startsWith("/ask")) return "ask";
39
- if (pathname.startsWith("/setup")) return "setup";
40
- if (pathname.startsWith("/settings")) return "settings";
41
- return "work";
42
- }
43
-
44
- export function pathForView(
45
- view?: string,
46
- recordId?: string,
47
- settingsSection?: "intelligence",
48
- ): string {
49
- if (view === "record" && recordId)
50
- return `/records/${encodeURIComponent(recordId)}`;
51
- if (view === "settings" && settingsSection === "intelligence")
52
- return "/settings/intelligence";
53
- return CRM_VIEW_PATHS[view as Exclude<CrmView, "record">] ?? "/";
54
- }
@@ -1 +0,0 @@
1
- export const TAB_ID = `crm-${Math.random().toString(36).slice(2, 8)}`;
@@ -1,172 +0,0 @@
1
- export type CrmKind = "account" | "person" | "opportunity";
2
-
3
- export interface CrmRecordSummary {
4
- id: string;
5
- displayName: string;
6
- kind: CrmKind;
7
- subtitle?: string;
8
- owner?: string;
9
- stage?: string;
10
- cadence?: string;
11
- nextStep?: string;
12
- updatedAt?: string;
13
- fields?: Record<string, unknown>;
14
- }
15
-
16
- export interface CrmRecordDetail extends CrmRecordSummary {
17
- provider?: "hubspot" | "salesforce" | string;
18
- description?: string;
19
- remoteRevision?: string;
20
- activity?: Array<{
21
- id: string;
22
- title: string;
23
- summary?: string;
24
- occurredAt?: string;
25
- actor?: string;
26
- }>;
27
- evidence?: Array<{
28
- id: string;
29
- label: string;
30
- quote?: string;
31
- url?: string;
32
- observedAt?: string;
33
- }>;
34
- tasks?: Array<CrmTask>;
35
- relatedRecords?: Array<{
36
- id: string;
37
- displayName: string;
38
- kind: CrmKind;
39
- relationshipType: string;
40
- relationshipLabel?: string;
41
- subtitle?: string;
42
- }>;
43
- }
44
-
45
- export interface CrmTask {
46
- id: string;
47
- title: string;
48
- status: "open" | "done" | "blocked" | string;
49
- dueAt?: string;
50
- recordId?: string;
51
- }
52
-
53
- export interface CrmSavedView {
54
- id: string;
55
- name: string;
56
- description?: string;
57
- kind?: CrmKind;
58
- query?: string;
59
- dataProgramId?: string;
60
- }
61
-
62
- export interface CrmOverview {
63
- focus?: Array<{ label: string; value: string; detail?: string }>;
64
- tasks?: CrmTask[];
65
- records?: CrmRecordSummary[];
66
- }
67
-
68
- export interface CrmDashboardPanelConfig {
69
- id: string;
70
- title: string;
71
- source: "program";
72
- query: string;
73
- chartType: "metric" | "bar" | "table";
74
- }
75
-
76
- export interface CrmDashboard {
77
- id: string;
78
- kind: "pipeline";
79
- title: string;
80
- config: { version: 1; panels: CrmDashboardPanelConfig[] };
81
- updatedAt: string;
82
- }
83
-
84
- export function recordId(record: unknown): string | undefined {
85
- if (!record || typeof record !== "object") return undefined;
86
- const value = record as Record<string, unknown>;
87
- const ref = value.ref as Record<string, unknown> | undefined;
88
- return (
89
- asText(value.id) ??
90
- asText(value.recordId) ??
91
- asText(ref?.localId) ??
92
- asText(ref?.remoteId)
93
- );
94
- }
95
-
96
- export function asText(value: unknown): string | undefined {
97
- return typeof value === "string" && value.length ? value : undefined;
98
- }
99
-
100
- export function normalizeRecord(
101
- record: unknown,
102
- fallbackKind: CrmKind,
103
- ): CrmRecordSummary | null {
104
- if (!record || typeof record !== "object") return null;
105
- const value = record as Record<string, unknown>;
106
- const id = recordId(value);
107
- if (!id) return null;
108
- const fields = isObject(value.fields) ? value.fields : undefined;
109
- const ref = isObject(value.ref) ? value.ref : undefined;
110
- const kind = asKind(value.kind) ?? asKind(ref?.kind) ?? fallbackKind;
111
- return {
112
- id,
113
- displayName: asText(value.displayName) ?? asText(value.name) ?? id,
114
- kind,
115
- subtitle:
116
- asText(value.subtitle) ?? asText(fields?.domain) ?? asText(fields?.email),
117
- owner: asText(value.owner) ?? asText(fields?.owner),
118
- stage: asText(value.stage) ?? asText(fields?.stage),
119
- cadence: asText(value.cadence) ?? asText(fields?.cadence),
120
- nextStep: asText(value.nextStep) ?? asText(fields?.nextStep),
121
- updatedAt: asText(value.updatedAt) ?? asText(value.remoteUpdatedAt),
122
- fields,
123
- };
124
- }
125
-
126
- export function normalizeRecords(
127
- data: unknown,
128
- kind: CrmKind,
129
- ): CrmRecordSummary[] {
130
- const values = Array.isArray(data)
131
- ? data
132
- : isObject(data) && Array.isArray(data.records)
133
- ? data.records
134
- : [];
135
- return values.flatMap((value) => {
136
- const record = normalizeRecord(value, kind);
137
- return record ? [record] : [];
138
- });
139
- }
140
-
141
- export function normalizeTasks(data: unknown): CrmTask[] {
142
- const values = Array.isArray(data)
143
- ? data
144
- : isObject(data) && Array.isArray(data.tasks)
145
- ? data.tasks
146
- : [];
147
- return values.flatMap((value) => {
148
- if (!isObject(value)) return [];
149
- const id = asText(value.id) ?? asText(value.taskId);
150
- const title = asText(value.title) ?? asText(value.name);
151
- if (!id || !title) return [];
152
- return [
153
- {
154
- id,
155
- title,
156
- status: asText(value.status) ?? "open",
157
- dueAt: asText(value.dueAt),
158
- recordId: asText(value.recordId),
159
- },
160
- ];
161
- });
162
- }
163
-
164
- function asKind(value: unknown): CrmKind | undefined {
165
- return value === "account" || value === "person" || value === "opportunity"
166
- ? value
167
- : undefined;
168
- }
169
-
170
- function isObject(value: unknown): value is Record<string, unknown> {
171
- return Boolean(value) && typeof value === "object" && !Array.isArray(value);
172
- }
@@ -1 +0,0 @@
1
- export { cn } from "@agent-native/toolkit/utils";
@@ -1,91 +0,0 @@
1
- import { configureTracking } from "@agent-native/core/client/analytics";
2
- import { appPath } from "@agent-native/core/client/api-path";
3
- import {
4
- AppProviders,
5
- createAgentNativeQueryClient,
6
- useDbSync,
7
- } from "@agent-native/core/client/hooks";
8
- import { getLocaleInitScript } from "@agent-native/core/client/i18n";
9
- import { getThemeInitScript } from "@agent-native/core/client/ui";
10
- import { useQueryClient } from "@tanstack/react-query";
11
- import { useState } from "react";
12
- import { Links, Meta, Outlet, Scripts, ScrollRestoration } from "react-router";
13
- import type { LinksFunction } from "react-router";
14
-
15
- import { CrmLayout } from "@/components/layout/CrmLayout";
16
- import { AppToolkitProvider } from "@/components/ui/toolkit-provider";
17
- import { useNavigationState } from "@/hooks/use-navigation-state";
18
- import { i18nCatalog } from "@/i18n";
19
- import { TAB_ID } from "@/lib/tab-id";
20
-
21
- import stylesheet from "./global.css?url";
22
-
23
- configureTracking({
24
- getDefaultProps: (_name, properties) => ({
25
- ...properties,
26
- app: "crm",
27
- template: "crm",
28
- }),
29
- });
30
-
31
- export const links: LinksFunction = () => [
32
- { rel: "stylesheet", href: stylesheet },
33
- ];
34
-
35
- export function Layout({ children }: { children: React.ReactNode }) {
36
- return (
37
- <html lang="en" suppressHydrationWarning>
38
- <head>
39
- <meta charSet="utf-8" />
40
- <meta
41
- name="viewport"
42
- content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
43
- />
44
- <script
45
- data-agent-native-theme-init
46
- suppressHydrationWarning
47
- dangerouslySetInnerHTML={{ __html: getThemeInitScript() }}
48
- />
49
- <script
50
- data-agent-native-locale-init
51
- suppressHydrationWarning
52
- dangerouslySetInnerHTML={{ __html: getLocaleInitScript() }}
53
- />
54
- <link rel="manifest" href={appPath("/manifest.json")} />
55
- <meta name="theme-color" content="#71717A" />
56
- <link rel="icon" type="image/svg+xml" href={appPath("/favicon.svg")} />
57
- <link rel="apple-touch-icon" href={appPath("/icon-180.svg")} />
58
- <Meta />
59
- <Links />
60
- </head>
61
- <body>
62
- {children}
63
- <ScrollRestoration />
64
- <Scripts />
65
- </body>
66
- </html>
67
- );
68
- }
69
-
70
- function SyncBridge() {
71
- const queryClient = useQueryClient();
72
- useNavigationState();
73
- useDbSync({ queryClient, ignoreSource: TAB_ID });
74
- return null;
75
- }
76
-
77
- export default function Root() {
78
- const [queryClient] = useState(() => createAgentNativeQueryClient());
79
- return (
80
- <AppToolkitProvider>
81
- <AppProviders queryClient={queryClient} i18n={{ catalog: i18nCatalog }}>
82
- <SyncBridge />
83
- <CrmLayout>
84
- <Outlet />
85
- </CrmLayout>
86
- </AppProviders>
87
- </AppToolkitProvider>
88
- );
89
- }
90
-
91
- export { ErrorBoundary } from "@agent-native/core/client/ui";
@@ -1,26 +0,0 @@
1
- import { useActionQuery } from "@agent-native/core/client/hooks";
2
-
3
- import { PageHeader } from "@/components/crm/Surface";
4
- import { WorkOverview } from "@/components/crm/WorkOverview";
5
- import type { CrmOverview } from "@/lib/types";
6
-
7
- export function meta() {
8
- return [{ title: "My work · CRM" }];
9
- }
10
-
11
- export default function WorkRoute() {
12
- const overview = useActionQuery<CrmOverview>(
13
- "get-crm-overview" as never,
14
- {} as never,
15
- );
16
- return (
17
- <>
18
- <PageHeader
19
- eyebrow="CRM"
20
- title="My work"
21
- description="A calm view of follow-up work and current relationship context."
22
- />
23
- <WorkOverview overview={overview.data} isLoading={overview.isLoading} />
24
- </>
25
- );
26
- }
@@ -1,41 +0,0 @@
1
- import { useActionQuery } from "@agent-native/core/client/hooks";
2
- import { useSearchParams } from "react-router";
3
-
4
- import { CreateCrmRecordDialog } from "@/components/crm/CreateCrmRecordDialog";
5
- import { RecordGrid } from "@/components/crm/RecordGrid";
6
- import { SavedViewDataProgram } from "@/components/crm/SavedViewDataProgram";
7
- import { PageHeader } from "@/components/crm/Surface";
8
- import { normalizeRecords } from "@/lib/types";
9
-
10
- export function meta() {
11
- return [{ title: "Accounts · CRM" }];
12
- }
13
- export default function AccountsRoute() {
14
- const [searchParams] = useSearchParams();
15
- const viewId = searchParams.get("view") ?? undefined;
16
- const query = useActionQuery<unknown>(
17
- "list-crm-records" as never,
18
- { kind: "account", viewId } as never,
19
- );
20
- return (
21
- <>
22
- <PageHeader
23
- eyebrow="Records"
24
- title="Accounts"
25
- description={
26
- viewId
27
- ? "Accounts matching this saved view."
28
- : "Accounts from your Native SQL workspace and connected CRM mirrors."
29
- }
30
- actions={<CreateCrmRecordDialog kind="account" />}
31
- />
32
- <SavedViewDataProgram data={query.data} />
33
- <RecordGrid
34
- kind="account"
35
- records={normalizeRecords(query.data, "account")}
36
- isLoading={query.isLoading}
37
- emptyTitle="No accounts yet"
38
- />
39
- </>
40
- );
41
- }
@@ -1,5 +0,0 @@
1
- import { AgentTabsPage } from "@agent-native/core/client/agent-chat";
2
-
3
- export default function AgentRoute() {
4
- return <AgentTabsPage appName="CRM" />;
5
- }
@@ -1,53 +0,0 @@
1
- import {
2
- AgentChatSurface,
3
- markAgentChatHomeHandoff,
4
- } from "@agent-native/core/client/agent-chat";
5
- import { useEffect } from "react";
6
-
7
- import { TAB_ID } from "@/lib/tab-id";
8
-
9
- export function meta() {
10
- return [{ title: "Ask CRM" }];
11
- }
12
-
13
- export default function AskCrmRoute() {
14
- useEffect(() => {
15
- const onChatRunning = (event: Event) => {
16
- if ((event as CustomEvent<{ isRunning?: boolean }>).detail?.isRunning)
17
- markAgentChatHomeHandoff("crm");
18
- };
19
- window.addEventListener("agentNative.chatRunning", onChatRunning);
20
- return () =>
21
- window.removeEventListener("agentNative.chatRunning", onChatRunning);
22
- }, []);
23
- return (
24
- <div className="flex h-full min-h-0 flex-col bg-background">
25
- <AgentChatSurface
26
- mode="page"
27
- chatViewTransition
28
- className="crm-chat-panel"
29
- storageKey="crm"
30
- browserTabId={TAB_ID}
31
- defaultMode="chat"
32
- showHeader={false}
33
- showTabBar={false}
34
- dynamicSuggestions={false}
35
- suggestions={[]}
36
- emptyStateText="Ask CRM"
37
- emptyStateDisplay="hidden"
38
- centerComposerWhenEmpty
39
- composerLayoutVariant="hero"
40
- composerPlaceholder="Ask about your CRM"
41
- composerSlot={
42
- <div className="crm-chat-intro">
43
- <h1>Ask CRM</h1>
44
- <p>
45
- Explore permitted account context, follow-up work, and evidence
46
- across Native SQL and connected records.
47
- </p>
48
- </div>
49
- }
50
- />
51
- </div>
52
- );
53
- }