@agent-native/core 0.6.1 → 0.7.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 (473) hide show
  1. package/README.md +43 -3
  2. package/dist/agent/production-agent.d.ts.map +1 -1
  3. package/dist/agent/production-agent.js +154 -4
  4. package/dist/agent/production-agent.js.map +1 -1
  5. package/dist/agent/types.d.ts +1 -1
  6. package/dist/agent/types.d.ts.map +1 -1
  7. package/dist/cli/create-workspace.d.ts +8 -0
  8. package/dist/cli/create-workspace.d.ts.map +1 -0
  9. package/dist/cli/create-workspace.js +18 -0
  10. package/dist/cli/create-workspace.js.map +1 -0
  11. package/dist/cli/create.d.ts +35 -7
  12. package/dist/cli/create.d.ts.map +1 -1
  13. package/dist/cli/create.js +444 -251
  14. package/dist/cli/create.js.map +1 -1
  15. package/dist/cli/index.js +59 -5
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/workspacify.d.ts +18 -0
  18. package/dist/cli/workspacify.d.ts.map +1 -0
  19. package/dist/cli/workspacify.js +74 -0
  20. package/dist/cli/workspacify.js.map +1 -0
  21. package/dist/client/AgentPanel.d.ts +1 -1
  22. package/dist/client/AgentPanel.d.ts.map +1 -1
  23. package/dist/client/AgentPanel.js +63 -225
  24. package/dist/client/AgentPanel.js.map +1 -1
  25. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  26. package/dist/client/components/CodeRequiredDialog.js +86 -5
  27. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  28. package/dist/client/composer/MentionPopover.d.ts.map +1 -1
  29. package/dist/client/composer/MentionPopover.js +15 -2
  30. package/dist/client/composer/MentionPopover.js.map +1 -1
  31. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  32. package/dist/client/composer/TiptapComposer.js +3 -1
  33. package/dist/client/composer/TiptapComposer.js.map +1 -1
  34. package/dist/client/composer/types.d.ts +1 -1
  35. package/dist/client/composer/types.d.ts.map +1 -1
  36. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  37. package/dist/client/integrations/IntegrationsPanel.js +22 -9
  38. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  39. package/dist/client/onboarding/OnboardingBanner.d.ts +13 -0
  40. package/dist/client/onboarding/OnboardingBanner.d.ts.map +1 -0
  41. package/dist/client/onboarding/OnboardingBanner.js +36 -0
  42. package/dist/client/onboarding/OnboardingBanner.js.map +1 -0
  43. package/dist/client/onboarding/OnboardingPanel.d.ts +16 -0
  44. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -0
  45. package/dist/client/onboarding/OnboardingPanel.js +360 -0
  46. package/dist/client/onboarding/OnboardingPanel.js.map +1 -0
  47. package/dist/client/onboarding/SetupButton.d.ts +10 -0
  48. package/dist/client/onboarding/SetupButton.d.ts.map +1 -0
  49. package/dist/client/onboarding/SetupButton.js +26 -0
  50. package/dist/client/onboarding/SetupButton.js.map +1 -0
  51. package/dist/client/onboarding/index.d.ts +12 -0
  52. package/dist/client/onboarding/index.d.ts.map +1 -0
  53. package/dist/client/onboarding/index.js +11 -0
  54. package/dist/client/onboarding/index.js.map +1 -0
  55. package/dist/client/onboarding/use-onboarding.d.ts +34 -0
  56. package/dist/client/onboarding/use-onboarding.d.ts.map +1 -0
  57. package/dist/client/onboarding/use-onboarding.js +101 -0
  58. package/dist/client/onboarding/use-onboarding.js.map +1 -0
  59. package/dist/client/org/TeamPage.d.ts +6 -1
  60. package/dist/client/org/TeamPage.d.ts.map +1 -1
  61. package/dist/client/org/TeamPage.js +85 -14
  62. package/dist/client/org/TeamPage.js.map +1 -1
  63. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  64. package/dist/client/resources/ResourceEditor.js +48 -77
  65. package/dist/client/resources/ResourceEditor.js.map +1 -1
  66. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  67. package/dist/client/resources/ResourceTree.js +16 -3
  68. package/dist/client/resources/ResourceTree.js.map +1 -1
  69. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  70. package/dist/client/resources/ResourcesPanel.js +135 -9
  71. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  72. package/dist/client/resources/use-resources.d.ts +5 -0
  73. package/dist/client/resources/use-resources.d.ts.map +1 -1
  74. package/dist/client/resources/use-resources.js.map +1 -1
  75. package/dist/client/settings/AgentsSection.d.ts +2 -0
  76. package/dist/client/settings/AgentsSection.d.ts.map +1 -0
  77. package/dist/client/settings/AgentsSection.js +198 -0
  78. package/dist/client/settings/AgentsSection.js.map +1 -0
  79. package/dist/client/settings/BackgroundAgentSection.d.ts +2 -0
  80. package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -0
  81. package/dist/client/settings/BackgroundAgentSection.js +46 -0
  82. package/dist/client/settings/BackgroundAgentSection.js.map +1 -0
  83. package/dist/client/settings/BrowserSection.d.ts +2 -0
  84. package/dist/client/settings/BrowserSection.d.ts.map +1 -0
  85. package/dist/client/settings/BrowserSection.js +10 -0
  86. package/dist/client/settings/BrowserSection.js.map +1 -0
  87. package/dist/client/settings/ComingSoonSection.d.ts +13 -0
  88. package/dist/client/settings/ComingSoonSection.d.ts.map +1 -0
  89. package/dist/client/settings/ComingSoonSection.js +9 -0
  90. package/dist/client/settings/ComingSoonSection.js.map +1 -0
  91. package/dist/client/settings/LLMSection.d.ts +2 -0
  92. package/dist/client/settings/LLMSection.d.ts.map +1 -0
  93. package/dist/client/settings/LLMSection.js +64 -0
  94. package/dist/client/settings/LLMSection.js.map +1 -0
  95. package/dist/client/settings/SettingsPanel.d.ts +8 -0
  96. package/dist/client/settings/SettingsPanel.d.ts.map +1 -0
  97. package/dist/client/settings/SettingsPanel.js +118 -0
  98. package/dist/client/settings/SettingsPanel.js.map +1 -0
  99. package/dist/client/settings/SettingsSection.d.ts +19 -0
  100. package/dist/client/settings/SettingsSection.d.ts.map +1 -0
  101. package/dist/client/settings/SettingsSection.js +10 -0
  102. package/dist/client/settings/SettingsSection.js.map +1 -0
  103. package/dist/client/settings/index.d.ts +3 -0
  104. package/dist/client/settings/index.d.ts.map +1 -0
  105. package/dist/client/settings/index.js +3 -0
  106. package/dist/client/settings/index.js.map +1 -0
  107. package/dist/client/settings/useBuilderStatus.d.ts +22 -0
  108. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -0
  109. package/dist/client/settings/useBuilderStatus.js +41 -0
  110. package/dist/client/settings/useBuilderStatus.js.map +1 -0
  111. package/dist/deploy/build.js +198 -54
  112. package/dist/deploy/build.js.map +1 -1
  113. package/dist/deploy/route-discovery.d.ts +5 -0
  114. package/dist/deploy/route-discovery.d.ts.map +1 -1
  115. package/dist/deploy/route-discovery.js +38 -7
  116. package/dist/deploy/route-discovery.js.map +1 -1
  117. package/dist/deploy/workspace-core.d.ts +28 -0
  118. package/dist/deploy/workspace-core.d.ts.map +1 -0
  119. package/dist/deploy/workspace-core.js +223 -0
  120. package/dist/deploy/workspace-core.js.map +1 -0
  121. package/dist/deploy/workspace-deploy.d.ts +11 -0
  122. package/dist/deploy/workspace-deploy.d.ts.map +1 -0
  123. package/dist/deploy/workspace-deploy.js +148 -0
  124. package/dist/deploy/workspace-deploy.js.map +1 -0
  125. package/dist/file-upload/builder.d.ts +11 -0
  126. package/dist/file-upload/builder.d.ts.map +1 -0
  127. package/dist/file-upload/builder.js +53 -0
  128. package/dist/file-upload/builder.js.map +1 -0
  129. package/dist/file-upload/index.d.ts +4 -0
  130. package/dist/file-upload/index.d.ts.map +1 -0
  131. package/dist/file-upload/index.js +3 -0
  132. package/dist/file-upload/index.js.map +1 -0
  133. package/dist/file-upload/registry.d.ts +23 -0
  134. package/dist/file-upload/registry.d.ts.map +1 -0
  135. package/dist/file-upload/registry.js +52 -0
  136. package/dist/file-upload/registry.js.map +1 -0
  137. package/dist/file-upload/types.d.ts +37 -0
  138. package/dist/file-upload/types.d.ts.map +1 -0
  139. package/dist/file-upload/types.js +10 -0
  140. package/dist/file-upload/types.js.map +1 -0
  141. package/dist/integrations/adapters/google-docs.d.ts +89 -0
  142. package/dist/integrations/adapters/google-docs.d.ts.map +1 -0
  143. package/dist/integrations/adapters/google-docs.js +261 -0
  144. package/dist/integrations/adapters/google-docs.js.map +1 -0
  145. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  146. package/dist/integrations/adapters/slack.js +34 -0
  147. package/dist/integrations/adapters/slack.js.map +1 -1
  148. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  149. package/dist/integrations/adapters/telegram.js +32 -0
  150. package/dist/integrations/adapters/telegram.js.map +1 -1
  151. package/dist/integrations/google-docs-poller.d.ts +54 -0
  152. package/dist/integrations/google-docs-poller.d.ts.map +1 -0
  153. package/dist/integrations/google-docs-poller.js +442 -0
  154. package/dist/integrations/google-docs-poller.js.map +1 -0
  155. package/dist/integrations/index.d.ts +2 -0
  156. package/dist/integrations/index.d.ts.map +1 -1
  157. package/dist/integrations/index.js +3 -0
  158. package/dist/integrations/index.js.map +1 -1
  159. package/dist/integrations/plugin.d.ts.map +1 -1
  160. package/dist/integrations/plugin.js +49 -2
  161. package/dist/integrations/plugin.js.map +1 -1
  162. package/dist/integrations/types.d.ts +33 -0
  163. package/dist/integrations/types.d.ts.map +1 -1
  164. package/dist/integrations/webhook-handler.d.ts +10 -1
  165. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  166. package/dist/integrations/webhook-handler.js +13 -3
  167. package/dist/integrations/webhook-handler.js.map +1 -1
  168. package/dist/jobs/scheduler.d.ts +3 -0
  169. package/dist/jobs/scheduler.d.ts.map +1 -1
  170. package/dist/jobs/scheduler.js +81 -60
  171. package/dist/jobs/scheduler.js.map +1 -1
  172. package/dist/jobs/tools.d.ts.map +1 -1
  173. package/dist/jobs/tools.js +20 -3
  174. package/dist/jobs/tools.js.map +1 -1
  175. package/dist/mcp-client/config.d.ts +46 -0
  176. package/dist/mcp-client/config.d.ts.map +1 -0
  177. package/dist/mcp-client/config.js +152 -0
  178. package/dist/mcp-client/config.js.map +1 -0
  179. package/dist/mcp-client/index.d.ts +17 -0
  180. package/dist/mcp-client/index.d.ts.map +1 -0
  181. package/dist/mcp-client/index.js +53 -0
  182. package/dist/mcp-client/index.js.map +1 -0
  183. package/dist/mcp-client/manager.d.ts +76 -0
  184. package/dist/mcp-client/manager.d.ts.map +1 -0
  185. package/dist/mcp-client/manager.js +212 -0
  186. package/dist/mcp-client/manager.js.map +1 -0
  187. package/dist/oauth-tokens/store.d.ts.map +1 -1
  188. package/dist/oauth-tokens/store.js +3 -1
  189. package/dist/oauth-tokens/store.js.map +1 -1
  190. package/dist/onboarding/default-steps.d.ts +10 -0
  191. package/dist/onboarding/default-steps.d.ts.map +1 -0
  192. package/dist/onboarding/default-steps.js +164 -0
  193. package/dist/onboarding/default-steps.js.map +1 -0
  194. package/dist/onboarding/index.d.ts +12 -0
  195. package/dist/onboarding/index.d.ts.map +1 -0
  196. package/dist/onboarding/index.js +11 -0
  197. package/dist/onboarding/index.js.map +1 -0
  198. package/dist/onboarding/plugin.d.ts +19 -0
  199. package/dist/onboarding/plugin.d.ts.map +1 -0
  200. package/dist/onboarding/plugin.js +147 -0
  201. package/dist/onboarding/plugin.js.map +1 -0
  202. package/dist/onboarding/registry.d.ts +24 -0
  203. package/dist/onboarding/registry.d.ts.map +1 -0
  204. package/dist/onboarding/registry.js +40 -0
  205. package/dist/onboarding/registry.js.map +1 -0
  206. package/dist/onboarding/types.d.ts +71 -0
  207. package/dist/onboarding/types.d.ts.map +1 -0
  208. package/dist/onboarding/types.js +10 -0
  209. package/dist/onboarding/types.js.map +1 -0
  210. package/dist/resources/agents.d.ts +4 -0
  211. package/dist/resources/agents.d.ts.map +1 -0
  212. package/dist/resources/agents.js +44 -0
  213. package/dist/resources/agents.js.map +1 -0
  214. package/dist/resources/handlers.d.ts +17 -0
  215. package/dist/resources/handlers.d.ts.map +1 -1
  216. package/dist/resources/handlers.js +49 -12
  217. package/dist/resources/handlers.js.map +1 -1
  218. package/dist/resources/metadata.d.ts +48 -0
  219. package/dist/resources/metadata.d.ts.map +1 -0
  220. package/dist/resources/metadata.js +150 -0
  221. package/dist/resources/metadata.js.map +1 -0
  222. package/dist/resources/script-helpers.d.ts.map +1 -1
  223. package/dist/resources/script-helpers.js +3 -2
  224. package/dist/resources/script-helpers.js.map +1 -1
  225. package/dist/resources/store.d.ts.map +1 -1
  226. package/dist/resources/store.js +32 -17
  227. package/dist/resources/store.js.map +1 -1
  228. package/dist/scripts/call-agent.d.ts.map +1 -1
  229. package/dist/scripts/call-agent.js +3 -2
  230. package/dist/scripts/call-agent.js.map +1 -1
  231. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  232. package/dist/scripts/chat/search-chats.js +2 -1
  233. package/dist/scripts/chat/search-chats.js.map +1 -1
  234. package/dist/scripts/core-scripts.d.ts.map +1 -1
  235. package/dist/scripts/core-scripts.js +2 -0
  236. package/dist/scripts/core-scripts.js.map +1 -1
  237. package/dist/scripts/db/scoping.d.ts.map +1 -1
  238. package/dist/scripts/db/scoping.js +3 -2
  239. package/dist/scripts/db/scoping.js.map +1 -1
  240. package/dist/scripts/docs/index.d.ts +2 -0
  241. package/dist/scripts/docs/index.d.ts.map +1 -0
  242. package/dist/scripts/docs/index.js +4 -0
  243. package/dist/scripts/docs/index.js.map +1 -0
  244. package/dist/scripts/docs/search.d.ts +13 -0
  245. package/dist/scripts/docs/search.d.ts.map +1 -0
  246. package/dist/scripts/docs/search.js +130 -0
  247. package/dist/scripts/docs/search.js.map +1 -0
  248. package/dist/scripts/resources/delete-memory.d.ts +7 -0
  249. package/dist/scripts/resources/delete-memory.d.ts.map +1 -0
  250. package/dist/scripts/resources/delete-memory.js +49 -0
  251. package/dist/scripts/resources/delete-memory.js.map +1 -0
  252. package/dist/scripts/resources/delete.d.ts.map +1 -1
  253. package/dist/scripts/resources/delete.js +2 -1
  254. package/dist/scripts/resources/delete.js.map +1 -1
  255. package/dist/scripts/resources/index.d.ts.map +1 -1
  256. package/dist/scripts/resources/index.js +2 -0
  257. package/dist/scripts/resources/index.js.map +1 -1
  258. package/dist/scripts/resources/list.d.ts.map +1 -1
  259. package/dist/scripts/resources/list.js +2 -1
  260. package/dist/scripts/resources/list.js.map +1 -1
  261. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
  262. package/dist/scripts/resources/migrate-learnings.js +2 -1
  263. package/dist/scripts/resources/migrate-learnings.js.map +1 -1
  264. package/dist/scripts/resources/read.d.ts.map +1 -1
  265. package/dist/scripts/resources/read.js +2 -1
  266. package/dist/scripts/resources/read.js.map +1 -1
  267. package/dist/scripts/resources/save-memory.d.ts +9 -0
  268. package/dist/scripts/resources/save-memory.d.ts.map +1 -0
  269. package/dist/scripts/resources/save-memory.js +78 -0
  270. package/dist/scripts/resources/save-memory.js.map +1 -0
  271. package/dist/scripts/resources/write.d.ts.map +1 -1
  272. package/dist/scripts/resources/write.js +2 -1
  273. package/dist/scripts/resources/write.js.map +1 -1
  274. package/dist/scripts/utils.d.ts +10 -1
  275. package/dist/scripts/utils.d.ts.map +1 -1
  276. package/dist/scripts/utils.js +45 -2
  277. package/dist/scripts/utils.js.map +1 -1
  278. package/dist/server/action-discovery.d.ts +5 -0
  279. package/dist/server/action-discovery.d.ts.map +1 -1
  280. package/dist/server/action-discovery.js +51 -20
  281. package/dist/server/action-discovery.js.map +1 -1
  282. package/dist/server/action-routes.d.ts.map +1 -1
  283. package/dist/server/action-routes.js +63 -57
  284. package/dist/server/action-routes.js.map +1 -1
  285. package/dist/server/agent-chat-plugin.d.ts +3 -0
  286. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  287. package/dist/server/agent-chat-plugin.js +363 -48
  288. package/dist/server/agent-chat-plugin.js.map +1 -1
  289. package/dist/server/agent-discovery.d.ts.map +1 -1
  290. package/dist/server/agent-discovery.js +11 -23
  291. package/dist/server/agent-discovery.js.map +1 -1
  292. package/dist/server/agent-teams.d.ts.map +1 -1
  293. package/dist/server/agent-teams.js +2 -1
  294. package/dist/server/agent-teams.js.map +1 -1
  295. package/dist/server/agents-bundle.d.ts +33 -5
  296. package/dist/server/agents-bundle.d.ts.map +1 -1
  297. package/dist/server/agents-bundle.js +108 -64
  298. package/dist/server/agents-bundle.js.map +1 -1
  299. package/dist/server/auth.d.ts +1 -0
  300. package/dist/server/auth.d.ts.map +1 -1
  301. package/dist/server/auth.js +172 -60
  302. package/dist/server/auth.js.map +1 -1
  303. package/dist/server/better-auth-instance.d.ts.map +1 -1
  304. package/dist/server/better-auth-instance.js +202 -6
  305. package/dist/server/better-auth-instance.js.map +1 -1
  306. package/dist/server/builder-browser.d.ts +40 -0
  307. package/dist/server/builder-browser.d.ts.map +1 -0
  308. package/dist/server/builder-browser.js +166 -0
  309. package/dist/server/builder-browser.js.map +1 -0
  310. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  311. package/dist/server/core-routes-plugin.js +152 -6
  312. package/dist/server/core-routes-plugin.js.map +1 -1
  313. package/dist/server/credential-provider.d.ts +37 -0
  314. package/dist/server/credential-provider.d.ts.map +1 -0
  315. package/dist/server/credential-provider.js +49 -0
  316. package/dist/server/credential-provider.js.map +1 -0
  317. package/dist/server/framework-request-handler.d.ts.map +1 -1
  318. package/dist/server/framework-request-handler.js +42 -3
  319. package/dist/server/framework-request-handler.js.map +1 -1
  320. package/dist/server/google-auth-plugin.js +1 -1
  321. package/dist/server/google-oauth.d.ts +1 -1
  322. package/dist/server/google-oauth.d.ts.map +1 -1
  323. package/dist/server/google-oauth.js +15 -10
  324. package/dist/server/google-oauth.js.map +1 -1
  325. package/dist/server/index.d.ts +3 -0
  326. package/dist/server/index.d.ts.map +1 -1
  327. package/dist/server/index.js +3 -0
  328. package/dist/server/index.js.map +1 -1
  329. package/dist/server/oauth-helpers.d.ts +1 -0
  330. package/dist/server/oauth-helpers.d.ts.map +1 -1
  331. package/dist/server/oauth-helpers.js +5 -4
  332. package/dist/server/oauth-helpers.js.map +1 -1
  333. package/dist/server/onboarding-html.d.ts.map +1 -1
  334. package/dist/server/onboarding-html.js +94 -3
  335. package/dist/server/onboarding-html.js.map +1 -1
  336. package/dist/server/request-context.d.ts +20 -0
  337. package/dist/server/request-context.d.ts.map +1 -0
  338. package/dist/server/request-context.js +41 -0
  339. package/dist/server/request-context.js.map +1 -0
  340. package/dist/templates/default/.agents/skills/actions/SKILL.md +2 -1
  341. package/dist/templates/default/.agents/skills/security/SKILL.md +145 -40
  342. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +7 -1
  343. package/dist/templates/default/_gitignore +1 -0
  344. package/dist/templates/default/app/root.tsx +4 -1
  345. package/dist/templates/workspace-core/AGENTS.md +62 -0
  346. package/dist/templates/workspace-core/actions/company-directory.ts +38 -0
  347. package/dist/templates/workspace-core/package.json +39 -0
  348. package/dist/templates/workspace-core/skills/company-policies/SKILL.md +42 -0
  349. package/dist/templates/workspace-core/src/client/AuthenticatedLayout.tsx +37 -0
  350. package/dist/templates/workspace-core/src/client/index.ts +26 -0
  351. package/dist/templates/workspace-core/src/credentials.ts +29 -0
  352. package/dist/templates/workspace-core/src/index.ts +21 -0
  353. package/dist/templates/workspace-core/src/server/agent-chat-plugin.ts +30 -0
  354. package/dist/templates/workspace-core/src/server/auth-plugin.ts +35 -0
  355. package/dist/templates/workspace-core/src/server/index.ts +22 -0
  356. package/dist/templates/workspace-core/tailwind.preset.ts +34 -0
  357. package/dist/templates/workspace-core/tsconfig.json +9 -0
  358. package/dist/templates/workspace-root/.env.example +37 -0
  359. package/dist/templates/workspace-root/README.md +62 -0
  360. package/dist/templates/workspace-root/_gitignore +23 -0
  361. package/dist/templates/workspace-root/package.json +18 -0
  362. package/dist/templates/workspace-root/pnpm-workspace.yaml +3 -0
  363. package/dist/templates/workspace-root/tsconfig.base.json +21 -0
  364. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  365. package/dist/vite/agents-bundle-plugin.js +65 -15
  366. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  367. package/dist/vite/client.d.ts +16 -0
  368. package/dist/vite/client.d.ts.map +1 -1
  369. package/dist/vite/client.js +75 -0
  370. package/dist/vite/client.js.map +1 -1
  371. package/docs/content/a2a-protocol.md +223 -0
  372. package/docs/content/actions.md +129 -0
  373. package/docs/content/agent-mentions.md +171 -0
  374. package/docs/content/authentication.md +155 -0
  375. package/docs/content/cli-adapters.md +244 -0
  376. package/docs/content/client.md +175 -0
  377. package/docs/content/context-awareness.md +168 -0
  378. package/docs/content/creating-templates.md +311 -0
  379. package/docs/content/database.md +82 -0
  380. package/docs/content/deployment.md +180 -0
  381. package/docs/content/enterprise-workspace.md +235 -0
  382. package/docs/content/faq.md +101 -0
  383. package/docs/content/file-uploads.md +102 -0
  384. package/docs/content/frames.md +47 -0
  385. package/docs/content/getting-started.md +104 -0
  386. package/docs/content/integrations.md +198 -0
  387. package/docs/content/key-concepts.md +246 -0
  388. package/docs/content/mcp-clients.md +110 -0
  389. package/docs/content/mcp-protocol.md +168 -0
  390. package/docs/content/onboarding.md +107 -0
  391. package/docs/content/real-time-collaboration.md +185 -0
  392. package/docs/content/resources.md +277 -0
  393. package/docs/content/security.md +158 -0
  394. package/docs/content/server.md +200 -0
  395. package/docs/content/skills-guide.md +107 -0
  396. package/docs/content/what-is-agent-native.md +100 -0
  397. package/docs/content/workspace-management.md +224 -0
  398. package/package.json +12 -2
  399. package/src/templates/default/.agents/skills/actions/SKILL.md +2 -1
  400. package/src/templates/default/.agents/skills/security/SKILL.md +145 -40
  401. package/src/templates/default/.agents/skills/storing-data/SKILL.md +7 -1
  402. package/src/templates/default/_gitignore +1 -0
  403. package/src/templates/default/app/root.tsx +4 -1
  404. package/src/templates/workspace-core/AGENTS.md +62 -0
  405. package/src/templates/workspace-core/actions/company-directory.ts +38 -0
  406. package/src/templates/workspace-core/package.json +39 -0
  407. package/src/templates/workspace-core/skills/company-policies/SKILL.md +42 -0
  408. package/src/templates/workspace-core/src/client/AuthenticatedLayout.tsx +37 -0
  409. package/src/templates/workspace-core/src/client/index.ts +26 -0
  410. package/src/templates/workspace-core/src/credentials.ts +29 -0
  411. package/src/templates/workspace-core/src/index.ts +21 -0
  412. package/src/templates/workspace-core/src/server/agent-chat-plugin.ts +30 -0
  413. package/src/templates/workspace-core/src/server/auth-plugin.ts +35 -0
  414. package/src/templates/workspace-core/src/server/index.ts +22 -0
  415. package/src/templates/workspace-core/tailwind.preset.ts +34 -0
  416. package/src/templates/workspace-core/tsconfig.json +9 -0
  417. package/src/templates/workspace-root/.env.example +37 -0
  418. package/src/templates/workspace-root/README.md +62 -0
  419. package/src/templates/workspace-root/_gitignore +23 -0
  420. package/src/templates/workspace-root/package.json +18 -0
  421. package/src/templates/workspace-root/pnpm-workspace.yaml +3 -0
  422. package/src/templates/workspace-root/tsconfig.base.json +21 -0
  423. package/dist/templates/templates/default/.agents/skills/actions/SKILL.md +0 -142
  424. package/dist/templates/templates/default/.agents/skills/agent-engines/SKILL.md +0 -127
  425. package/dist/templates/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -50
  426. package/dist/templates/templates/default/.agents/skills/create-skill/SKILL.md +0 -167
  427. package/dist/templates/templates/default/.agents/skills/delegate-to-agent/SKILL.md +0 -90
  428. package/dist/templates/templates/default/.agents/skills/frontend-design/SKILL.md +0 -69
  429. package/dist/templates/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -183
  430. package/dist/templates/templates/default/.agents/skills/real-time-sync/SKILL.md +0 -112
  431. package/dist/templates/templates/default/.agents/skills/security/SKILL.md +0 -108
  432. package/dist/templates/templates/default/.agents/skills/self-modifying-code/SKILL.md +0 -79
  433. package/dist/templates/templates/default/.agents/skills/storing-data/SKILL.md +0 -110
  434. package/dist/templates/templates/default/.claude/settings.json +0 -100
  435. package/dist/templates/templates/default/.env.example +0 -5
  436. package/dist/templates/templates/default/.ignore +0 -0
  437. package/dist/templates/templates/default/.prettierrc +0 -5
  438. package/dist/templates/templates/default/AGENTS.md +0 -110
  439. package/dist/templates/templates/default/DEVELOPING.md +0 -117
  440. package/dist/templates/templates/default/_gitignore +0 -37
  441. package/dist/templates/templates/default/actions/hello.ts +0 -20
  442. package/dist/templates/templates/default/actions/navigate.ts +0 -53
  443. package/dist/templates/templates/default/actions/run.ts +0 -2
  444. package/dist/templates/templates/default/actions/view-screen.ts +0 -39
  445. package/dist/templates/templates/default/app/entry.client.tsx +0 -4
  446. package/dist/templates/templates/default/app/entry.server.tsx +0 -56
  447. package/dist/templates/templates/default/app/global.css +0 -95
  448. package/dist/templates/templates/default/app/lib/utils.ts +0 -1
  449. package/dist/templates/templates/default/app/root.tsx +0 -107
  450. package/dist/templates/templates/default/app/routes/_index.tsx +0 -62
  451. package/dist/templates/templates/default/app/routes.ts +0 -4
  452. package/dist/templates/templates/default/app/vite-env.d.ts +0 -6
  453. package/dist/templates/templates/default/components.json +0 -20
  454. package/dist/templates/templates/default/data/.gitkeep +0 -0
  455. package/dist/templates/templates/default/data/sync-config.json +0 -1
  456. package/dist/templates/templates/default/learnings.defaults.md +0 -5
  457. package/dist/templates/templates/default/learnings.md +0 -0
  458. package/dist/templates/templates/default/package.json +0 -46
  459. package/dist/templates/templates/default/postcss.config.js +0 -6
  460. package/dist/templates/templates/default/public/icon-180.svg +0 -4
  461. package/dist/templates/templates/default/public/icon-192.svg +0 -4
  462. package/dist/templates/templates/default/public/icon-512.svg +0 -4
  463. package/dist/templates/templates/default/public/manifest.json +0 -13
  464. package/dist/templates/templates/default/react-router.config.ts +0 -6
  465. package/dist/templates/templates/default/server/middleware/auth.ts +0 -15
  466. package/dist/templates/templates/default/server/plugins/.gitkeep +0 -0
  467. package/dist/templates/templates/default/server/routes/[...page].get.ts +0 -5
  468. package/dist/templates/templates/default/server/routes/api/hello.get.ts +0 -5
  469. package/dist/templates/templates/default/shared/api.ts +0 -6
  470. package/dist/templates/templates/default/ssr-entry.ts +0 -20
  471. package/dist/templates/templates/default/tailwind.config.ts +0 -7
  472. package/dist/templates/templates/default/tsconfig.json +0 -11
  473. package/dist/templates/templates/default/vite.config.ts +0 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "type": "module",
