@agent-native/core 0.111.4 → 0.113.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 (574) hide show
  1. package/corpus/README.md +4 -2
  2. package/corpus/core/CHANGELOG.md +34 -0
  3. package/corpus/core/docs/AGENTS.md +7 -0
  4. package/corpus/core/docs/content/integrations.mdx +63 -2
  5. package/corpus/core/docs/design/provider-integration-authority.md +117 -0
  6. package/corpus/core/package.json +8 -1
  7. package/corpus/core/scripts/materialize-source-corpus.mjs +9 -2
  8. package/corpus/core/src/cli/atomic-json-file.ts +324 -0
  9. package/corpus/core/src/cli/claude-code-participant.ts +515 -0
  10. package/corpus/core/src/cli/code-agent-executor.ts +35 -15
  11. package/corpus/core/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
  12. package/corpus/core/src/cli/code-agent-runs.ts +70 -36
  13. package/corpus/core/src/cli/codex-cli-participant.ts +496 -0
  14. package/corpus/core/src/cli/multi-frontier-runs.ts +1952 -0
  15. package/corpus/core/src/client/chat/ChatHistoryList.tsx +7 -404
  16. package/corpus/core/src/coding-tools/index.ts +27 -8
  17. package/corpus/core/src/embeddings/index.ts +233 -0
  18. package/corpus/core/src/index.ts +2 -0
  19. package/corpus/core/src/integrations/index.ts +10 -0
  20. package/corpus/core/src/integrations/slack-oauth.ts +1 -0
  21. package/corpus/core/src/integrations/webhook-delivery.ts +55 -0
  22. package/corpus/core/src/notifications/channels.ts +4 -10
  23. package/corpus/core/src/provider-api/actions/custom-provider-registration.ts +197 -0
  24. package/corpus/core/src/provider-api/actions/delete-staged-dataset.ts +3 -42
  25. package/corpus/core/src/provider-api/actions/list-staged-datasets.ts +3 -45
  26. package/corpus/core/src/provider-api/actions/provider-api-audit.ts +88 -0
  27. package/corpus/core/src/provider-api/actions/provider-api.ts +460 -0
  28. package/corpus/core/src/provider-api/actions/query-staged-dataset.ts +3 -140
  29. package/corpus/core/src/provider-api/actions/staged-datasets.ts +359 -0
  30. package/corpus/core/src/provider-api/gong.ts +108 -0
  31. package/corpus/core/src/scripts/docs/source-search.ts +2 -1
  32. package/corpus/core/src/search/index.ts +413 -0
  33. package/corpus/core/src/server/google-oauth-credentials.ts +80 -3
  34. package/corpus/core/src/server/index.ts +6 -0
  35. package/corpus/core/src/styles/chat-history-list.css +1 -313
  36. package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
  37. package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
  38. package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  39. package/corpus/core/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
  40. package/corpus/core/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
  41. package/corpus/core/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
  42. package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
  43. package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  44. package/corpus/core/src/templates/default/AGENTS.md +25 -18
  45. package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
  46. package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
  47. package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  48. package/corpus/core/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
  49. package/corpus/core/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
  50. package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  51. package/corpus/core/src/templates/headless/AGENTS.md +7 -0
  52. package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
  53. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
  54. package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  55. package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  56. package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
  57. package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  58. package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -0
  59. package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -0
  60. package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +32 -12
  61. package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  62. package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +11 -2
  63. package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  64. package/corpus/templates/analytics/actions/delete-staged-dataset.ts +3 -23
  65. package/corpus/templates/analytics/actions/list-staged-datasets.ts +3 -27
  66. package/corpus/templates/analytics/actions/provider-api-catalog.ts +16 -19
  67. package/corpus/templates/analytics/actions/provider-api-docs.ts +3 -5
  68. package/corpus/templates/analytics/actions/provider-api-request.ts +162 -185
  69. package/corpus/templates/analytics/actions/query-staged-dataset.ts +3 -47
  70. package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +52 -161
  71. package/corpus/templates/assets/.agents/skills/actions/SKILL.md +32 -12
  72. package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  73. package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +11 -2
  74. package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  75. package/corpus/templates/assets/app/components/layout/Sidebar.tsx +63 -160
  76. package/corpus/templates/brain/.agents/skills/actions/SKILL.md +32 -12
  77. package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +48 -5
  78. package/corpus/templates/brain/.agents/skills/brain/SKILL.md +46 -14
  79. package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  80. package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +11 -2
  81. package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  82. package/corpus/templates/brain/README.md +34 -3
  83. package/corpus/templates/brain/actions/_schemas.ts +13 -7
  84. package/corpus/templates/brain/actions/approve-proposal.ts +2 -0
  85. package/corpus/templates/brain/actions/claim-distillation.ts +24 -27
  86. package/corpus/templates/brain/actions/create-source.ts +1 -1
  87. package/corpus/templates/brain/actions/delete-staged-dataset.ts +3 -24
  88. package/corpus/templates/brain/actions/get-knowledge.ts +6 -2
  89. package/corpus/templates/brain/actions/get-pilot-report.ts +44 -8
  90. package/corpus/templates/brain/actions/import-capture.ts +21 -9
  91. package/corpus/templates/brain/actions/import-transcript.ts +42 -14
  92. package/corpus/templates/brain/actions/list-captures.ts +10 -1
  93. package/corpus/templates/brain/actions/list-distillation-queue.ts +39 -14
  94. package/corpus/templates/brain/actions/list-projects.ts +51 -0
  95. package/corpus/templates/brain/actions/list-proposals.ts +80 -4
  96. package/corpus/templates/brain/actions/list-sources.ts +17 -3
  97. package/corpus/templates/brain/actions/list-staged-datasets.ts +3 -28
  98. package/corpus/templates/brain/actions/manage-project.ts +118 -0
  99. package/corpus/templates/brain/actions/mark-capture-distilled.ts +68 -20
  100. package/corpus/templates/brain/actions/navigate.ts +1 -0
  101. package/corpus/templates/brain/actions/provider-api-catalog.ts +5 -11
  102. package/corpus/templates/brain/actions/provider-api-docs.ts +3 -5
  103. package/corpus/templates/brain/actions/provider-api-request.ts +3 -37
  104. package/corpus/templates/brain/actions/query-staged-dataset.ts +3 -48
  105. package/corpus/templates/brain/actions/reject-proposal.ts +6 -1
  106. package/corpus/templates/brain/actions/resanitize-captures.ts +159 -33
  107. package/corpus/templates/brain/actions/review-proposal.ts +2 -0
  108. package/corpus/templates/brain/actions/search-everything.ts +10 -1
  109. package/corpus/templates/brain/actions/search-knowledge.ts +1 -1
  110. package/corpus/templates/brain/actions/set-settings.ts +36 -1
  111. package/corpus/templates/brain/actions/update-proposal.ts +2 -0
  112. package/corpus/templates/brain/actions/update-source.ts +5 -1
  113. package/corpus/templates/brain/app/components/layout/Sidebar.tsx +48 -154
  114. package/corpus/templates/brain/app/hooks/use-distillation-bridge.ts +18 -9
  115. package/corpus/templates/brain/app/hooks/use-navigation-state.ts +3 -0
  116. package/corpus/templates/brain/app/i18n-data.ts +731 -2
  117. package/corpus/templates/brain/app/lib/brain.ts +88 -1
  118. package/corpus/templates/brain/app/lib/ingest-handoff.ts +35 -0
  119. package/corpus/templates/brain/app/routes/ops.tsx +47 -0
  120. package/corpus/templates/brain/app/routes/review.tsx +41 -2
  121. package/corpus/templates/brain/app/routes/search.tsx +33 -2
  122. package/corpus/templates/brain/app/routes/settings.tsx +158 -0
  123. package/corpus/templates/brain/app/routes/sources.tsx +31 -0
  124. package/corpus/templates/brain/changelog/2026-07-19-added-private-source-safe-semantic-search.md +6 -0
  125. package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-can-now-join-configured-public-channels-befo.md +6 -0
  126. package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-continue-across-the-configured-number-of.md +6 -0
  127. package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-start-with-a-safe-four-week-window-and-r.md +6 -0
  128. package/corpus/templates/brain/jobs/process-ingest-queue.ts +270 -36
  129. package/corpus/templates/brain/package.json +1 -0
  130. package/corpus/templates/brain/server/db/index.ts +18 -0
  131. package/corpus/templates/brain/server/db/schema.ts +197 -1
  132. package/corpus/templates/brain/server/jobs/distillation-queue.ts +12 -5
  133. package/corpus/templates/brain/server/lib/audiences.ts +708 -0
  134. package/corpus/templates/brain/server/lib/brain-health.ts +251 -38
  135. package/corpus/templates/brain/server/lib/brain.ts +877 -50
  136. package/corpus/templates/brain/server/lib/capture-sanitization.ts +217 -53
  137. package/corpus/templates/brain/server/lib/connectors.ts +609 -72
  138. package/corpus/templates/brain/server/lib/demo.ts +17 -4
  139. package/corpus/templates/brain/server/lib/hybrid-search.ts +363 -0
  140. package/corpus/templates/brain/server/lib/ingest-queue.ts +104 -0
  141. package/corpus/templates/brain/server/lib/privacy-readiness.ts +24 -0
  142. package/corpus/templates/brain/server/lib/search-index-contracts.ts +72 -0
  143. package/corpus/templates/brain/server/lib/search-index.ts +714 -0
  144. package/corpus/templates/brain/server/lib/search.ts +120 -4
  145. package/corpus/templates/brain/server/lib/sensitivity-policy.ts +174 -0
  146. package/corpus/templates/brain/server/lib/slack-channel-membership.ts +44 -0
  147. package/corpus/templates/brain/server/lib/slack-events.ts +281 -0
  148. package/corpus/templates/brain/server/onboarding.ts +29 -0
  149. package/corpus/templates/brain/server/plugins/db.ts +204 -0
  150. package/corpus/templates/brain/server/register-secrets.ts +46 -0
  151. package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +36 -16
  152. package/corpus/templates/brain/server/routes/api/_agent-native/brain/slack-events.post.ts +28 -0
  153. package/corpus/templates/brain/shared/slack-source-config.ts +60 -0
  154. package/corpus/templates/brain/shared/types.ts +10 -0
  155. package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +32 -12
  156. package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  157. package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +11 -2
  158. package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  159. package/corpus/templates/calendar/actions/delete-staged-dataset.ts +3 -24
  160. package/corpus/templates/calendar/actions/list-staged-datasets.ts +3 -28
  161. package/corpus/templates/calendar/actions/provider-api-catalog.ts +5 -11
  162. package/corpus/templates/calendar/actions/provider-api-docs.ts +3 -5
  163. package/corpus/templates/calendar/actions/provider-api-request.ts +3 -37
  164. package/corpus/templates/calendar/actions/query-staged-dataset.ts +3 -48
  165. package/corpus/templates/calendar/server/handlers/gong.ts +6 -61
  166. package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -8
  167. package/corpus/templates/calendar/server/lib/google-calendar.ts +7 -45
  168. package/corpus/templates/chat/.agents/skills/actions/SKILL.md +32 -12
  169. package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
  170. package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  171. package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
  172. package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  173. package/corpus/templates/chat/AGENTS.md +5 -2
  174. package/corpus/templates/chat/app/components/layout/Sidebar.tsx +51 -157
  175. package/corpus/templates/clips/.agents/skills/actions/SKILL.md +32 -12
  176. package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  177. package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +11 -2
  178. package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  179. package/corpus/templates/clips/AGENTS.md +11 -0
  180. package/corpus/templates/clips/actions/export-to-brain.ts +505 -171
  181. package/corpus/templates/clips/changelog/2026-07-19-ready-clips-transcripts-can-be-backfilled-to-brain-for-a-bou.md +6 -0
  182. package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +1 -1
  183. package/corpus/templates/clips/server/lib/google-calendar-client.ts +12 -22
  184. package/corpus/templates/clips/server/lib/google-calendar-oauth.ts +9 -6
  185. package/corpus/templates/clips/server/lib/slack-oauth.ts +12 -47
  186. package/corpus/templates/clips/server/routes/_agent-native/google/auth-url.get.ts +2 -6
  187. package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +4 -4
  188. package/corpus/templates/content/.agents/skills/actions/SKILL.md +32 -12
  189. package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  190. package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +11 -2
  191. package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  192. package/corpus/templates/content/actions/delete-staged-dataset.ts +3 -24
  193. package/corpus/templates/content/actions/list-staged-datasets.ts +3 -28
  194. package/corpus/templates/content/actions/provider-api-catalog.ts +5 -11
  195. package/corpus/templates/content/actions/provider-api-docs.ts +3 -5
  196. package/corpus/templates/content/actions/provider-api-request.ts +3 -37
  197. package/corpus/templates/content/actions/query-staged-dataset.ts +3 -48
  198. package/corpus/templates/design/.agents/skills/actions/SKILL.md +32 -12
  199. package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  200. package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +11 -2
  201. package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  202. package/corpus/templates/design/actions/delete-staged-dataset.ts +4 -23
  203. package/corpus/templates/design/actions/list-staged-datasets.ts +4 -27
  204. package/corpus/templates/design/actions/provider-api-catalog.ts +15 -18
  205. package/corpus/templates/design/actions/provider-api-docs.ts +57 -48
  206. package/corpus/templates/design/actions/provider-api-request.ts +140 -164
  207. package/corpus/templates/design/actions/query-staged-dataset.ts +4 -47
  208. package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +32 -12
  209. package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  210. package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +11 -2
  211. package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  212. package/corpus/templates/dispatch/actions/delete-staged-dataset.ts +4 -23
  213. package/corpus/templates/dispatch/actions/list-staged-datasets.ts +4 -30
  214. package/corpus/templates/dispatch/actions/provider-api-catalog.ts +15 -18
  215. package/corpus/templates/dispatch/actions/provider-api-docs.ts +57 -48
  216. package/corpus/templates/dispatch/actions/provider-api-request.ts +138 -163
  217. package/corpus/templates/dispatch/actions/query-staged-dataset.ts +4 -47
  218. package/corpus/templates/forms/.agents/skills/actions/SKILL.md +32 -12
  219. package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  220. package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +11 -2
  221. package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  222. package/corpus/templates/forms/server/lib/integrations.ts +23 -22
  223. package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  224. package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  225. package/corpus/templates/mail/.agents/skills/actions/SKILL.md +32 -12
  226. package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  227. package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +11 -2
  228. package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  229. package/corpus/templates/mail/actions/delete-staged-dataset.ts +4 -23
  230. package/corpus/templates/mail/actions/list-staged-datasets.ts +4 -27
  231. package/corpus/templates/mail/actions/provider-api-catalog.ts +15 -18
  232. package/corpus/templates/mail/actions/provider-api-docs.ts +57 -48
  233. package/corpus/templates/mail/actions/provider-api-request.ts +146 -173
  234. package/corpus/templates/mail/actions/query-staged-dataset.ts +4 -47
  235. package/corpus/templates/mail/server/handlers/gong.ts +6 -61
  236. package/corpus/templates/mail/server/lib/google-auth.ts +10 -13
  237. package/corpus/templates/plan/.agents/skills/actions/SKILL.md +32 -12
  238. package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  239. package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +11 -2
  240. package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  241. package/corpus/templates/plan/app/components/layout/Sidebar.tsx +47 -156
  242. package/corpus/templates/slides/.agents/skills/actions/SKILL.md +32 -12
  243. package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  244. package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +11 -2
  245. package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  246. package/corpus/templates/slides/actions/delete-staged-dataset.ts +4 -23
  247. package/corpus/templates/slides/actions/list-staged-datasets.ts +4 -27
  248. package/corpus/templates/slides/actions/provider-api-catalog.ts +15 -18
  249. package/corpus/templates/slides/actions/provider-api-docs.ts +57 -48
  250. package/corpus/templates/slides/actions/provider-api-request.ts +145 -172
  251. package/corpus/templates/slides/actions/query-staged-dataset.ts +4 -47
  252. package/corpus/templates/slides/server/lib/google-docs-oauth.ts +11 -36
  253. package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +32 -12
  254. package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +10 -0
  255. package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  256. package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +11 -2
  257. package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  258. package/corpus/toolkit/CHANGELOG.md +125 -0
  259. package/corpus/toolkit/README.md +60 -0
  260. package/corpus/toolkit/export-snapshot.json +35 -0
  261. package/corpus/toolkit/migration-manifest.json +4 -0
  262. package/corpus/toolkit/package.json +281 -0
  263. package/corpus/toolkit/scripts/finalize-build.mjs +55 -0
  264. package/corpus/toolkit/src/app-shell/header-actions.tsx +84 -0
  265. package/corpus/toolkit/src/app-shell/index.ts +1 -0
  266. package/corpus/toolkit/src/chat-history/ChatHistoryList.tsx +469 -0
  267. package/corpus/toolkit/src/chat-history/index.ts +7 -0
  268. package/corpus/toolkit/src/chat-history.css +314 -0
  269. package/corpus/toolkit/src/collab-ui/AgentPresenceChip.tsx +69 -0
  270. package/corpus/toolkit/src/collab-ui/LiveCursorOverlay.tsx +241 -0
  271. package/corpus/toolkit/src/collab-ui/PresenceBar.tsx +346 -0
  272. package/corpus/toolkit/src/collab-ui/RecentEditHighlights.tsx +225 -0
  273. package/corpus/toolkit/src/collab-ui/RemoteSelectionRings.tsx +227 -0
  274. package/corpus/toolkit/src/collab-ui/agent-identity.ts +16 -0
  275. package/corpus/toolkit/src/collab-ui/index.ts +39 -0
  276. package/corpus/toolkit/src/collab-ui/lead-client.ts +32 -0
  277. package/corpus/toolkit/src/collab-ui/types.ts +96 -0
  278. package/corpus/toolkit/src/composer/AgentComposerFrame.tsx +59 -0
  279. package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +983 -0
  280. package/corpus/toolkit/src/composer/MentionPopover.tsx +412 -0
  281. package/corpus/toolkit/src/composer/PastedTextChip.tsx +150 -0
  282. package/corpus/toolkit/src/composer/PromptComposer.tsx +718 -0
  283. package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +856 -0
  284. package/corpus/toolkit/src/composer/TiptapComposer.tsx +2936 -0
  285. package/corpus/toolkit/src/composer/VoiceButton.tsx +255 -0
  286. package/corpus/toolkit/src/composer/asset-picker-url.ts +80 -0
  287. package/corpus/toolkit/src/composer/attachment-accept.ts +71 -0
  288. package/corpus/toolkit/src/composer/draft-key.ts +7 -0
  289. package/corpus/toolkit/src/composer/extensions/FileReference.tsx +55 -0
  290. package/corpus/toolkit/src/composer/extensions/MentionReference.tsx +93 -0
  291. package/corpus/toolkit/src/composer/extensions/SkillReference.tsx +56 -0
  292. package/corpus/toolkit/src/composer/index.ts +79 -0
  293. package/corpus/toolkit/src/composer/pasted-text.ts +160 -0
  294. package/corpus/toolkit/src/composer/prompt-attachments.ts +93 -0
  295. package/corpus/toolkit/src/composer/realtime-voice-audio-level.ts +64 -0
  296. package/corpus/toolkit/src/composer/realtime-voice-transcript.ts +134 -0
  297. package/corpus/toolkit/src/composer/runtime-adapters.tsx +343 -0
  298. package/corpus/toolkit/src/composer/types.ts +66 -0
  299. package/corpus/toolkit/src/composer/use-file-search.ts +64 -0
  300. package/corpus/toolkit/src/composer/use-mention-search.ts +90 -0
  301. package/corpus/toolkit/src/composer/use-skills.ts +45 -0
  302. package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +2117 -0
  303. package/corpus/toolkit/src/composer/useVoiceDictation.ts +1191 -0
  304. package/corpus/toolkit/src/context-ui/ContextMeter.tsx +101 -0
  305. package/corpus/toolkit/src/context-ui/ContextSegmentRow.tsx +184 -0
  306. package/corpus/toolkit/src/context-ui/ContextTreemap.tsx +125 -0
  307. package/corpus/toolkit/src/context-ui/ContextXRayPanel.tsx +377 -0
  308. package/corpus/toolkit/src/context-ui/format.ts +42 -0
  309. package/corpus/toolkit/src/context-ui/index.ts +15 -0
  310. package/corpus/toolkit/src/context-ui/types.ts +43 -0
  311. package/corpus/toolkit/src/design-tweaks/index.ts +1 -0
  312. package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +1084 -0
  313. package/corpus/toolkit/src/editor/BubbleToolbar.tsx +253 -0
  314. package/corpus/toolkit/src/editor/CodeBlockNode.tsx +254 -0
  315. package/corpus/toolkit/src/editor/DragHandle.ts +1437 -0
  316. package/corpus/toolkit/src/editor/ImageExtension.ts +306 -0
  317. package/corpus/toolkit/src/editor/RegistryBlockContext.tsx +107 -0
  318. package/corpus/toolkit/src/editor/RegistryBlockNode.tsx +652 -0
  319. package/corpus/toolkit/src/editor/RichMarkdownEditor.tsx +81 -0
  320. package/corpus/toolkit/src/editor/RunId.ts +61 -0
  321. package/corpus/toolkit/src/editor/SharedRichEditor.tsx +321 -0
  322. package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +310 -0
  323. package/corpus/toolkit/src/editor/extensions.ts +402 -0
  324. package/corpus/toolkit/src/editor/gfmDoc.ts +92 -0
  325. package/corpus/toolkit/src/editor/index.ts +93 -0
  326. package/corpus/toolkit/src/editor/registrySlashCommands.ts +131 -0
  327. package/corpus/toolkit/src/editor/surgical-apply.ts +192 -0
  328. package/corpus/toolkit/src/editor/useCollabReconcile.ts +589 -0
  329. package/corpus/toolkit/src/editor.css +510 -0
  330. package/corpus/toolkit/src/hooks/index.ts +2 -0
  331. package/corpus/toolkit/src/hooks/use-mobile.tsx +21 -0
  332. package/corpus/toolkit/src/hooks/use-toast.ts +188 -0
  333. package/corpus/toolkit/src/index.ts +8 -0
  334. package/corpus/toolkit/src/onboarding/index.ts +1 -0
  335. package/corpus/toolkit/src/provider.tsx +47 -0
  336. package/corpus/toolkit/src/sharing/VisibilityBadge.tsx +37 -0
  337. package/corpus/toolkit/src/sharing/index.ts +4 -0
  338. package/corpus/toolkit/src/styles.css +21 -0
  339. package/corpus/toolkit/src/ui/accordion.tsx +56 -0
  340. package/corpus/toolkit/src/ui/alert-dialog.tsx +141 -0
  341. package/corpus/toolkit/src/ui/alert.tsx +59 -0
  342. package/corpus/toolkit/src/ui/aspect-ratio.tsx +5 -0
  343. package/corpus/toolkit/src/ui/avatar.tsx +48 -0
  344. package/corpus/toolkit/src/ui/badge.tsx +37 -0
  345. package/corpus/toolkit/src/ui/breadcrumb.tsx +115 -0
  346. package/corpus/toolkit/src/ui/button.tsx +78 -0
  347. package/corpus/toolkit/src/ui/calendar.tsx +214 -0
  348. package/corpus/toolkit/src/ui/card.tsx +86 -0
  349. package/corpus/toolkit/src/ui/carousel.tsx +260 -0
  350. package/corpus/toolkit/src/ui/chart.tsx +375 -0
  351. package/corpus/toolkit/src/ui/checkbox.tsx +28 -0
  352. package/corpus/toolkit/src/ui/collapsible.tsx +9 -0
  353. package/corpus/toolkit/src/ui/command.tsx +174 -0
  354. package/corpus/toolkit/src/ui/context-menu.tsx +202 -0
  355. package/corpus/toolkit/src/ui/date-picker.tsx +64 -0
  356. package/corpus/toolkit/src/ui/dialog.tsx +146 -0
  357. package/corpus/toolkit/src/ui/drawer.tsx +126 -0
  358. package/corpus/toolkit/src/ui/dropdown-menu.tsx +218 -0
  359. package/corpus/toolkit/src/ui/form.tsx +177 -0
  360. package/corpus/toolkit/src/ui/hover-card.tsx +27 -0
  361. package/corpus/toolkit/src/ui/index.ts +52 -0
  362. package/corpus/toolkit/src/ui/input-otp.tsx +69 -0
  363. package/corpus/toolkit/src/ui/input.tsx +22 -0
  364. package/corpus/toolkit/src/ui/label.tsx +24 -0
  365. package/corpus/toolkit/src/ui/logo.tsx +36 -0
  366. package/corpus/toolkit/src/ui/menubar.tsx +235 -0
  367. package/corpus/toolkit/src/ui/navigation-menu.tsx +128 -0
  368. package/corpus/toolkit/src/ui/pagination.tsx +121 -0
  369. package/corpus/toolkit/src/ui/popover.tsx +44 -0
  370. package/corpus/toolkit/src/ui/progress.tsx +26 -0
  371. package/corpus/toolkit/src/ui/radio-group.tsx +42 -0
  372. package/corpus/toolkit/src/ui/resizable.tsx +43 -0
  373. package/corpus/toolkit/src/ui/scroll-area.tsx +46 -0
  374. package/corpus/toolkit/src/ui/select.tsx +158 -0
  375. package/corpus/toolkit/src/ui/separator.tsx +29 -0
  376. package/corpus/toolkit/src/ui/sheet.tsx +160 -0
  377. package/corpus/toolkit/src/ui/sidebar.tsx +777 -0
  378. package/corpus/toolkit/src/ui/skeleton.tsx +18 -0
  379. package/corpus/toolkit/src/ui/slider.tsx +26 -0
  380. package/corpus/toolkit/src/ui/sonner.tsx +58 -0
  381. package/corpus/toolkit/src/ui/spinner.tsx +17 -0
  382. package/corpus/toolkit/src/ui/switch.tsx +27 -0
  383. package/corpus/toolkit/src/ui/table.tsx +117 -0
  384. package/corpus/toolkit/src/ui/tabs.tsx +53 -0
  385. package/corpus/toolkit/src/ui/textarea.tsx +23 -0
  386. package/corpus/toolkit/src/ui/toast.tsx +127 -0
  387. package/corpus/toolkit/src/ui/toaster.tsx +33 -0
  388. package/corpus/toolkit/src/ui/toggle-group.tsx +59 -0
  389. package/corpus/toolkit/src/ui/toggle.tsx +43 -0
  390. package/corpus/toolkit/src/ui/tooltip.tsx +53 -0
  391. package/corpus/toolkit/src/ui/use-toast.ts +3 -0
  392. package/corpus/toolkit/src/utils.ts +8 -0
  393. package/corpus/toolkit/tsconfig.json +23 -0
  394. package/dist/cli/atomic-json-file.d.ts +30 -0
  395. package/dist/cli/atomic-json-file.d.ts.map +1 -0
  396. package/dist/cli/atomic-json-file.js +240 -0
  397. package/dist/cli/atomic-json-file.js.map +1 -0
  398. package/dist/cli/claude-code-participant.d.ts +77 -0
  399. package/dist/cli/claude-code-participant.d.ts.map +1 -0
  400. package/dist/cli/claude-code-participant.js +355 -0
  401. package/dist/cli/claude-code-participant.js.map +1 -0
  402. package/dist/cli/code-agent-executor.d.ts +8 -9
  403. package/dist/cli/code-agent-executor.d.ts.map +1 -1
  404. package/dist/cli/code-agent-executor.js +27 -13
  405. package/dist/cli/code-agent-executor.js.map +1 -1
  406. package/dist/cli/code-agent-runs.concurrent-worker.d.ts +2 -0
  407. package/dist/cli/code-agent-runs.concurrent-worker.d.ts.map +1 -0
  408. package/dist/cli/code-agent-runs.concurrent-worker.js +32 -0
  409. package/dist/cli/code-agent-runs.concurrent-worker.js.map +1 -0
  410. package/dist/cli/code-agent-runs.d.ts +5 -0
  411. package/dist/cli/code-agent-runs.d.ts.map +1 -1
  412. package/dist/cli/code-agent-runs.js +51 -33
  413. package/dist/cli/code-agent-runs.js.map +1 -1
  414. package/dist/cli/codex-cli-participant.d.ts +77 -0
  415. package/dist/cli/codex-cli-participant.d.ts.map +1 -0
  416. package/dist/cli/codex-cli-participant.js +354 -0
  417. package/dist/cli/codex-cli-participant.js.map +1 -0
  418. package/dist/cli/multi-frontier-runs.d.ts +246 -0
  419. package/dist/cli/multi-frontier-runs.d.ts.map +1 -0
  420. package/dist/cli/multi-frontier-runs.js +1247 -0
  421. package/dist/cli/multi-frontier-runs.js.map +1 -0
  422. package/dist/client/chat/ChatHistoryList.d.ts +1 -87
  423. package/dist/client/chat/ChatHistoryList.d.ts.map +1 -1
  424. package/dist/client/chat/ChatHistoryList.js +1 -82
  425. package/dist/client/chat/ChatHistoryList.js.map +1 -1
  426. package/dist/coding-tools/index.d.ts +1 -0
  427. package/dist/coding-tools/index.d.ts.map +1 -1
  428. package/dist/coding-tools/index.js +25 -7
  429. package/dist/coding-tools/index.js.map +1 -1
  430. package/dist/collab/awareness.d.ts +2 -2
  431. package/dist/collab/awareness.d.ts.map +1 -1
  432. package/dist/embeddings/index.d.ts +24 -0
  433. package/dist/embeddings/index.d.ts.map +1 -0
  434. package/dist/embeddings/index.js +172 -0
  435. package/dist/embeddings/index.js.map +1 -0
  436. package/dist/index.d.ts +2 -0
  437. package/dist/index.d.ts.map +1 -1
  438. package/dist/index.js +2 -0
  439. package/dist/index.js.map +1 -1
  440. package/dist/integrations/index.d.ts +2 -1
  441. package/dist/integrations/index.d.ts.map +1 -1
  442. package/dist/integrations/index.js +2 -1
  443. package/dist/integrations/index.js.map +1 -1
  444. package/dist/integrations/slack-manifest.d.ts +1 -1
  445. package/dist/integrations/slack-oauth.d.ts +1 -1
  446. package/dist/integrations/slack-oauth.d.ts.map +1 -1
  447. package/dist/integrations/slack-oauth.js +1 -0
  448. package/dist/integrations/slack-oauth.js.map +1 -1
  449. package/dist/integrations/webhook-delivery.d.ts +23 -0
  450. package/dist/integrations/webhook-delivery.d.ts.map +1 -0
  451. package/dist/integrations/webhook-delivery.js +32 -0
  452. package/dist/integrations/webhook-delivery.js.map +1 -0
  453. package/dist/notifications/channels.d.ts.map +1 -1
  454. package/dist/notifications/channels.js +4 -9
  455. package/dist/notifications/channels.js.map +1 -1
  456. package/dist/notifications/routes.d.ts +3 -3
  457. package/dist/progress/routes.d.ts +1 -1
  458. package/dist/provider-api/actions/custom-provider-registration.d.ts +136 -0
  459. package/dist/provider-api/actions/custom-provider-registration.d.ts.map +1 -0
  460. package/dist/provider-api/actions/custom-provider-registration.js +154 -0
  461. package/dist/provider-api/actions/custom-provider-registration.js.map +1 -0
  462. package/dist/provider-api/actions/delete-staged-dataset.d.ts +1 -1
  463. package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -1
  464. package/dist/provider-api/actions/delete-staged-dataset.js +3 -34
  465. package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -1
  466. package/dist/provider-api/actions/list-staged-datasets.d.ts +2 -3
  467. package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -1
  468. package/dist/provider-api/actions/list-staged-datasets.js +3 -40
  469. package/dist/provider-api/actions/list-staged-datasets.js.map +1 -1
  470. package/dist/provider-api/actions/provider-api-audit.d.ts +7 -0
  471. package/dist/provider-api/actions/provider-api-audit.d.ts.map +1 -0
  472. package/dist/provider-api/actions/provider-api-audit.js +74 -0
  473. package/dist/provider-api/actions/provider-api-audit.js.map +1 -0
  474. package/dist/provider-api/actions/provider-api.d.ts +370 -0
  475. package/dist/provider-api/actions/provider-api.d.ts.map +1 -0
  476. package/dist/provider-api/actions/provider-api.js +280 -0
  477. package/dist/provider-api/actions/provider-api.js.map +1 -0
  478. package/dist/provider-api/actions/query-staged-dataset.d.ts +1 -1
  479. package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -1
  480. package/dist/provider-api/actions/query-staged-dataset.js +3 -116
  481. package/dist/provider-api/actions/query-staged-dataset.js.map +1 -1
  482. package/dist/provider-api/actions/staged-datasets.d.ts +190 -0
  483. package/dist/provider-api/actions/staged-datasets.d.ts.map +1 -0
  484. package/dist/provider-api/actions/staged-datasets.js +210 -0
  485. package/dist/provider-api/actions/staged-datasets.js.map +1 -0
  486. package/dist/provider-api/gong.d.ts +44 -0
  487. package/dist/provider-api/gong.d.ts.map +1 -0
  488. package/dist/provider-api/gong.js +56 -0
  489. package/dist/provider-api/gong.js.map +1 -0
  490. package/dist/resources/handlers.d.ts +1 -1
  491. package/dist/scripts/docs/source-search.d.ts +2 -1
  492. package/dist/scripts/docs/source-search.d.ts.map +1 -1
  493. package/dist/scripts/docs/source-search.js +2 -1
  494. package/dist/scripts/docs/source-search.js.map +1 -1
  495. package/dist/search/index.d.ts +88 -0
  496. package/dist/search/index.d.ts.map +1 -0
  497. package/dist/search/index.js +267 -0
  498. package/dist/search/index.js.map +1 -0
  499. package/dist/server/agent-engine-api-key-route.d.ts +1 -1
  500. package/dist/server/google-oauth-credentials.d.ts +35 -0
  501. package/dist/server/google-oauth-credentials.d.ts.map +1 -1
  502. package/dist/server/google-oauth-credentials.js +48 -2
  503. package/dist/server/google-oauth-credentials.js.map +1 -1
  504. package/dist/server/index.d.ts +1 -1
  505. package/dist/server/index.d.ts.map +1 -1
  506. package/dist/server/index.js +1 -1
  507. package/dist/server/index.js.map +1 -1
  508. package/dist/styles/chat-history-list.css +1 -313
  509. package/dist/templates/chat/.agents/skills/actions/SKILL.md +32 -12
  510. package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
  511. package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  512. package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
  513. package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  514. package/dist/templates/chat/AGENTS.md +5 -2
  515. package/dist/templates/chat/app/components/layout/Sidebar.tsx +51 -157
  516. package/dist/templates/default/.agents/skills/actions/SKILL.md +32 -12
  517. package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
  518. package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  519. package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
  520. package/dist/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
  521. package/dist/templates/default/.agents/skills/secrets/SKILL.md +273 -0
  522. package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
  523. package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  524. package/dist/templates/default/AGENTS.md +25 -18
  525. package/dist/templates/headless/.agents/skills/actions/SKILL.md +512 -0
  526. package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
  527. package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  528. package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
  529. package/dist/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
  530. package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  531. package/dist/templates/headless/AGENTS.md +7 -0
  532. package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
  533. package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
  534. package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  535. package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  536. package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
  537. package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  538. package/dist/templates/workspace-core/AGENTS.md +4 -0
  539. package/dist/templates/workspace-root/AGENTS.md +4 -0
  540. package/docs/AGENTS.md +7 -0
  541. package/docs/content/integrations.mdx +63 -2
  542. package/docs/design/provider-integration-authority.md +117 -0
  543. package/package.json +9 -2
  544. package/src/templates/chat/.agents/skills/actions/SKILL.md +32 -12
  545. package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
  546. package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  547. package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
  548. package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  549. package/src/templates/chat/AGENTS.md +5 -2
  550. package/src/templates/chat/app/components/layout/Sidebar.tsx +51 -157
  551. package/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
  552. package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
  553. package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  554. package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
  555. package/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
  556. package/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
  557. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
  558. package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  559. package/src/templates/default/AGENTS.md +25 -18
  560. package/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
  561. package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
  562. package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  563. package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
  564. package/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
  565. package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  566. package/src/templates/headless/AGENTS.md +7 -0
  567. package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
  568. package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
  569. package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
  570. package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
  571. package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
  572. package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
  573. package/src/templates/workspace-core/AGENTS.md +4 -0
  574. package/src/templates/workspace-root/AGENTS.md +4 -0
