@agent-native/core 0.6.1 → 0.7.2

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 (598) hide show
  1. package/README.md +43 -3
  2. package/dist/action.d.ts +8 -0
  3. package/dist/action.d.ts.map +1 -1
  4. package/dist/action.js +18 -0
  5. package/dist/action.js.map +1 -1
  6. package/dist/agent/production-agent.d.ts +9 -0
  7. package/dist/agent/production-agent.d.ts.map +1 -1
  8. package/dist/agent/production-agent.js +301 -39
  9. package/dist/agent/production-agent.js.map +1 -1
  10. package/dist/agent/run-manager.d.ts.map +1 -1
  11. package/dist/agent/run-manager.js +20 -1
  12. package/dist/agent/run-manager.js.map +1 -1
  13. package/dist/agent/run-store.d.ts +14 -0
  14. package/dist/agent/run-store.d.ts.map +1 -1
  15. package/dist/agent/run-store.js +63 -6
  16. package/dist/agent/run-store.js.map +1 -1
  17. package/dist/agent/types.d.ts +3 -1
  18. package/dist/agent/types.d.ts.map +1 -1
  19. package/dist/cli/create-workspace.d.ts +8 -0
  20. package/dist/cli/create-workspace.d.ts.map +1 -0
  21. package/dist/cli/create-workspace.js +18 -0
  22. package/dist/cli/create-workspace.js.map +1 -0
  23. package/dist/cli/create.d.ts +35 -7
  24. package/dist/cli/create.d.ts.map +1 -1
  25. package/dist/cli/create.js +444 -251
  26. package/dist/cli/create.js.map +1 -1
  27. package/dist/cli/index.js +59 -5
  28. package/dist/cli/index.js.map +1 -1
  29. package/dist/cli/setup-agents.d.ts.map +1 -1
  30. package/dist/cli/setup-agents.js +0 -2
  31. package/dist/cli/setup-agents.js.map +1 -1
  32. package/dist/cli/templates-meta.d.ts +52 -0
  33. package/dist/cli/templates-meta.d.ts.map +1 -0
  34. package/dist/cli/templates-meta.js +165 -0
  35. package/dist/cli/templates-meta.js.map +1 -0
  36. package/dist/cli/workspacify.d.ts +18 -0
  37. package/dist/cli/workspacify.d.ts.map +1 -0
  38. package/dist/cli/workspacify.js +74 -0
  39. package/dist/cli/workspacify.js.map +1 -0
  40. package/dist/client/AgentPanel.d.ts +6 -2
  41. package/dist/client/AgentPanel.d.ts.map +1 -1
  42. package/dist/client/AgentPanel.js +328 -241
  43. package/dist/client/AgentPanel.js.map +1 -1
  44. package/dist/client/AssistantChat.d.ts +2 -1
  45. package/dist/client/AssistantChat.d.ts.map +1 -1
  46. package/dist/client/AssistantChat.js +172 -40
  47. package/dist/client/AssistantChat.js.map +1 -1
  48. package/dist/client/ConnectBuilderCard.d.ts +21 -0
  49. package/dist/client/ConnectBuilderCard.d.ts.map +1 -0
  50. package/dist/client/ConnectBuilderCard.js +196 -0
  51. package/dist/client/ConnectBuilderCard.js.map +1 -0
  52. package/dist/client/FeedbackButton.d.ts +15 -0
  53. package/dist/client/FeedbackButton.d.ts.map +1 -0
  54. package/dist/client/FeedbackButton.js +72 -0
  55. package/dist/client/FeedbackButton.js.map +1 -0
  56. package/dist/client/IframeEmbed.d.ts +17 -0
  57. package/dist/client/IframeEmbed.d.ts.map +1 -0
  58. package/dist/client/IframeEmbed.js +108 -0
  59. package/dist/client/IframeEmbed.js.map +1 -0
  60. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
  61. package/dist/client/MultiTabAssistantChat.js +34 -7
  62. package/dist/client/MultiTabAssistantChat.js.map +1 -1
  63. package/dist/client/agent-chat-adapter.d.ts.map +1 -1
  64. package/dist/client/agent-chat-adapter.js +34 -15
  65. package/dist/client/agent-chat-adapter.js.map +1 -1
  66. package/dist/client/agent-chat.d.ts +6 -0
  67. package/dist/client/agent-chat.d.ts.map +1 -1
  68. package/dist/client/agent-chat.js +7 -0
  69. package/dist/client/agent-chat.js.map +1 -1
  70. package/dist/client/components/CodeRequiredDialog.d.ts.map +1 -1
  71. package/dist/client/components/CodeRequiredDialog.js +86 -5
  72. package/dist/client/components/CodeRequiredDialog.js.map +1 -1
  73. package/dist/client/composer/MentionPopover.d.ts.map +1 -1
  74. package/dist/client/composer/MentionPopover.js +42 -26
  75. package/dist/client/composer/MentionPopover.js.map +1 -1
  76. package/dist/client/composer/TiptapComposer.d.ts +3 -1
  77. package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
  78. package/dist/client/composer/TiptapComposer.js +24 -5
  79. package/dist/client/composer/TiptapComposer.js.map +1 -1
  80. package/dist/client/composer/types.d.ts +1 -1
  81. package/dist/client/composer/types.d.ts.map +1 -1
  82. package/dist/client/embed.d.ts +28 -0
  83. package/dist/client/embed.d.ts.map +1 -0
  84. package/dist/client/embed.js +50 -0
  85. package/dist/client/embed.js.map +1 -0
  86. package/dist/client/index.d.ts +4 -1
  87. package/dist/client/index.d.ts.map +1 -1
  88. package/dist/client/index.js +4 -1
  89. package/dist/client/index.js.map +1 -1
  90. package/dist/client/integrations/IntegrationsPanel.d.ts.map +1 -1
  91. package/dist/client/integrations/IntegrationsPanel.js +22 -9
  92. package/dist/client/integrations/IntegrationsPanel.js.map +1 -1
  93. package/dist/client/onboarding/OnboardingBanner.d.ts +13 -0
  94. package/dist/client/onboarding/OnboardingBanner.d.ts.map +1 -0
  95. package/dist/client/onboarding/OnboardingBanner.js +36 -0
  96. package/dist/client/onboarding/OnboardingBanner.js.map +1 -0
  97. package/dist/client/onboarding/OnboardingPanel.d.ts +16 -0
  98. package/dist/client/onboarding/OnboardingPanel.d.ts.map +1 -0
  99. package/dist/client/onboarding/OnboardingPanel.js +447 -0
  100. package/dist/client/onboarding/OnboardingPanel.js.map +1 -0
  101. package/dist/client/onboarding/SetupButton.d.ts +10 -0
  102. package/dist/client/onboarding/SetupButton.d.ts.map +1 -0
  103. package/dist/client/onboarding/SetupButton.js +36 -0
  104. package/dist/client/onboarding/SetupButton.js.map +1 -0
  105. package/dist/client/onboarding/index.d.ts +12 -0
  106. package/dist/client/onboarding/index.d.ts.map +1 -0
  107. package/dist/client/onboarding/index.js +11 -0
  108. package/dist/client/onboarding/index.js.map +1 -0
  109. package/dist/client/onboarding/use-onboarding.d.ts +34 -0
  110. package/dist/client/onboarding/use-onboarding.d.ts.map +1 -0
  111. package/dist/client/onboarding/use-onboarding.js +101 -0
  112. package/dist/client/onboarding/use-onboarding.js.map +1 -0
  113. package/dist/client/org/TeamPage.d.ts +6 -1
  114. package/dist/client/org/TeamPage.d.ts.map +1 -1
  115. package/dist/client/org/TeamPage.js +97 -21
  116. package/dist/client/org/TeamPage.js.map +1 -1
  117. package/dist/client/resources/ResourceEditor.d.ts.map +1 -1
  118. package/dist/client/resources/ResourceEditor.js +104 -78
  119. package/dist/client/resources/ResourceEditor.js.map +1 -1
  120. package/dist/client/resources/ResourceTree.d.ts +5 -1
  121. package/dist/client/resources/ResourceTree.d.ts.map +1 -1
  122. package/dist/client/resources/ResourceTree.js +31 -11
  123. package/dist/client/resources/ResourceTree.js.map +1 -1
  124. package/dist/client/resources/ResourcesPanel.d.ts.map +1 -1
  125. package/dist/client/resources/ResourcesPanel.js +142 -14
  126. package/dist/client/resources/ResourcesPanel.js.map +1 -1
  127. package/dist/client/resources/use-resources.d.ts +5 -0
  128. package/dist/client/resources/use-resources.d.ts.map +1 -1
  129. package/dist/client/resources/use-resources.js.map +1 -1
  130. package/dist/client/settings/AgentsSection.d.ts +2 -0
  131. package/dist/client/settings/AgentsSection.d.ts.map +1 -0
  132. package/dist/client/settings/AgentsSection.js +201 -0
  133. package/dist/client/settings/AgentsSection.js.map +1 -0
  134. package/dist/client/settings/BackgroundAgentSection.d.ts +2 -0
  135. package/dist/client/settings/BackgroundAgentSection.d.ts.map +1 -0
  136. package/dist/client/settings/BackgroundAgentSection.js +46 -0
  137. package/dist/client/settings/BackgroundAgentSection.js.map +1 -0
  138. package/dist/client/settings/BrowserSection.d.ts +2 -0
  139. package/dist/client/settings/BrowserSection.d.ts.map +1 -0
  140. package/dist/client/settings/BrowserSection.js +10 -0
  141. package/dist/client/settings/BrowserSection.js.map +1 -0
  142. package/dist/client/settings/ComingSoonSection.d.ts +13 -0
  143. package/dist/client/settings/ComingSoonSection.d.ts.map +1 -0
  144. package/dist/client/settings/ComingSoonSection.js +9 -0
  145. package/dist/client/settings/ComingSoonSection.js.map +1 -0
  146. package/dist/client/settings/LLMSection.d.ts +2 -0
  147. package/dist/client/settings/LLMSection.d.ts.map +1 -0
  148. package/dist/client/settings/LLMSection.js +64 -0
  149. package/dist/client/settings/LLMSection.js.map +1 -0
  150. package/dist/client/settings/SettingsPanel.d.ts +8 -0
  151. package/dist/client/settings/SettingsPanel.d.ts.map +1 -0
  152. package/dist/client/settings/SettingsPanel.js +111 -0
  153. package/dist/client/settings/SettingsPanel.js.map +1 -0
  154. package/dist/client/settings/SettingsSection.d.ts +19 -0
  155. package/dist/client/settings/SettingsSection.d.ts.map +1 -0
  156. package/dist/client/settings/SettingsSection.js +10 -0
  157. package/dist/client/settings/SettingsSection.js.map +1 -0
  158. package/dist/client/settings/UsageSection.d.ts +2 -0
  159. package/dist/client/settings/UsageSection.d.ts.map +1 -0
  160. package/dist/client/settings/UsageSection.js +70 -0
  161. package/dist/client/settings/UsageSection.js.map +1 -0
  162. package/dist/client/settings/index.d.ts +3 -0
  163. package/dist/client/settings/index.d.ts.map +1 -0
  164. package/dist/client/settings/index.js +3 -0
  165. package/dist/client/settings/index.js.map +1 -0
  166. package/dist/client/settings/useBuilderStatus.d.ts +22 -0
  167. package/dist/client/settings/useBuilderStatus.d.ts.map +1 -0
  168. package/dist/client/settings/useBuilderStatus.js +41 -0
  169. package/dist/client/settings/useBuilderStatus.js.map +1 -0
  170. package/dist/client/use-action.d.ts.map +1 -1
  171. package/dist/client/use-action.js +67 -4
  172. package/dist/client/use-action.js.map +1 -1
  173. package/dist/client/use-db-sync.d.ts +25 -2
  174. package/dist/client/use-db-sync.d.ts.map +1 -1
  175. package/dist/client/use-db-sync.js +62 -1
  176. package/dist/client/use-db-sync.js.map +1 -1
  177. package/dist/client/use-dev-mode.d.ts.map +1 -1
  178. package/dist/client/use-dev-mode.js +16 -1
  179. package/dist/client/use-dev-mode.js.map +1 -1
  180. package/dist/db/client.d.ts +12 -0
  181. package/dist/db/client.d.ts.map +1 -1
  182. package/dist/db/client.js +89 -2
  183. package/dist/db/client.js.map +1 -1
  184. package/dist/db/create-get-db.d.ts +11 -0
  185. package/dist/db/create-get-db.d.ts.map +1 -1
  186. package/dist/db/create-get-db.js +47 -3
  187. package/dist/db/create-get-db.js.map +1 -1
  188. package/dist/db/migrations.d.ts.map +1 -1
  189. package/dist/db/migrations.js +62 -5
  190. package/dist/db/migrations.js.map +1 -1
  191. package/dist/deploy/build.js +198 -54
  192. package/dist/deploy/build.js.map +1 -1
  193. package/dist/deploy/route-discovery.d.ts +5 -0
  194. package/dist/deploy/route-discovery.d.ts.map +1 -1
  195. package/dist/deploy/route-discovery.js +38 -7
  196. package/dist/deploy/route-discovery.js.map +1 -1
  197. package/dist/deploy/workspace-core.d.ts +28 -0
  198. package/dist/deploy/workspace-core.d.ts.map +1 -0
  199. package/dist/deploy/workspace-core.js +223 -0
  200. package/dist/deploy/workspace-core.js.map +1 -0
  201. package/dist/deploy/workspace-deploy.d.ts +11 -0
  202. package/dist/deploy/workspace-deploy.d.ts.map +1 -0
  203. package/dist/deploy/workspace-deploy.js +148 -0
  204. package/dist/deploy/workspace-deploy.js.map +1 -0
  205. package/dist/file-upload/builder.d.ts +11 -0
  206. package/dist/file-upload/builder.d.ts.map +1 -0
  207. package/dist/file-upload/builder.js +53 -0
  208. package/dist/file-upload/builder.js.map +1 -0
  209. package/dist/file-upload/index.d.ts +4 -0
  210. package/dist/file-upload/index.d.ts.map +1 -0
  211. package/dist/file-upload/index.js +3 -0
  212. package/dist/file-upload/index.js.map +1 -0
  213. package/dist/file-upload/registry.d.ts +23 -0
  214. package/dist/file-upload/registry.d.ts.map +1 -0
  215. package/dist/file-upload/registry.js +52 -0
  216. package/dist/file-upload/registry.js.map +1 -0
  217. package/dist/file-upload/types.d.ts +37 -0
  218. package/dist/file-upload/types.d.ts.map +1 -0
  219. package/dist/file-upload/types.js +10 -0
  220. package/dist/file-upload/types.js.map +1 -0
  221. package/dist/index.d.ts +1 -0
  222. package/dist/index.d.ts.map +1 -1
  223. package/dist/index.js +2 -0
  224. package/dist/index.js.map +1 -1
  225. package/dist/integrations/adapters/google-docs.d.ts +89 -0
  226. package/dist/integrations/adapters/google-docs.d.ts.map +1 -0
  227. package/dist/integrations/adapters/google-docs.js +261 -0
  228. package/dist/integrations/adapters/google-docs.js.map +1 -0
  229. package/dist/integrations/adapters/slack.d.ts.map +1 -1
  230. package/dist/integrations/adapters/slack.js +34 -0
  231. package/dist/integrations/adapters/slack.js.map +1 -1
  232. package/dist/integrations/adapters/telegram.d.ts.map +1 -1
  233. package/dist/integrations/adapters/telegram.js +32 -0
  234. package/dist/integrations/adapters/telegram.js.map +1 -1
  235. package/dist/integrations/google-docs-poller.d.ts +54 -0
  236. package/dist/integrations/google-docs-poller.d.ts.map +1 -0
  237. package/dist/integrations/google-docs-poller.js +442 -0
  238. package/dist/integrations/google-docs-poller.js.map +1 -0
  239. package/dist/integrations/index.d.ts +2 -0
  240. package/dist/integrations/index.d.ts.map +1 -1
  241. package/dist/integrations/index.js +3 -0
  242. package/dist/integrations/index.js.map +1 -1
  243. package/dist/integrations/plugin.d.ts.map +1 -1
  244. package/dist/integrations/plugin.js +49 -2
  245. package/dist/integrations/plugin.js.map +1 -1
  246. package/dist/integrations/types.d.ts +33 -0
  247. package/dist/integrations/types.d.ts.map +1 -1
  248. package/dist/integrations/webhook-handler.d.ts +10 -1
  249. package/dist/integrations/webhook-handler.d.ts.map +1 -1
  250. package/dist/integrations/webhook-handler.js +13 -3
  251. package/dist/integrations/webhook-handler.js.map +1 -1
  252. package/dist/jobs/scheduler.d.ts +3 -0
  253. package/dist/jobs/scheduler.d.ts.map +1 -1
  254. package/dist/jobs/scheduler.js +87 -61
  255. package/dist/jobs/scheduler.js.map +1 -1
  256. package/dist/jobs/tools.d.ts.map +1 -1
  257. package/dist/jobs/tools.js +20 -3
  258. package/dist/jobs/tools.js.map +1 -1
  259. package/dist/mcp-client/config.d.ts +46 -0
  260. package/dist/mcp-client/config.d.ts.map +1 -0
  261. package/dist/mcp-client/config.js +152 -0
  262. package/dist/mcp-client/config.js.map +1 -0
  263. package/dist/mcp-client/index.d.ts +17 -0
  264. package/dist/mcp-client/index.d.ts.map +1 -0
  265. package/dist/mcp-client/index.js +53 -0
  266. package/dist/mcp-client/index.js.map +1 -0
  267. package/dist/mcp-client/manager.d.ts +76 -0
  268. package/dist/mcp-client/manager.d.ts.map +1 -0
  269. package/dist/mcp-client/manager.js +212 -0
  270. package/dist/mcp-client/manager.js.map +1 -0
  271. package/dist/oauth-tokens/google-refresh.d.ts +31 -0
  272. package/dist/oauth-tokens/google-refresh.d.ts.map +1 -0
  273. package/dist/oauth-tokens/google-refresh.js +115 -0
  274. package/dist/oauth-tokens/google-refresh.js.map +1 -0
  275. package/dist/oauth-tokens/index.d.ts +1 -0
  276. package/dist/oauth-tokens/index.d.ts.map +1 -1
  277. package/dist/oauth-tokens/index.js +1 -0
  278. package/dist/oauth-tokens/index.js.map +1 -1
  279. package/dist/oauth-tokens/store.d.ts.map +1 -1
  280. package/dist/oauth-tokens/store.js +3 -1
  281. package/dist/oauth-tokens/store.js.map +1 -1
  282. package/dist/onboarding/default-steps.d.ts +10 -0
  283. package/dist/onboarding/default-steps.d.ts.map +1 -0
  284. package/dist/onboarding/default-steps.js +203 -0
  285. package/dist/onboarding/default-steps.js.map +1 -0
  286. package/dist/onboarding/index.d.ts +12 -0
  287. package/dist/onboarding/index.d.ts.map +1 -0
  288. package/dist/onboarding/index.js +11 -0
  289. package/dist/onboarding/index.js.map +1 -0
  290. package/dist/onboarding/plugin.d.ts +19 -0
  291. package/dist/onboarding/plugin.d.ts.map +1 -0
  292. package/dist/onboarding/plugin.js +147 -0
  293. package/dist/onboarding/plugin.js.map +1 -0
  294. package/dist/onboarding/registry.d.ts +24 -0
  295. package/dist/onboarding/registry.d.ts.map +1 -0
  296. package/dist/onboarding/registry.js +40 -0
  297. package/dist/onboarding/registry.js.map +1 -0
  298. package/dist/onboarding/types.d.ts +71 -0
  299. package/dist/onboarding/types.d.ts.map +1 -0
  300. package/dist/onboarding/types.js +10 -0
  301. package/dist/onboarding/types.js.map +1 -0
  302. package/dist/org/context.js +1 -1
  303. package/dist/org/handlers.d.ts.map +1 -1
  304. package/dist/org/handlers.js +35 -10
  305. package/dist/org/handlers.js.map +1 -1
  306. package/dist/org/plugin.d.ts.map +1 -1
  307. package/dist/org/plugin.js +37 -22
  308. package/dist/org/plugin.js.map +1 -1
  309. package/dist/resources/agents.d.ts +4 -0
  310. package/dist/resources/agents.d.ts.map +1 -0
  311. package/dist/resources/agents.js +44 -0
  312. package/dist/resources/agents.js.map +1 -0
  313. package/dist/resources/handlers.d.ts +17 -0
  314. package/dist/resources/handlers.d.ts.map +1 -1
  315. package/dist/resources/handlers.js +49 -12
  316. package/dist/resources/handlers.js.map +1 -1
  317. package/dist/resources/metadata.d.ts +48 -0
  318. package/dist/resources/metadata.d.ts.map +1 -0
  319. package/dist/resources/metadata.js +150 -0
  320. package/dist/resources/metadata.js.map +1 -0
  321. package/dist/resources/script-helpers.d.ts.map +1 -1
  322. package/dist/resources/script-helpers.js +3 -2
  323. package/dist/resources/script-helpers.js.map +1 -1
  324. package/dist/resources/store.d.ts.map +1 -1
  325. package/dist/resources/store.js +59 -18
  326. package/dist/resources/store.js.map +1 -1
  327. package/dist/scripts/call-agent.d.ts.map +1 -1
  328. package/dist/scripts/call-agent.js +3 -2
  329. package/dist/scripts/call-agent.js.map +1 -1
  330. package/dist/scripts/chat/search-chats.d.ts.map +1 -1
  331. package/dist/scripts/chat/search-chats.js +2 -1
  332. package/dist/scripts/chat/search-chats.js.map +1 -1
  333. package/dist/scripts/core-scripts.d.ts.map +1 -1
  334. package/dist/scripts/core-scripts.js +2 -0
  335. package/dist/scripts/core-scripts.js.map +1 -1
  336. package/dist/scripts/db/patch.d.ts.map +1 -1
  337. package/dist/scripts/db/patch.js +273 -11
  338. package/dist/scripts/db/patch.js.map +1 -1
  339. package/dist/scripts/db/scoping.d.ts.map +1 -1
  340. package/dist/scripts/db/scoping.js +3 -2
  341. package/dist/scripts/db/scoping.js.map +1 -1
  342. package/dist/scripts/docs/index.d.ts +2 -0
  343. package/dist/scripts/docs/index.d.ts.map +1 -0
  344. package/dist/scripts/docs/index.js +4 -0
  345. package/dist/scripts/docs/index.js.map +1 -0
  346. package/dist/scripts/docs/search.d.ts +13 -0
  347. package/dist/scripts/docs/search.d.ts.map +1 -0
  348. package/dist/scripts/docs/search.js +130 -0
  349. package/dist/scripts/docs/search.js.map +1 -0
  350. package/dist/scripts/resources/delete-memory.d.ts +7 -0
  351. package/dist/scripts/resources/delete-memory.d.ts.map +1 -0
  352. package/dist/scripts/resources/delete-memory.js +49 -0
  353. package/dist/scripts/resources/delete-memory.js.map +1 -0
  354. package/dist/scripts/resources/delete.d.ts.map +1 -1
  355. package/dist/scripts/resources/delete.js +2 -1
  356. package/dist/scripts/resources/delete.js.map +1 -1
  357. package/dist/scripts/resources/index.d.ts.map +1 -1
  358. package/dist/scripts/resources/index.js +2 -0
  359. package/dist/scripts/resources/index.js.map +1 -1
  360. package/dist/scripts/resources/list.d.ts.map +1 -1
  361. package/dist/scripts/resources/list.js +2 -1
  362. package/dist/scripts/resources/list.js.map +1 -1
  363. package/dist/scripts/resources/migrate-learnings.d.ts.map +1 -1
  364. package/dist/scripts/resources/migrate-learnings.js +2 -1
  365. package/dist/scripts/resources/migrate-learnings.js.map +1 -1
  366. package/dist/scripts/resources/read.d.ts.map +1 -1
  367. package/dist/scripts/resources/read.js +2 -1
  368. package/dist/scripts/resources/read.js.map +1 -1
  369. package/dist/scripts/resources/save-memory.d.ts +9 -0
  370. package/dist/scripts/resources/save-memory.d.ts.map +1 -0
  371. package/dist/scripts/resources/save-memory.js +78 -0
  372. package/dist/scripts/resources/save-memory.js.map +1 -0
  373. package/dist/scripts/resources/write.d.ts.map +1 -1
  374. package/dist/scripts/resources/write.js +2 -1
  375. package/dist/scripts/resources/write.js.map +1 -1
  376. package/dist/scripts/utils.d.ts +10 -1
  377. package/dist/scripts/utils.d.ts.map +1 -1
  378. package/dist/scripts/utils.js +45 -2
  379. package/dist/scripts/utils.js.map +1 -1
  380. package/dist/server/action-discovery.d.ts +5 -0
  381. package/dist/server/action-discovery.d.ts.map +1 -1
  382. package/dist/server/action-discovery.js +53 -20
  383. package/dist/server/action-discovery.js.map +1 -1
  384. package/dist/server/action-routes.d.ts.map +1 -1
  385. package/dist/server/action-routes.js +88 -56
  386. package/dist/server/action-routes.js.map +1 -1
  387. package/dist/server/agent-chat-plugin.d.ts +15 -0
  388. package/dist/server/agent-chat-plugin.d.ts.map +1 -1
  389. package/dist/server/agent-chat-plugin.js +853 -91
  390. package/dist/server/agent-chat-plugin.js.map +1 -1
  391. package/dist/server/agent-discovery.d.ts.map +1 -1
  392. package/dist/server/agent-discovery.js +13 -25
  393. package/dist/server/agent-discovery.js.map +1 -1
  394. package/dist/server/agent-teams.d.ts.map +1 -1
  395. package/dist/server/agent-teams.js +23 -59
  396. package/dist/server/agent-teams.js.map +1 -1
  397. package/dist/server/agents-bundle.d.ts +33 -5
  398. package/dist/server/agents-bundle.d.ts.map +1 -1
  399. package/dist/server/agents-bundle.js +108 -64
  400. package/dist/server/agents-bundle.js.map +1 -1
  401. package/dist/server/auth.d.ts +7 -0
  402. package/dist/server/auth.d.ts.map +1 -1
  403. package/dist/server/auth.js +448 -93
  404. package/dist/server/auth.js.map +1 -1
  405. package/dist/server/better-auth-instance.d.ts +1 -1
  406. package/dist/server/better-auth-instance.d.ts.map +1 -1
  407. package/dist/server/better-auth-instance.js +272 -10
  408. package/dist/server/better-auth-instance.js.map +1 -1
  409. package/dist/server/builder-browser.d.ts +61 -0
  410. package/dist/server/builder-browser.d.ts.map +1 -0
  411. package/dist/server/builder-browser.js +229 -0
  412. package/dist/server/builder-browser.js.map +1 -0
  413. package/dist/server/core-routes-plugin.d.ts.map +1 -1
  414. package/dist/server/core-routes-plugin.js +273 -9
  415. package/dist/server/core-routes-plugin.js.map +1 -1
  416. package/dist/server/credential-provider.d.ts +37 -0
  417. package/dist/server/credential-provider.d.ts.map +1 -0
  418. package/dist/server/credential-provider.js +49 -0
  419. package/dist/server/credential-provider.js.map +1 -0
  420. package/dist/server/desktop-sso.d.ts +30 -0
  421. package/dist/server/desktop-sso.d.ts.map +1 -0
  422. package/dist/server/desktop-sso.js +74 -0
  423. package/dist/server/desktop-sso.js.map +1 -0
  424. package/dist/server/email.d.ts +23 -0
  425. package/dist/server/email.d.ts.map +1 -0
  426. package/dist/server/email.js +105 -0
  427. package/dist/server/email.js.map +1 -0
  428. package/dist/server/framework-request-handler.d.ts.map +1 -1
  429. package/dist/server/framework-request-handler.js +71 -3
  430. package/dist/server/framework-request-handler.js.map +1 -1
  431. package/dist/server/google-auth-plugin.js +1 -1
  432. package/dist/server/google-oauth.d.ts +1 -1
  433. package/dist/server/google-oauth.d.ts.map +1 -1
  434. package/dist/server/google-oauth.js +34 -13
  435. package/dist/server/google-oauth.js.map +1 -1
  436. package/dist/server/index.d.ts +3 -0
  437. package/dist/server/index.d.ts.map +1 -1
  438. package/dist/server/index.js +3 -0
  439. package/dist/server/index.js.map +1 -1
  440. package/dist/server/local-migration.d.ts +9 -0
  441. package/dist/server/local-migration.d.ts.map +1 -1
  442. package/dist/server/local-migration.js +44 -14
  443. package/dist/server/local-migration.js.map +1 -1
  444. package/dist/server/oauth-helpers.d.ts +3 -0
  445. package/dist/server/oauth-helpers.d.ts.map +1 -1
  446. package/dist/server/oauth-helpers.js +7 -4
  447. package/dist/server/oauth-helpers.js.map +1 -1
  448. package/dist/server/onboarding-html.d.ts +6 -0
  449. package/dist/server/onboarding-html.d.ts.map +1 -1
  450. package/dist/server/onboarding-html.js +323 -28
  451. package/dist/server/onboarding-html.js.map +1 -1
  452. package/dist/server/poll.d.ts.map +1 -1
  453. package/dist/server/poll.js +48 -0
  454. package/dist/server/poll.js.map +1 -1
  455. package/dist/server/request-context.d.ts +20 -0
  456. package/dist/server/request-context.d.ts.map +1 -0
  457. package/dist/server/request-context.js +41 -0
  458. package/dist/server/request-context.js.map +1 -0
  459. package/dist/templates/default/.agents/skills/actions/SKILL.md +2 -1
  460. package/dist/templates/default/.agents/skills/inline-embeds/SKILL.md +88 -0
  461. package/dist/templates/default/.agents/skills/security/SKILL.md +145 -40
  462. package/dist/templates/default/.agents/skills/storing-data/SKILL.md +7 -1
  463. package/dist/templates/default/_gitignore +1 -0
  464. package/dist/templates/default/app/root.tsx +4 -1
  465. package/dist/templates/workspace-core/.agents/skills/company-policies/SKILL.md +42 -0
  466. package/dist/templates/workspace-core/AGENTS.md +62 -0
  467. package/dist/templates/workspace-core/actions/company-directory.ts +38 -0
  468. package/dist/templates/workspace-core/package.json +39 -0
  469. package/dist/templates/workspace-core/src/client/AuthenticatedLayout.tsx +37 -0
  470. package/dist/templates/workspace-core/src/client/index.ts +26 -0
  471. package/dist/templates/workspace-core/src/credentials.ts +29 -0
  472. package/dist/templates/workspace-core/src/index.ts +21 -0
  473. package/dist/templates/workspace-core/src/server/agent-chat-plugin.ts +30 -0
  474. package/dist/templates/workspace-core/src/server/auth-plugin.ts +35 -0
  475. package/dist/templates/workspace-core/src/server/index.ts +22 -0
  476. package/dist/templates/workspace-core/tailwind.preset.ts +34 -0
  477. package/dist/templates/workspace-core/tsconfig.json +9 -0
  478. package/dist/templates/workspace-root/.env.example +37 -0
  479. package/dist/templates/workspace-root/README.md +62 -0
  480. package/dist/templates/workspace-root/_gitignore +23 -0
  481. package/dist/templates/workspace-root/package.json +18 -0
  482. package/dist/templates/workspace-root/pnpm-workspace.yaml +3 -0
  483. package/dist/templates/workspace-root/tsconfig.base.json +21 -0
  484. package/dist/usage/store.d.ts +74 -12
  485. package/dist/usage/store.d.ts.map +1 -1
  486. package/dist/usage/store.js +210 -44
  487. package/dist/usage/store.js.map +1 -1
  488. package/dist/vite/agents-bundle-plugin.d.ts.map +1 -1
  489. package/dist/vite/agents-bundle-plugin.js +65 -15
  490. package/dist/vite/agents-bundle-plugin.js.map +1 -1
  491. package/dist/vite/client.d.ts +16 -0
  492. package/dist/vite/client.d.ts.map +1 -1
  493. package/dist/vite/client.js +130 -0
  494. package/dist/vite/client.js.map +1 -1
  495. package/docs/content/a2a-protocol.md +223 -0
  496. package/docs/content/actions.md +129 -0
  497. package/docs/content/agent-mentions.md +171 -0
  498. package/docs/content/authentication.md +155 -0
  499. package/docs/content/cli-adapters.md +244 -0
  500. package/docs/content/client.md +175 -0
  501. package/docs/content/context-awareness.md +168 -0
  502. package/docs/content/creating-templates.md +311 -0
  503. package/docs/content/database.md +82 -0
  504. package/docs/content/deployment.md +237 -0
  505. package/docs/content/enterprise-workspace.md +235 -0
  506. package/docs/content/faq.md +101 -0
  507. package/docs/content/file-uploads.md +102 -0
  508. package/docs/content/frames.md +47 -0
  509. package/docs/content/getting-started.md +104 -0
  510. package/docs/content/integrations.md +198 -0
  511. package/docs/content/key-concepts.md +246 -0
  512. package/docs/content/mcp-clients.md +110 -0
  513. package/docs/content/mcp-protocol.md +168 -0
  514. package/docs/content/onboarding.md +107 -0
  515. package/docs/content/real-time-collaboration.md +185 -0
  516. package/docs/content/resources.md +277 -0
  517. package/docs/content/security.md +158 -0
  518. package/docs/content/server.md +200 -0
  519. package/docs/content/skills-guide.md +107 -0
  520. package/docs/content/what-is-agent-native.md +100 -0
  521. package/docs/content/workspace-management.md +224 -0
  522. package/package.json +13 -3
  523. package/src/templates/default/.agents/skills/actions/SKILL.md +2 -1
  524. package/src/templates/default/.agents/skills/inline-embeds/SKILL.md +88 -0
  525. package/src/templates/default/.agents/skills/security/SKILL.md +145 -40
  526. package/src/templates/default/.agents/skills/storing-data/SKILL.md +7 -1
  527. package/src/templates/default/_gitignore +1 -0
  528. package/src/templates/default/app/root.tsx +4 -1
  529. package/src/templates/workspace-core/.agents/skills/company-policies/SKILL.md +42 -0
  530. package/src/templates/workspace-core/AGENTS.md +62 -0
  531. package/src/templates/workspace-core/actions/company-directory.ts +38 -0
  532. package/src/templates/workspace-core/package.json +39 -0
  533. package/src/templates/workspace-core/src/client/AuthenticatedLayout.tsx +37 -0
  534. package/src/templates/workspace-core/src/client/index.ts +26 -0
  535. package/src/templates/workspace-core/src/credentials.ts +29 -0
  536. package/src/templates/workspace-core/src/index.ts +21 -0
  537. package/src/templates/workspace-core/src/server/agent-chat-plugin.ts +30 -0
  538. package/src/templates/workspace-core/src/server/auth-plugin.ts +35 -0
  539. package/src/templates/workspace-core/src/server/index.ts +22 -0
  540. package/src/templates/workspace-core/tailwind.preset.ts +34 -0
  541. package/src/templates/workspace-core/tsconfig.json +9 -0
  542. package/src/templates/workspace-root/.env.example +37 -0
  543. package/src/templates/workspace-root/README.md +62 -0
  544. package/src/templates/workspace-root/_gitignore +23 -0
  545. package/src/templates/workspace-root/package.json +18 -0
  546. package/src/templates/workspace-root/pnpm-workspace.yaml +3 -0
  547. package/src/templates/workspace-root/tsconfig.base.json +21 -0
  548. package/dist/templates/templates/default/.agents/skills/actions/SKILL.md +0 -142
  549. package/dist/templates/templates/default/.agents/skills/agent-engines/SKILL.md +0 -127
  550. package/dist/templates/templates/default/.agents/skills/capture-learnings/SKILL.md +0 -50
  551. package/dist/templates/templates/default/.agents/skills/create-skill/SKILL.md +0 -167
  552. package/dist/templates/templates/default/.agents/skills/delegate-to-agent/SKILL.md +0 -90
  553. package/dist/templates/templates/default/.agents/skills/frontend-design/SKILL.md +0 -69
  554. package/dist/templates/templates/default/.agents/skills/real-time-collab/SKILL.md +0 -183
  555. package/dist/templates/templates/default/.agents/skills/real-time-sync/SKILL.md +0 -112
  556. package/dist/templates/templates/default/.agents/skills/security/SKILL.md +0 -108
  557. package/dist/templates/templates/default/.agents/skills/self-modifying-code/SKILL.md +0 -79
  558. package/dist/templates/templates/default/.agents/skills/storing-data/SKILL.md +0 -110
  559. package/dist/templates/templates/default/.claude/settings.json +0 -100
  560. package/dist/templates/templates/default/.env.example +0 -5
  561. package/dist/templates/templates/default/.ignore +0 -0
  562. package/dist/templates/templates/default/.prettierrc +0 -5
  563. package/dist/templates/templates/default/AGENTS.md +0 -110
  564. package/dist/templates/templates/default/DEVELOPING.md +0 -117
  565. package/dist/templates/templates/default/_gitignore +0 -37
  566. package/dist/templates/templates/default/actions/hello.ts +0 -20
  567. package/dist/templates/templates/default/actions/navigate.ts +0 -53
  568. package/dist/templates/templates/default/actions/run.ts +0 -2
  569. package/dist/templates/templates/default/actions/view-screen.ts +0 -39
  570. package/dist/templates/templates/default/app/entry.client.tsx +0 -4
  571. package/dist/templates/templates/default/app/entry.server.tsx +0 -56
  572. package/dist/templates/templates/default/app/global.css +0 -95
  573. package/dist/templates/templates/default/app/lib/utils.ts +0 -1
  574. package/dist/templates/templates/default/app/root.tsx +0 -107
  575. package/dist/templates/templates/default/app/routes/_index.tsx +0 -62
  576. package/dist/templates/templates/default/app/routes.ts +0 -4
  577. package/dist/templates/templates/default/app/vite-env.d.ts +0 -6
  578. package/dist/templates/templates/default/components.json +0 -20
  579. package/dist/templates/templates/default/data/.gitkeep +0 -0
  580. package/dist/templates/templates/default/data/sync-config.json +0 -1
  581. package/dist/templates/templates/default/learnings.defaults.md +0 -5
  582. package/dist/templates/templates/default/learnings.md +0 -0
  583. package/dist/templates/templates/default/package.json +0 -46
  584. package/dist/templates/templates/default/postcss.config.js +0 -6
  585. package/dist/templates/templates/default/public/icon-180.svg +0 -4
  586. package/dist/templates/templates/default/public/icon-192.svg +0 -4
  587. package/dist/templates/templates/default/public/icon-512.svg +0 -4
  588. package/dist/templates/templates/default/public/manifest.json +0 -13
  589. package/dist/templates/templates/default/react-router.config.ts +0 -6
  590. package/dist/templates/templates/default/server/middleware/auth.ts +0 -15
  591. package/dist/templates/templates/default/server/plugins/.gitkeep +0 -0
  592. package/dist/templates/templates/default/server/routes/[...page].get.ts +0 -5
  593. package/dist/templates/templates/default/server/routes/api/hello.get.ts +0 -5
  594. package/dist/templates/templates/default/shared/api.ts +0 -6
  595. package/dist/templates/templates/default/ssr-entry.ts +0 -20
  596. package/dist/templates/templates/default/tailwind.config.ts +0 -7
  597. package/dist/templates/templates/default/tsconfig.json +0 -11
  598. package/dist/templates/templates/default/vite.config.ts +0 -6