5
5
  "description": "Framework for agent-native application development — where AI agents and UI share state via files",
6
6
  "license": "MIT",
@@ -20,15 +20,22 @@
20
20
  "./vite": "./dist/vite/index.js",
21
21
  "./server": "./dist/server/index.js",
22
22
  "./server/ssr-handler": "./dist/server/ssr-handler.js",
23
+ "./server/agent-discovery": "./dist/server/agent-discovery.js",
24
+ "./server/request-context": "./dist/server/request-context.js",
23
25
  "./db": "./dist/db/index.js",
24
26
  "./db/schema": "./dist/db/schema.js",
25
27
  "./client": "./dist/client/index.js",
28
+ "./client/onboarding": "./dist/client/onboarding/index.js",
29
+ "./onboarding": "./dist/onboarding/index.js",
26
30
  "./shared": "./dist/shared/index.js",
27
31
  "./scripts": "./dist/scripts/index.js",
28
32
  "./application-state": "./dist/application-state/index.js",
29
33
  "./settings": "./dist/settings/index.js",
30
34
  "./credentials": "./dist/credentials/index.js",
35
+ "./file-upload": "./dist/file-upload/index.js",
31
36
  "./resources": "./dist/resources/index.js",
37
+ "./resources/store": "./dist/resources/store.js",
38
+ "./resources/metadata": "./dist/resources/metadata.js",
32
39
  "./oauth-tokens": "./dist/oauth-tokens/index.js",
