@agent-native/core 0.118.0 → 0.118.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/corpus/README.md +2 -2
  2. package/corpus/core/CHANGELOG.md +21 -0
  3. package/corpus/core/package.json +1 -1
  4. package/corpus/core/src/a2a/client.ts +32 -10
  5. package/corpus/core/src/cli/index.ts +18 -10
  6. package/corpus/core/src/cli/multi-frontier-runs.ts +5 -3
  7. package/corpus/core/src/cli/templates-meta.ts +0 -12
  8. package/corpus/core/src/cli/workspace-dev.ts +1 -1
  9. package/corpus/core/src/client/AgentPanel.tsx +9 -1
  10. package/corpus/core/src/client/RunStuckBanner.tsx +39 -47
  11. package/corpus/core/src/client/chat/action-chat-ui-surface.tsx +32 -0
  12. package/corpus/core/src/client/chat/message-components.tsx +53 -8
  13. package/corpus/core/src/client/chat/tool-call-display.tsx +24 -9
  14. package/corpus/core/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  15. package/corpus/core/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  16. package/corpus/core/src/client/conversation/AgentConversation.tsx +12 -1
  17. package/corpus/core/src/client/error-capture.ts +2 -6
  18. package/corpus/core/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  19. package/corpus/core/src/client/resources/ResourcesPanel.tsx +5 -1
  20. package/corpus/core/src/client/resources/mcp-integration-catalog.ts +7 -17
  21. package/corpus/core/src/client/resources/mcp-integration-logos.ts +2 -2
  22. package/corpus/core/src/client/route-chunk-recovery.ts +5 -3
  23. package/corpus/core/src/client/session-replay.ts +3 -3
  24. package/corpus/core/src/client/settings/SettingsPanel.tsx +15 -6
  25. package/corpus/core/src/client/transcription/use-live-transcription.ts +64 -45
  26. package/corpus/core/src/deploy/build.ts +2 -1
  27. package/corpus/core/src/guards/db-tool-scoping.ts +1 -1
  28. package/corpus/core/src/integrations/adapters/slack.ts +84 -5
  29. package/corpus/core/src/integrations/index.ts +5 -1
  30. package/corpus/core/src/localization/default-messages.ts +1 -1
  31. package/corpus/core/src/mcp-client/oauth-routes.ts +45 -12
  32. package/corpus/core/src/server/realtime-voice.ts +4 -1
  33. package/corpus/core/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  34. package/corpus/core/src/terminal/cli-registry.ts +1 -1
  35. package/corpus/core/src/vite/client.ts +166 -1
  36. package/corpus/templates/analytics/app/hooks/use-dashboard-views.ts +13 -1
  37. package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +10 -0
  38. package/corpus/templates/analytics/changelog/2026-07-22-show-a-useful-error-when-saving-a-dashboard-view-fails.md +6 -0
  39. package/corpus/templates/brain/app/routes/sources.tsx +181 -114
  40. package/corpus/templates/clips/AGENTS.md +8 -6
  41. package/corpus/templates/clips/actions/request-transcript.ts +90 -420
  42. package/corpus/templates/clips/actions/save-browser-transcript.ts +11 -28
  43. package/corpus/templates/clips/app/components/capture-install-options.tsx +5 -3
  44. package/corpus/templates/clips/app/components/player/transcript-panel.tsx +3 -136
  45. package/corpus/templates/clips/app/lib/capture-install-options.ts +15 -4
  46. package/corpus/templates/clips/app/routes/download.tsx +3 -2
  47. package/corpus/templates/clips/changelog/2026-07-22-fixed-an-intermittent-hydration-error-on-the-download-page.md +6 -0
  48. package/corpus/templates/clips/changelog/2026-07-22-fixed-transcript-generation-when-native-speech-capture-retur.md +6 -0
  49. package/corpus/templates/clips/changelog/2026-07-22-transcript-generation-now-retries-with-backup-speech-recogni.md +6 -0
  50. package/corpus/templates/clips/server/lib/public-agent-context.ts +2 -2
  51. package/corpus/templates/clips/server/register-secrets.ts +7 -6
  52. package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +16 -84
  53. package/corpus/templates/content/app/components/editor/VisualEditor.tsx +13 -7
  54. package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +2 -2
  55. package/corpus/templates/content/app/i18n-data.ts +10 -0
  56. package/corpus/templates/design/server/lib/fig-file-decoder.ts +1 -0
  57. package/corpus/templates/plan/app/entry.client.tsx +3 -0
  58. package/corpus/templates/plan/changelog/2026-07-22-recover-stale-pages-after-a-deployment-refresh-automatically.md +6 -0
  59. package/corpus/templates/slides/app/hooks/use-agent-generating.ts +10 -3
  60. package/corpus/templates/slides/app/pages/Index.tsx +1 -0
  61. package/corpus/templates/slides/changelog/2026-07-22-new-deck-prompts-now-open-in-their-own-visible-chat-thread.md +6 -0
  62. package/corpus/toolkit/CHANGELOG.md +9 -0
  63. package/corpus/toolkit/package.json +1 -1
  64. package/corpus/toolkit/src/composer/PromptComposer.tsx +5 -1
  65. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +119 -31
  66. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +30 -0
  67. package/corpus/toolkit/src/conformance/runner.tsx +153 -1
  68. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +13 -2
  69. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +20 -0
  70. package/corpus/toolkit/src/editor/index.ts +2 -0
  71. package/corpus/toolkit/src/styles.css +52 -23
  72. package/dist/a2a/client.d.ts +3 -1
  73. package/dist/a2a/client.d.ts.map +1 -1
  74. package/dist/a2a/client.js +17 -12
  75. package/dist/a2a/client.js.map +1 -1
  76. package/dist/cli/index.js +18 -8
  77. package/dist/cli/index.js.map +1 -1
  78. package/dist/cli/multi-frontier-runs.js +3 -3
  79. package/dist/cli/multi-frontier-runs.js.map +1 -1
  80. package/dist/cli/templates-meta.d.ts.map +1 -1
  81. package/dist/cli/templates-meta.js +0 -12
  82. package/dist/cli/templates-meta.js.map +1 -1
  83. package/dist/cli/workspace-dev.js +1 -1
  84. package/dist/cli/workspace-dev.js.map +1 -1
  85. package/dist/client/AgentPanel.d.ts.map +1 -1
  86. package/dist/client/AgentPanel.js +4 -1
  87. package/dist/client/AgentPanel.js.map +1 -1
  88. package/dist/client/RunStuckBanner.d.ts +3 -5
  89. package/dist/client/RunStuckBanner.d.ts.map +1 -1
  90. package/dist/client/RunStuckBanner.js +17 -18
  91. package/dist/client/RunStuckBanner.js.map +1 -1
  92. package/dist/client/chat/action-chat-ui-surface.d.ts +8 -0
  93. package/dist/client/chat/action-chat-ui-surface.d.ts.map +1 -0
  94. package/dist/client/chat/action-chat-ui-surface.js +10 -0
  95. package/dist/client/chat/action-chat-ui-surface.js.map +1 -0
  96. package/dist/client/chat/message-components.d.ts +3 -0
  97. package/dist/client/chat/message-components.d.ts.map +1 -1
  98. package/dist/client/chat/message-components.js +40 -7
  99. package/dist/client/chat/message-components.js.map +1 -1
  100. package/dist/client/chat/tool-call-display.d.ts +3 -1
  101. package/dist/client/chat/tool-call-display.d.ts.map +1 -1
  102. package/dist/client/chat/tool-call-display.js +13 -9
  103. package/dist/client/chat/tool-call-display.js.map +1 -1
  104. package/dist/client/chat/widgets/InlineExtensionWidget.d.ts.map +1 -1
  105. package/dist/client/chat/widgets/InlineExtensionWidget.js +1 -1
  106. package/dist/client/chat/widgets/InlineExtensionWidget.js.map +1 -1
  107. package/dist/client/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
  108. package/dist/client/chat/widgets/builtin-tool-renderers.js +5 -3
  109. package/dist/client/chat/widgets/builtin-tool-renderers.js.map +1 -1
  110. package/dist/client/conversation/AgentConversation.d.ts.map +1 -1
  111. package/dist/client/conversation/AgentConversation.js +3 -2
  112. package/dist/client/conversation/AgentConversation.js.map +1 -1
  113. package/dist/client/error-capture.d.ts.map +1 -1
  114. package/dist/client/error-capture.js +2 -2
  115. package/dist/client/error-capture.js.map +1 -1
  116. package/dist/client/resources/McpConnectionSuggestion.d.ts +1 -0
  117. package/dist/client/resources/McpConnectionSuggestion.d.ts.map +1 -1
  118. package/dist/client/resources/McpConnectionSuggestion.js +9 -8
  119. package/dist/client/resources/McpConnectionSuggestion.js.map +1 -1
  120. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  121. package/dist/client/resources/ResourcesPanel.js +3 -1
  122. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  123. package/dist/client/resources/mcp-integration-catalog.d.ts +1 -0
  124. package/dist/client/resources/mcp-integration-catalog.d.ts.map +1 -1
  125. package/dist/client/resources/mcp-integration-catalog.js +4 -17
  126. package/dist/client/resources/mcp-integration-catalog.js.map +1 -1
  127. package/dist/client/resources/mcp-integration-logos.js +2 -2
  128. package/dist/client/resources/mcp-integration-logos.js.map +1 -1
  129. package/dist/client/route-chunk-recovery.d.ts.map +1 -1
  130. package/dist/client/route-chunk-recovery.js +5 -3
  131. package/dist/client/route-chunk-recovery.js.map +1 -1
  132. package/dist/client/session-replay.js +3 -3
  133. package/dist/client/session-replay.js.map +1 -1
  134. package/dist/client/settings/SettingsPanel.d.ts.map +1 -1
  135. package/dist/client/settings/SettingsPanel.js +2 -2
  136. package/dist/client/settings/SettingsPanel.js.map +1 -1
  137. package/dist/client/transcription/use-live-transcription.d.ts +3 -3
  138. package/dist/client/transcription/use-live-transcription.d.ts.map +1 -1
  139. package/dist/client/transcription/use-live-transcription.js +22 -11
  140. package/dist/client/transcription/use-live-transcription.js.map +1 -1
  141. package/dist/collab/routes.d.ts +1 -1
  142. package/dist/collab/struct-routes.d.ts +1 -1
  143. package/dist/deploy/build.d.ts.map +1 -1
  144. package/dist/deploy/build.js +1 -1
  145. package/dist/deploy/build.js.map +1 -1
  146. package/dist/guards/db-tool-scoping.js +1 -1
  147. package/dist/guards/db-tool-scoping.js.map +1 -1
  148. package/dist/integrations/adapters/slack.d.ts +1 -0
  149. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  150. package/dist/integrations/adapters/slack.js +61 -5
  151. package/dist/integrations/adapters/slack.js.map +1 -1
  152. package/dist/integrations/index.d.ts +1 -1
  153. package/dist/integrations/index.d.ts.map +1 -1
  154. package/dist/integrations/index.js +1 -1
  155. package/dist/integrations/index.js.map +1 -1
  156. package/dist/localization/default-messages.js +1 -1
  157. package/dist/localization/default-messages.js.map +1 -1
  158. package/dist/mcp-client/oauth-routes.d.ts +3 -0
  159. package/dist/mcp-client/oauth-routes.d.ts.map +1 -1
  160. package/dist/mcp-client/oauth-routes.js +41 -12
  161. package/dist/mcp-client/oauth-routes.js.map +1 -1
  162. package/dist/notifications/routes.d.ts +2 -2
  163. package/dist/observability/routes.d.ts +3 -3
  164. package/dist/provider-api/actions/custom-provider-registration.d.ts +8 -8
  165. package/dist/provider-api/actions/provider-api.d.ts +11 -11
  166. package/dist/secrets/routes.d.ts +6 -6
  167. package/dist/server/realtime-voice.d.ts.map +1 -1
  168. package/dist/server/realtime-voice.js +1 -1
  169. package/dist/server/realtime-voice.js.map +1 -1
  170. package/dist/server/transcribe-voice.d.ts +1 -1
  171. package/dist/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  172. package/dist/terminal/cli-registry.js +1 -1
  173. package/dist/terminal/cli-registry.js.map +1 -1
  174. package/dist/vite/client.d.ts +8 -1
  175. package/dist/vite/client.d.ts.map +1 -1
  176. package/dist/vite/client.js +113 -2
  177. package/dist/vite/client.js.map +1 -1
  178. package/package.json +2 -2
  179. package/src/a2a/client.ts +32 -10
  180. package/src/cli/index.ts +18 -10
  181. package/src/cli/multi-frontier-runs.ts +5 -3
  182. package/src/cli/templates-meta.ts +0 -12
  183. package/src/cli/workspace-dev.ts +1 -1
  184. package/src/client/AgentPanel.tsx +9 -1
  185. package/src/client/RunStuckBanner.tsx +39 -47
  186. package/src/client/chat/action-chat-ui-surface.tsx +32 -0
  187. package/src/client/chat/message-components.tsx +53 -8
  188. package/src/client/chat/tool-call-display.tsx +24 -9
  189. package/src/client/chat/widgets/InlineExtensionWidget.tsx +0 -1
  190. package/src/client/chat/widgets/builtin-tool-renderers.tsx +7 -3
  191. package/src/client/conversation/AgentConversation.tsx +12 -1
  192. package/src/client/error-capture.ts +2 -6
  193. package/src/client/resources/McpConnectionSuggestion.tsx +20 -14
  194. package/src/client/resources/ResourcesPanel.tsx +5 -1
  195. package/src/client/resources/mcp-integration-catalog.ts +7 -17
  196. package/src/client/resources/mcp-integration-logos.ts +2 -2
  197. package/src/client/route-chunk-recovery.ts +5 -3
  198. package/src/client/session-replay.ts +3 -3
  199. package/src/client/settings/SettingsPanel.tsx +15 -6
  200. package/src/client/transcription/use-live-transcription.ts +64 -45
  201. package/src/deploy/build.ts +2 -1
  202. package/src/guards/db-tool-scoping.ts +1 -1
  203. package/src/integrations/adapters/slack.ts +84 -5
  204. package/src/integrations/index.ts +5 -1
  205. package/src/localization/default-messages.ts +1 -1
  206. package/src/mcp-client/oauth-routes.ts +45 -12
  207. package/src/server/realtime-voice.ts +4 -1
  208. package/src/templates/workspace-core/.agents/skills/voice-transcription/SKILL.md +7 -5
  209. package/src/terminal/cli-registry.ts +1 -1
  210. package/src/vite/client.ts +166 -1
  211. package/corpus/templates/crm/.agents/skills/agent-native-docs/SKILL.md +0 -115
  212. package/corpus/templates/crm/.agents/skills/agent-native-toolkit/SKILL.md +0 -177
  213. package/corpus/templates/crm/.agents/skills/crm/SKILL.md +0 -128
  214. package/corpus/templates/crm/.agents/skills/customizing-agent-native/SKILL.md +0 -220
  215. package/corpus/templates/crm/.agents/skills/feature-flags/SKILL.md +0 -169
  216. package/corpus/templates/crm/.agents/skills/upgrade-agent-native/SKILL.md +0 -100
  217. package/corpus/templates/crm/.env.example +0 -5
  218. package/corpus/templates/crm/AGENTS.md +0 -120
  219. package/corpus/templates/crm/CHANGELOG.md +0 -1
  220. package/corpus/templates/crm/DEVELOPING.md +0 -66
  221. package/corpus/templates/crm/README.md +0 -106
  222. package/corpus/templates/crm/_gitignore +0 -12
  223. package/corpus/templates/crm/actions/_crm-action-utils.ts +0 -87
  224. package/corpus/templates/crm/actions/_crm-dashboard.ts +0 -69
  225. package/corpus/templates/crm/actions/_crm-data-program-actions.ts +0 -15
  226. package/corpus/templates/crm/actions/_crm-signal-utils.ts +0 -79
  227. package/corpus/templates/crm/actions/apply-crm-proposals.ts +0 -203
  228. package/corpus/templates/crm/actions/attach-call-evidence.ts +0 -170
  229. package/corpus/templates/crm/actions/configure-crm-connection.ts +0 -126
  230. package/corpus/templates/crm/actions/configure-native-crm.ts +0 -44
  231. package/corpus/templates/crm/actions/create-crm-record.ts +0 -148
  232. package/corpus/templates/crm/actions/create-crm-signal-tracker.ts +0 -58
  233. package/corpus/templates/crm/actions/delete-staged-dataset.ts +0 -14
  234. package/corpus/templates/crm/actions/get-crm-automation-recipe.ts +0 -36
  235. package/corpus/templates/crm/actions/get-crm-dashboard-panel.ts +0 -35
  236. package/corpus/templates/crm/actions/get-crm-dashboard.ts +0 -14
  237. package/corpus/templates/crm/actions/get-crm-overview.ts +0 -13
  238. package/corpus/templates/crm/actions/get-crm-pipeline-data.ts +0 -61
  239. package/corpus/templates/crm/actions/get-crm-record.ts +0 -75
  240. package/corpus/templates/crm/actions/install-crm-pipeline-dashboard.ts +0 -81
  241. package/corpus/templates/crm/actions/list-crm-dashboard-revisions.ts +0 -15
  242. package/corpus/templates/crm/actions/list-crm-dashboards.ts +0 -15
  243. package/corpus/templates/crm/actions/list-crm-proposals.ts +0 -31
  244. package/corpus/templates/crm/actions/list-crm-records.ts +0 -79
  245. package/corpus/templates/crm/actions/list-crm-saved-views.ts +0 -15
  246. package/corpus/templates/crm/actions/list-crm-signal-hits.ts +0 -43
  247. package/corpus/templates/crm/actions/list-crm-signal-trackers.ts +0 -32
  248. package/corpus/templates/crm/actions/list-crm-tasks.ts +0 -22
  249. package/corpus/templates/crm/actions/list-staged-datasets.ts +0 -14
  250. package/corpus/templates/crm/actions/list-workspace-connections.ts +0 -47
  251. package/corpus/templates/crm/actions/manage-crm-signal-tracker.ts +0 -87
  252. package/corpus/templates/crm/actions/manage-crm-task.ts +0 -132
  253. package/corpus/templates/crm/actions/navigate.ts +0 -63
  254. package/corpus/templates/crm/actions/provider-api-catalog.ts +0 -22
  255. package/corpus/templates/crm/actions/provider-api-docs.ts +0 -54
  256. package/corpus/templates/crm/actions/provider-api-request.ts +0 -92
  257. package/corpus/templates/crm/actions/query-staged-dataset.ts +0 -44
  258. package/corpus/templates/crm/actions/record-crm-call-insight.ts +0 -160
  259. package/corpus/templates/crm/actions/record-crm-smart-signal.ts +0 -150
  260. package/corpus/templates/crm/actions/restore-crm-dashboard-revision.ts +0 -23
  261. package/corpus/templates/crm/actions/review-crm-signal.ts +0 -31
  262. package/corpus/templates/crm/actions/run-crm-saved-view-program.ts +0 -103
  263. package/corpus/templates/crm/actions/run-crm-signal-trackers.ts +0 -275
  264. package/corpus/templates/crm/actions/run.ts +0 -7
  265. package/corpus/templates/crm/actions/save-crm-dashboard.ts +0 -51
  266. package/corpus/templates/crm/actions/save-crm-saved-view.ts +0 -119
  267. package/corpus/templates/crm/actions/sync-crm.ts +0 -146
  268. package/corpus/templates/crm/actions/update-crm-record.ts +0 -510
  269. package/corpus/templates/crm/actions/view-screen.ts +0 -218
  270. package/corpus/templates/crm/agent-native.app-skill.json +0 -58
  271. package/corpus/templates/crm/app/components/crm/CreateCrmRecordDialog.tsx +0 -158
  272. package/corpus/templates/crm/app/components/crm/CrmDashboardPanel.tsx +0 -78
  273. package/corpus/templates/crm/app/components/crm/CrmSignalsPanel.tsx +0 -226
  274. package/corpus/templates/crm/app/components/crm/IntelligenceSettings.tsx +0 -414
  275. package/corpus/templates/crm/app/components/crm/RecordActions.tsx +0 -510
  276. package/corpus/templates/crm/app/components/crm/RecordGrid.tsx +0 -134
  277. package/corpus/templates/crm/app/components/crm/RecordWorkspace.tsx +0 -362
  278. package/corpus/templates/crm/app/components/crm/SavedViewDataProgram.tsx +0 -93
  279. package/corpus/templates/crm/app/components/crm/Surface.tsx +0 -97
  280. package/corpus/templates/crm/app/components/crm/WorkOverview.tsx +0 -180
  281. package/corpus/templates/crm/app/components/layout/CrmLayout.tsx +0 -112
  282. package/corpus/templates/crm/app/components/layout/CrmSidebar.tsx +0 -84
  283. package/corpus/templates/crm/app/components/ui/alert-dialog.tsx +0 -1
  284. package/corpus/templates/crm/app/components/ui/badge.tsx +0 -1
  285. package/corpus/templates/crm/app/components/ui/button.tsx +0 -1
  286. package/corpus/templates/crm/app/components/ui/card.tsx +0 -1
  287. package/corpus/templates/crm/app/components/ui/dialog.tsx +0 -1
  288. package/corpus/templates/crm/app/components/ui/input.tsx +0 -1
  289. package/corpus/templates/crm/app/components/ui/label.tsx +0 -1
  290. package/corpus/templates/crm/app/components/ui/select.tsx +0 -1
  291. package/corpus/templates/crm/app/components/ui/sheet.tsx +0 -1
  292. package/corpus/templates/crm/app/components/ui/skeleton.tsx +0 -1
  293. package/corpus/templates/crm/app/components/ui/switch.tsx +0 -1
  294. package/corpus/templates/crm/app/components/ui/table.tsx +0 -1
  295. package/corpus/templates/crm/app/components/ui/tabs.tsx +0 -1
  296. package/corpus/templates/crm/app/components/ui/textarea.tsx +0 -1
  297. package/corpus/templates/crm/app/components/ui/toolkit-provider.tsx +0 -17
  298. package/corpus/templates/crm/app/design-system.ts +0 -3
  299. package/corpus/templates/crm/app/entry.client.tsx +0 -16
  300. package/corpus/templates/crm/app/entry.server.tsx +0 -10
  301. package/corpus/templates/crm/app/global.css +0 -167
  302. package/corpus/templates/crm/app/hooks/use-navigation-state.ts +0 -60
  303. package/corpus/templates/crm/app/i18n/en-US.ts +0 -89
  304. package/corpus/templates/crm/app/i18n/index.ts +0 -34
  305. package/corpus/templates/crm/app/lib/dashboard.ts +0 -13
  306. package/corpus/templates/crm/app/lib/navigation.ts +0 -54
  307. package/corpus/templates/crm/app/lib/tab-id.ts +0 -1
  308. package/corpus/templates/crm/app/lib/types.ts +0 -172
  309. package/corpus/templates/crm/app/lib/utils.ts +0 -1
  310. package/corpus/templates/crm/app/root.tsx +0 -91
  311. package/corpus/templates/crm/app/routes/_index.tsx +0 -26
  312. package/corpus/templates/crm/app/routes/accounts.tsx +0 -41
  313. package/corpus/templates/crm/app/routes/agent.tsx +0 -5
  314. package/corpus/templates/crm/app/routes/ask.tsx +0 -53
  315. package/corpus/templates/crm/app/routes/dashboard.tsx +0 -118
  316. package/corpus/templates/crm/app/routes/opportunities.tsx +0 -41
  317. package/corpus/templates/crm/app/routes/people.tsx +0 -41
  318. package/corpus/templates/crm/app/routes/proposals.tsx +0 -266
  319. package/corpus/templates/crm/app/routes/records.$recordId.tsx +0 -35
  320. package/corpus/templates/crm/app/routes/settings.tsx +0 -63
  321. package/corpus/templates/crm/app/routes/setup.tsx +0 -308
  322. package/corpus/templates/crm/app/routes/tasks.tsx +0 -252
  323. package/corpus/templates/crm/app/routes/views.tsx +0 -333
  324. package/corpus/templates/crm/app/routes.ts +0 -17
  325. package/corpus/templates/crm/app/vite-env.d.ts +0 -6
  326. package/corpus/templates/crm/changelog/2026-07-21-agent-native-crm.md +0 -6
  327. package/corpus/templates/crm/changelog/2026-07-21-clips-call-evidence-review-recipe.md +0 -6
  328. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-find-and-review-evidence-grounded-call-signals-w.md +0 -6
  329. package/corpus/templates/crm/changelog/2026-07-21-crm-can-now-manage-keyword-and-smart-call-signal-trackers-fr.md +0 -6
  330. package/corpus/templates/crm/changelog/2026-07-21-delegated-local-crm-automation.md +0 -6
  331. package/corpus/templates/crm/changelog/2026-07-21-native-sql.md +0 -6
  332. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboard.md +0 -6
  333. package/corpus/templates/crm/changelog/2026-07-21-pipeline-dashboards-now-install-correctly-from-the-crm-actio.md +0 -6
  334. package/corpus/templates/crm/changelog/2026-07-21-salesforce-connection.md +0 -6
  335. package/corpus/templates/crm/changelog/2026-07-22-crm-field-validation-now-explains-which-fields-cannot-be-edi.md +0 -6
  336. package/corpus/templates/crm/changelog/2026-07-22-fixed-hubspot-contact-syncs-missing-records-updated-after-th.md +0 -6
  337. package/corpus/templates/crm/changelog/2026-07-22-fixed-pipeline-dashboard-panels-so-their-opportunity-data-lo.md +0 -6
  338. package/corpus/templates/crm/changelog/2026-07-22-full-page-chat-keeps-the-active-conversation-when-moving-to-.md +0 -6
  339. package/corpus/templates/crm/components.json +0 -20
  340. package/corpus/templates/crm/docs/architecture/crm-contract.md +0 -180
  341. package/corpus/templates/crm/learnings.defaults.md +0 -5
  342. package/corpus/templates/crm/package.json +0 -59
  343. package/corpus/templates/crm/public/favicon.svg +0 -1
  344. package/corpus/templates/crm/public/icon-180.svg +0 -1
  345. package/corpus/templates/crm/public/manifest.json +0 -11
  346. package/corpus/templates/crm/react-router.config.ts +0 -7
  347. package/corpus/templates/crm/server/crm/adapter.ts +0 -32
  348. package/corpus/templates/crm/server/crm/crm-field-firewall.ts +0 -64
  349. package/corpus/templates/crm/server/crm/crm-mirror.ts +0 -711
  350. package/corpus/templates/crm/server/crm/hubspot-adapter.ts +0 -1146
  351. package/corpus/templates/crm/server/crm/native-adapter.ts +0 -1715
  352. package/corpus/templates/crm/server/crm/read-through.ts +0 -207
  353. package/corpus/templates/crm/server/crm/salesforce-adapter.ts +0 -1255
  354. package/corpus/templates/crm/server/db/crm-store.ts +0 -1170
  355. package/corpus/templates/crm/server/db/index.ts +0 -169
  356. package/corpus/templates/crm/server/db/schema.ts +0 -441
  357. package/corpus/templates/crm/server/lib/intelligence/default-detectors.ts +0 -65
  358. package/corpus/templates/crm/server/lib/intelligence/evidence.ts +0 -105
  359. package/corpus/templates/crm/server/lib/intelligence/keyword-detector.ts +0 -100
  360. package/corpus/templates/crm/server/lib/intelligence/smart-detector.ts +0 -144
  361. package/corpus/templates/crm/server/lib/intelligence/summary.ts +0 -141
  362. package/corpus/templates/crm/server/lib/provider-api.ts +0 -64
  363. package/corpus/templates/crm/server/middleware/auth.ts +0 -4
  364. package/corpus/templates/crm/server/plugins/agent-chat.ts +0 -68
  365. package/corpus/templates/crm/server/plugins/auth.ts +0 -14
  366. package/corpus/templates/crm/server/plugins/core-routes.ts +0 -17
  367. package/corpus/templates/crm/server/plugins/db.ts +0 -454
  368. package/corpus/templates/crm/server/routes/[...page].get.ts +0 -5
  369. package/corpus/templates/crm/shared/crm-automation-recipes.ts +0 -132
  370. package/corpus/templates/crm/shared/crm-contract.ts +0 -254
  371. package/corpus/templates/crm/shared/crm-sales-config.ts +0 -63
  372. package/corpus/templates/crm/ssr-entry.ts +0 -11
  373. package/corpus/templates/crm/tsconfig.json +0 -24
  374. package/corpus/templates/crm/vite.config.ts +0 -15
  375. package/corpus/templates/crm/vitest.config.ts +0 -5
@@ -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
- }