@@ -17,16 +17,34 @@ function isProductionEnv() {
17
17
  function hasGoogleOAuth() {
18
18
  return !!(process.env.GOOGLE_CLIENT_ID && process.env.GOOGLE_CLIENT_SECRET);
19
19
  }
20
+ function getConnectionLabel() {
21
+ const url = process.env.DATABASE_URL || "";
22
+ if (!url)
23
+ return "SQLite (local file)";
24
+ if (url.startsWith("postgres://") || url.startsWith("postgresql://")) {
25
+ if (url.includes("neon.tech"))
26
+ return "Neon Postgres";
27
+ if (url.includes("supabase"))
28
+ return "Supabase Postgres";
29
+ return "Postgres";
30
+ }
31
+ if (url.startsWith("file:"))
32
+ return "SQLite (local file)";
33
+ if (url.startsWith("libsql://") || url.includes("turso.io"))
34
+ return "Turso";
35
+ return "SQL database";
36
+ }
37
+ const MIGRATE_FLAG_KEY = "an_migrate_from_local";
20
38
  export function getOnboardingHtml(opts = {}) {
21
39
  const showLocalMode = !isProductionEnv() && !opts.googleOnly;
22
40
  const showGoogle = hasGoogleOAuth();
23
41
  const googleOnly = !!opts.googleOnly;
24
42
  const localModeBlock = showLocalMode
25
43
  ? `
26
- <div class="divider">or</div>
44
+ <div class="divider" id="local-divider">or</div>
27
45
 
28
46
  <button class="btn-secondary" id="local-btn" onclick="useLocally()">Use locally without an account</button>
29
- <p class="local-info">Skip auth for solo local development. You can create an account later.</p>`
47
+ <p class="local-info" id="local-info">Skip auth for solo local development. You can create an account later.</p>`
30
48
  : "";
31
49
  const localModeScript = showLocalMode
32
50
  ? `
@@ -35,6 +53,11 @@ export function getOnboardingHtml(opts = {}) {
35
53
  btn.disabled = true;
36
54
  btn.textContent = 'Setting up...';
37
55
  try {
56
+ try {
57
+ if (localStorage.getItem('${MIGRATE_FLAG_KEY}')) {
58
+ localStorage.removeItem('${MIGRATE_FLAG_KEY}');
59
+ }
60
+ } catch (e) {}
38
61
  var res = await fetch('/_agent-native/auth/local-mode', { method: 'POST' });
39
62
  if (res.ok) {
40
63
  window.location.reload();
@@ -52,7 +75,7 @@ export function getOnboardingHtml(opts = {}) {
52
75
  <html lang="en">
53
76
  <head>
54
77
  <meta charset="UTF-8">
55
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
78
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
56
79
  <title>Welcome</title>
57
80
  <style>
58
81
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
@@ -61,9 +84,11 @@ export function getOnboardingHtml(opts = {}) {
61
84
  background: #0a0a0a;
62
85
  color: #e5e5e5;
63
86
  display: flex;
87
+ flex-direction: column;
64
88
  align-items: center;
65
89
  justify-content: center;
66
90
  min-height: 100vh;
91
+ padding: 1rem;
67
92
  }
68
93
  .card {
69
94
  width: 100%;
@@ -166,6 +191,18 @@ export function getOnboardingHtml(opts = {}) {
166
191
  margin-top: 0.5rem;
167
192
  line-height: 1.4;
168
193
  }
194
+ .upgrade-note {
195
+ margin-bottom: 1rem;
196
+ padding: 0.75rem;
197
+ border: 1px solid rgba(255,255,255,0.08);
198
+ border-radius: 8px;
199
+ background: rgba(255,255,255,0.03);
200
+ font-size: 0.75rem;
201
+ line-height: 1.5;
202
+ color: #a1a1aa;
203
+ display: none;
204
+ }
205
+ .upgrade-note.show { display: block; }
169
206
  .btn-google {
170
207
  width: 100%;
171
208
  display: flex;
@@ -186,12 +223,32 @@ export function getOnboardingHtml(opts = {}) {
186
223
  .btn-google svg { width: 18px; height: 18px; flex-shrink: 0; }
187
224
  .google-error { margin-top: 0.5rem; font-size: 0.8125rem; color: #f87171; display: none; }
188
225
  .google-error.show { display: block; }
226
+ .local-note {
227
+ display: none;
228
+ max-width: 400px;
229
+ width: 100%;
230
+ margin-top: 1rem;
231
+ padding: 0.625rem 0.875rem;
232
+ font-size: 0.6875rem;
233
+ line-height: 1.5;
234
+ color: #666;
235
+ border: 1px dashed rgba(255,255,255,0.08);
236
+ border-radius: 8px;
237
+ text-align: center;
238
+ }
239
+ .local-note.show { display: block; }
240
+ .local-note strong { color: #999; font-weight: 500; }
241
+ .local-note a { color: #888; text-decoration: underline; text-underline-offset: 2px; }
242
+ .local-note a:hover { color: #bbb; }
189
243
  </style>
190
244
  </head>
191
245
  <body>
192
246
  <div class="card">
193
247
  <h1>Welcome</h1>
194
248
  <p class="subtitle">Create an account to get started</p>
249
+ <p class="upgrade-note" id="upgrade-note">
250
+ You started this flow from <code>local@localhost</code>. Continue signing in to upgrade this workspace to a real account and migrate your local data. If you want to cancel that and keep using local mode, use the secondary button below.
251
+ </p>
195
252
 
196
253
  ${showGoogle
197
254
  ? `
@@ -235,10 +292,35 @@ ${googleOnly
235
292
  <input id="l-pass" type="password" autocomplete="current-password" placeholder="Enter password" required />
236
293
  <button type="submit">Sign in</button>
237
294
  <p class="msg error" id="l-msg"></p>
295
+ <p style="margin-top:0.75rem;font-size:0.75rem;text-align:right">
296
+ <a href="#" id="forgot-link" style="color:#888;text-decoration:underline;text-underline-offset:2px">Forgot password?</a>
297
+ </p>
298
+ </form>
299
+
300
+ <form id="forgot-form" class="form">
301
+ <label for="f-email">Email</label>
302
+ <input id="f-email" type="email" autocomplete="email" placeholder="you@example.com" required />
303
+ <button type="submit">Send reset link</button>
304
+ <p class="msg" id="f-msg"></p>
305
+ <p style="margin-top:0.75rem;font-size:0.75rem;text-align:center">
306
+ <a href="#" id="back-to-login" style="color:#888;text-decoration:underline;text-underline-offset:2px">Back to sign in</a>
307
+ </p>
238
308
  </form>`}
239
309
  ${localModeBlock}
240
310
  </div>
311
+ <p class="local-note" id="local-note">
312
+ This account lives in <strong>your app</strong>, not an external service. Current connection: <strong>${getConnectionLabel()}</strong>.
313
+ <br />
314
+ <a href="https://github.com/BuilderIO/agent-native#readme" target="_blank" rel="noreferrer">Connect a different database or auth provider →</a>
315
+ </p>
241
316
  <script>
317
+ (function revealLocalNote() {
318
+ var h = location.hostname;
319
+ if (h === 'localhost' || h === '127.0.0.1' || h === '::1' || h.endsWith('.local')) {
320
+ var n = document.getElementById('local-note');
321
+ if (n) n.classList.add('show');
322
+ }
323
+ })();
242
324
  ${googleOnly
243
325
  ? ""
244
326
  : ` var tabs = document.querySelectorAll('.tab');
@@ -252,6 +334,8 @@ ${googleOnly
252
334
 
253
335
  document.getElementById('signup-form').addEventListener('submit', async function(e) {
254
336
  e.preventDefault();
337
+ var form = e.currentTarget;
338
+ var btn = form.querySelector('button[type="submit"]');
255
339
  var msg = document.getElementById('s-msg');
256
340
  msg.classList.remove('show', 'error', 'success');
257
341
  var pass = document.getElementById('s-pass').value;
@@ -261,51 +345,152 @@ ${googleOnly
261
345
  msg.classList.add('show', 'error');
262
346
  return;
263
347
  }
264
- var email = document.getElementById('s-email').value;
265
- var res = await fetch('/_agent-native/auth/register', {
266
- method: 'POST',
267
- headers: { 'Content-Type': 'application/json' },
268
- body: JSON.stringify({ email: email, password: pass }),
269
- });
270
- var data = await res.json().catch(function() { return {}; });
271
- if (res.ok) {
272
- msg.textContent = 'Account created — signing you in...';
273
- msg.classList.add('show', 'success');
274
- var loginRes = await fetch('/_agent-native/auth/login', {
348
+ var originalLabel = btn.textContent;
349
+ btn.disabled = true;
350
+ btn.textContent = 'Creating account…';
351
+ try {
352
+ var email = document.getElementById('s-email').value;
353
+ var res = await fetch('/_agent-native/auth/register', {
275
354
  method: 'POST',
276
355
  headers: { 'Content-Type': 'application/json' },
277
356
  body: JSON.stringify({ email: email, password: pass }),
278
357
  });
279
- if (loginRes.ok) {
280
- window.location.reload();
358
+ var data = await res.json().catch(function() { return {}; });
359
+ if (res.ok) {
360
+ msg.textContent = 'Account created — signing you in…';
361
+ msg.classList.add('show', 'success');
362
+ btn.textContent = 'Signing in…';
363
+ var loginRes = await fetch('/_agent-native/auth/login', {
364
+ method: 'POST',
365
+ headers: { 'Content-Type': 'application/json' },
366
+ body: JSON.stringify({ email: email, password: pass }),
367
+ });
368
+ if (loginRes.ok) {
369
+ window.location.reload();
370
+ return;
371
+ }
281
372
  }
282
- } else {
283
373
  msg.textContent = data.error || 'Registration failed';
284
374
  msg.classList.add('show', 'error');
375
+ btn.disabled = false;
376
+ btn.textContent = originalLabel;
377
+ } catch (err) {
378
+ msg.textContent = 'Network error — please try again';
379
+ msg.classList.add('show', 'error');
380
+ btn.disabled = false;
381
+ btn.textContent = originalLabel;
382
+ }
383
+ });
384
+
385
+ var forgotLink = document.getElementById('forgot-link');
386
+ var backToLogin = document.getElementById('back-to-login');
387
+ if (forgotLink) forgotLink.addEventListener('click', function(e) {
388
+ e.preventDefault();
389
+ document.getElementById('login-form').classList.remove('active');
390
+ document.getElementById('forgot-form').classList.add('active');
391
+ var fEmail = document.getElementById('f-email');
392
+ var lEmail = document.getElementById('l-email');
393
+ if (lEmail && lEmail.value) fEmail.value = lEmail.value;
394
+ setTimeout(function() { fEmail.focus(); }, 0);
395
+ });
396
+ if (backToLogin) backToLogin.addEventListener('click', function(e) {
397
+ e.preventDefault();
398
+ document.getElementById('forgot-form').classList.remove('active');
399
+ document.getElementById('login-form').classList.add('active');
400
+ });
401
+
402
+ var forgotForm = document.getElementById('forgot-form');
403
+ if (forgotForm) forgotForm.addEventListener('submit', async function(e) {
404
+ e.preventDefault();
405
+ var btn = e.currentTarget.querySelector('button[type="submit"]');
406
+ var msg = document.getElementById('f-msg');
407
+ msg.classList.remove('show', 'error', 'success');
408
+ var original = btn.textContent;
409
+ btn.disabled = true;
410
+ btn.textContent = 'Sending…';
411
+ try {
412
+ var email = document.getElementById('f-email').value;
413
+ var res = await fetch('/_agent-native/auth/ba/request-password-reset', {
414
+ method: 'POST',
415
+ headers: { 'Content-Type': 'application/json' },
416
+ body: JSON.stringify({ email: email }),
417
+ });
418
+ if (res.ok) {
419
+ msg.textContent = 'If that email exists, a reset link is on its way.';
420
+ msg.classList.add('show', 'success');
421
+ btn.textContent = 'Sent';
422
+ return;
423
+ }
424
+ var data = await res.json().catch(function() { return {}; });
425
+ msg.textContent = (data && (data.message || data.error)) || 'Could not send reset email.';
426
+ msg.classList.add('show', 'error');
427
+ btn.disabled = false;
428
+ btn.textContent = original;
429
+ } catch (err) {
430
+ msg.textContent = 'Network error — please try again';
431
+ msg.classList.add('show', 'error');
432
+ btn.disabled = false;
433
+ btn.textContent = original;
285
434
  }
286
435
  });
287
436
 
288
437
  document.getElementById('login-form').addEventListener('submit', async function(e) {
289
438
  e.preventDefault();
439
+ var form = e.currentTarget;
440
+ var btn = form.querySelector('button[type="submit"]');
290
441
  var msg = document.getElementById('l-msg');
291
442
  msg.classList.remove('show');
292
- var res = await fetch('/_agent-native/auth/login', {
293
- method: 'POST',
294
- headers: { 'Content-Type': 'application/json' },
295
- body: JSON.stringify({
296
- email: document.getElementById('l-email').value,
297
- password: document.getElementById('l-pass').value,
298
- }),
299
- });
300
- if (res.ok) {
301
- window.location.reload();
302
- } else {
443
+ var originalLabel = btn.textContent;
444
+ btn.disabled = true;
445
+ btn.textContent = 'Signing in…';
446
+ try {
447
+ var res = await fetch('/_agent-native/auth/login', {
448
+ method: 'POST',
449
+ headers: { 'Content-Type': 'application/json' },
450
+ body: JSON.stringify({
451
+ email: document.getElementById('l-email').value,
452
+ password: document.getElementById('l-pass').value,
453
+ }),
454
+ });
455
+ if (res.ok) {
456
+ window.location.reload();
457
+ return;
458
+ }
303
459
  var data = await res.json().catch(function() { return {}; });
304
460
  msg.textContent = data.error || 'Invalid email or password';
305
461
  msg.classList.add('show');
462
+ btn.disabled = false;
463
+ btn.textContent = originalLabel;
464
+ } catch (err) {
465
+ msg.textContent = 'Network error — please try again';
466
+ msg.classList.add('show');
467
+ btn.disabled = false;
468
+ btn.textContent = originalLabel;
306
469
  }
307
470
  });
308
471
  `}${localModeScript}
472
+ ${showLocalMode
473
+ ? `
474
+ (function syncUpgradeFromLocalUi() {
475
+ var subtitle = document.querySelector('.subtitle');
476
+ var note = document.getElementById('upgrade-note');
477
+ var localBtn = document.getElementById('local-btn');
478
+ var localInfo = document.getElementById('local-info');
479
+ var divider = document.getElementById('local-divider');
480
+ if (!subtitle || !note || !localBtn || !localInfo || !divider) return;
481
+ try {
482
+ if (!localStorage.getItem('${MIGRATE_FLAG_KEY}')) return;
483
+ } catch (e) {
484
+ return;
485
+ }
486
+ subtitle.textContent = 'Sign in to upgrade your local workspace';
487
+ note.classList.add('show');
488
+ localBtn.textContent = 'Stay in local mode';
489
+ localInfo.textContent = 'Use this if you want to cancel the upgrade and go back to local@localhost on this device.';
490
+ divider.textContent = 'or stay local';
491
+ })();
492
+ `
493
+ : ""}
309
494
  ${showGoogle
310
495
  ? `
311
496
  async function signInWithGoogle() {
@@ -344,4 +529,114 @@ ${showGoogle
344
529
  }
345
530
  /** @deprecated Use getOnboardingHtml() instead */
346
531
  export const ONBOARDING_HTML = getOnboardingHtml();
532
+ /**
533
+ * HTML for the password reset page — shown when the user clicks the link in
534
+ * their reset email. Posts `{ newPassword, token }` to Better Auth's
535
+ * `/reset-password` endpoint, then redirects to the login page.
536
+ */
537
+ export function getResetPasswordHtml() {
538
+ return `<!DOCTYPE html>
539
+ <html lang="en">
540
+ <head>
541
+ <meta charset="UTF-8">
542
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
543
+ <title>Reset password</title>
544
+ <style>
545
+ *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
546
+ body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; background: #0a0a0a; color: #e5e5e5; display: flex; align-items: center; justify-content: center; min-height: 100vh; padding: 1rem; }
547
+ .card { width: 100%; max-width: 400px; padding: 2rem; background: #141414; border: 1px solid rgba(255,255,255,0.08); border-radius: 12px; }
548
+ h1 { font-size: 1.25rem; font-weight: 600; margin-bottom: 0.25rem; color: #fff; }
549
+ .subtitle { font-size: 0.8125rem; color: #888; margin-bottom: 1.5rem; }
550
+ label { display: block; font-size: 0.8125rem; color: #888; margin-bottom: 0.375rem; }
551
+ input { width: 100%; padding: 0.5rem 0.75rem; background: transparent; border: 1px solid rgba(255,255,255,0.12); border-radius: 6px; color: #e5e5e5; font-size: 0.875rem; outline: none; margin-bottom: 0.875rem; }
552
+ input:focus { border-color: rgba(255,255,255,0.3); box-shadow: 0 0 0 1px rgba(255,255,255,0.1); }
553
+ input::placeholder { color: #555; }
554
+ button[type="submit"] { width: 100%; margin-top: 0.25rem; padding: 0.5rem; background: #fff; color: #000; border: none; border-radius: 6px; font-size: 0.875rem; font-weight: 500; cursor: pointer; }
555
+ button[type="submit"]:hover { background: #e5e5e5; }
556
+ button[type="submit"]:disabled { opacity: 0.5; cursor: not-allowed; }
557
+ .msg { margin-top: 0.75rem; font-size: 0.8125rem; display: none; }
558
+ .msg.error { color: #f87171; }
559
+ .msg.success { color: #4ade80; }
560
+ .msg.show { display: block; }
561
+ .back { display: inline-block; margin-top: 1rem; font-size: 0.75rem; color: #888; text-decoration: none; }
562
+ .back:hover { color: #bbb; }
563
+ </style>
564
+ </head>
565
+ <body>
566
+ <div class="card">
567
+ <h1>Choose a new password</h1>
568
+ <p class="subtitle">Set a new password for your account.</p>
569
+ <form id="reset-form">
570
+ <label for="p1">New password</label>
571
+ <input id="p1" type="password" autocomplete="new-password" autofocus placeholder="At least 8 characters" required minlength="8" />
572
+ <label for="p2">Confirm password</label>
573
+ <input id="p2" type="password" autocomplete="new-password" placeholder="Confirm password" required minlength="8" />
574
+ <button type="submit">Save new password</button>
575
+ <p class="msg" id="msg"></p>
576
+ </form>
577
+ <a class="back" id="back-link" href="/">Back to sign in</a>
578
+ </div>
579
+ <script>
580
+ (function() {
581
+ // Derive the app's base path so apps mounted under a prefix
582
+ // (e.g. /mail, /calendar) get sent home instead of to the root domain.
583
+ var RESET_PATH = '/_agent-native/auth/reset';
584
+ var pathname = window.location.pathname;
585
+ var idx = pathname.indexOf(RESET_PATH);
586
+ var basePath = (idx >= 0 ? pathname.slice(0, idx) : '') || '';
587
+ var homeHref = basePath + '/';
588
+ var backLink = document.getElementById('back-link');
589
+ if (backLink) backLink.setAttribute('href', homeHref);
590
+ var params = new URLSearchParams(location.search);
591
+ var token = params.get('token') || '';
592
+ var msg = document.getElementById('msg');
593
+ if (!token) {
594
+ msg.textContent = 'Missing or invalid reset token. Request a new reset link.';
595
+ msg.classList.add('show', 'error');
596
+ document.getElementById('reset-form').style.display = 'none';
597
+ return;
598
+ }
599
+ document.getElementById('reset-form').addEventListener('submit', async function(e) {
600
+ e.preventDefault();
601
+ var btn = e.currentTarget.querySelector('button[type="submit"]');
602
+ var p1 = document.getElementById('p1').value;
603
+ var p2 = document.getElementById('p2').value;
604
+ msg.classList.remove('show', 'error', 'success');
605
+ if (p1 !== p2) {
606
+ msg.textContent = 'Passwords do not match';
607
+ msg.classList.add('show', 'error');
608
+ return;
609
+ }
610
+ var original = btn.textContent;
611
+ btn.disabled = true;
612
+ btn.textContent = 'Saving…';
613
+ try {
614
+ var res = await fetch(basePath + '/_agent-native/auth/ba/reset-password', {
615
+ method: 'POST',
616
+ headers: { 'Content-Type': 'application/json' },
617
+ body: JSON.stringify({ newPassword: p1, token: token }),
618
+ });
619
+ if (res.ok) {
620
+ msg.textContent = 'Password updated — redirecting to sign in…';
621
+ msg.classList.add('show', 'success');
622
+ setTimeout(function() { window.location.href = homeHref; }, 1200);
623
+ return;
624
+ }
625
+ var data = await res.json().catch(function() { return {}; });
626
+ msg.textContent = (data && (data.message || data.error)) || 'Reset failed. The link may have expired — request a new one.';
627
+ msg.classList.add('show', 'error');
628
+ btn.disabled = false;
629
+ btn.textContent = original;
630
+ } catch (err) {
631
+ msg.textContent = 'Network error — please try again';
632
+ msg.classList.add('show', 'error');
633
+ btn.disabled = false;
634
+ btn.textContent = original;
635
+ }
636
+ });
637
+ })();
638
+ </script>
639
+ </body>
640
+ </html>`;
641
+ }
347
642
  //# sourceMappingURL=onboarding-html.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"onboarding-html.js","sourceRoot":"","sources":["../../src/server/onboarding-html.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,SAAS,eAAe;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACjC,OAAO,GAAG,KAAK,aAAa,IAAI,GAAG,KAAK,MAAM,CAAC;AACjD,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC9E,CAAC;AAWD,MAAM,UAAU,iBAAiB,CAAC,OAA8B,EAAE;IAChE,MAAM,aAAa,GAAG,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAC7D,MAAM,UAAU,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACrC,MAAM,cAAc,GAAG,aAAa;QAClC,CAAC,CAAC;;;;mGAI6F;QAC/F,CAAC,CAAC,EAAE,CAAC;IAEP,MAAM,eAAe,GAAG,aAAa;QACnC,CAAC,CAAC;;;;;;;;;;;;;;;;;IAiBF;QACA,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkJP,UAAU;QACR,CAAC,CAAC;;;;;;EAMJ,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC;CACxD;QACG,CAAC,CAAC,UAAU;YACV,CAAC,CAAC;;;;;CAKP;YACK,CAAC,CAAC,EACR;EAEE,UAAU;QACR,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;UAwBN;EACE,cAAc;;;EAId,UAAU;QACR,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiEN,GAAG,eAAe;EAEhB,UAAU;QACR,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA6BF;QACA,CAAC,CAAC,EACN;;;QAGQ,CAAC;AACT,CAAC;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,EAAE,CAAC"}
1
+ {"version":3,"file":"onboarding-html.js","sourceRoot":"","sources":["../../src/server/onboarding-html.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../src/server/poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAaD,8CAA8C;AAC9C,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB,GAAG,IAAI,CAOP;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAMA;AA2CD;;;;GAIG;AACH,wBAAgB,iBAAiB;aAxDtB,MAAM;YACP,WAAW,EAAE;IAgEtB"}
1
+ {"version":3,"file":"poll.d.ts","sourceRoot":"","sources":["../../src/server/poll.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AA2BD,8CAA8C;AAC9C,wBAAgB,UAAU,IAAI,MAAM,CAEnC;AAED,0DAA0D;AAC1D,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB,GAAG,IAAI,CAOP;AAED,6CAA6C;AAC7C,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAMA;AA4ED;;;;GAIG;AACH,wBAAgB,iBAAiB;aAzFtB,MAAM;YACP,WAAW,EAAE;IAiGtB"}
@@ -23,6 +23,19 @@ const _buffer = [];
23
23
  let _lastDbCheck = 0;
24
24
  let _lastAppStateTs = 0;
25
25
  let _lastSettingsTs = 0;
26
+ /**
27
+ * Tracks the latest updated_at seen on the `__screen_refresh__` key in
28
+ * application_state. Bumped when the agent calls the `refresh-screen` tool,
29
+ * and surfaced as a distinct `screen-refresh` event so clients can remount
30
+ * the main content subtree via React key.
31
+ *
32
+ * `_screenRefreshInitialized` guards against spurious emits on the first
33
+ * poll after a restart (where an existing row would look like a fresh bump).
34
+ * Once we've taken a baseline reading, any subsequent increase emits.
35
+ */
36
+ let _lastScreenRefreshTs = 0;
37
+ let _screenRefreshInitialized = false;
38
+ const SCREEN_REFRESH_KEY = "__screen_refresh__";
26
39
  /** Get the current global version counter. */
27
40
  export function getVersion() {
28
41
  return _version;
@@ -65,6 +78,41 @@ async function checkExternalDbChanges() {
65
78
  }
66
79
  _lastAppStateTs = appTs;
67
80
  }
81
+ // Check for screen-refresh requests from the agent. The `refresh-screen`
82
+ // tool writes to application_state under a well-known key; when its
83
+ // updated_at bumps, emit a distinct event so the client invalidates
84
+ // all queries (not just the ones matching its default queryKey prefix).
85
+ const refreshResult = await db.execute({
86
+ sql: "SELECT updated_at, value FROM application_state WHERE key = ?",
87
+ args: [SCREEN_REFRESH_KEY],
88
+ });
89
+ const refreshTs = Number(refreshResult.rows[0]?.updated_at) || 0;
90
+ if (!_screenRefreshInitialized) {
91
+ // First poll — take a baseline so we don't emit for the existing row
92
+ // (if any). Subsequent increases will emit normally, including the
93
+ // very next `refresh-screen` call made by the agent.
94
+ _lastScreenRefreshTs = refreshTs;
95
+ _screenRefreshInitialized = true;
96
+ }
97
+ else if (refreshTs > _lastScreenRefreshTs) {
98
+ let scope;
99
+ try {
100
+ const raw = refreshResult.rows[0]?.value;
101
+ if (typeof raw === "string") {
102
+ const parsed = JSON.parse(raw);
103
+ if (typeof parsed?.scope === "string")
104
+ scope = parsed.scope;
105
+ }
106
+ }
107
+ catch { }
108
+ recordChange({
109
+ source: "screen-refresh",
110
+ type: "change",
111
+ key: SCREEN_REFRESH_KEY,
112
+ ...(scope ? { scope } : {}),
113
+ });
114
+ _lastScreenRefreshTs = refreshTs;
115
+ }
68
116
  // Check settings for external writes
69
117
  const settingsResult = await db.execute("SELECT MAX(updated_at) as max_ts FROM settings");
70
118
  const settingsTs = Number(settingsResult.rows[0]?.max_ts) || 0;
@@ -1 +1 @@
1
- {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/server/poll.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"poll.js","sourceRoot":"","sources":["../../src/server/poll.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export interface RequestContext {
2
+ userEmail?: string;
3
+ orgId?: string;
4
+ }
5
+ /**
6
+ * Run a callback within a per-request context. The context is available to all
7
+ * async operations spawned from `fn` via `getRequestUserEmail()` / `getRequestOrgId()`.
8
+ */
9
+ export declare function runWithRequestContext<T>(ctx: RequestContext, fn: () => T | Promise<T>): T | Promise<T>;
10
+ /**
11
+ * Get the current request's user email.
12
+ * Falls back to `process.env.AGENT_USER_EMAIL` for CLI scripts.
13
+ */
14
+ export declare function getRequestUserEmail(): string | undefined;
15
+ /**
16
+ * Get the current request's org ID.
17
+ * Falls back to `process.env.AGENT_ORG_ID` for CLI scripts.
18
+ */
19
+ export declare function getRequestOrgId(): string | undefined;
20
+ //# sourceMappingURL=request-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.d.ts","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAID;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,GAAG,EAAE,cAAc,EACnB,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GACvB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEhB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAExD;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,GAAG,SAAS,CAEpD"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Per-request context using AsyncLocalStorage.
3
+ *
4
+ * Replaces the unsafe pattern of mutating `process.env.AGENT_USER_EMAIL` /
5
+ * `process.env.AGENT_ORG_ID` on every request. On Node.js (Netlify, self-hosted)
6
+ * concurrent requests would overwrite each other's env vars. AsyncLocalStorage
7
+ * gives each async call-chain its own isolated context.
8
+ *
9
+ * Supported on all deployment targets:
10
+ * - Node.js (native)
11
+ * - Cloudflare Workers (via nodejs_compat flag)
12
+ * - Deno Deploy (via node:async_hooks compat)
13
+ *
14
+ * For CLI scripts that run outside a request context, the getters fall back to
15
+ * process.env so existing `AGENT_USER_EMAIL=x pnpm action foo` invocations
16
+ * continue to work.
17
+ */
18
+ import { AsyncLocalStorage } from "node:async_hooks";
19
+ const als = new AsyncLocalStorage();
20
+ /**
21
+ * Run a callback within a per-request context. The context is available to all
22
+ * async operations spawned from `fn` via `getRequestUserEmail()` / `getRequestOrgId()`.
23
+ */
24
+ export function runWithRequestContext(ctx, fn) {
25
+ return als.run(ctx, fn);
26
+ }
27
+ /**
28
+ * Get the current request's user email.
29
+ * Falls back to `process.env.AGENT_USER_EMAIL` for CLI scripts.
30
+ */
31
+ export function getRequestUserEmail() {
32
+ return als.getStore()?.userEmail ?? process.env.AGENT_USER_EMAIL;
33
+ }
34
+ /**
35
+ * Get the current request's org ID.
36
+ * Falls back to `process.env.AGENT_ORG_ID` for CLI scripts.
37
+ */
38
+ export function getRequestOrgId() {
39
+ return als.getStore()?.orgId ?? process.env.AGENT_ORG_ID;
40
+ }
41
+ //# sourceMappingURL=request-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-context.js","sourceRoot":"","sources":["../../src/server/request-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAAkB,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAmB,EACnB,EAAwB;IAExB,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACnE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAC3D,CAAC"}
@@ -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.