33
40
  "./org": "./dist/org/index.js",
34
41
  "./client/org": "./dist/client/org/index.js",
@@ -37,6 +44,7 @@
37
44
  "./collab": "./dist/collab/index.js",
38
45
  "./a2a": "./dist/a2a/index.js",
39
46
  "./mcp": "./dist/mcp/index.js",
47
+ "./mcp-client": "./dist/mcp-client/index.js",
40
48
  "./terminal": "./dist/client/terminal/index.js",
41
49
  "./terminal/server": "./dist/terminal/index.js",
42
50
  "./tailwind": "./dist/tailwind.preset.js",
@@ -44,11 +52,12 @@
44
52
  },
45
53
  "files": [
46
54
  "dist",
55
+ "docs",
47
56
  "tsconfig.base.json",
48
57
  "src/templates"
49
58
  ],
50
59
  "scripts": {
51
- "build": "tsc && cp -r src/templates dist/templates",
60
+ "build": "tsc && rm -rf dist/templates && cp -r src/templates dist/templates",
52
61
  "dev": "tsc --watch",
53
62
  "typecheck": "tsc --noEmit",
54
63
  "test": "vitest --run",
@@ -57,6 +66,7 @@
57
66
  "release": "npm version patch && npm publish --access public"
58
67
  },