@@ -8,6 +8,8 @@ import {
8
8
  import {
9
9
  isOAuthConnected,
10
10
  getOAuthAccounts,
11
+ GOOGLE_PRIMARY_PROVIDER_CREDENTIAL_KEYS,
12
+ resolveGoogleProviderCredentialCandidatesWithReader,
11
13
  resolveSecret,
12
14
  runWithRequestContext,
13
15
  } from "@agent-native/core/server";
@@ -58,25 +60,20 @@ export async function getOAuth2Credentials(owner?: string): Promise<{
58
60
  clientId: string;
59
61
  clientSecret: string;
60
62
  }> {
61
- const resolve = async () => {
62
- const [clientId, clientSecret] = await Promise.all([
63
- resolveSecret("GOOGLE_CLIENT_ID"),
64
- resolveSecret("GOOGLE_CLIENT_SECRET"),
65
- ]);
66
- if (!clientId || !clientSecret) return null;
67
- return { clientId, clientSecret };
68
- };
69
- const credentials = owner
63
+ const resolve = () =>
64
+ resolveGoogleProviderCredentialCandidatesWithReader({
65
+ readCredential: resolveSecret,
66
+ credentialKeyPairs: [GOOGLE_PRIMARY_PROVIDER_CREDENTIAL_KEYS],
67
+ });
68
+ const [credentials] = owner
70
69
  ? await runWithRequestContext({ userEmail: owner }, resolve)
71
70
  : await resolve();
72
- const clientId = credentials?.clientId;
73
- const clientSecret = credentials?.clientSecret;
74
- if (!clientId || !clientSecret) {
71
+ if (!credentials) {
75
72
  throw new Error(
76
73
  "GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET must be saved in settings",
77
74
  );
78
75
  }
79
- return { clientId, clientSecret };
76
+ return credentials;
80
77
  }
81
78
 
82
79
  /**
@@ -121,18 +121,38 @@ action trio instead:
121
121
  provider host, injects configured credentials, blocks private/internal URLs,
122
122
  and redacts secrets.
123
123
 
124
- Use `@agent-native/core/provider-api` as the shared substrate. A template should
125
- only add a thin credential adapter when it has app-specific credential lookup
126
- rules. If the app stores a built-in provider's OAuth grant under a narrower
127
- local provider id, use the runtime's `oauthProviderOverrides` instead of
128
- duplicating the provider config. If credentials are stored on shareable/resource
129
- rows rather than in the shared credential or OAuth-token stores, build a resolver
130
- that enforces those access checks before exposing raw provider requests. Keep
131
- `provider-api-request` `http: false` unless you have a separate UI permission
132
- model for arbitrary provider writes. Specific actions such as `search-records`,
133
- `search-emails`, or `sync-source` are convenience shortcuts, not capability
134
- limits; agents should fall back to the provider API trio when a question
135
- requires an endpoint or filter that the shortcut does not model.
124
+ Use `@agent-native/core/provider-api` as the shared substrate, and build these
125
+ actions as thin factory imports rather than copying `defineAction` schemas and
126
+ handlers into each template:
127
+
128
+ ```ts
129
+ import {
130
+ createProviderApiCatalogAction,
131
+ createProviderApiDocsAction,
132
+ createProviderApiRequestAction,
133
+ } from "@agent-native/core/provider-api/actions/provider-api";
134
+ import {
135
+ createDeleteStagedDatasetAction,
136
+ createListStagedDatasetsAction,
137
+ createQueryStagedDatasetAction,
138
+ } from "@agent-native/core/provider-api/actions/staged-datasets";
139
+ ```
140
+
141
+ Pass the app's existing provider runtime to the provider factories, and pass
142
+ its app id to the staged-dataset factories. Keep app-specific descriptions,
143
+ provider allow-lists, HTTP/tool-callability settings, and credential adapters
144
+ as factory options. Only add a thin credential adapter when the app has
145
+ app-specific credential lookup rules. If the app stores a built-in provider's
146
+ OAuth grant under a narrower local provider id, use the runtime's
147
+ `oauthProviderOverrides` instead of duplicating provider config. If credentials
148
+ are stored on shareable/resource rows rather than in the shared credential or
149
+ OAuth-token stores, build a resolver that enforces those access checks before
150
+ exposing raw provider requests. Keep `provider-api-request` `http: false`
151
+ unless a separate UI permission model authorizes arbitrary provider writes.
152
+ Specific actions such as `search-records`, `search-emails`, or `sync-source`
153
+ are convenience shortcuts, not capability limits; agents should fall back to
154
+ the provider API trio when a question requires an endpoint or filter that the
155
+ shortcut does not model.
136
156
 
137
157
  This is a framework tenet. The safety boundary should be provider host
138
158
  allow-listing, credential scoping, auth injection, private-network blocking,
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: customizing-agent-native
3
+ description: >-
4
+ How to adopt, compose, or selectively copy Agent Native UI into app-owned
5
+ code. Use when overriding shared components, customizing a template, adding
6
+ UI to chat or headless apps, or inspecting installed framework source.
7
+ scope: dev
8
+ metadata:
9
+ internal: true
10
+ ---
11
+
12
+ # Customizing Agent Native
13
+
14
+ ## Rule
15
+
16
+ Start with the public component and its props, slots, callbacks, and stable
17
+ class names. If those seams are not enough, copy the smallest useful reference
18
+ implementation into the app and make that copy app-owned. Never edit
19
+ `node_modules`, deep-import a private source file at runtime, or patch an
20
+ `@agent-native/*` package.
21
+
22
+ Use this order:
23
+
24
+ 1. Configure the public component.
25
+ 2. Compose public primitives behind a local app component.
26
+ 3. Copy one component or helper into app source and change the app import.
27
+ 4. Propose a new Toolkit seam when the same override is useful in two apps.
28
+
29
+ Copying is for intentional product customization, not for hiding an upgrade
30
+ failure or replacing Core runtime behavior.
31
+
32
+ ## Find The Installed Implementation
33
+
34
+ Use the source that matches the installed package version:
35
+
36
+ ```bash
37
+ pnpm action docs-search --query "<component or feature>"
38
+ pnpm action source-search --query "<component or symbol>"
39
+ rg -n "<component or symbol>" node_modules/@agent-native/toolkit/src
40
+ rg -n "<component or symbol>" node_modules/@agent-native/core/corpus
41
+ ```
42
+
43
+ - Toolkit publishes readable TypeScript under
44
+ `node_modules/@agent-native/toolkit/src/` for selective UI adoption.
45
+ - Core and first-party template source lives under
46
+ `node_modules/@agent-native/core/corpus/core/` and
47
+ `node_modules/@agent-native/core/corpus/templates/`.
48
+ - Treat those trees as read-only references. Copy files into an app directory
49
+ such as `app/components/`, then import the local copy.
50
+
51
+ When a copied component imports sibling helpers, copy only the required
52
+ siblings or replace them with public package imports. Do not copy an entire
53
+ package or template to change one surface.
54
+
55
+ ## Preserve The Agent-Native Contract
56
+
57
+ UI ownership may change; product contracts should not:
58
+
59
+ - Keep app operations in `defineAction` actions and call them through
60
+ `useActionQuery`, `useActionMutation`, or another named client helper.
61
+ - Keep navigation, selection, and focused-object state visible through the
62
+ existing application-state keys.
63
+ - Keep AI work in the shared agent chat instead of adding direct LLM calls.
64
+ - Keep auth, access checks, persistence, chat transport, and agent execution in
65
+ Core. Do not copy those runtimes into the app.
66
+ - Keep local adapters narrow so package upgrades still improve every surface
67
+ the app has not intentionally taken ownership of.
68
+
69
+ ## App Shapes
70
+
71
+ - **Template app:** begin with its existing local adapters and domain UI. Use
72
+ Toolkit for repeated workspace UI; copy only the piece being customized.
73
+ - **Chat app:** keep `AgentChatSurface`, thread state, and chat transport in
74
+ Core. Compose or copy Toolkit presentation such as chat-history UI around it.
75
+ - **Headless app:** stay action-first while no UI is needed. When adding a UI,
76
+ use the Chat template as the on-ramp or add Toolkit components without
77
+ replacing the existing actions.
78
+ - **Workspace:** put one-app overrides in that app. Promote a local component
79
+ to `packages/shared` only when multiple workspace apps use it.
80
+
81
+ ## After Copying
82
+
83
+ - Remove unused dependencies and imports from the copied file.
84
+ - Keep visible text in the app's localization catalogs.
85
+ - Run the app's formatter, typecheck, and focused tests.
86
+ - Re-check the installed source during future package upgrades; the app-owned
87
+ copy does not receive upstream fixes automatically.
88
+
89
+ ## Don't
90
+
91
+ - Don't edit or import from `node_modules/@agent-native/*/src` at runtime.
92
+ - Don't add `pnpm.overrides`, patches, or resolutions for Agent Native packages.
93
+ - Don't copy Core auth, DB, action, agent-loop, or transport internals.
94
+ - Don't fork a full template when a prop, slot, wrapper, or one-file copy works.
95
+
96
+ ## Related Skills
97
+
98
+ - `agent-native-docs` — version-matched docs and source lookup
99
+ - `agent-native-toolkit` — shared-vs-app-owned architecture boundary
100
+ - `self-modifying-code` — safe app source edits
101
+ - `upgrade-agent-native` — supported package upgrade path
102
+ - `adding-a-feature` — UI/action/instructions/application-state parity
@@ -35,8 +35,14 @@ Tier 4 includes **all** of the following — not only editing package source:
35
35
  - Files under `node_modules/@agent-native/*` (core, dispatch, scheduling, …)
36
36
  - `pnpm.overrides`, `overrides`, `resolutions`, or `patchedDependencies` that
37
37
  target any `@agent-native/*` package
38
- - Local patches, vendored copies, or invented "dispatch/core behavior"
39
- shims meant to paper over a version skew or failed upgrade
38
+ - Local package patches or invented "dispatch/core behavior" shims meant to
39
+ paper over a version skew or failed upgrade
40
+
41
+ This does not prohibit intentional app-owned UI customization. When public
42
+ props and composition are insufficient, the `customizing-agent-native` skill
43
+ allows copying the smallest reference UI component from the installed source
44
+ into the app. The copy must use public runtime contracts and must not replace
45
+ Core auth, DB, actions, agent execution, or transport behavior.
40
46
 
41
47
  When an older branch needs current packages, use **`agent-native upgrade`**
42
48
  (see the `upgrade-agent-native` skill). If upgrade or typecheck fails, fix
@@ -88,6 +94,8 @@ inline strings in components.
88
94
  - Don't modify `.env` files or files containing secrets
89
95
  - Don't modify `@agent-native/core`, `@agent-native/dispatch`, or other
90
96
  `@agent-native/*` package internals (including under `node_modules`)
97
+ - Don't confuse a read-only reference copy with editing package internals: use
98
+ `customizing-agent-native` for selective app-owned UI adoption
91
99
  - Don't add `pnpm.overrides` / `patchedDependencies` / `resolutions` for
92
100
  `@agent-native/*` to "make the app run" after a version bump
93
101
  - Don't invent local dispatch/core behavior overrides when upgrade fails —
@@ -99,6 +107,7 @@ inline strings in components.
99
107
  ## Related Skills
100
108
 
101
109
  - **upgrade-agent-native** — supported path to bring an older app/workspace current
110
+ - **customizing-agent-native** — safe selective adoption of installed reference UI
102
111
  - **storing-data** — Tier 1 modifications (data files) are the safest and most common
103
112
  - **actions** — The agent can create or modify actions to add new capabilities
104
113
  - **delegate-to-agent** — Self-modification requests come through the agent chat
@@ -63,6 +63,11 @@ install → refresh scaffold skills → verify, then fix **app** code only.
63
63
  - Re-run `agent-native upgrade` or `pnpm typecheck`
64
64
  - Stop and ask the user if you cannot fix the app-level error
65
65
 
66
+ Intentional app-level UI customization is a separate workflow. Read
67
+ `customizing-agent-native` when the product needs to own a selectively
68
+ copied component; do not use that path to reproduce framework runtime
69
+ behavior or hide version skew.
70
+
66
71
  4. **Dry-run / partial runs**
67
72
 
68
73
  ```bash
@@ -91,4 +96,5 @@ install → refresh scaffold skills → verify, then fix **app** code only.
91
96
 
92
97
  - **self-modifying-code** — Tier 4: framework packages are off limits
93
98
  - **agent-native-docs** — version-matched docs after the bump
99
+ - **customizing-agent-native** — intentional app-owned UI copies, not upgrade patches
94
100
  - **portability** — keep app code provider-agnostic across upgrades
@@ -17,39 +17,26 @@ import { useT } from "@agent-native/core/client/i18n";
17
17
  import { OrgSwitcher } from "@agent-native/core/client/org";
18
18
  import { FeedbackButton } from "@agent-native/core/client/ui";
19
19
  import {
20
- IconArchive,
20
+ ChatHistoryList,
21
+ type ChatHistoryItem,
22
+ } from "@agent-native/toolkit/chat-history";
23
+ import {
21
24
  IconBrain,
22
25
  IconClipboardCheck,
23
- IconDots,
24
26
  IconEdit,
25
27
  IconLayoutSidebarLeftCollapse,
26
28
  IconLayoutSidebarLeftExpand,
27
29
  IconMessageCircle,
28
- IconPin,
29
30
  IconPlus,
30
31
  IconRefresh,
31
32
  IconSettings,
32
33
  } from "@tabler/icons-react";
33
- import {
34
- useEffect,
35
- useMemo,
36
- useRef,
37
- useState,
38
- type FormEvent,
39
- type MouseEvent,
40
- } from "react";
34
+ import { useEffect, useMemo, useState, type MouseEvent } from "react";
41
35
  import { Link, useLocation, useNavigate } from "react-router";
42
36
  import { toast } from "sonner";
43
37
 
44
38
  import { Badge } from "@/components/ui/badge";
45
39
  import { Button } from "@/components/ui/button";
46
- import {
47
- DropdownMenu,
48
- DropdownMenuContent,
49
- DropdownMenuItem,
50
- DropdownMenuTrigger,
51
- } from "@/components/ui/dropdown-menu";
52
- import { Input } from "@/components/ui/input";
53
40
  import {
54
41
  Popover,
55
42
  PopoverContent,
@@ -175,10 +162,6 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
175
162
  autoCreate: false,
176
163
  restoreActiveThread: false,
177
164
  });
178
- const [renamingThreadId, setRenamingThreadId] = useState<string | null>(null);
179
- const [renameDraft, setRenameDraft] = useState("");
180
- const renameInputRef = useRef<HTMLInputElement | null>(null);
181
- const committingRenameRef = useRef(false);
182
165
 
183
166
  const visibleThreads = useMemo(
184
167
  () =>
@@ -188,6 +171,20 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
188
171
  .slice(0, 8),
189
172
  [threads],
190
173
  );
174
+ const chatItems = useMemo<ChatHistoryItem[]>(
175
+ () =>
176
+ visibleThreads.map((thread) => ({
177
+ id: thread.id,
178
+ title: threadTitle(thread),
179
+ titleText: threadTitle(thread),
180
+ timestamp:
181
+ thread.id === activeThreadId
182
+ ? undefined
183
+ : formatThreadAge(threadUpdatedAt(thread)),
184
+ pinned: Boolean(thread.pinnedAt),
185
+ })),
186
+ [activeThreadId, visibleThreads],
187
+ );
191
188
 
192
189
  useEffect(() => {
193
190
  const refresh = () => refreshThreads();
@@ -208,14 +205,6 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
208
205
  };
209
206
  }, [refreshThreads]);
210
207
 
211
- useEffect(() => {
212
- if (!renamingThreadId) return;
213
- requestAnimationFrame(() => {
214
- renameInputRef.current?.focus();
215
- renameInputRef.current?.select();
216
- });
217
- }, [renamingThreadId]);
218
-
219
208
  if (collapsed) return null;
220
209
 
221
210
  function openThread(threadId: string, options?: { isNew?: boolean }) {
@@ -248,36 +237,10 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
248
237
  }
249
238
  }
250
239
 
251
- function startRenameThread(thread: ChatThreadSummary) {
252
- committingRenameRef.current = false;
253
- setRenameDraft(threadTitle(thread));
254
- setRenamingThreadId(thread.id);
255
- }
256
-
257
- function cancelRenameThread() {
258
- committingRenameRef.current = true;
259
- setRenamingThreadId(null);
260
- setRenameDraft("");
261
- }
262
-
263
- async function commitRenameThread() {
264
- if (committingRenameRef.current) return;
265
- const threadId = renamingThreadId;
266
- const title = renameDraft.trim();
267
- if (!threadId) return;
268
- committingRenameRef.current = true;
269
- setRenamingThreadId(null);
270
- setRenameDraft("");
271
- if (title) {
272
- const renamed = await renameThread(threadId, title);
240
+ function handleRenameThread(threadId: string, title: string) {
241
+ void renameThread(threadId, title).then((renamed) => {
273
242
  if (!renamed) toast.error(t("raw.sidebar.renameChatFailed"));
274
- }
275
- committingRenameRef.current = false;
276
- }
277
-
278
- function handleRenameSubmit(event: FormEvent<HTMLFormElement>) {
279
- event.preventDefault();
280
- void commitRenameThread();
243
+ });
281
244
  }
282
245
 
283
246
  return (
@@ -301,103 +264,31 @@ function PlanChatsSection({ collapsed }: { collapsed: boolean }) {
301
264
  </Tooltip>
302
265
  </div>
303
266
 
304
- <div className="grid gap-0.5">
305
- {visibleThreads.map((thread) => {
306
- const isActive = thread.id === activeThreadId;
307
- const isRenaming = thread.id === renamingThreadId;
308
- return (
309
- <div
310
- key={thread.id}
311
- className={cn(
312
- "group flex h-8 min-w-0 items-center rounded-md text-sm transition-colors",
313
- isActive
314
- ? "bg-sidebar-accent text-sidebar-accent-foreground"
315
- : "text-sidebar-foreground/80 hover:bg-sidebar-accent/65 hover:text-sidebar-accent-foreground",
316
- )}
317
- >
318
- {isRenaming ? (
319
- <form
320
- onSubmit={handleRenameSubmit}
321
- className="flex h-full min-w-0 flex-1 items-center px-1.5"
322
- >
323
- <Input
324
- ref={renameInputRef}
325
- value={renameDraft}
326
- onChange={(event) => setRenameDraft(event.target.value)}
327
- onBlur={() => void commitRenameThread()}
328
- onKeyDown={(event) => {
329
- if (event.key === "Escape") {
330
- event.preventDefault();
331
- cancelRenameThread();
332
- }
333
- }}
334
- maxLength={160}
335
- aria-label={`Rename ${threadTitle(thread)}`}
336
- className="h-6 min-w-0 rounded-sm border-sidebar-border bg-background px-1.5 text-xs"
337
- />
338
- </form>
339
- ) : (
340
- <>
341
- <button
342
- type="button"
343
- onClick={() => openThread(thread.id)}
344
- className="flex h-full min-w-0 flex-1 items-center px-2 text-start outline-none focus-visible:ring-2 focus-visible:ring-ring"
345
- >
346
- <span className="min-w-0 flex-1 truncate">
347
- {threadTitle(thread)}
348
- </span>
349
- </button>
350
- <div className="relative flex size-7 shrink-0 items-center justify-end pe-1">
351
- <span className="text-[11px] text-sidebar-foreground/50 transition-opacity group-hover:opacity-0 group-focus-within:opacity-0">
352
- {isActive ? "" : formatThreadAge(threadUpdatedAt(thread))}
353
- </span>
354
- <DropdownMenu>
355
- <DropdownMenuTrigger asChild>
356
- <button
357
- type="button"
358
- aria-label={`Chat options for ${threadTitle(thread)}`}
359
- className="absolute end-1 flex size-6 items-center justify-center rounded-md text-sidebar-foreground/65 opacity-0 transition-opacity hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring group-hover:opacity-100 group-focus-within:opacity-100 data-[state=open]:opacity-100"
360
- >
361
- <IconDots className="size-4" />
362
- </button>
363
- </DropdownMenuTrigger>
364
- <DropdownMenuContent
365
- align="end"
366
- side="right"
367
- sideOffset={6}
368
- >
369
- <DropdownMenuItem
370
- onSelect={() => startRenameThread(thread)}
371
- >
372
- <IconEdit className="size-4" />
373
- {t("sidebar.renameChat")}
374
- </DropdownMenuItem>
375
- <DropdownMenuItem
376
- onSelect={() =>
377
- void pinThread(thread.id, !thread.pinnedAt)
378
- }
379
- >
380
- <IconPin className="size-4" />
381
- {thread.pinnedAt
382
- ? t("sidebar.unpinChat")
383
- : t("sidebar.pinChat")}
384
- </DropdownMenuItem>
385
- <DropdownMenuItem
386
- className="text-destructive focus:text-destructive"
387
- onSelect={() => void handleArchiveThread(thread.id)}
388
- >
389
- <IconArchive className="size-4" />
390
- {t("sidebar.archiveChat")}
391
- </DropdownMenuItem>
392
- </DropdownMenuContent>
393
- </DropdownMenu>
394
- </div>
395
- </>
396
- )}
397
- </div>
398
- );
399
- })}
400
- </div>
267
+ {visibleThreads.length > 0 && (
268
+ <ChatHistoryList
269
+ items={chatItems}
270
+ activeId={activeThreadId}
271
+ onSelect={(threadId) => openThread(threadId)}
272
+ renameMaxLength={160}
273
+ onTogglePin={(threadId) => {
274
+ const thread = visibleThreads.find((item) => item.id === threadId);
275
+ if (thread) void pinThread(threadId, !thread.pinnedAt);
276
+ }}
277
+ onRename={handleRenameThread}
278
+ onDelete={(threadId) => void handleArchiveThread(threadId)}
279
+ labels={{
280
+ options: (item) => `${t("sidebar.chats")}: ${item.titleText ?? ""}`,
281
+ renameInput: (item) =>
282
+ `${t("sidebar.renameChat")}: ${item.titleText ?? ""}`,
283
+ rename: t("sidebar.renameChat"),
284
+ pin: t("sidebar.pinChat"),
285
+ unpin: t("sidebar.unpinChat"),
286
+ delete: t("sidebar.archiveChat"),
287
+ }}
288
+ variant="rail"
289
+ className="min-w-0"
290
+ />
291
+ )}
401
292
  </div>
402
293
  );
403
294
  }
@@ -121,18 +121,38 @@ action trio instead:
121
121
  provider host, injects configured credentials, blocks private/internal URLs,
122
122
  and redacts secrets.
123
123
 
124
- Use `@agent-native/core/provider-api` as the shared substrate. A template should
125
- only add a thin credential adapter when it has app-specific credential lookup
126
- rules. If the app stores a built-in provider's OAuth grant under a narrower
127
- local provider id, use the runtime's `oauthProviderOverrides` instead of
128
- duplicating the provider config. If credentials are stored on shareable/resource
129
- rows rather than in the shared credential or OAuth-token stores, build a resolver
130
- that enforces those access checks before exposing raw provider requests. Keep
131
- `provider-api-request` `http: false` unless you have a separate UI permission
132
- model for arbitrary provider writes. Specific actions such as `search-records`,
133
- `search-emails`, or `sync-source` are convenience shortcuts, not capability
134
- limits; agents should fall back to the provider API trio when a question
135
- requires an endpoint or filter that the shortcut does not model.
124
+ Use `@agent-native/core/provider-api` as the shared substrate, and build these
125
+ actions as thin factory imports rather than copying `defineAction` schemas and
126
+ handlers into each template:
127
+
128
+ ```ts
129
+ import {
130
+ createProviderApiCatalogAction,
131
+ createProviderApiDocsAction,
132
+ createProviderApiRequestAction,
133
+ } from "@agent-native/core/provider-api/actions/provider-api";
134
+ import {
135
+ createDeleteStagedDatasetAction,
136
+ createListStagedDatasetsAction,
137
+ createQueryStagedDatasetAction,
138
+ } from "@agent-native/core/provider-api/actions/staged-datasets";
139
+ ```
140
+
141
+ Pass the app's existing provider runtime to the provider factories, and pass
142
+ its app id to the staged-dataset factories. Keep app-specific descriptions,
143
+ provider allow-lists, HTTP/tool-callability settings, and credential adapters
144
+ as factory options. Only add a thin credential adapter when the app has
145
+ app-specific credential lookup rules. If the app stores a built-in provider's
146
+ OAuth grant under a narrower local provider id, use the runtime's
147
+ `oauthProviderOverrides` instead of duplicating provider config. If credentials
148
+ are stored on shareable/resource rows rather than in the shared credential or
149
+ OAuth-token stores, build a resolver that enforces those access checks before
150
+ exposing raw provider requests. Keep `provider-api-request` `http: false`
151
+ unless a separate UI permission model authorizes arbitrary provider writes.
152
+ Specific actions such as `search-records`, `search-emails`, or `sync-source`
153
+ are convenience shortcuts, not capability limits; agents should fall back to
154
+ the provider API trio when a question requires an endpoint or filter that the
155
+ shortcut does not model.
136
156
 
137
157
  This is a framework tenet. The safety boundary should be provider host
138
158
  allow-listing, credential scoping, auth injection, private-network blocking,
@@ -0,0 +1,102 @@
1
+ ---
2
+ name: customizing-agent-native
3
+ description: >-
4
+ How to adopt, compose, or selectively copy Agent Native UI into app-owned
5
+ code. Use when overriding shared components, customizing a template, adding
6
+ UI to chat or headless apps, or inspecting installed framework source.
7
+ scope: dev
8
+ metadata:
9
+ internal: true
10
+ ---
11
+
12
+ # Customizing Agent Native
13
+
14
+ ## Rule
15
+
16
+ Start with the public component and its props, slots, callbacks, and stable
17
+ class names. If those seams are not enough, copy the smallest useful reference
18
+ implementation into the app and make that copy app-owned. Never edit
19
+ `node_modules`, deep-import a private source file at runtime, or patch an
20
+ `@agent-native/*` package.
21
+
22
+ Use this order:
23
+
24
+ 1. Configure the public component.
25
+ 2. Compose public primitives behind a local app component.
26
+ 3. Copy one component or helper into app source and change the app import.
27
+ 4. Propose a new Toolkit seam when the same override is useful in two apps.
28
+
29
+ Copying is for intentional product customization, not for hiding an upgrade
30
+ failure or replacing Core runtime behavior.
31
+
32
+ ## Find The Installed Implementation
33
+
34
+ Use the source that matches the installed package version:
35
+
36
+ ```bash
37
+ pnpm action docs-search --query "<component or feature>"
38
+ pnpm action source-search --query "<component or symbol>"
39
+ rg -n "<component or symbol>" node_modules/@agent-native/toolkit/src
40
+ rg -n "<component or symbol>" node_modules/@agent-native/core/corpus
41
+ ```
42
+
43
+ - Toolkit publishes readable TypeScript under
44
+ `node_modules/@agent-native/toolkit/src/` for selective UI adoption.
45
+ - Core and first-party template source lives under
46
+ `node_modules/@agent-native/core/corpus/core/` and
47
+ `node_modules/@agent-native/core/corpus/templates/`.
48
+ - Treat those trees as read-only references. Copy files into an app directory
49
+ such as `app/components/`, then import the local copy.
50
+
51
+ When a copied component imports sibling helpers, copy only the required
52
+ siblings or replace them with public package imports. Do not copy an entire
53
+ package or template to change one surface.
54
+
55
+ ## Preserve The Agent-Native Contract
56
+
57
+ UI ownership may change; product contracts should not:
58
+
59
+ - Keep app operations in `defineAction` actions and call them through
60
+ `useActionQuery`, `useActionMutation`, or another named client helper.
61
+ - Keep navigation, selection, and focused-object state visible through the
62
+ existing application-state keys.
63
+ - Keep AI work in the shared agent chat instead of adding direct LLM calls.
64
+ - Keep auth, access checks, persistence, chat transport, and agent execution in
65
+ Core. Do not copy those runtimes into the app.
66
+ - Keep local adapters narrow so package upgrades still improve every surface
67
+ the app has not intentionally taken ownership of.
68
+
69
+ ## App Shapes
70
+
71
+ - **Template app:** begin with its existing local adapters and domain UI. Use
72
+ Toolkit for repeated workspace UI; copy only the piece being customized.
73
+ - **Chat app:** keep `AgentChatSurface`, thread state, and chat transport in
74
+ Core. Compose or copy Toolkit presentation such as chat-history UI around it.
75
+ - **Headless app:** stay action-first while no UI is needed. When adding a UI,
76
+ use the Chat template as the on-ramp or add Toolkit components without
77
+ replacing the existing actions.
78
+ - **Workspace:** put one-app overrides in that app. Promote a local component
79
+ to `packages/shared` only when multiple workspace apps use it.
80
+
81
+ ## After Copying
82
+
83
+ - Remove unused dependencies and imports from the copied file.
84
+ - Keep visible text in the app's localization catalogs.
85
+ - Run the app's formatter, typecheck, and focused tests.
86
+ - Re-check the installed source during future package upgrades; the app-owned
87
+ copy does not receive upstream fixes automatically.
88
+
89
+ ## Don't
90
+
91
+ - Don't edit or import from `node_modules/@agent-native/*/src` at runtime.
92
+ - Don't add `pnpm.overrides`, patches, or resolutions for Agent Native packages.
93
+ - Don't copy Core auth, DB, action, agent-loop, or transport internals.
94
+ - Don't fork a full template when a prop, slot, wrapper, or one-file copy works.
95
+
96
+ ## Related Skills
97
+
98
+ - `agent-native-docs` — version-matched docs and source lookup
99
+ - `agent-native-toolkit` — shared-vs-app-owned architecture boundary
100
+ - `self-modifying-code` — safe app source edits
101
+ - `upgrade-agent-native` — supported package upgrade path
102
+ - `adding-a-feature` — UI/action/instructions/application-state parity