@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,44 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { configureNativeCrmConnection } from "../server/crm/native-adapter.js";
5
- import { requireCrmScope } from "./_crm-action-utils.js";
6
-
7
- export default defineAction({
8
- description:
9
- "Initialize a local-authoritative Native SQL CRM with accounts, people, and opportunities. It requires no provider connection or credential and uses the configured SQLite, Postgres, or D1 database.",
10
- schema: z.object({
11
- label: z.string().trim().min(1).max(160).optional(),
12
- }),
13
- audit: {
14
- target: (_args, result) => {
15
- const connection = result as {
16
- id: string;
17
- ownerEmail: string;
18
- orgId: string | null;
19
- visibility: "private" | "org";
20
- };
21
- return {
22
- type: "crm-connection",
23
- id: connection.id,
24
- ownerEmail: connection.ownerEmail,
25
- orgId: connection.orgId,
26
- visibility: connection.visibility,
27
- };
28
- },
29
- summary: (_args, result) =>
30
- `Configured Native SQL CRM ${(result as { id?: string })?.id ?? ""}`,
31
- recordInputs: false,
32
- },
33
- run: async (args, ctx?: ActionRunContext) => {
34
- const result = await configureNativeCrmConnection({
35
- label: args.label,
36
- ownership: requireCrmScope(ctx),
37
- });
38
- return {
39
- ...result,
40
- provider: "native" as const,
41
- mode: "native" as const,
42
- };
43
- },
44
- });
@@ -1,148 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { accessFilter } from "@agent-native/core/sharing";
3
- import { and, eq } from "drizzle-orm";
4
- import { z } from "zod";
5
-
6
- import {
7
- configureNativeCrmConnection,
8
- createNativeCrmAdapter,
9
- } from "../server/crm/native-adapter.js";
10
- import { getDb, schema } from "../server/db/index.js";
11
- import type { CrmValue } from "../shared/crm-contract.js";
12
- import {
13
- crmInitiatedBy,
14
- isSafeCrmMutationFields,
15
- MAX_CRM_FIELDS_PER_MUTATION,
16
- requireCrmScope,
17
- scopedCrmIdempotencyKey,
18
- } from "./_crm-action-utils.js";
19
-
20
- const kindToObjectType = {
21
- account: "accounts",
22
- person: "people",
23
- opportunity: "opportunities",
24
- } as const;
25
-
26
- export const nativeRecordFieldsSchema = z
27
- .record(z.string().trim().min(1).max(120), z.unknown())
28
- .refine(
29
- (fields) => Object.keys(fields).length <= MAX_CRM_FIELDS_PER_MUTATION,
30
- `Provide at most ${MAX_CRM_FIELDS_PER_MUTATION} fields.`,
31
- )
32
- .refine(
33
- isSafeCrmMutationFields,
34
- "CRM fields and values cannot contain media, transcripts, data URLs, base64, or oversized JSON.",
35
- );
36
-
37
- export default defineAction({
38
- description:
39
- "Create an account, person, or opportunity in Native SQL CRM. The record is local-authoritative, access-scoped, idempotent, audited, and has no upstream provider write.",
40
- schema: z.object({
41
- connectionId: z.string().trim().min(1).max(128).optional(),
42
- kind: z.enum(["account", "person", "opportunity"]),
43
- displayName: z.string().trim().min(1).max(500),
44
- fields: nativeRecordFieldsSchema.optional(),
45
- idempotencyKey: z.string().trim().min(1).max(256).optional(),
46
- }),
47
- audit: {
48
- target: (_args, result) => {
49
- const record = result as {
50
- recordId: string;
51
- ownerEmail: string;
52
- orgId: string | null;
53
- visibility: "private" | "org";
54
- };
55
- return {
56
- type: "crm-record",
57
- id: record.recordId,
58
- ownerEmail: record.ownerEmail,
59
- orgId: record.orgId,
60
- visibility: record.visibility,
61
- };
62
- },
63
- summary: (args) =>
64
- `Created Native SQL CRM ${args.kind} ${args.displayName}`,
65
- recordInputs: false,
66
- },
67
- run: async (args, ctx?: ActionRunContext) => {
68
- const ownership = requireCrmScope(ctx);
69
- const db = getDb();
70
- const connectionRows = await db
71
- .select({ id: schema.crmConnections.id })
72
- .from(schema.crmConnections)
73
- .where(
74
- and(
75
- eq(schema.crmConnections.provider, "native"),
76
- ...(args.connectionId
77
- ? [eq(schema.crmConnections.id, args.connectionId)]
78
- : []),
79
- accessFilter(
80
- schema.crmConnections,
81
- schema.crmConnectionShares,
82
- undefined,
83
- "editor",
84
- ),
85
- ),
86
- )
87
- .limit(args.connectionId ? 1 : 2);
88
- if (!connectionRows.length && args.connectionId) {
89
- throw new Error(
90
- "The selected Native SQL CRM is unavailable or you do not have editor access.",
91
- );
92
- }
93
- if (!args.connectionId && connectionRows.length > 1) {
94
- throw new Error(
95
- "More than one Native SQL CRM is available. Provide connectionId to choose one.",
96
- );
97
- }
98
- const connectionId =
99
- connectionRows[0]?.id ??
100
- (
101
- await configureNativeCrmConnection({
102
- ownership,
103
- })
104
- ).id;
105
- const objectType = kindToObjectType[args.kind];
106
- const remoteId = crypto.randomUUID();
107
- const fields = {
108
- ...(args.fields as Record<string, CrmValue> | undefined),
109
- displayName: args.displayName,
110
- ...(args.kind === "person" ? {} : { name: args.displayName }),
111
- };
112
- const idempotencyKey = await scopedCrmIdempotencyKey({
113
- ...ownership,
114
- recordId: `${connectionId}:${objectType}`,
115
- key: args.idempotencyKey ?? crypto.randomUUID(),
116
- });
117
- const adapter = await createNativeCrmAdapter({
118
- connectionId,
119
- initiatedBy: crmInitiatedBy(ctx),
120
- });
121
- const result = await adapter.applyMutation({
122
- operation: "create",
123
- record: {
124
- connectionId,
125
- provider: "native",
126
- objectType,
127
- kind: args.kind,
128
- remoteId,
129
- },
130
- fields,
131
- idempotencyKey,
132
- });
133
- if (result.status !== "applied" || !result.record?.ref.localId) {
134
- throw new Error(
135
- result.message ?? "Native SQL CRM record was not created.",
136
- );
137
- }
138
- return {
139
- recordId: result.record.ref.localId,
140
- connectionId,
141
- provider: "native" as const,
142
- kind: args.kind,
143
- displayName: result.record.displayName,
144
- revision: result.remoteRevision,
145
- ...ownership,
146
- };
147
- },
148
- });
@@ -1,58 +0,0 @@
1
- import { defineAction } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { getDb, schema } from "../server/db/index.js";
5
- import { requireCrmScope } from "./_crm-action-utils.js";
6
-
7
- export default defineAction({
8
- description:
9
- "Create a bounded keyword or delegated-agent CRM signal detector. Smart detectors define criteria only; this action never calls a model.",
10
- schema: z
11
- .object({
12
- name: z.string().trim().min(1).max(120),
13
- description: z.string().trim().max(500).default(""),
14
- kind: z.enum(["keyword", "smart"]),
15
- keywords: z.array(z.string().trim().min(1).max(80)).max(40).default([]),
16
- classifierPrompt: z.string().trim().max(1_000).default(""),
17
- enabled: z.boolean().default(true),
18
- })
19
- .superRefine((value, ctx) => {
20
- if (value.kind === "keyword" && value.keywords.length === 0) {
21
- ctx.addIssue({
22
- code: "custom",
23
- path: ["keywords"],
24
- message: "Keyword detectors require at least one keyword.",
25
- });
26
- }
27
- if (value.kind === "smart" && !value.classifierPrompt) {
28
- ctx.addIssue({
29
- code: "custom",
30
- path: ["classifierPrompt"],
31
- message: "Smart detectors require a classification criterion.",
32
- });
33
- }
34
- }),
35
- run: async (args, ctx) => {
36
- const scope = requireCrmScope(ctx);
37
- const now = new Date().toISOString();
38
- const id = crypto.randomUUID();
39
- await getDb()
40
- .insert(schema.crmSignalTrackers)
41
- .values({
42
- id,
43
- name: args.name,
44
- description: args.description,
45
- kind: args.kind,
46
- keywordsJson: JSON.stringify(
47
- args.kind === "keyword" ? args.keywords : [],
48
- ),
49
- classifierPrompt: args.kind === "smart" ? args.classifierPrompt : "",
50
- enabled: args.enabled,
51
- isDefault: false,
52
- ...scope,
53
- createdAt: now,
54
- updatedAt: now,
55
- });
56
- return { id, ...args };
57
- },
58
- });
@@ -1,14 +0,0 @@
1
- import { createDeleteStagedDatasetAction } from "@agent-native/core/provider-api/actions/staged-datasets";
2
- import { getCredentialContext } from "@agent-native/core/server/request-context";
3
- import { z } from "zod";
4
-
5
- import { CRM_APP_ID } from "../server/lib/provider-api.js";
6
-
7
- export default createDeleteStagedDatasetAction({
8
- description:
9
- "Delete a caller-scoped staged dataset after CRM analysis is complete.",
10
- schema: z.object({ datasetId: z.string().min(1) }),
11
- appId: CRM_APP_ID,
12
- getOwnerEmail: () => getCredentialContext()?.userEmail ?? null,
13
- http: false,
14
- });
@@ -1,36 +0,0 @@
1
- import { defineAction } from "@agent-native/core/action";
2
- import { assertAccess } from "@agent-native/core/sharing";
3
- import { eq } from "drizzle-orm";
4
- import { z } from "zod";
5
-
6
- import { getDb, schema } from "../server/db/index.js";
7
- import {
8
- CLIPS_CALL_EVIDENCE_RECIPE_ID,
9
- buildClipsCallEvidenceRecipe,
10
- } from "../shared/crm-automation-recipes.js";
11
-
12
- export default defineAction({
13
- description:
14
- "Return the default-off Clips call-evidence review recipe for one explicitly selected CRM record. The recipe never passes media, transcripts, or an event URL into CRM.",
15
- schema: z.object({
16
- recipeId: z
17
- .literal(CLIPS_CALL_EVIDENCE_RECIPE_ID)
18
- .default(CLIPS_CALL_EVIDENCE_RECIPE_ID),
19
- recordId: z.string().trim().min(1).max(128),
20
- }),
21
- http: { method: "GET" },
22
- readOnly: true,
23
- run: async ({ recordId }) => {
24
- await assertAccess("crm-record", recordId, "viewer");
25
- const [record] = await getDb()
26
- .select({ displayName: schema.crmRecords.displayName })
27
- .from(schema.crmRecords)
28
- .where(eq(schema.crmRecords.id, recordId))
29
- .limit(1);
30
- if (!record) throw new Error("CRM record was not found.");
31
- return buildClipsCallEvidenceRecipe({
32
- recordId,
33
- recordLabel: record.displayName,
34
- });
35
- },
36
- });
@@ -1,35 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { createProgramPanelSourceResolver } from "@agent-native/core/dashboard-storage";
3
- import { z } from "zod";
4
-
5
- import { crmDashboardStore } from "../server/db/index.js";
6
- import { CRM_APP_ID } from "../server/lib/provider-api.js";
7
- import { requireDashboardAccess } from "./_crm-dashboard.js";
8
- import { initCrmDataPrograms } from "./_crm-data-program-actions.js";
9
-
10
- const programResolver = createProgramPanelSourceResolver({ appId: CRM_APP_ID });
11
-
12
- export default defineAction({
13
- description:
14
- "Resolve one program-backed panel from an access-scoped CRM dashboard for the dashboard UI.",
15
- schema: z.object({
16
- dashboardId: z.string().trim().min(1).max(200),
17
- panelId: z.string().trim().min(1).max(120),
18
- }),
19
- http: { method: "GET" },
20
- readOnly: true,
21
- agentTool: false,
22
- toolCallable: false,
23
- run: async ({ dashboardId, panelId }, ctx?: ActionRunContext) => {
24
- const access = requireDashboardAccess(ctx);
25
- const dashboard = await crmDashboardStore.get(dashboardId, access);
26
- if (!dashboard) throw new Error("CRM dashboard was not found.");
27
- const panel = dashboard.config.panels.find((item) => item.id === panelId);
28
- if (!panel) throw new Error("CRM dashboard panel was not found.");
29
- initCrmDataPrograms();
30
- return programResolver.resolve(
31
- { source: panel.source, query: panel.query },
32
- { userEmail: access.userEmail, orgId: access.orgId ?? null },
33
- );
34
- },
35
- });
@@ -1,14 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { crmDashboardStore } from "../server/db/index.js";
5
- import { requireDashboardAccess } from "./_crm-dashboard.js";
6
-
7
- export default defineAction({
8
- description: "Get one access-scoped CRM dashboard by ID.",
9
- schema: z.object({ id: z.string().trim().min(1).max(200) }),
10
- http: { method: "GET" },
11
- readOnly: true,
12
- run: ({ id }, ctx?: ActionRunContext) =>
13
- crmDashboardStore.get(id, requireDashboardAccess(ctx)),
14
- });
@@ -1,13 +0,0 @@
1
- import { defineAction } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { getCrmOverview } from "../server/db/crm-store.js";
5
-
6
- export default defineAction({
7
- description:
8
- "Return a compact, access-scoped CRM work overview: open follow-up tasks, recently active mirrored records, and pending write proposals.",
9
- schema: z.object({}),
10
- http: { method: "GET" },
11
- readOnly: true,
12
- run: () => getCrmOverview(),
13
- });
@@ -1,61 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { accessFilter } from "@agent-native/core/sharing";
3
- import { and, asc, eq } from "drizzle-orm";
4
- import { z } from "zod";
5
-
6
- import { getDb, schema } from "../server/db/index.js";
7
- import { requireDashboardAccess } from "./_crm-dashboard.js";
8
-
9
- const MAX_PIPELINE_RECORDS = 500;
10
-
11
- export default defineAction({
12
- description:
13
- "Return bounded, access-scoped pipeline totals grouped by opportunity stage. This is the CRM-owned read source for the Pipeline dashboard data program.",
14
- schema: z.object({}),
15
- http: { method: "GET" },
16
- readOnly: true,
17
- run: async (_args, ctx?: ActionRunContext) => {
18
- const access = requireDashboardAccess(ctx);
19
- const records = await getDb()
20
- .select({
21
- stage: schema.crmRecords.stage,
22
- amount: schema.crmRecords.amount,
23
- })
24
- .from(schema.crmRecords)
25
- .where(
26
- and(
27
- eq(schema.crmRecords.kind, "opportunity"),
28
- eq(schema.crmRecords.tombstone, false),
29
- accessFilter(schema.crmRecords, schema.crmRecordShares, access),
30
- ),
31
- )
32
- .orderBy(asc(schema.crmRecords.stage))
33
- .limit(MAX_PIPELINE_RECORDS);
34
-
35
- const stages = new Map<
36
- string,
37
- { stage: string; pipelineValue: number; opportunities: number }
38
- >();
39
- for (const record of records) {
40
- const stage = record.stage?.trim() || "Unstaged";
41
- const total = stages.get(stage) ?? {
42
- stage,
43
- pipelineValue: 0,
44
- opportunities: 0,
45
- };
46
- total.pipelineValue += Number.isFinite(record.amount)
47
- ? record.amount!
48
- : 0;
49
- total.opportunities += 1;
50
- stages.set(stage, total);
51
- }
52
- const rows = [...stages.values()].sort((a, b) =>
53
- a.stage.localeCompare(b.stage),
54
- );
55
- return {
56
- rows,
57
- truncated: records.length === MAX_PIPELINE_RECORDS,
58
- sourceRecordLimit: MAX_PIPELINE_RECORDS,
59
- };
60
- },
61
- });
@@ -1,75 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import {
5
- createConnectedCrmAdapter,
6
- isConnectedCrmProvider,
7
- } from "../server/crm/adapter.js";
8
- import { createNativeCrmAdapter } from "../server/crm/native-adapter.js";
9
- import { loadVerifiedReadThroughRecord } from "../server/crm/read-through.js";
10
- import {
11
- getCrmRecord,
12
- getCrmRecordReadContext,
13
- getReadThroughRelationshipSummaries,
14
- } from "../server/db/crm-store.js";
15
-
16
- export default defineAction({
17
- description:
18
- "Return one access-scoped CRM record with bounded mirrored fields, recent interaction metadata, call-evidence references, and tasks. It never returns raw provider payloads, media, or transcripts.",
19
- schema: z.object({
20
- recordId: z.string().min(1).describe("Local CRM record ID."),
21
- }),
22
- http: { method: "GET" },
23
- readOnly: true,
24
- run: async ({ recordId }, ctx?: ActionRunContext) => {
25
- const context = await getCrmRecordReadContext(recordId);
26
- if (!context) {
27
- const error = new Error("CRM record not found") as Error & {
28
- statusCode?: number;
29
- };
30
- error.statusCode = 404;
31
- throw error;
32
- }
33
- const adapter =
34
- context.provider === "native"
35
- ? await createNativeCrmAdapter({
36
- connectionId: context.connectionId,
37
- accessTier: "viewer",
38
- })
39
- : isConnectedCrmProvider(context.provider) &&
40
- context.workspaceConnectionId
41
- ? await createConnectedCrmAdapter({
42
- provider: context.provider,
43
- connectionId: context.workspaceConnectionId,
44
- ...(ctx?.userEmail ? { userEmail: ctx.userEmail } : {}),
45
- ...(ctx?.orgId !== undefined ? { orgId: ctx.orgId } : {}),
46
- })
47
- : null;
48
- if (!adapter) {
49
- throw new Error("CRM access cannot be verified for this record.");
50
- }
51
- const readThrough = await loadVerifiedReadThroughRecord({
52
- adapter,
53
- context,
54
- });
55
- const relatedRecords = await getReadThroughRelationshipSummaries({
56
- context,
57
- relationships: readThrough.relationships,
58
- currentScopes: readThrough.currentScopes,
59
- });
60
- const record = await getCrmRecord(recordId, {
61
- displayName: readThrough.remote.displayName,
62
- fields: readThrough.remote.fields,
63
- remoteRevision: readThrough.remote.remoteRevision,
64
- remoteUpdatedAt: readThrough.remote.remoteUpdatedAt,
65
- relatedRecords,
66
- accessScope: readThrough.currentScope,
67
- });
68
- if (record) return record;
69
- const error = new Error("CRM record not found") as Error & {
70
- statusCode?: number;
71
- };
72
- error.statusCode = 404;
73
- throw error;
74
- },
75
- });
@@ -1,81 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { upsertDataProgram } from "@agent-native/core/data-programs";
3
- import { z } from "zod";
4
-
5
- import { crmDashboardStore } from "../server/db/index.js";
6
- import { CRM_APP_ID } from "../server/lib/provider-api.js";
7
- import {
8
- createPipelineDashboardConfig,
9
- crmPipelineDashboardId,
10
- CRM_PIPELINE_PROGRAM_CODE,
11
- CRM_PIPELINE_PROGRAM_COLUMNS,
12
- CRM_PIPELINE_PROGRAM_NAME,
13
- CRM_PIPELINE_PROGRAM_TITLE,
14
- CRM_PIPELINE_REFRESH_TTL_MS,
15
- CRM_PIPELINE_DASHBOARD_TITLE,
16
- requireDashboardAccess,
17
- } from "./_crm-dashboard.js";
18
- import getCrmPipelineData from "./get-crm-pipeline-data.js";
19
-
20
- export default defineAction({
21
- description:
22
- "Install or update your CRM Pipeline dashboard and its owned data program. Safe to rerun: it verifies the access-scoped source first, upserts the program by owner and name, then revision-writes the dashboard.",
23
- schema: z.object({}),
24
- run: async (_args, ctx?: ActionRunContext) => {
25
- const access = requireDashboardAccess(ctx);
26
- const preview = await getCrmPipelineData.run({}, ctx);
27
-
28
- const program = await upsertDataProgram({
29
- appId: CRM_APP_ID,
30
- name: CRM_PIPELINE_PROGRAM_NAME,
31
- title: CRM_PIPELINE_PROGRAM_TITLE,
32
- description:
33
- "Access-scoped opportunity totals by stage for the CRM Pipeline dashboard.",
34
- code: CRM_PIPELINE_PROGRAM_CODE,
35
- outputColumns: JSON.stringify(CRM_PIPELINE_PROGRAM_COLUMNS),
36
- refreshMode: "ttl",
37
- refreshTtlMs: CRM_PIPELINE_REFRESH_TTL_MS,
38
- background: false,
39
- ownerEmail: access.userEmail,
40
- orgId: access.orgId ?? null,
41
- });
42
- if (
43
- program.appId !== CRM_APP_ID ||
44
- program.name !== CRM_PIPELINE_PROGRAM_NAME
45
- ) {
46
- throw new Error(
47
- "CRM Pipeline data program could not be verified after saving.",
48
- );
49
- }
50
-
51
- const dashboardId = crmPipelineDashboardId(access);
52
- const existing = await crmDashboardStore.get(dashboardId, access);
53
- const dashboard = await crmDashboardStore.write(
54
- {
55
- id: dashboardId,
56
- kind: "pipeline",
57
- title: CRM_PIPELINE_DASHBOARD_TITLE,
58
- config: createPipelineDashboardConfig(program.id),
59
- ...(existing ? { expectedUpdatedAt: existing.updatedAt } : {}),
60
- },
61
- access,
62
- );
63
- if (dashboard.config.panels.length !== 3) {
64
- throw new Error(
65
- "CRM Pipeline dashboard could not be verified after saving.",
66
- );
67
- }
68
-
69
- return {
70
- dashboard,
71
- dashboardId: dashboard.id,
72
- programId: program.id,
73
- created: !existing,
74
- programPreview: {
75
- rowCount: preview.rows.length,
76
- columns: CRM_PIPELINE_PROGRAM_COLUMNS,
77
- truncated: preview.truncated,
78
- },
79
- };
80
- },
81
- });
@@ -1,15 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { crmDashboardStore } from "../server/db/index.js";
5
- import { requireDashboardAccess } from "./_crm-dashboard.js";
6
-
7
- export default defineAction({
8
- description:
9
- "List the bounded revision history for one access-scoped CRM dashboard.",
10
- schema: z.object({ id: z.string().trim().min(1).max(200) }),
11
- http: { method: "GET" },
12
- readOnly: true,
13
- run: ({ id }, ctx?: ActionRunContext) =>
14
- crmDashboardStore.listRevisions(id, requireDashboardAccess(ctx)),
15
- });
@@ -1,15 +0,0 @@
1
- import { defineAction, type ActionRunContext } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { crmDashboardStore } from "../server/db/index.js";
5
- import { requireDashboardAccess } from "./_crm-dashboard.js";
6
-
7
- export default defineAction({
8
- description:
9
- "List up to 50 active CRM dashboards the current user can access.",
10
- schema: z.object({}),
11
- http: { method: "GET" },
12
- readOnly: true,
13
- run: async (_args, ctx?: ActionRunContext) =>
14
- (await crmDashboardStore.list(requireDashboardAccess(ctx))).slice(0, 50),
15
- });
@@ -1,31 +0,0 @@
1
- import { defineAction } from "@agent-native/core/action";
2
- import { z } from "zod";
3
-
4
- import { listCrmProposals } from "../server/db/crm-store.js";
5
-
6
- export default defineAction({
7
- description:
8
- "List bounded, access-scoped CRM mutation proposals and their review status. Proposal payloads are intentionally omitted from this list surface.",
9
- schema: z.object({
10
- recordId: z.string().min(1).optional(),
11
- status: z
12
- .enum([
13
- "pending",
14
- "approved",
15
- "applied",
16
- "rejected",
17
- "conflict",
18
- "failed",
19
- ])
20
- .optional(),
21
- limit: z.coerce.number().int().min(1).max(100).default(50),
22
- cursor: z
23
- .string()
24
- .regex(/^\d+$/)
25
- .optional()
26
- .describe("Cursor returned by a previous page."),
27
- }),
28
- http: { method: "GET" },
29
- readOnly: true,
30
- run: (input) => listCrmProposals(input),
31
- });