59
68
  "dependencies": {
69
+ "@agent-native/shared-app-config": "workspace:*",
60
70
  "@anthropic-ai/sdk": "^0.80.0",
61
71
  "@clack/prompts": "^1.2.0",
62
72
  "@libsql/client": "^0.15.0",
@@ -84,7 +84,8 @@ This is the canonical approach for new apps. Action names must be lowercase with
84
84
  ## Guidelines
85
85
 
86
86
  - **One action, one job.** Keep actions focused on a single operation. The agent composes multiple action calls for complex operations.
87
- - **Use `parseArgs()`** for structured argument parsing. It converts `--key value` pairs to a `Record<string, string>`.
87
+ - **Always use `defineAction` with a Zod `schema:`** for input validation. The framework validates automatically and returns clear error messages for invalid input. This prevents malicious or malformed input from reaching your code. The legacy `parseArgs()` format has no runtime validation — use it only for internal/dev scripts, not user-facing actions.
88
+ - **Never construct SQL with string concatenation** — use the `db-exec`/`db-query` tools which parameterize queries automatically (`?` placeholders). Drizzle ORM queries are always safe.
88
89
  - **Use `loadEnv()`** if the action needs environment variables (API keys, etc.).
89
90
  - **Use `fail()`** for user-friendly error messages (exits with message, no stack trace).
90
91
  - **Write results to the database.** The agent and UI will pick them up via db sync polling.
@@ -1,14 +1,144 @@
1
1
  ---
2
2
  name: security
3
3
  description: >-
4
- Data security model, user/org scoping, and auth patterns. Use when adding
5
- tables with user data, implementing multi-user features, setting up A2A
6
- cross-app calls, or reviewing data access patterns.
4
+ Secure coding guide for agent-native apps. Covers input validation, SQL
5
+ injection prevention, XSS, secrets management, auth patterns, data scoping,
6
+ and A2A security. Read this when generating any code that handles user data.
7
7
  ---
8
8
 
9
- # Security & Data Scoping
9
+ # Security
10
10
 
11
- ## How Data Isolation Works
11
+ The framework provides strong security primitives. Use them — don't reinvent security.
12
+
13
+ ## Input Validation
14
+
15
+ **Always use `defineAction` with a Zod `schema:`** for every action that accepts user input. The framework validates automatically and returns clear error messages.
16
+
17
+ ```ts
18
+ // SECURE — framework validates before run() is called
19
+ export default defineAction({
20
+ description: "Create a note",
21
+ schema: z.object({
22
+ title: z.string().min(1).max(200),
23
+ content: z.string().optional(),
24
+ }),
25
+ run: async (args) => {
26
+ // args is guaranteed valid — { title: string; content?: string }
27
+ },
28
+ });
29
+ ```
30
+
31
+ The legacy `parameters:` format (plain JSON Schema) has **no runtime validation** — the agent receives whatever the caller sends. Do not use it for new code.
32
+
33
+ Actions without a `schema:` are unvalidated. This is acceptable for internal/dev scripts but never for user-facing operations.
34
+
35
+ ## SQL Injection Prevention
36
+
37
+ The framework's `db-query` and `db-exec` tools use **parameterized queries** (`?` placeholders). The database driver handles escaping — user input never touches the SQL string.
38
+
39
+ ```ts
40
+ // WRONG — SQL injection vulnerability
41
+ await exec(`INSERT INTO notes (title) VALUES ('${title}')`)
42
+ await exec(`SELECT * FROM notes WHERE title LIKE '%${search}%'`)
43
+
44
+ // RIGHT — parameterized queries (framework default)
45
+ await exec({ sql: "INSERT INTO notes (title) VALUES (?)", args: [title] })
46
+ await exec({ sql: "SELECT * FROM notes WHERE title LIKE ?", args: [`%${search}%`] })
47
+ ```
48
+
49
+ **Drizzle ORM is always safe** — it generates parameterized queries automatically:
50
+
51
+ ```ts
52
+ const notes = await db.select().from(notesTable).where(eq(notesTable.title, title));
53
+ ```
54
+
55
+ **When is SQL injection a risk?**
56
+ - Only when writing raw SQL with string concatenation in server routes or actions
57
+ - Never when using `db-query`/`db-exec` with `args` arrays
58
+ - Never when using Drizzle ORM
59
+
60
+ ## XSS Prevention
61
+
62
+ React auto-escapes all JSX expressions by default. Trust it.
63
+
64
+ ```tsx
65
+ // SAFE — React escapes the output
66
+ <p>{userInput}</p>
67
+ <span>{comment.text}</span>
68
+
69
+ // DANGEROUS — bypasses React's escaping
70
+ <div dangerouslySetInnerHTML={{ __html: userInput }} /> // NEVER with user content
71
+ element.innerHTML = userInput; // NEVER
72
+ eval(userInput); // NEVER
73
+ document.write(userInput); // NEVER
74
+ new Function(userInput); // NEVER
75
+ ```
76
+
77
+ **For rich text:** Use TipTap (framework dependency) with the Collaboration extension. TipTap sanitizes content through its schema — only allowed node types render.
78
+
79
+ **For markdown:** Use `react-markdown` (already used in the framework). It parses markdown to React elements without `dangerouslySetInnerHTML`.
80
+
81
+ **For HTML from external sources:** If you absolutely must render external HTML, use a sanitization library like `dompurify`. But prefer structured data (markdown, TipTap JSON) over raw HTML.
82
+
83
+ ## Secrets Management
84
+
85
+ | Secret type | Where to store | Why |
86
+ |-------------|---------------|-----|
87
+ | API keys (OpenAI, Stripe, etc.) | `.env` file (gitignored) | Never committed, server-side only |
88
+ | OAuth tokens (Google, GitHub) | `oauth_tokens` store | Per-user, per-provider, server-side |
89
+ | App configuration | `settings` store | OK for non-secret config (themes, preferences) |
90
+ | Session tokens | Framework handles | Automatic via Better Auth |
91
+
92
+ **Rules:**
93
+ - Never store secrets in `settings`, `application_state`, or source code
94
+ - Never return secrets in action responses — they may appear in agent chat or client UI
95
+ - Never log secrets (tokens, keys, passwords)
96
+ - Never commit `.env` files — they're gitignored by default
97
+ - Access env vars via `process.env` in actions/server code, never send them to the client
98
+
99
+ ## Auth Patterns
100
+
101
+ ### Use `defineAction` (recommended)
102
+
103
+ Actions defined with `defineAction` are automatically protected by the auth guard. Unauthenticated requests get a 401 response. This is the safest pattern.
104
+
105
+ ```ts
106
+ // Auto-protected — auth guard runs before this code
107
+ export default defineAction({
108
+ description: "Delete a note",
109
+ schema: z.object({ id: z.string() }),
110
+ run: async (args) => {
111
+ // Only authenticated users reach here
112
+ },
113
+ });
114
+ ```
115
+
116
+ ### Custom `/api/` routes (use sparingly)
117
+
118
+ If you must create custom routes (file uploads, streaming, webhooks), always check auth:
119
+
120
+ ```ts
121
+ // server/routes/api/upload.ts
122
+ import { getSession } from "@agent-native/core/server";
123
+
124
+ export default defineEventHandler(async (event) => {
125
+ const session = await getSession(event);
126
+ if (!session?.email) {
127
+ setResponseStatus(event, 401);
128
+ return { error: "Unauthorized" };
129
+ }
130
+ // ... handle upload with session.email
131
+ });
132
+ ```
133
+
134
+ ### CSRF Protection
135
+
136
+ The framework uses `SameSite=lax` cookies with `httpOnly` flag. This prevents most CSRF attacks. Additional rules:
137
+ - State-changing actions should use POST (the default for `defineAction`)
138
+ - GET actions (`http: { method: "GET" }`) should be read-only
139
+ - Never perform writes in response to GET requests
140
+
141
+ ## Data Scoping
12
142
 
13
143
  In production, the framework enforces data isolation at the SQL level. Agents and users can only see and modify data they own. This is automatic — you don't write WHERE clauses yourself.
14
144
 
@@ -41,45 +171,17 @@ For multi-user apps where teams share data, add an `org_id` column:
41
171
  export const projects = table("projects", {
42
172
  id: text("id").primaryKey(),
43
173
  name: text("name").notNull(),
44
- owner_email: text("owner_email").notNull(), // who created it
45
- org_id: text("org_id").notNull(), // which org it belongs to
174
+ owner_email: text("owner_email").notNull(),
175
+ org_id: text("org_id").notNull(),
46
176
  });
47
177
  ```
48
178
 
49
179
  When both columns are present, queries are scoped by **both**: `WHERE owner_email = ? AND org_id = ?`.
50
180
 
51
- The `org_id` comes from `AGENT_ORG_ID` which is automatically set from the user's active organization in Better Auth.
52
-
53
181
  ### Validation
54
182
 
55
183
  Run `pnpm action db-check-scoping` to verify all tables have proper ownership columns. Use `--require-org` for multi-org apps.
56
184
 
57
- ## Auth Model
58
-
59
- ### Better Auth (Default)
60
-
61
- The framework uses Better Auth for authentication. It's always on by default — users create an account on first visit.
62
-
63
- **Environment variables:**
64
- - `BETTER_AUTH_SECRET` — signing key (auto-generated if not set)
65
- - `GOOGLE_CLIENT_ID` + `GOOGLE_CLIENT_SECRET` — enable Google OAuth
66
- - `GITHUB_CLIENT_ID` + `GITHUB_CLIENT_SECRET` — enable GitHub OAuth
67
- - `AUTH_MODE=local` — disable auth for solo local dev (escape hatch)
68
-
69
- ### Organizations
70
-
71
- Better Auth's organization plugin is built-in. Every app supports:
72
- - Creating organizations
73
- - Inviting members (owner/admin/member roles)
74
- - Switching active organization
75
- - Per-org data scoping via `org_id`
76
-
77
- The active organization ID flows from `session.orgId` → `AGENT_ORG_ID` → SQL scoping automatically.
78
-
79
- ### ACCESS_TOKEN (Legacy)
80
-
81
- For simple deployments, set `ACCESS_TOKEN` or `ACCESS_TOKENS` (comma-separated) as environment variables. This provides a shared token for all users — no per-user identity.
82
-
83
185
  ## A2A Security
84
186
 
85
187
  ### Cross-App Identity
@@ -87,7 +189,6 @@ For simple deployments, set `ACCESS_TOKEN` or `ACCESS_TOKENS` (comma-separated)
87
189
  When apps call each other via A2A, they need to verify identity. Set the same `A2A_SECRET` on all apps that need to trust each other:
88
190
 
89
191
  ```bash
90
- # On both apps
91
192
  A2A_SECRET=your-shared-secret-at-least-32-chars
92
193
  ```
93
194
 
@@ -102,7 +203,11 @@ Without `A2A_SECRET`, A2A calls are unauthenticated (fine for local dev, not pro
102
203
  ## Rules for Agents
103
204
 
104
205
  1. **Every new table with user data must have `owner_email`.** No exceptions.
105
- 2. **Never bypass scoping** don't raw-query tables without going through `db-query`/`db-exec`.
106
- 3. **Don't expose user data in application state** — application state is per-session, not per-user. Use SQL tables with `owner_email` for persistent user data.
107
- 4. **Don't hardcode emails** use `AGENT_USER_EMAIL` environment variable.
108
- 5. **Test with multiple users**create two accounts and verify data isolation.
206
+ 2. **Always use `defineAction` with a Zod `schema:`** for input validation on user-facing actions.
207
+ 3. **Never concatenate user input into SQL** — use parameterized queries or Drizzle ORM.
208
+ 4. **Never use `dangerouslySetInnerHTML`** or `innerHTML` with user-controlled content.
209
+ 5. **Never store secrets outside `.env` or `oauth_tokens`** no settings, no source code, no responses.
210
+ 6. **Never bypass scoping** — don't raw-query tables without going through `db-query`/`db-exec`.
211
+ 7. **Never create unprotected routes that modify data** — use `defineAction` or check `getSession()`.
212
+ 8. **Don't hardcode emails** — use `AGENT_USER_EMAIL` environment variable.
213
+ 9. **Don't expose user data in application state** — it's per-session, not per-user. Use SQL tables with `owner_email`.
@@ -78,7 +78,7 @@ Query via `getDb()` singleton from `server/db/index.ts`.
78
78
 
79
79
  ### 4. OAuth Tokens — credentials
80
80
 
81
- For OAuth tokens acquired at runtime (Google, etc.). Never store these in settings — use the dedicated encrypted store.
81
+ For OAuth tokens acquired at runtime (Google, etc.). Never store these in settings — use the dedicated store.
82
82
 
83
83
  ```ts
84
84
  import { saveOAuthTokens, getOAuthTokens, listOAuthAccounts } from "@agent-native/core/oauth-tokens";
@@ -108,3 +108,9 @@ Infrastructure config stays in `.env` — these differ per deployment:
108
108
  - `ACCESS_TOKEN` — production auth token
109
109
 
110
110
  Everything else (user settings, tokens, app state) goes in SQL.
111
+
112
+ ## Security Rules
113
+
114
+ - **Never store API keys or secrets in Settings or Application State** — use `.env` for API keys (gitignored) and the `oauth_tokens` store for OAuth credentials. Settings and application state are readable by the client.
115
+ - **Every Drizzle table with user data must have `owner_email`** — the framework auto-scopes queries in production so users only see their own data. Run `pnpm action db-check-scoping` to verify. See the `security` skill for the full model.
116
+ - **Never return secrets in action responses** — action responses may be visible in the agent chat or sent to the client. Keep credentials server-side only.
@@ -1,5 +1,6 @@
1
1
  # React Router generated types
2
2
  .react-router/
3
+ .agent-native/
3
4
 
4
5
  # Logs
5
6
  logs
@@ -23,7 +23,10 @@ export function Layout({ children }: { children: React.ReactNode }) {
23
23
  <html lang="en" suppressHydrationWarning>
24
24
  <head>
25
25
  <meta charSet="utf-8" />
26
- <meta name="viewport" content="width=device-width, initial-scale=1" />
26
+ <meta
27
+ name="viewport"
28
+ content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
29
+ />
27
30
  <link rel="manifest" href="/manifest.json" />
28
31
  <meta name="theme-color" content="#111111" />
29
32
  <meta name="mobile-web-app-capable" content="yes" />
@@ -0,0 +1,62 @@
1
+ # {{APP_TITLE}} — Enterprise Agent Instructions
2
+
3
+ These instructions apply to **every app** in the {{APP_TITLE}} workspace. The
4
+ framework auto-injects this file into each app's agent system prompt as a
5
+ `<resource name="AGENTS.md" scope="workspace">` block. Individual apps can
6
+ add their own template-specific AGENTS.md on top.
7
+
8
+ ## Company context
9
+
10
+ Write a short paragraph here describing your company and what you do. The
11
+ agent reads this first so every response can be grounded in the same
12
+ business context without you having to repeat it per app.
13
+
14
+ ## Shared conventions
15
+
16
+ - **All cross-app state lives in the shared database.** Apps in this
17
+ workspace share `DATABASE_URL` by default, so a record created by one
18
+ app can be read by another as long as it respects the `owner_email` and
19
+ `org_id` scoping conventions.
20
+ - **All API secrets come from the central credential store.** Never
21
+ hardcode a token. Call `resolveCompanyCredential("KEY")` from
22
+ `@{{APP_NAME}}/core-module/credentials` — it pulls from env first and
23
+ falls back to the shared settings table so one rotation updates every
24
+ app.
25
+ - **UI chrome comes from the workspace core.** Wrap every screen in
26
+ `<AuthenticatedLayout>` from `@{{APP_NAME}}/core-module/client`. Don't
27
+ re-implement the brand header, sidebar, or org switcher per app.
28
+ - **Design system.** If the app needs a button, dialog, or form control,
29
+ import from our internal design system package (if you have one) or
30
+ from the shared UI re-exports in `@{{APP_NAME}}/core-module/client`.
31
+
32
+ ## Compliance and policy
33
+
34
+ List any enterprise-wide rules the agent must follow — data handling, PII
35
+ guidelines, approval flows, deployment constraints. The agent will apply
36
+ these to every decision it makes in every app.
37
+
38
+ Example rules:
39
+
40
+ - Never expose raw customer email addresses in logs.
41
+ - Any action that modifies data must first be shown to the user with a
42
+ preview and wait for confirmation.
43
+ - Never make network calls to anything outside `*.{{APP_NAME}}.com` or
44
+ the approved third-party allowlist.
45
+
46
+ ## How to add a new app
47
+
48
+ ```bash
49
+ cd apps
50
+ pnpm exec agent-native create <app-name>
51
+ ```
52
+
53
+ The new app will automatically inherit:
54
+
55
+ 1. The workspace auth plugin (Better Auth + company SSO)
56
+ 2. The agent chat plugin with this AGENTS.md pre-loaded
57
+ 3. Every skill in `packages/core-module/skills/`
58
+ 4. Every action in `packages/core-module/actions/`
59
+ 5. The shared Tailwind preset and React components
60
+
61
+ The only files the new app needs to own are its own routes/screens and any
62
+ template-specific actions.
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Shared action: look up an employee in the company directory.
3
+ *
4
+ * Every app in the workspace inherits this action automatically — no
5
+ * wiring required. From the agent's perspective it behaves exactly like
6
+ * a template action: the tool shows up in every app's agent, and calling
7
+ * it from the UI via `useActionQuery("company-directory", { ... })` Just
8
+ * Works.
9
+ *
10
+ * Replace the stub implementation with a real call to your company
11
+ * directory (SCIM, Okta Users API, internal /people endpoint, etc.).
12
+ */
13
+ import { z } from "zod";
14
+ import { defineAction } from "@agent-native/core";
15
+
16
+ export default defineAction({
17
+ description:
18
+ "Look up a person in the {{APP_TITLE}} company directory by name or email. Returns role, team, and manager.",
19
+ schema: z.object({
20
+ query: z.string().describe("Name, email, or partial match to search for"),
21
+ }),
22
+ run: async (args) => {
23
+ // TODO: replace with a real lookup. This stub just echoes the query
24
+ // so the agent has a reasonable no-op while you wire up the real
25
+ // directory integration.
26
+ return {
27
+ results: [
28
+ {
29
+ query: args.query,
30
+ name: "(stub) " + args.query,
31
+ role: "Unknown",
32
+ team: "Unknown",
33
+ manager: null,
34
+ },
35
+ ],
36
+ };
37
+ },
38
+ });
@@ -0,0 +1,39 @@
1
+ {
2
+ "name": "@{{APP_NAME}}/core-module",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./src/index.ts",
9
+ "default": "./src/index.ts"
10
+ },
11
+ "./server": {
12
+ "types": "./src/server/index.ts",
13
+ "default": "./src/server/index.ts"
14
+ },
15
+ "./client": {
16
+ "types": "./src/client/index.ts",
17
+ "default": "./src/client/index.ts"
18
+ },
19
+ "./credentials": {
20
+ "types": "./src/credentials.ts",
21
+ "default": "./src/credentials.ts"
22
+ },
23
+ "./tailwind": {
24
+ "types": "./tailwind.preset.ts",
25
+ "default": "./tailwind.preset.ts"
26
+ }
27
+ },
28
+ "dependencies": {
29
+ "@agent-native/core": "^0.6.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/react": "^18.3.23",
33
+ "react": "^18.3.1",
34
+ "typescript": "^5.9.2"
35
+ },
36
+ "peerDependencies": {
37
+ "react": "^18.3.1"
38
+ }
39
+ }
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: company-policies
3
+ description: {{APP_TITLE}}-wide policies the agent must enforce for every app — data handling, PII, approval flows, compliance rules.
4
+ ---
5
+
6
+ # {{APP_TITLE}} Company Policies
7
+
8
+ Every app in the workspace shares these policies. Read this skill before
9
+ taking any action that touches customer data, external services, or
10
+ deployed state.
11
+
12
+ ## Data handling
13
+
14
+ - **PII minimization.** Only load the fields you actually need. Never
15
+ `SELECT *` on a table that contains customer records.
16
+ - **No raw customer email in logs.** Hash or redact before logging.
17
+ - **Retention.** Deleted records are soft-deleted first and purged by a
18
+ scheduled job. Do not write actions that hard-delete customer data.
19
+
20
+ ## Third-party calls
21
+
22
+ - **Allowlist only.** Only call domains on the approved allowlist
23
+ (documented in the root `README.md`). If an integration needs a new
24
+ domain, surface a warning and wait for human approval before making
25
+ the call.
26
+ - **Secrets come from `resolveCompanyCredential`.** Never hardcode.
27
+ Never check secrets into git. Rotating a key in the central store
28
+ updates every app on the next request.
29
+
30
+ ## Approval flows
31
+
32
+ - **Destructive operations need a confirmation preview.** Any action
33
+ that modifies production data must first return a preview of the
34
+ change (what will be created / updated / deleted) and wait for
35
+ explicit user confirmation before executing.
36
+
37
+ ## Apply across apps
38
+
39
+ This skill is loaded automatically in every workspace app. If an
40
+ individual app needs different behavior, it can add a same-named skill
41
+ under its own `.agents/skills/company-policies/SKILL.md` and that copy
42
+ will win for that app only.
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Shared authenticated layout for every app in the @{{APP_NAME}} workspace.
3
+ *
4
+ * Provides the common chrome (brand header, user menu, agent chat sidebar)
5
+ * so individual apps only have to render their own content. Replace this
6
+ * with a real component that pulls in your design system. Every app
7
+ * imports it the same way:
8
+ *
9
+ * import { AuthenticatedLayout } from "@{{APP_NAME}}/core-module/client";
10
+ *
11
+ * export default function Home() {
12
+ * return (
13
+ * <AuthenticatedLayout>
14
+ * <h1>My app's screen</h1>
15
+ * </AuthenticatedLayout>
16
+ * );
17
+ * }
18
+ */
19
+ import type { ReactNode } from "react";
20
+
21
+ export interface AuthenticatedLayoutProps {
22
+ children: ReactNode;
23
+ }
24
+
25
+ // Workspace title — replaced at scaffold time by the create-workspace CLI.
26
+ const WORKSPACE_TITLE = "{{APP_TITLE}}";
27
+
28
+ export function AuthenticatedLayout({ children }: AuthenticatedLayoutProps) {
29
+ return (
30
+ <div className="min-h-screen flex flex-col">
31
+ <header className="border-b px-6 py-3">
32
+ <strong>{WORKSPACE_TITLE}</strong>
33
+ </header>
34
+ <main className="flex-1 p-6">{children}</main>
35
+ </div>
36
+ );
37
+ }
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Client-side entry for @{{APP_NAME}}/core-module.
3
+ *
4
+ * This is where shared React components, hooks, and providers that EVERY
5
+ * app in your workspace needs live. Think of it as the "app shell" layer
6
+ * between the framework's primitives (@agent-native/core/client) and the
7
+ * individual app's screens:
8
+ *
9
+ * - Authenticated layouts (header / sidebar / footer with brand)
10
+ * - Org switchers wired to your company's org plugin
11
+ * - Common chrome: loading states, error boundaries, empty states
12
+ * - Wrappers around @agent-native/core components that apply your
13
+ * enterprise design tokens
14
+ *
15
+ * Apps import from here instead of re-implementing or copy-pasting:
16
+ *
17
+ * import { AuthenticatedLayout } from "@{{APP_NAME}}/core-module/client";
18
+ *
19
+ * NOTE: This package does not ship shadcn/ui or a generic design system
20
+ * by default. If you already have an internal `@{{APP_NAME}}/design-system`
21
+ * package, add it as a dep here and re-export from this file. Otherwise
22
+ * you can drop any shadcn components the apps share into `./ui/` and
23
+ * export them from this index.
24
+ */
25
+
26
+ export { AuthenticatedLayout } from "./AuthenticatedLayout.js";
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Centralized credential helpers for the @{{APP_NAME}} workspace.
3
+ *
4
+ * Every enterprise has a few API keys that multiple apps need to share:
5
+ * a Slack bot token, a Sentry DSN, an OpenAI key, internal service
6
+ * credentials. Instead of each app reading them separately, we namespace
7
+ * them here so there's a single place to update when a key rotates.
8
+ *
9
+ * Under the hood this is a thin wrapper over @agent-native/core's
10
+ * `resolveCredential()`, which reads `process.env.<KEY>` first and
11
+ * falls back to `credential:<KEY>` in the shared settings table.
12
+ * Apps inside the workspace share the same DATABASE_URL by default,
13
+ * so storing a credential once makes it available everywhere.
14
+ */
15
+ import { resolveCredential } from "@agent-native/core/credentials";
16
+
17
+ /**
18
+ * Resolve a company-wide credential. Prefer this over `resolveCredential()`
19
+ * directly — it keeps your keys organized under a workspace namespace and
20
+ * makes "where does this secret come from" greppable.
21
+ *
22
+ * Example:
23
+ * const slackToken = await resolveCompanyCredential("SLACK_BOT_TOKEN");
24
+ */
25
+ export async function resolveCompanyCredential(
26
+ key: string,
27
+ ): Promise<string | undefined> {
28
+ return await resolveCredential(key);
29
+ }
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @{{APP_NAME}}/core-module — enterprise-wide workspace core.
3
+ *
4
+ * Every agent-native app in this workspace inherits from this package:
5
+ * - Server plugins (auth, org, agent-chat) — see src/server
6
+ * - Shared React components and hooks — see src/client
7
+ * - Shared agent actions — see actions/
8
+ * - Shared agent skills — see skills/
9
+ * - Enterprise-wide agent instructions — see AGENTS.md
10
+ * - Shared Tailwind preset — see tailwind.preset.ts
11
+ *
12
+ * Apps don't import from this root entry directly — they import from
13
+ * the specific sub-path they need:
14
+ *
15
+ * import { authPlugin } from "@{{APP_NAME}}/core-module/server";
16
+ * import { AuthenticatedLayout } from "@{{APP_NAME}}/core-module/client";
17
+ * import { resolveCompanyCredential } from "@{{APP_NAME}}/core-module/credentials";
18
+ *
19
+ * This root file is for package metadata only.
20
+ */
21
+ export const WORKSPACE_CORE_NAME = "@{{APP_NAME}}/core-module";