@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
@@ -4,10 +4,11 @@ import type { OAuthClientInformationMixed } from "@modelcontextprotocol/sdk/shar
4
4
  import {
5
5
  deleteCookie,
6
6
  defineEventHandler,
7
+ getChunkedCookie,
7
8
  getCookie,
8
9
  getMethod,
9
10
  getQuery,
10
- setCookie,
11
+ setChunkedCookie,
11
12
  setResponseStatus,
12
13
  type H3Event,
13
14
  } from "h3";
@@ -32,6 +33,9 @@ import {
32
33
 
33
34
  const FLOW_COOKIE = "an_mcp_oauth_flow";
34
35
  const FLOW_TTL_SECONDS = 10 * 60;
36
+ const FLOW_COOKIE_CHUNK_SIZE = 2_800;
37
+ const FLOW_COOKIE_MAX_CHUNKS = 8;
38
+ const CHUNKED_COOKIE_PREFIX = "__chunked__";
35
39
 
36
40
  export interface McpOAuthFlow {
37
41
  name: string;
@@ -189,13 +193,7 @@ async function handleMcpOAuthStart(
189
193
  ...(safeReturnUrl ? { returnUrl: safeReturnUrl } : {}),
190
194
  expiresAt: Date.now() + FLOW_TTL_SECONDS * 1_000,
191
195
  };
192
- setCookie(event, FLOW_COOKIE, encryptSecretValue(JSON.stringify(flow)), {
193
- httpOnly: true,
194
- secure: redirectUri.startsWith("https://"),
195
- sameSite: "lax",
196
- path: "/",
197
- maxAge: FLOW_TTL_SECONDS,
198
- });
196
+ setMcpOAuthFlowCookie(event, flow, redirectUri.startsWith("https://"));
199
197
  return redirectWithStagedCookies(event, started.authorizationUrl.href);
200
198
  } catch {
201
199
  setResponseStatus(event, 400);
@@ -217,8 +215,8 @@ async function handleMcpOAuthCallback(
217
215
  const code = text(query.code);
218
216
  const state = text(query.state);
219
217
  const providerError = text(query.error);
220
- const flow = readFlow(event);
221
- deleteCookie(event, FLOW_COOKIE, { path: "/" });
218
+ const flow = readMcpOAuthFlowCookie(event);
219
+ clearMcpOAuthFlowCookies(event);
222
220
  if (providerError || !code || !state) {
223
221
  setResponseStatus(event, 400);
224
222
  return { error: "MCP OAuth authorization was not completed." };
@@ -275,8 +273,36 @@ async function handleMcpOAuthCallback(
275
273
  }
276
274
  }
277
275
 
278
- function readFlow(event: H3Event): McpOAuthFlow | null {
279
- const encrypted = getCookie(event, FLOW_COOKIE);
276
+ export function setMcpOAuthFlowCookie(
277
+ event: H3Event,
278
+ flow: McpOAuthFlow,
279
+ secure: boolean,
280
+ ): void {
281
+ const encrypted = encryptSecretValue(JSON.stringify(flow));
282
+ const chunkCount = Math.ceil(encrypted.length / FLOW_COOKIE_CHUNK_SIZE);
283
+ if (chunkCount > FLOW_COOKIE_MAX_CHUNKS) {
284
+ throw new Error("MCP OAuth flow state exceeds the cookie size limit.");
285
+ }
286
+ setChunkedCookie(event, FLOW_COOKIE, encrypted, {
287
+ httpOnly: true,
288
+ secure,
289
+ sameSite: "lax",
290
+ path: "/",
291
+ maxAge: FLOW_TTL_SECONDS,
292
+ chunkMaxLength: FLOW_COOKIE_CHUNK_SIZE,
293
+ });
294
+ }
295
+
296
+ export function readMcpOAuthFlowCookie(event: H3Event): McpOAuthFlow | null {
297
+ const primaryCookie = getCookie(event, FLOW_COOKIE);
298
+ if (!primaryCookie) return null;
299
+ if (primaryCookie.startsWith(CHUNKED_COOKIE_PREFIX)) {
300
+ const rawCount = primaryCookie.slice(CHUNKED_COOKIE_PREFIX.length);
301
+ if (!/^\d+$/.test(rawCount)) return null;
302
+ const chunkCount = Number(rawCount);
303
+ if (chunkCount < 2 || chunkCount > FLOW_COOKIE_MAX_CHUNKS) return null;
304
+ }
305
+ const encrypted = getChunkedCookie(event, FLOW_COOKIE);
280
306
  if (!encrypted) return null;
281
307
  try {
282
308
  const parsed = JSON.parse(decryptSecretValue(encrypted)) as McpOAuthFlow;
@@ -286,6 +312,13 @@ function readFlow(event: H3Event): McpOAuthFlow | null {
286
312
  }
287
313
  }
288
314
 
315
+ export function clearMcpOAuthFlowCookies(event: H3Event): void {
316
+ deleteCookie(event, FLOW_COOKIE, { path: "/" });
317
+ for (let index = 1; index <= FLOW_COOKIE_MAX_CHUNKS; index += 1) {
318
+ deleteCookie(event, `${FLOW_COOKIE}.${index}`, { path: "/" });
319
+ }
320
+ }
321
+
289
322
  export function isValidMcpOAuthFlow(
290
323
  flow: McpOAuthFlow,
291
324
  email: string,
@@ -201,7 +201,10 @@ export function resolveRealtimeVoiceReasoningEffort(
201
201
  ): "minimal" | "low" | "medium" {
202
202
  const normalized = value?.trim().toLowerCase();
203
203
  return normalized &&
204
- Object.hasOwn(REALTIME_VOICE_REASONING_EFFORT, normalized)
204
+ Object.prototype.hasOwnProperty.call(
205
+ REALTIME_VOICE_REASONING_EFFORT,
206
+ normalized,
207
+ )
205
208
  ? REALTIME_VOICE_REASONING_EFFORT[
206
209
  normalized as keyof typeof REALTIME_VOICE_REASONING_EFFORT
207
210
  ]
@@ -57,11 +57,13 @@ action before requesting microphone permission.
57
57
  controls contain only settings and the separate end-session action.
58
58
  - The orb's compact waveform stays visible for the full session and reflects
59
59
  actual microphone or assistant audio activity. At silence it rests at its
60
- baseline instead of turning into a loading spinner. While connecting, show a
61
- distinct compact spinner; when the session becomes live, the assistant gives
62
- one brief spoken greeting so readiness is unambiguous. Do not apply a
63
- text-sized `max_output_tokens` cap to that audio greeting because audio tokens
64
- can truncate it mid-sentence.
60
+ baseline instead of turning into a loading spinner. Once connected, a soft,
61
+ slowly rotating blue glow marks the live session; brighten and speed up the
62
+ glow while the agent is working, and keep it static under reduced motion.
63
+ While connecting, show a distinct compact spinner; when the session becomes
64
+ live, the assistant gives one brief spoken greeting so readiness is
65
+ unambiguous. Do not apply a text-sized `max_output_tokens` cap to that audio
66
+ greeting because audio tokens can truncate it mid-sentence.
65
67
  - The orb settings cog opens in place without ending voice mode or navigating
66
68
  away. Nested pickers must not dismiss the settings popover. Language and
67
69
  intelligence update the active Realtime session; the microphone picker swaps
@@ -42,7 +42,7 @@ export const CLI_REGISTRY: Record<string, CliEntry> = {
42
42
 
43
43
  /** Check if a command name is in the CLI_REGISTRY allowlist */
44
44
  export function isAllowedCommand(cmd: string): boolean {
45
- return Object.hasOwn(CLI_REGISTRY, cmd);
45
+ return Object.prototype.hasOwnProperty.call(CLI_REGISTRY, cmd);
46
46
  }
47
47
 
48
48
  /** Check if a CLI command exists on PATH (safe — no shell interpolation) */
@@ -732,7 +732,6 @@ function findCorePackageRoot(cwd: string): string | null {
732
732
  const candidates = [
733
733
  path.resolve(cwd, "../../packages/core"), // templates/<name>/
734
734
  path.resolve(cwd, "../core"), // packages/<name>/
735
- path.resolve(cwd, "node_modules/@agent-native/core"),
736
735
  ];
737
736
  for (const candidate of candidates) {
738
737
  try {
@@ -2315,6 +2314,165 @@ function portExposer(): Plugin {
2315
2314
  };
2316
2315
  }
2317
2316
 
2317
+ function isNitroEnvironmentUnavailable(error: unknown): boolean {
2318
+ const candidate = error as {
2319
+ name?: unknown;
2320
+ status?: unknown;
2321
+ statusCode?: unknown;
2322
+ message?: unknown;
2323
+ };
2324
+ return (
2325
+ candidate?.name === "NitroViteError" &&
2326
+ (candidate.status === 503 || candidate.statusCode === 503) &&
2327
+ typeof candidate.message === "string" &&
2328
+ /Vite environment .+ is unavailable/.test(candidate.message)
2329
+ );
2330
+ }
2331
+
2332
+ type NitroModuleNode = {
2333
+ id: string | null;
2334
+ ssrError?: Error | null;
2335
+ transformResult: unknown | null;
2336
+ };
2337
+
2338
+ type NitroModuleGraph = {
2339
+ idToModuleMap: Map<string, NitroModuleNode>;
2340
+ };
2341
+
2342
+ const NITRO_STARTUP_SETTLE_MS = 1_000;
2343
+ const NITRO_STARTUP_TIMEOUT_MS = 30_000;
2344
+
2345
+ function nitroModuleGraphSignature(environment: unknown): string | null {
2346
+ const graph = (environment as { moduleGraph?: NitroModuleGraph } | undefined)
2347
+ ?.moduleGraph;
2348
+ if (!graph) return null;
2349
+
2350
+ const modules = [...graph.idToModuleMap.values()];
2351
+ const entry = modules.find((module) =>
2352
+ module.id
2353
+ ?.replaceAll("\\", "/")
2354
+ .endsWith("/nitro/dist/runtime/internal/vite/dev-entry.mjs"),
2355
+ );
2356
+ if (!entry?.transformResult && !entry?.ssrError) return null;
2357
+
2358
+ let transformed = 0;
2359
+ let errors = 0;
2360
+ for (const module of modules) {
2361
+ if (module.transformResult) transformed += 1;
2362
+ if (module.ssrError) errors += 1;
2363
+ }
2364
+ return `${modules.length}:${transformed}:${errors}`;
2365
+ }
2366
+
2367
+ function isHtmlDocumentRequest(req: IncomingMessage): boolean {
2368
+ return (
2369
+ (req.method === "GET" || req.method === "HEAD") &&
2370
+ (req.headers.accept ?? "").includes("text/html")
2371
+ );
2372
+ }
2373
+
2374
+ function sendNitroStartingResponse(
2375
+ req: IncomingMessage,
2376
+ res: ServerResponse,
2377
+ ): void {
2378
+ res.statusCode = 503;
2379
+ res.setHeader("cache-control", "no-store");
2380
+ res.setHeader("content-type", "text/html; charset=utf-8");
2381
+ res.setHeader("retry-after", "1");
2382
+ if (req.method === "HEAD") {
2383
+ res.end();
2384
+ return;
2385
+ }
2386
+ res.end(
2387
+ '<!doctype html><html><head><meta charset="utf-8"><meta http-equiv="refresh" content="0.25"><title>Starting…</title></head><body></body></html>',
2388
+ );
2389
+ }
2390
+
2391
+ function nitroStartupGate(
2392
+ options: {
2393
+ now?: () => number;
2394
+ settleMs?: number;
2395
+ timeoutMs?: number;
2396
+ } = {},
2397
+ ): Plugin {
2398
+ return {
2399
+ name: "agent-native-nitro-startup-gate",
2400
+ apply: "serve",
2401
+ enforce: "pre",
2402
+ configureServer(server) {
2403
+ const now = options.now ?? Date.now;
2404
+ const settleMs = options.settleMs ?? NITRO_STARTUP_SETTLE_MS;
2405
+ const timeoutMs = options.timeoutMs ?? NITRO_STARTUP_TIMEOUT_MS;
2406
+ const startedAt = now();
2407
+ let graphSignature: string | null = null;
2408
+ let graphStableAt: number | undefined;
2409
+ let startupComplete = false;
2410
+
2411
+ server.middlewares.use((req, res, next) => {
2412
+ if (startupComplete || !isHtmlDocumentRequest(req)) {
2413
+ next();
2414
+ return;
2415
+ }
2416
+
2417
+ const timestamp = now();
2418
+ if (timestamp - startedAt >= timeoutMs) {
2419
+ startupComplete = true;
2420
+ next();
2421
+ return;
2422
+ }
2423
+
2424
+ const nextGraphSignature = nitroModuleGraphSignature(
2425
+ server.environments?.nitro,
2426
+ );
2427
+ if (nextGraphSignature) {
2428
+ if (nextGraphSignature !== graphSignature) {
2429
+ graphSignature = nextGraphSignature;
2430
+ graphStableAt = timestamp;
2431
+ } else if (
2432
+ graphStableAt !== undefined &&
2433
+ timestamp - graphStableAt >= settleMs
2434
+ ) {
2435
+ startupComplete = true;
2436
+ next();
2437
+ return;
2438
+ }
2439
+ } else {
2440
+ graphSignature = null;
2441
+ graphStableAt = undefined;
2442
+ }
2443
+
2444
+ sendNitroStartingResponse(req, res);
2445
+ });
2446
+ },
2447
+ };
2448
+ }
2449
+
2450
+ function nitroStartupRecovery(): Plugin {
2451
+ return {
2452
+ name: "agent-native-nitro-startup-recovery",
2453
+ apply: "serve",
2454
+ configureServer(server) {
2455
+ server.middlewares.use(function nitroStartupErrorRecovery(
2456
+ error: unknown,
2457
+ req: IncomingMessage,
2458
+ res: ServerResponse,
2459
+ next: (error?: unknown) => void,
2460
+ ) {
2461
+ if (
2462
+ !isNitroEnvironmentUnavailable(error) ||
2463
+ !isHtmlDocumentRequest(req) ||
2464
+ res.headersSent
2465
+ ) {
2466
+ next(error);
2467
+ return;
2468
+ }
2469
+
2470
+ sendNitroStartingResponse(req, res);
2471
+ });
2472
+ },
2473
+ };
2474
+ }
2475
+
2318
2476
  /**
2319
2477
  * Silence benign connection-reset noise from Vite's dev middleware.
2320
2478
  * Fires when a browser closes/reloads/navigates mid-request — the peer has
@@ -2693,6 +2851,7 @@ function createAgentNativePlugins(
2693
2851
  embedDevFrameHeaders(),
2694
2852
  baseRedirectGuard(),
2695
2853
  portExposer(),
2854
+ nitroStartupGate(),
2696
2855
  silenceConnectionResets(),
2697
2856
  rolldownInputFix(),
2698
2857
  // Nitro Vite plugin for dev-mode API route serving and HMR.
@@ -2702,6 +2861,9 @@ function createAgentNativePlugins(
2702
2861
  : includeNitro
2703
2862
  ? [nitroPlugin]
2704
2863
  : []),
2864
+ // Nitro can reject the first document request while its Vite environment
2865
+ // is still importing. This error handler must follow Nitro's middleware.
2866
+ nitroStartupRecovery(),
2705
2867
  includeReactTransform ? createReactTransformPlugin() : null,
2706
2868
  createDesignSystemThemePlugin(options.designSystemTheme),
2707
2869
  createTailwindPlugin(options),
@@ -3096,5 +3258,8 @@ export {
3096
3258
  getDefaultOptimizeDeps as _getDefaultOptimizeDeps,
3097
3259
  findCorePackageRoot as _findCorePackageRoot,
3098
3260
  getReactRouterAliases as _getReactRouterAliases,
3261
+ nitroStartupGate as _nitroStartupGate,
3262
+ nitroStartupRecovery as _nitroStartupRecovery,
3263
+ nitroModuleGraphSignature as _nitroModuleGraphSignature,
3099
3264
  debounceNitroFullReloadHotUpdate as _debounceNitroFullReloadHotUpdate,
3100
3265
  };
@@ -1,115 +0,0 @@
1
- ---
2
- name: agent-native-docs
3
- description: >-
4
- How to find version-matched Agent Native framework docs and source bundled in
5
- node_modules. Use before implementing or answering questions about
6
- @agent-native/core APIs, generated apps, workspaces, templates, or advanced
7
- features.
8
- scope: dev
9
- metadata:
10
- internal: true
11
- ---
12
-
13
- # Agent Native Docs Lookup
14
-
15
- ## Rule
16
-
17
- Before implementing or explaining non-trivial Agent Native behavior, read the
18
- version-matched docs installed with `@agent-native/core`. When examples,
19
- imports, or implementation details matter, inspect the packaged source corpus
20
- too.
21
-
22
- ## Why
23
-
24
- Generated apps and workspaces may be on a different framework version than the
25
- public docs or model memory. The installed package is the source that matches
26
- the app in front of you. It also includes a source-only corpus of core and
27
- first-party templates so agents can replicate current best-practice patterns
28
- without needing the framework monorepo checkout.
29
-
30
- ## How
31
-
32
- From a generated app directory:
33
-
34
- ```bash
35
- pnpm action docs-search --query "<feature>"
36
- pnpm action docs-search --slug <slug>
37
- pnpm action docs-search --list
38
- pnpm action source-search --query "<pattern>"
39
- pnpm action source-search --path templates/plan/AGENTS.md
40
- pnpm action source-search --path toolkit/src/index.ts
41
- pnpm action source-search --list
42
- ```
43
-
44
- The headless `pnpm agent` loop and built-in app agent also expose a read-only
45
- `docs-search` tool with the same `query`, `slug`, and `list` options, plus a
46
- read-only `source-search` tool with `query`, `path`, and `list`.
47
-
48
- If the action runner is unavailable, search the package directly:
49
-
50
- ```bash
51
- rg -n "actions|automations|a2a|sharing" node_modules/@agent-native/core/docs
52
- rg -n "defineAction|useActionQuery" node_modules/@agent-native/core/corpus
53
- ```
54
-
55
- Then read `node_modules/@agent-native/core/docs/AGENTS.md` or the matching file
56
- under `node_modules/@agent-native/core/docs/content/`. For source examples,
57
- read files under `node_modules/@agent-native/core/corpus/core/` or
58
- `node_modules/@agent-native/core/corpus/templates/`.
59
-
60
- Toolkit source is searchable at `toolkit/` in the Core corpus and also ships as
61
- readable TypeScript under `node_modules/@agent-native/toolkit/src/`. Read
62
- `customizing-agent-native` before taking ownership of a shared component: inspect package
63
- source as a read-only reference, then configure, compose, or eject the smallest
64
- supported unit into app-owned source. Preserve public actions, application
65
- state, auth, and agent-chat runtime contracts. Never edit `node_modules` or
66
- deep-import its private source. Manual copying is only the fallback described by
67
- an unknown third-party package's add-style blueprint.
68
-
69
- ## Reuse Proven Patterns (rg + cp)
70
-
71
- Version-matched installed source outranks web docs or memory: it is the exact
72
- code shipping with this app. `node_modules/@agent-native/core/corpus/templates/`
73
- holds source for every first-party template, not just the one this app started
74
- from, so a pattern from the mail template is fair game for a tasks app. Grep
75
- across it, then copy a whole file as a starting point instead of writing the
76
- pattern from scratch:
77
-
78
- ```bash
79
- # Find how other templates solved a similar problem
80
- rg -n "drag.*drop|reorder" node_modules/@agent-native/core/corpus/templates
81
-
82
- # Grab a proven action file as a starting point, then adapt names/schema
83
- cp node_modules/@agent-native/core/corpus/templates/mail/actions/archive-email.ts \
84
- actions/archive-item.ts
85
-
86
- # Read the full framework source behind an API, not just the corpus copy
87
- rg -n "defineAction" node_modules/@agent-native/core/src/action.ts
88
- ```
89
-
90
- Copying template-level app code (actions, components, skill files) is the
91
- expected reuse path — templates exist to be forked. This is different from
92
- copying `core`/`toolkit` **runtime internals**: for those, follow
93
- `customizing-agent-native`'s configure/compose/eject ladder instead of
94
- hand-duplicating framework logic.
95
-
96
- ## Useful Slugs
97
-
98
- | Need | Slugs |
99
- | ------------------------------ | ------------------------------------------------------------- |
100
- | Actions and typed client calls | `actions`, `client` |
101
- | SQL, auth, access, sharing | `database`, `authentication`, `security`, `sharing` |
102
- | UI state visible to the agent | `context-awareness` |
103
- | Headless and chat-first apps | `pure-agent-apps`, `agent-surfaces`, `using-your-agent` |
104
- | Automations and schedules | `automations`, `recurring-jobs` |
105
- | Cross-app and external agents | `a2a-protocol`, `external-agents`, `mcp-protocol`, `mcp-apps` |
106
- | Skills and instructions | `skills-guide`, `writing-agent-instructions` |
107
-
108
- ## Don't
109
-
110
- - Do not rely on memory for framework APIs when package docs are present.
111
- - Do not add custom REST wrappers for app data before reading `actions`.
112
- - Do not add inline LLM calls before reading `using-your-agent` and
113
- `agent-surfaces`.
114
- - Do not copy framework runtime internals when a public API or narrow UI copy
115
- will do; read `customizing-agent-native` for the supported override ladder.
@@ -1,177 +0,0 @@
1
- ---
2
- name: agent-native-toolkit
3
- description: >-
4
- Inventory and ownership rules for shared Agent Native workspace UI. Use
5
- before building app chrome, settings, navigation, sharing, collaboration,
6
- setup, history, comments, chat rails, agent UX, or repeated workspace behavior.
7
- scope: dev
8
- metadata:
9
- internal: true
10
- ---
11
-
12
- # Agent-Native Toolkit
13
-
14
- Use this skill when deciding whether app chrome, settings, collaboration,
15
- sharing, navigation, organization, setup, history, comments, or agent UX should
16
- be built app-locally or moved into reusable framework/toolkit pieces.
17
-
18
- ## Core Rule
19
-
20
- Apps own domain models, domain actions, and product-specific workflows. The
21
- framework and `@agent-native/toolkit` own repeated workspace behavior users
22
- expect to work the same everywhere.
23
-
24
- Move behavior into shared toolkit primitives when it is:
25
-
26
- - workspace-wide, such as settings, nav, search, org membership, or setup
27
- - agent-visible, such as context, actions, run progress, or proof-of-done
28
- - governed, such as secrets, permissions, sharing, audit, or billing
29
- - repeated by two or more apps
30
- - not tied to one domain model
31
-
32
- Keep behavior app-local when the abstraction would hide important domain
33
- language or make a simple app-specific workflow harder to understand.
34
-
35
- ## Discover Before Building
36
-
37
- Before creating an app-local version of repeated workspace or agent UI:
38
-
39
- 1. Check the reusable kits below and the installed package documentation.
40
- 2. Search installed public components and source with `docs-search` and
41
- `source-search`.
42
- 3. Run `agent-native eject --list` to see the version-matched units published
43
- by the packages installed in this app.
44
- 4. Read `customizing-agent-native` and configure, compose, or eject the
45
- smallest unit instead of recreating shared behavior from memory.
46
-
47
- Use public package exports at runtime. Published source and ejection manifests
48
- are discovery and ownership-transfer mechanisms, not private runtime APIs.
49
-
50
- ## Design-System Boundary
51
-
52
- Every app keeps an explicit design-system seam in `app/design-system.ts` using
53
- `defineDesignSystem` from `@agent-native/toolkit/design-system`, and supplies it
54
- to `ToolkitProvider`. The semantic contract contains:
55
-
56
- - nine leaf components: `ActionButton`, `IconButton`, `TextField`, `TextArea`,
57
- `Spinner`, `Skeleton`, `Status`, `Surface`, and `Avatar`
58
- - eight behavior components: `Tooltip`, `Menu`, `Popover`, `Dialog`, `Picker`,
59
- `Checkbox`, `Switch`, and `Tabs`
60
-
61
- These are semantic contracts, not styling contracts. An adapter may use
62
- Tailwind/shadcn, MUI-style theme providers, React Aria, CSS modules, CSS-in-JS,
63
- or another React design system. Do not assume CVA, utility classes, or even a
64
- `className`; behavior adapters may supply their overlay and focus
65
- implementation wholesale while honoring portal, focus-restoration, keyboard,
66
- dismissal, ARIA, and z-index interoperability.
67
-
68
- Pages, routes, and domain components import ordinary controls through the app's
69
- local adapter layer, usually `@/components/ui/*`. They must not import
70
- `@agent-native/toolkit/ui/*` directly. Toolkit feature exports are still the
71
- right home for shared workspace behavior; their presentation flows through the
72
- registered semantic components, feature controller, and product-level slots.
73
-
74
- Customer adapter packages are normal npm packages imported explicitly by the
75
- app. Never auto-detect them or load React components from JSON. Run the adapter
76
- against `@agent-native/toolkit/conformance` in customer CI before adopting it.
77
-
78
- ## Settings Direction
79
-
80
- Durable settings belong in the Settings app or a registered settings route. The
81
- agent sidebar should not become a second settings app. It can show contextual
82
- quick controls and deep links such as:
83
-
84
- - `/settings/ai`
85
- - `/settings/connections`
86
- - `/settings/secrets`
87
- - `/settings/usage`
88
- - `/settings/apps/:appId`
89
-
90
- The shared Account section is the canonical profile surface at
91
- `/settings#account`. It owns the editable display name and existing avatar
92
- control through the authenticated `get-user-profile` and `update-user-profile`
93
- actions. Shared workspace chrome such as `OrgSwitcher` should link to this
94
- surface rather than creating an app-local profile page.
95
-
96
- When adding a new API key, OAuth grant, provider connection, model selector, app
97
- preference, notification preference, or usage/billing surface, register it as a
98
- settings tab or app settings panel first. Only add sidebar UI when it is needed
99
- in the moment of agent use.
100
-
101
- ## Reusable Kits
102
-
103
- - **Settings kit**: a searchable settings page with account, workspace, AI
104
- models, LLM keys, connections, secrets, usage, notifications, changelog, and
105
- app-specific panels. Search is on by default; register a `SettingsSearchEntry`
106
- per control so users find settings by name across tabs.
107
- - **Collaboration kit**: Yjs docs, presence, agent presence, live cursors,
108
- remote selections, recent edit highlights, real-time sync indicators, and
109
- undo/redo grouping.
110
- - **Sharing kit**: private/workspace/org/public-link access, invites, roles,
111
- expirations, agent-readable links, and resource registration.
112
- - **Navigation and command kit**: app shell, side nav, breadcrumbs, app switcher,
113
- command palette entries, recent resources, pinned resources, and global search.
114
- - **Organization kit**: folders, tags, favorites, archive, trash, ownership,
115
- membership, and common resource metadata.
116
- - **Setup and connections kit**: declarative setup requirements, model readiness,
117
- missing-secret states, OAuth grants, and provider connection health.
118
- - **Agent UX kit**: sidebar, composer, staged context, mentions, voice, human
119
- approval, generative UI, progress, and screen-state exposure.
120
- - **Chat history kit**: presentational chat lists and recent-chat rails belong
121
- in Toolkit; Core keeps thread persistence, agent execution, transport, and
122
- page-to-sidebar handoff. Use Toolkit's `ChatHistoryRail` for the standard
123
- five-item sidebar preview and a footer row with New chat followed by an
124
- ellipsis disclosure up to fifteen. Apps inject routing, labels, and domain
125
- actions.
126
- - **Agent page kit**: the full-page `/agent` surface (`AgentTabsPage` from
127
- `@agent-native/core/client`) with Context, Files, Connections, Jobs, and
128
- Access tabs plus a Personal/Organization scope toggle. The canonical home
129
- for context transparency, MCP servers, A2A remote agents, recurring
130
- jobs/automations, and external-client connect flows. See the `agent-page`
131
- skill.
132
- - **History and recovery kit**: audit log, activity feed, version history,
133
- checkpoints, undo, redo, restore, and proof-of-done.
134
- - **Comments and review kit**: anchored comments, pins, mentions, review
135
- requests, resolved threads, agent follow-up tasks, and notifications.
136
- - **Workflow and observability kit**: notifications, approvals, scheduled work,
137
- background runs, recurring jobs, traces, evals, feedback, and run timelines.
138
-
139
- ## Implementation Checklist
140
-
141
- When adding or refactoring one of these areas:
142
-
143
- 1. Search existing framework and template code for duplicated UI or actions.
144
- 2. Decide the shared contract: data shape, action API, feature-level headless
145
- controller, default view, semantic components, and product-level render
146
- slots.
147
- 3. Keep shared data provider-agnostic and scoped by auth/sharing rules.
148
- 4. Expose the same capability to the UI and agent through actions or documented
149
- client helpers.
150
- 5. Register app-specific labels, routes, resource adapters, and settings panels
151
- instead of hardcoding app names in core UI.
152
- 6. Update docs and relevant skills so future apps discover the shared path.
153
- 7. Keep the component easy to adopt piecemeal: expose props/slots first and
154
- ship readable source plus a complete ejection unit so apps can take ownership
155
- of the smallest feature when needed. See `customizing-agent-native` for the
156
- configure → compose → eject → propose seam ladder.
157
- 8. Keep one controller as the source of truth for the default and custom render
158
- paths. A custom design must not fork actions, analytics, async state, or
159
- accessibility behavior.
160
- 9. Verify the default adapter and at least one non-Tailwind adapter with the
161
- conformance kit, including focus and portal stacking across mixed overlay
162
- implementations.
163
-
164
- ## Related Skills
165
-
166
- Read these alongside this skill when the work touches the specific area:
167
-
168
- - `sharing`
169
- - `real-time-collab`
170
- - `real-time-sync`
171
- - `client-side-routing`
172
- - `context-awareness`
173
- - `onboarding`
174
- - `secrets`
175
- - `audit-log`
176
- - `observability`
177
- - `frontend-design`