@agent-native/core 0.4.1 → 0.4.3

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 (394) hide show
  1. package/README.md +31 -0
  2. package/dist/adapters/convex/adapter.d.ts +24 -0
  3. package/dist/adapters/convex/adapter.d.ts.map +1 -0
  4. package/dist/adapters/convex/adapter.js +125 -0
  5. package/dist/adapters/convex/adapter.js.map +1 -0
  6. package/dist/adapters/convex/index.d.ts +4 -0
  7. package/dist/adapters/convex/index.d.ts.map +1 -0
  8. package/dist/adapters/convex/index.js +3 -0
  9. package/dist/adapters/convex/index.js.map +1 -0
  10. package/dist/adapters/drizzle/adapter.d.ts +36 -0
  11. package/dist/adapters/drizzle/adapter.d.ts.map +1 -0
  12. package/dist/adapters/drizzle/adapter.js +210 -0
  13. package/dist/adapters/drizzle/adapter.js.map +1 -0
  14. package/dist/adapters/drizzle/index.d.ts +3 -0
  15. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  16. package/dist/adapters/drizzle/index.js +3 -0
  17. package/dist/adapters/drizzle/index.js.map +1 -0
  18. package/dist/adapters/drizzle/schema.d.ts +146 -0
  19. package/dist/adapters/drizzle/schema.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/schema.js +20 -0
  21. package/dist/adapters/drizzle/schema.js.map +1 -0
  22. package/dist/adapters/firestore/adapter.d.ts +3 -2
  23. package/dist/adapters/firestore/adapter.d.ts.map +1 -1
  24. package/dist/adapters/firestore/adapter.js +23 -6
  25. package/dist/adapters/firestore/adapter.js.map +1 -1
  26. package/dist/adapters/supabase/adapter.d.ts +2 -1
  27. package/dist/adapters/supabase/adapter.d.ts.map +1 -1
  28. package/dist/adapters/supabase/adapter.js +4 -1
  29. package/dist/adapters/supabase/adapter.js.map +1 -1
  30. package/dist/adapters/sync/config.d.ts +22 -2
  31. package/dist/adapters/sync/config.d.ts.map +1 -1
  32. package/dist/adapters/sync/config.js +175 -16
  33. package/dist/adapters/sync/config.js.map +1 -1
  34. package/dist/adapters/sync/create-file-sync.d.ts +32 -0
  35. package/dist/adapters/sync/create-file-sync.d.ts.map +1 -0
  36. package/dist/adapters/sync/create-file-sync.js +218 -0
  37. package/dist/adapters/sync/create-file-sync.js.map +1 -0
  38. package/dist/adapters/sync/file-sync.d.ts +40 -6
  39. package/dist/adapters/sync/file-sync.d.ts.map +1 -1
  40. package/dist/adapters/sync/file-sync.js +442 -97
  41. package/dist/adapters/sync/file-sync.js.map +1 -1
  42. package/dist/adapters/sync/index.d.ts +3 -2
  43. package/dist/adapters/sync/index.d.ts.map +1 -1
  44. package/dist/adapters/sync/index.js +3 -1
  45. package/dist/adapters/sync/index.js.map +1 -1
  46. package/dist/adapters/sync/merge.js +3 -2
  47. package/dist/adapters/sync/merge.js.map +1 -1
  48. package/dist/adapters/sync/types.d.ts +36 -2
  49. package/dist/adapters/sync/types.d.ts.map +1 -1
  50. package/dist/adapters/sync/types.js +22 -1
  51. package/dist/adapters/sync/types.js.map +1 -1
  52. package/dist/agent/index.d.ts +3 -0
  53. package/dist/agent/index.d.ts.map +1 -0
  54. package/dist/agent/index.js +2 -0
  55. package/dist/agent/index.js.map +1 -0
  56. package/dist/agent/production-agent.d.ts +16 -0
  57. package/dist/agent/production-agent.d.ts.map +1 -0
  58. package/dist/agent/production-agent.js +158 -0
  59. package/dist/agent/production-agent.js.map +1 -0
  60. package/dist/agent/types.d.ts +40 -0
  61. package/dist/agent/types.d.ts.map +1 -0
  62. package/dist/agent/types.js +2 -0
  63. package/dist/agent/types.js.map +1 -0
  64. package/dist/application-state/emitter.d.ts +10 -0
  65. package/dist/application-state/emitter.d.ts.map +1 -0
  66. package/dist/application-state/emitter.js +18 -0
  67. package/dist/application-state/emitter.js.map +1 -0
  68. package/dist/application-state/handlers.d.ts +20 -0
  69. package/dist/application-state/handlers.d.ts.map +1 -0
  70. package/dist/application-state/handlers.js +94 -0
  71. package/dist/application-state/handlers.js.map +1 -0
  72. package/dist/application-state/index.d.ts +5 -0
  73. package/dist/application-state/index.d.ts.map +1 -0
  74. package/dist/application-state/index.js +9 -0
  75. package/dist/application-state/index.js.map +1 -0
  76. package/dist/application-state/script-helpers.d.ts +17 -0
  77. package/dist/application-state/script-helpers.d.ts.map +1 -0
  78. package/dist/application-state/script-helpers.js +28 -0
  79. package/dist/application-state/script-helpers.js.map +1 -0
  80. package/dist/application-state/store.d.ts +9 -0
  81. package/dist/application-state/store.d.ts.map +1 -0
  82. package/dist/application-state/store.js +93 -0
  83. package/dist/application-state/store.js.map +1 -0
  84. package/dist/cli/create.d.ts.map +1 -1
  85. package/dist/cli/create.js +40 -24
  86. package/dist/cli/create.js.map +1 -1
  87. package/dist/cli/index.js +37 -11
  88. package/dist/cli/index.js.map +1 -1
  89. package/dist/client/AgentPanel.d.ts +53 -0
  90. package/dist/client/AgentPanel.d.ts.map +1 -0
  91. package/dist/client/AgentPanel.js +70 -0
  92. package/dist/client/AgentPanel.js.map +1 -0
  93. package/dist/client/AssistantChat.d.ts +27 -0
  94. package/dist/client/AssistantChat.d.ts.map +1 -0
  95. package/dist/client/AssistantChat.js +165 -0
  96. package/dist/client/AssistantChat.js.map +1 -0
  97. package/dist/client/ErrorBoundary.d.ts +4 -0
  98. package/dist/client/ErrorBoundary.d.ts.map +1 -0
  99. package/dist/client/ErrorBoundary.js +22 -0
  100. package/dist/client/ErrorBoundary.js.map +1 -0
  101. package/dist/client/MultiTabAssistantChat.d.ts +4 -0
  102. package/dist/client/MultiTabAssistantChat.d.ts.map +1 -0
  103. package/dist/client/MultiTabAssistantChat.js +125 -0
  104. package/dist/client/MultiTabAssistantChat.js.map +1 -0
  105. package/dist/client/PoweredByBadge.d.ts +14 -0
  106. package/dist/client/PoweredByBadge.d.ts.map +1 -0
  107. package/dist/client/PoweredByBadge.js +60 -0
  108. package/dist/client/PoweredByBadge.js.map +1 -0
  109. package/dist/client/ProductionAgentPanel.d.ts +6 -0
  110. package/dist/client/ProductionAgentPanel.d.ts.map +1 -0
  111. package/dist/client/ProductionAgentPanel.js +6 -0
  112. package/dist/client/ProductionAgentPanel.js.map +1 -0
  113. package/dist/client/Turnstile.d.ts +35 -0
  114. package/dist/client/Turnstile.d.ts.map +1 -0
  115. package/dist/client/Turnstile.js +77 -0
  116. package/dist/client/Turnstile.js.map +1 -0
  117. package/dist/client/agent-chat-adapter.d.ts +10 -0
  118. package/dist/client/agent-chat-adapter.d.ts.map +1 -0
  119. package/dist/client/agent-chat-adapter.js +235 -0
  120. package/dist/client/agent-chat-adapter.js.map +1 -0
  121. package/dist/client/agent-chat.d.ts +9 -1
  122. package/dist/client/agent-chat.d.ts.map +1 -1
  123. package/dist/client/agent-chat.js +11 -1
  124. package/dist/client/agent-chat.js.map +1 -1
  125. package/dist/client/index.d.ts +13 -1
  126. package/dist/client/index.d.ts.map +1 -1
  127. package/dist/client/index.js +14 -1
  128. package/dist/client/index.js.map +1 -1
  129. package/dist/client/terminal/AgentTerminal.d.ts +35 -0
  130. package/dist/client/terminal/AgentTerminal.d.ts.map +1 -0
  131. package/dist/client/terminal/AgentTerminal.js +346 -0
  132. package/dist/client/terminal/AgentTerminal.js.map +1 -0
  133. package/dist/client/terminal/index.d.ts +7 -0
  134. package/dist/client/terminal/index.d.ts.map +1 -0
  135. package/dist/client/terminal/index.js +7 -0
  136. package/dist/client/terminal/index.js.map +1 -0
  137. package/dist/client/use-agent-chat.d.ts +1 -1
  138. package/dist/client/use-agent-chat.d.ts.map +1 -1
  139. package/dist/client/use-agent-chat.js +1 -1
  140. package/dist/client/use-agent-chat.js.map +1 -1
  141. package/dist/client/use-file-sync-status.d.ts +21 -0
  142. package/dist/client/use-file-sync-status.d.ts.map +1 -0
  143. package/dist/client/use-file-sync-status.js +65 -0
  144. package/dist/client/use-file-sync-status.js.map +1 -0
  145. package/dist/client/use-session.d.ts +16 -0
  146. package/dist/client/use-session.d.ts.map +1 -0
  147. package/dist/client/use-session.js +49 -0
  148. package/dist/client/use-session.js.map +1 -0
  149. package/dist/client/useProductionAgent.d.ts +23 -0
  150. package/dist/client/useProductionAgent.d.ts.map +1 -0
  151. package/dist/client/useProductionAgent.js +137 -0
  152. package/dist/client/useProductionAgent.js.map +1 -0
  153. package/dist/db/create-get-db.d.ts +3 -0
  154. package/dist/db/create-get-db.d.ts.map +1 -0
  155. package/dist/db/create-get-db.js +18 -0
  156. package/dist/db/create-get-db.js.map +1 -0
  157. package/dist/db/index.d.ts +23 -0
  158. package/dist/db/index.d.ts.map +1 -0
  159. package/dist/db/index.js +19 -0
  160. package/dist/db/index.js.map +1 -0
  161. package/dist/db/migrations.d.ts +7 -0
  162. package/dist/db/migrations.d.ts.map +1 -0
  163. package/dist/db/migrations.js +35 -0
  164. package/dist/db/migrations.js.map +1 -0
  165. package/dist/index.browser.d.ts +1 -1
  166. package/dist/index.browser.d.ts.map +1 -1
  167. package/dist/index.browser.js +1 -1
  168. package/dist/index.browser.js.map +1 -1
  169. package/dist/index.d.ts +5 -2
  170. package/dist/index.d.ts.map +1 -1
  171. package/dist/index.js +6 -2
  172. package/dist/index.js.map +1 -1
  173. package/dist/oauth-tokens/index.d.ts +2 -0
  174. package/dist/oauth-tokens/index.d.ts.map +1 -0
  175. package/dist/oauth-tokens/index.js +2 -0
  176. package/dist/oauth-tokens/index.js.map +1 -0
  177. package/dist/oauth-tokens/store.d.ts +9 -0
  178. package/dist/oauth-tokens/store.d.ts.map +1 -0
  179. package/dist/oauth-tokens/store.js +90 -0
  180. package/dist/oauth-tokens/store.js.map +1 -0
  181. package/dist/router/index.d.ts +3 -0
  182. package/dist/router/index.d.ts.map +1 -0
  183. package/dist/router/index.js +5 -0
  184. package/dist/router/index.js.map +1 -0
  185. package/dist/scripts/core-scripts.d.ts +10 -0
  186. package/dist/scripts/core-scripts.d.ts.map +1 -0
  187. package/dist/scripts/core-scripts.js +15 -0
  188. package/dist/scripts/core-scripts.js.map +1 -0
  189. package/dist/scripts/db/exec.d.ts +11 -0
  190. package/dist/scripts/db/exec.d.ts.map +1 -0
  191. package/dist/scripts/db/exec.js +101 -0
  192. package/dist/scripts/db/exec.js.map +1 -0
  193. package/dist/scripts/db/index.d.ts +2 -0
  194. package/dist/scripts/db/index.d.ts.map +1 -0
  195. package/dist/scripts/db/index.js +6 -0
  196. package/dist/scripts/db/index.js.map +1 -0
  197. package/dist/scripts/db/query.d.ts +10 -0
  198. package/dist/scripts/db/query.d.ts.map +1 -0
  199. package/dist/scripts/db/query.js +112 -0
  200. package/dist/scripts/db/query.js.map +1 -0
  201. package/dist/scripts/db/schema.d.ts +12 -0
  202. package/dist/scripts/db/schema.d.ts.map +1 -0
  203. package/dist/scripts/db/schema.js +140 -0
  204. package/dist/scripts/db/schema.js.map +1 -0
  205. package/dist/scripts/dev/index.d.ts +15 -0
  206. package/dist/scripts/dev/index.d.ts.map +1 -0
  207. package/dist/scripts/dev/index.js +118 -0
  208. package/dist/scripts/dev/index.js.map +1 -0
  209. package/dist/scripts/dev/list-files.d.ts +5 -0
  210. package/dist/scripts/dev/list-files.d.ts.map +1 -0
  211. package/dist/scripts/dev/list-files.js +102 -0
  212. package/dist/scripts/dev/list-files.js.map +1 -0
  213. package/dist/scripts/dev/read-file.d.ts +5 -0
  214. package/dist/scripts/dev/read-file.d.ts.map +1 -0
  215. package/dist/scripts/dev/read-file.js +68 -0
  216. package/dist/scripts/dev/read-file.js.map +1 -0
  217. package/dist/scripts/dev/search-files.d.ts +5 -0
  218. package/dist/scripts/dev/search-files.d.ts.map +1 -0
  219. package/dist/scripts/dev/search-files.js +133 -0
  220. package/dist/scripts/dev/search-files.js.map +1 -0
  221. package/dist/scripts/dev/shell.d.ts +5 -0
  222. package/dist/scripts/dev/shell.d.ts.map +1 -0
  223. package/dist/scripts/dev/shell.js +65 -0
  224. package/dist/scripts/dev/shell.js.map +1 -0
  225. package/dist/scripts/dev/write-file.d.ts +5 -0
  226. package/dist/scripts/dev/write-file.d.ts.map +1 -0
  227. package/dist/scripts/dev/write-file.js +50 -0
  228. package/dist/scripts/dev/write-file.js.map +1 -0
  229. package/dist/scripts/index.d.ts +5 -0
  230. package/dist/scripts/index.d.ts.map +1 -1
  231. package/dist/scripts/index.js +5 -0
  232. package/dist/scripts/index.js.map +1 -1
  233. package/dist/scripts/runner.d.ts +3 -0
  234. package/dist/scripts/runner.d.ts.map +1 -1
  235. package/dist/scripts/runner.js +53 -14
  236. package/dist/scripts/runner.js.map +1 -1
  237. package/dist/server/agent-chat-plugin.d.ts +43 -0
  238. package/dist/server/agent-chat-plugin.d.ts.map +1 -0
  239. package/dist/server/agent-chat-plugin.js +92 -0
  240. package/dist/server/agent-chat-plugin.js.map +1 -0
  241. package/dist/server/auth-plugin.d.ts +6 -0
  242. package/dist/server/auth-plugin.d.ts.map +1 -0
  243. package/dist/server/auth-plugin.js +8 -0
  244. package/dist/server/auth-plugin.js.map +1 -0
  245. package/dist/server/auth.d.ts +75 -0
  246. package/dist/server/auth.d.ts.map +1 -0
  247. package/dist/server/auth.js +499 -0
  248. package/dist/server/auth.js.map +1 -0
  249. package/dist/server/captcha.d.ts +12 -0
  250. package/dist/server/captcha.d.ts.map +1 -0
  251. package/dist/server/captcha.js +43 -0
  252. package/dist/server/captcha.js.map +1 -0
  253. package/dist/server/create-server.d.ts +20 -10
  254. package/dist/server/create-server.d.ts.map +1 -1
  255. package/dist/server/create-server.js +48 -28
  256. package/dist/server/create-server.js.map +1 -1
  257. package/dist/server/default-watcher.d.ts +17 -0
  258. package/dist/server/default-watcher.d.ts.map +1 -0
  259. package/dist/server/default-watcher.js +37 -0
  260. package/dist/server/default-watcher.js.map +1 -0
  261. package/dist/server/file-sync-plugin.d.ts +7 -0
  262. package/dist/server/file-sync-plugin.d.ts.map +1 -0
  263. package/dist/server/file-sync-plugin.js +38 -0
  264. package/dist/server/file-sync-plugin.js.map +1 -0
  265. package/dist/server/google-auth-plugin.d.ts +22 -0
  266. package/dist/server/google-auth-plugin.d.ts.map +1 -0
  267. package/dist/server/google-auth-plugin.js +122 -0
  268. package/dist/server/google-auth-plugin.js.map +1 -0
  269. package/dist/server/index.d.ts +13 -2
  270. package/dist/server/index.d.ts.map +1 -1
  271. package/dist/server/index.js +14 -2
  272. package/dist/server/index.js.map +1 -1
  273. package/dist/server/missing-key.d.ts +9 -5
  274. package/dist/server/missing-key.d.ts.map +1 -1
  275. package/dist/server/missing-key.js +12 -7
  276. package/dist/server/missing-key.js.map +1 -1
  277. package/dist/server/sse.d.ts +18 -8
  278. package/dist/server/sse.d.ts.map +1 -1
  279. package/dist/server/sse.js +90 -19
  280. package/dist/server/sse.js.map +1 -1
  281. package/dist/settings/handlers.d.ts +9 -0
  282. package/dist/settings/handlers.d.ts.map +1 -0
  283. package/dist/settings/handlers.js +29 -0
  284. package/dist/settings/handlers.js.map +1 -0
  285. package/dist/settings/index.d.ts +5 -0
  286. package/dist/settings/index.d.ts.map +1 -0
  287. package/dist/settings/index.js +9 -0
  288. package/dist/settings/index.js.map +1 -0
  289. package/dist/settings/script-helpers.d.ts +9 -0
  290. package/dist/settings/script-helpers.d.ts.map +1 -0
  291. package/dist/settings/script-helpers.js +16 -0
  292. package/dist/settings/script-helpers.js.map +1 -0
  293. package/dist/settings/store.d.ts +7 -0
  294. package/dist/settings/store.d.ts.map +1 -0
  295. package/dist/settings/store.js +88 -0
  296. package/dist/settings/store.js.map +1 -0
  297. package/dist/settings/user-settings.d.ts +21 -0
  298. package/dist/settings/user-settings.d.ts.map +1 -0
  299. package/dist/settings/user-settings.js +35 -0
  300. package/dist/settings/user-settings.js.map +1 -0
  301. package/dist/tailwind.preset.js +1 -1
  302. package/dist/tailwind.preset.js.map +1 -1
  303. package/dist/terminal/cli-registry.d.ts +16 -0
  304. package/dist/terminal/cli-registry.d.ts.map +1 -0
  305. package/dist/terminal/cli-registry.js +42 -0
  306. package/dist/terminal/cli-registry.js.map +1 -0
  307. package/dist/terminal/index.d.ts +9 -0
  308. package/dist/terminal/index.d.ts.map +1 -0
  309. package/dist/terminal/index.js +9 -0
  310. package/dist/terminal/index.js.map +1 -0
  311. package/dist/terminal/pty-server.d.ts +31 -0
  312. package/dist/terminal/pty-server.d.ts.map +1 -0
  313. package/dist/terminal/pty-server.js +252 -0
  314. package/dist/terminal/pty-server.js.map +1 -0
  315. package/dist/terminal/terminal-plugin.d.ts +23 -0
  316. package/dist/terminal/terminal-plugin.d.ts.map +1 -0
  317. package/dist/terminal/terminal-plugin.js +90 -0
  318. package/dist/terminal/terminal-plugin.js.map +1 -0
  319. package/dist/vite/client.d.ts +28 -5
  320. package/dist/vite/client.d.ts.map +1 -1
  321. package/dist/vite/client.js +55 -16
  322. package/dist/vite/client.js.map +1 -1
  323. package/dist/vite/dev-api-server.d.ts +10 -0
  324. package/dist/vite/dev-api-server.d.ts.map +1 -0
  325. package/dist/vite/dev-api-server.js +160 -0
  326. package/dist/vite/dev-api-server.js.map +1 -0
  327. package/dist/vite/index.d.ts +2 -3
  328. package/dist/vite/index.d.ts.map +1 -1
  329. package/dist/vite/index.js +2 -3
  330. package/dist/vite/index.js.map +1 -1
  331. package/package.json +74 -19
  332. package/src/templates/default/.agents/skills/create-skill/SKILL.md +1 -1
  333. package/src/templates/default/.agents/skills/delegate-to-agent/SKILL.md +3 -3
  334. package/src/templates/default/.agents/skills/files-as-database/SKILL.md +82 -63
  335. package/src/templates/default/.agents/skills/frontend-design/SKILL.md +2 -2
  336. package/src/templates/default/.agents/skills/scripts/SKILL.md +20 -17
  337. package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +2 -2
  338. package/src/templates/default/.agents/skills/sse-file-watcher/SKILL.md +49 -64
  339. package/src/templates/default/.ignore +0 -0
  340. package/src/templates/default/AGENTS.md +129 -28
  341. package/src/templates/default/_gitignore +9 -5
  342. package/src/templates/default/app/entry.client.tsx +4 -0
  343. package/src/templates/default/app/entry.server.tsx +55 -0
  344. package/src/templates/default/app/global.css +95 -0
  345. package/src/templates/default/app/root.tsx +95 -0
  346. package/src/templates/default/app/routes/_index.tsx +62 -0
  347. package/src/templates/default/app/routes.ts +4 -0
  348. package/src/templates/default/app/vite-env.d.ts +6 -0
  349. package/src/templates/default/application-state/.gitkeep +0 -0
  350. package/src/templates/default/components.json +1 -1
  351. package/src/templates/default/data/sync-config.json +1 -0
  352. package/src/templates/default/package.json +7 -8
  353. package/src/templates/default/react-router.config.ts +6 -0
  354. package/src/templates/default/scripts/run.ts +1 -8
  355. package/src/templates/default/server/plugins/agent-chat.ts +1 -0
  356. package/src/templates/default/server/plugins/auth.ts +1 -0
  357. package/src/templates/default/server/plugins/file-sync.ts +1 -0
  358. package/src/templates/default/server/plugins/terminal.ts +1 -0
  359. package/src/templates/default/server/routes/[...page].get.ts +12 -0
  360. package/src/templates/default/server/routes/api/events.get.ts +3 -0
  361. package/src/templates/default/server/routes/api/file-sync/status.get.ts +4 -0
  362. package/src/templates/default/server/routes/api/hello.get.ts +5 -0
  363. package/src/templates/default/tailwind.config.ts +1 -1
  364. package/src/templates/default/tsconfig.json +9 -1
  365. package/src/templates/default/vite.config.ts +4 -1
  366. package/tsconfig.base.json +5 -3
  367. package/dist/adapters/neon/adapter.d.ts +0 -28
  368. package/dist/adapters/neon/adapter.d.ts.map +0 -1
  369. package/dist/adapters/neon/adapter.js +0 -135
  370. package/dist/adapters/neon/adapter.js.map +0 -1
  371. package/dist/adapters/neon/index.d.ts +0 -3
  372. package/dist/adapters/neon/index.d.ts.map +0 -1
  373. package/dist/adapters/neon/index.js +0 -3
  374. package/dist/adapters/neon/index.js.map +0 -1
  375. package/dist/server/production.d.ts +0 -18
  376. package/dist/server/production.d.ts.map +0 -1
  377. package/dist/server/production.js +0 -37
  378. package/dist/server/production.js.map +0 -1
  379. package/dist/vite/express-plugin.d.ts +0 -14
  380. package/dist/vite/express-plugin.d.ts.map +0 -1
  381. package/dist/vite/express-plugin.js +0 -53
  382. package/dist/vite/express-plugin.js.map +0 -1
  383. package/dist/vite/server.d.ts +0 -21
  384. package/dist/vite/server.d.ts.map +0 -1
  385. package/dist/vite/server.js +0 -68
  386. package/dist/vite/server.js.map +0 -1
  387. package/src/templates/default/client/App.tsx +0 -56
  388. package/src/templates/default/client/global.css +0 -75
  389. package/src/templates/default/client/vite-env.d.ts +0 -1
  390. package/src/templates/default/index.html +0 -14
  391. package/src/templates/default/server/index.ts +0 -22
  392. package/src/templates/default/server/node-build.ts +0 -4
  393. package/src/templates/default/vite.config.server.ts +0 -3
  394. /package/src/templates/default/{client → app}/lib/utils.ts +0 -0
@@ -0,0 +1,160 @@
1
+ import path from "path";
2
+ import fs from "fs";
3
+ import { createApp, createRouter, toNodeListener } from "h3";
4
+ /**
5
+ * Map a Nitro-style route file path to { method, route }.
6
+ *
7
+ * Examples:
8
+ * api/emails/index.get.ts → GET /api/emails
9
+ * api/emails/[id].get.ts → GET /api/emails/:id
10
+ * api/emails/[id]/star.patch.ts→ PATCH /api/emails/:id/star
11
+ * api/events.get.ts → GET /api/events
12
+ */
13
+ function parseRouteFile(relPath) {
14
+ // Strip .ts extension
15
+ const withoutExt = relPath.replace(/\.ts$/, "");
16
+ // Extract HTTP method from the last segment (e.g. "status.get" → method="get")
17
+ const dotIdx = withoutExt.lastIndexOf(".");
18
+ if (dotIdx === -1)
19
+ return null;
20
+ const method = withoutExt.slice(dotIdx + 1).toLowerCase();
21
+ const validMethods = ["get", "post", "put", "patch", "delete", "options"];
22
+ if (!validMethods.includes(method))
23
+ return null;
24
+ let routePath = withoutExt.slice(0, dotIdx);
25
+ // Replace [param] with :param
26
+ routePath = routePath.replace(/\[([^\]]+)\]/g, ":$1");
27
+ // Remove trailing /index
28
+ routePath = routePath.replace(/\/index$/, "");
29
+ // Ensure leading slash
30
+ if (!routePath.startsWith("/"))
31
+ routePath = "/" + routePath;
32
+ return { method, route: routePath };
33
+ }
34
+ /**
35
+ * Recursively discover all .ts files under a directory.
36
+ */
37
+ function discoverFiles(dir, prefix = "") {
38
+ if (!fs.existsSync(dir))
39
+ return [];
40
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
41
+ const files = [];
42
+ for (const entry of entries) {
43
+ const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
44
+ if (entry.isDirectory()) {
45
+ files.push(...discoverFiles(path.join(dir, entry.name), rel));
46
+ }
47
+ else if (entry.name.endsWith(".ts")) {
48
+ files.push(rel);
49
+ }
50
+ }
51
+ return files;
52
+ }
53
+ /**
54
+ * Load all API routes and server plugins, return an H3 listener.
55
+ */
56
+ async function buildApiListener(server, cwd) {
57
+ const apiDir = path.join(cwd, "server/routes/api");
58
+ const pluginsDir = path.join(cwd, "server/plugins");
59
+ const app = createApp();
60
+ const router = createRouter();
61
+ app.use(router);
62
+ // Discover and register API route files
63
+ const routeFiles = discoverFiles(apiDir, "api");
64
+ let registered = 0;
65
+ for (const relFile of routeFiles) {
66
+ const parsed = parseRouteFile(relFile);
67
+ if (!parsed)
68
+ continue;
69
+ const absPath = path.join(cwd, "server/routes", relFile);
70
+ try {
71
+ const mod = await server.ssrLoadModule(`/${path.relative(cwd, absPath)}`);
72
+ const handler = mod.default;
73
+ if (typeof handler !== "function")
74
+ continue;
75
+ const routerMethod = router[parsed.method];
76
+ if (typeof routerMethod === "function") {
77
+ routerMethod.call(router, parsed.route, handler);
78
+ registered++;
79
+ }
80
+ }
81
+ catch (e) {
82
+ console.warn(`[dev-api-server] Failed to load route ${relFile}:`, e.message);
83
+ }
84
+ }
85
+ // Run server plugins (auth, file-sync, etc.)
86
+ if (fs.existsSync(pluginsDir)) {
87
+ const pluginFiles = fs
88
+ .readdirSync(pluginsDir)
89
+ .filter((f) => f.endsWith(".ts"))
90
+ .sort();
91
+ for (const file of pluginFiles) {
92
+ try {
93
+ const absPath = path.join(pluginsDir, file);
94
+ const mod = await server.ssrLoadModule(`/${path.relative(cwd, absPath)}`);
95
+ const plugin = mod.default;
96
+ if (typeof plugin === "function") {
97
+ await plugin({ h3App: app });
98
+ }
99
+ }
100
+ catch (e) {
101
+ console.warn(`[dev-api-server] Failed to load plugin ${file}:`, e.message);
102
+ }
103
+ }
104
+ }
105
+ console.log(`[dev-api-server] ${registered} API routes registered`);
106
+ return toNodeListener(app);
107
+ }
108
+ /**
109
+ * Vite plugin that serves H3 API routes from server/routes/api/ during dev.
110
+ *
111
+ * This replaces the disabled Nitro Vite plugin for dev-mode API route serving.
112
+ * It scans the file-based routes, imports them, and mounts them on an H3 app
113
+ * that handles /api/* requests before React Router's SSR handler.
114
+ */
115
+ export function devApiServer() {
116
+ return {
117
+ name: "agent-native-dev-api-server",
118
+ apply: "serve",
119
+ configureServer(server) {
120
+ const cwd = server.config.root || process.cwd();
121
+ const apiDir = path.join(cwd, "server/routes/api");
122
+ const serverDir = path.join(cwd, "server");
123
+ // Skip if no API routes directory exists
124
+ if (!fs.existsSync(apiDir))
125
+ return;
126
+ // Lazily initialize the H3 listener on first /api/ request.
127
+ // This avoids blocking server startup and ensures ssrLoadModule is ready.
128
+ let listenerPromise = null;
129
+ // Watch server/ directory for changes and invalidate the listener
130
+ // so it rebuilds on the next API request (no full restart needed).
131
+ if (fs.existsSync(serverDir)) {
132
+ const watcher = fs.watch(serverDir, { recursive: true }, (_, filename) => {
133
+ if (filename && filename.endsWith(".ts")) {
134
+ listenerPromise = null;
135
+ console.log(`[dev-api-server] Server file changed: ${filename} — will reload on next request`);
136
+ }
137
+ });
138
+ server.httpServer?.on("close", () => watcher.close());
139
+ }
140
+ // Add middleware DIRECTLY (not via return) so it runs BEFORE
141
+ // Vite's internal middleware and React Router's SSR handler.
142
+ server.middlewares.use((req, res, next) => {
143
+ if (!req.url?.startsWith("/api/")) {
144
+ return next();
145
+ }
146
+ if (!listenerPromise) {
147
+ listenerPromise = buildApiListener(server, cwd);
148
+ }
149
+ listenerPromise
150
+ .then((listener) => listener(req, res))
151
+ .catch((err) => {
152
+ console.error("[dev-api-server] Error handling request:", err);
153
+ res.statusCode = 500;
154
+ res.end(JSON.stringify({ error: "Internal server error" }));
155
+ });
156
+ });
157
+ },
158
+ };
159
+ }
160
+ //# sourceMappingURL=dev-api-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev-api-server.js","sourceRoot":"","sources":["../../src/vite/dev-api-server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- export { defineConfig, type ClientConfigOptions } from "./client.js";
2
- export { defineServerConfig, type ServerConfigOptions } from "./server.js";
3
- export { expressPlugin, type ExpressPluginOptions } from "./express-plugin.js";
1
+ export { defineConfig, type ClientConfigOptions, type NitroOptions, } from "./client.js";
2
+ export { devApiServer } from "./dev-api-server.js";
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,KAAK,mBAAmB,EACxB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -1,4 +1,3 @@
1
- export { defineConfig } from "./client.js";
2
- export { defineServerConfig } from "./server.js";
3
- export { expressPlugin } from "./express-plugin.js";
1
+ export { defineConfig, } from "./client.js";
2
+ export { devApiServer } from "./dev-api-server.js";
4
3
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA4B,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAA4B,MAAM,aAAa,CAAC;AAC3E,OAAO,EAAE,aAAa,EAA6B,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,GAGb,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.4.1",
3
+ "version": "0.4.3",
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",
@@ -19,15 +19,23 @@
19
19
  },
20
20
  "./vite": "./dist/vite/index.js",
21
21
  "./server": "./dist/server/index.js",
22
+ "./db": "./dist/db/index.js",
22
23
  "./client": "./dist/client/index.js",
23
24
  "./shared": "./dist/shared/index.js",
24
25
  "./scripts": "./dist/scripts/index.js",
26
+ "./application-state": "./dist/application-state/index.js",
27
+ "./settings": "./dist/settings/index.js",
28
+ "./oauth-tokens": "./dist/oauth-tokens/index.js",
25
29
  "./adapters/sync": "./dist/adapters/sync/index.js",
30
+ "./adapters/drizzle": "./dist/adapters/drizzle/index.js",
26
31
  "./adapters/firestore": "./dist/adapters/firestore/index.js",
27
32
  "./adapters/supabase": "./dist/adapters/supabase/index.js",
28
- "./adapters/neon": "./dist/adapters/neon/index.js",
33
+ "./adapters/convex": "./dist/adapters/convex/index.js",
29
34
  "./adapters/cli": "./dist/adapters/cli/index.js",
35
+ "./router": "./dist/router/index.js",
30
36
  "./a2a": "./dist/a2a/index.js",
37
+ "./terminal": "./dist/client/terminal/index.js",
38
+ "./terminal/server": "./dist/terminal/index.js",
31
39
  "./tailwind": "./dist/tailwind.preset.js",
32
40
  "./tsconfig.base.json": "./tsconfig.base.json"
33
41
  },
@@ -46,29 +54,55 @@
46
54
  "release": "npm version patch && npm publish --access public"
47
55
  },
48
56
  "dependencies": {
57
+ "@anthropic-ai/sdk": "^0.80.0",
58
+ "@libsql/client": "^0.15.0",
59
+ "@react-router/dev": "^7.13.1",
60
+ "@react-router/fs-routes": "^7.13.1",
61
+ "@tailwindcss/typography": "^0.5.19",
62
+ "better-sqlite3": "^12.8.0",
49
63
  "chokidar": "^4.0.0",
50
64
  "clsx": "^2.1.1",
51
65
  "dotenv": "^17.2.1",
66
+ "drizzle-orm": "^0.44.0",
67
+ "h3": "^1.14.0",
68
+ "isbot": "^5",
52
69
  "minimatch": "^10.0.0",
70
+ "nitro": "^3.0.0",
71
+ "p-limit": "^7.3.0",
72
+ "react-markdown": "^10.1.0",
73
+ "react-router": "^7.13.1",
74
+ "remark-gfm": "^4.0.1",
53
75
  "tailwind-merge": "^2.6.0"
54
76
  },
55
77
  "peerDependencies": {
78
+ "@assistant-ui/react": ">=0.12",
79
+ "@assistant-ui/react-markdown": ">=0.12",
56
80
  "@supabase/supabase-js": ">=2",
57
- "@neondatabase/serverless": ">=0.9",
58
81
  "@tanstack/react-query": ">=5",
59
82
  "@vitejs/plugin-react-swc": ">=4",
83
+ "@xterm/addon-fit": ">=0.10",
84
+ "@xterm/addon-web-links": ">=0.11",
85
+ "@xterm/xterm": ">=5",
60
86
  "autoprefixer": ">=10",
61
- "cors": ">=2",
62
- "express": ">=5",
87
+ "convex": ">=1",
88
+ "node-pty": ">=1",
63
89
  "postcss": ">=8",
64
90
  "react": ">=18",
65
91
  "react-dom": ">=18",
92
+ "react-router": ">=7",
66
93
  "tailwindcss": ">=3",
67
94
  "tailwindcss-animate": ">=1",
68
95
  "typescript": ">=5",
69
- "vite": ">=7"
96
+ "vite": ">=7",
97
+ "ws": ">=8"
70
98
  },
71
99
  "peerDependenciesMeta": {
100
+ "@assistant-ui/react": {
101
+ "optional": true
102
+ },
103
+ "@assistant-ui/react-markdown": {
104
+ "optional": true
105
+ },
72
106
  "@tanstack/react-query": {
73
107
  "optional": true
74
108
  },
@@ -84,13 +118,10 @@
84
118
  "postcss": {
85
119
  "optional": true
86
120
  },
87
- "cors": {
88
- "optional": true
89
- },
90
- "express": {
121
+ "@vitejs/plugin-react-swc": {
91
122
  "optional": true
92
123
  },
93
- "@vitejs/plugin-react-swc": {
124
+ "react-router": {
94
125
  "optional": true
95
126
  },
96
127
  "vite": {
@@ -99,29 +130,53 @@
99
130
  "@supabase/supabase-js": {
100
131
  "optional": true
101
132
  },
102
- "@neondatabase/serverless": {
133
+ "convex": {
134
+ "optional": true
135
+ },
136
+ "@xterm/xterm": {
137
+ "optional": true
138
+ },
139
+ "@xterm/addon-fit": {
140
+ "optional": true
141
+ },
142
+ "@xterm/addon-web-links": {
143
+ "optional": true
144
+ },
145
+ "node-pty": {
146
+ "optional": true
147
+ },
148
+ "ws": {
103
149
  "optional": true
104
150
  }
105
151
  },
106
152
  "devDependencies": {
153
+ "@assistant-ui/react": "^0.12.19",
154
+ "@assistant-ui/react-markdown": "^0.12.6",
155
+ "@react-router/dev": "^7.13.1",
156
+ "@react-router/fs-routes": "^7.13.1",
157
+ "@supabase/supabase-js": "^2.49.0",
107
158
  "@tanstack/react-query": "^5.84.2",
108
- "@types/cors": "^2.8.19",
109
- "@types/express": "^5.0.3",
159
+ "@types/better-sqlite3": "^7.6.13",
160
+ "@types/express": "^5.0.6",
110
161
  "@types/node": "^24.2.1",
111
162
  "@types/react": "^18.3.23",
163
+ "@types/ws": "^8.18.1",
112
164
  "@vitejs/plugin-react-swc": "^4.0.0",
165
+ "@xterm/addon-fit": "^0.10.0",
166
+ "@xterm/addon-web-links": "^0.11.0",
167
+ "@xterm/xterm": "^5.5.0",
113
168
  "autoprefixer": "^10.4.21",
114
- "cors": "^2.8.5",
115
- "express": "^5.1.0",
116
- "@neondatabase/serverless": "^1.0.0",
117
- "@supabase/supabase-js": "^2.49.0",
169
+ "express": "^5.2.1",
118
170
  "firebase-admin": "^13.0.0",
171
+ "node-pty": "^1.1.0",
119
172
  "postcss": "^8.5.6",
120
173
  "react": "^18.3.1",
174
+ "react-router": "^7.13.1",
121
175
  "tailwindcss": "^3.4.17",
122
176
  "tailwindcss-animate": "^1.0.7",
123
177
  "typescript": "^5.9.2",
124
178
  "vite": "^8.0.0",
125
- "vitest": "^3.2.4"
179
+ "vitest": "^3.2.4",
180
+ "ws": "^8.18.0"
126
181
  }
127
182
  }
@@ -135,7 +135,7 @@ description: >-
135
135
  ## Naming Conventions
136
136
 
137
137
  - Hyphen-case only: `[a-z0-9-]`, max 64 characters
138
- - Pattern skills: descriptive names (`files-as-database`, `delegate-to-agent`)
138
+ - Pattern skills: descriptive names (`storing-data`, `delegate-to-agent`)
139
139
  - Workflow/generator skills: verb-noun (`create-script`, `capture-learnings`)
140
140
 
141
141
  ## Tips
@@ -14,7 +14,7 @@ The UI and server never call an LLM directly. All AI work is delegated to the ag
14
14
 
15
15
  ## Why
16
16
 
17
- The agent is the single AI interface. It has context about the full project, can read/write any file, and can run scripts. Inline LLM calls bypass this — they create a shadow AI that doesn't know what the agent knows and can't coordinate with it.
17
+ The agent is the single AI interface. It has context about the full project, can read/write the database, and can run scripts. Inline LLM calls bypass this — they create a shadow AI that doesn't know what the agent knows and can't coordinate with it.
18
18
 
19
19
  ## How
20
20
 
@@ -86,5 +86,5 @@ Scripts may call external APIs (image generation, search, etc.) — but the AI r
86
86
 
87
87
  - **scripts** — The agent invokes scripts via `pnpm script <name>` to perform complex operations
88
88
  - **self-modifying-code** — The agent operates through the chat bridge to make code changes
89
- - **files-as-database** — The agent writes results to data files after processing requests
90
- - **sse-file-watcher** — The UI updates automatically when the agent writes files
89
+ - **storing-data** — The agent writes results to the database after processing requests
90
+ - **real-time-sync** — The UI updates automatically when the agent writes to the database
@@ -1,91 +1,110 @@
1
1
  ---
2
- name: files-as-database
2
+ name: storing-data
3
3
  description: >-
4
- How to store and manage application state as JSON/markdown files in data/.
5
- Use when adding data models, creating file-based state, deciding where to
6
- store data, or reading/writing application data files.
4
+ How and where to store application data. Use when adding new data models,
5
+ deciding between settings vs Drizzle tables, reading/writing app config,
6
+ or working with application state.
7
7
  ---
8
8
 
9
- # Files as Database
9
+ # Storing Data
10
10
 
11
- ## Rule
11
+ ## Where Data Goes
12
12
 
13
- All application state must be stored as files. There is no traditional database in an agent-native app.
13
+ All data lives in one SQLite database (`data/app.db`). In production, set `DATABASE_URL` to point to Turso, Neon, Supabase, or D1 — same code, no changes needed.
14
14
 
15
- ## Why
15
+ There are three storage layers, each for a different kind of data:
16
16
 
17
- Files are the shared interface between the AI agent and the UI. The agent reads and writes files directly on the filesystem. The UI reads files via API routes. SSE streams file changes back to the UI in real-time. This only works if files are the single source of truth.
17
+ ### 1. Settings app configuration
18
18
 
19
- ## How
19
+ Key-value store for persistent config that the user or agent can change. Theme, preferences, integration API keys, availability schedules.
20
20
 
21
- - Store data as JSON or markdown files in `data/` (or a project-specific subdirectory).
22
- - API routes in `server/index.ts` read files with `fs.readFile` and return them.
23
- - The agent modifies files directly — no API calls needed from the agent side.
24
- - `createFileWatcher("./data")` watches for changes and streams them via SSE.
25
- - `useFileWatcher()` on the client invalidates React Query caches when files change.
21
+ ```ts
22
+ import { getSetting, putSetting } from "@agent-native/core/settings";
23
+
24
+ // Read (returns null if not set)
25
+ const prefs = await getSetting("user-preferences");
26
+
27
+ // Write (creates or replaces)
28
+ await putSetting("user-preferences", { theme: "dark", density: "comfortable" });
29
+ ```
30
+
31
+ From scripts:
32
+ ```ts
33
+ import { readSetting, writeSetting } from "@agent-native/core/settings";
34
+ const prefs = await readSetting("user-preferences");
35
+ ```
26
36
 
27
- ## Don't
37
+ SSE: writes automatically notify the UI via `{ source: "settings", type: "change", key }`.
28
38
 
29
- - Don't add a database (SQLite, Postgres, MongoDB, etc.)
30
- - Don't store app state in localStorage, sessionStorage, or cookies
31
- - Don't keep state only in memory (server variables, global stores)
32
- - Don't use Redis or any external state store
33
- - Don't interpolate user input directly into file paths (see Security below)
39
+ ### 2. Application State ephemeral UI state
34
40
 
35
- ## Example
41
+ For state the agent and UI share in real-time: what the user is looking at, compose drafts, navigation commands. Scoped by session — cleared between sessions.
36
42
 
37
43
  ```ts
38
- import fs from "fs";
39
-
40
- // Writing state (agent or script)
41
- fs.writeFileSync(
42
- "data/projects/my-project.json",
43
- JSON.stringify(project, null, 2),
44
- );
45
-
46
- // Reading state (server route) note the path sanitization
47
- app.get("/api/projects/:id", (req, res) => {
48
- const id = req.params.id.replace(/[^a-zA-Z0-9_-]/g, "");
49
- const data = fs.readFileSync(`data/projects/${id}.json`, "utf-8");
50
- res.json(JSON.parse(data));
51
- });
44
+ import { readAppState, writeAppState, deleteAppState, listAppState } from "@agent-native/core/application-state";
45
+
46
+ // Write state (UI updates instantly via SSE)
47
+ await writeAppState("navigate", { view: "inbox", threadId: "t-123" });
48
+
49
+ // Read state
50
+ const nav = await readAppState("navigation");
51
+
52
+ // List by prefix (e.g., all compose drafts)
53
+ const drafts = await listAppState("compose-");
54
+
55
+ // Delete (one-shot commands: UI reads, then agent or UI deletes)
56
+ await deleteAppState("navigate");
52
57
  ```
53
58
 
54
- ## Creating a New Data Model
59
+ SSE: writes automatically notify the UI via `{ source: "app-state", type: "change", key }`.
60
+
61
+ ### 3. Drizzle Tables — structured domain data
62
+
63
+ For data with schemas, relationships, and queries: forms, bookings, emails, compositions. Define tables in `server/db/schema.ts` using Drizzle ORM.
64
+
65
+ ```ts
66
+ import { sqliteTable, text, integer } from "drizzle-orm/sqlite-core";
67
+
68
+ export const bookings = sqliteTable("bookings", {
69
+ id: text("id").primaryKey(),
70
+ name: text("name").notNull(),
71
+ email: text("email").notNull(),
72
+ startTime: integer("start_time").notNull(),
73
+ endTime: integer("end_time").notNull(),
74
+ });
75
+ ```
55
76
 
56
- When adding a new data entity (e.g., projects, tasks, settings):
77
+ Query via `getDb()` singleton from `server/db/index.ts`.
57
78
 
58
- 1. **Define the type** in `shared/` so both client and server import it
59
- 2. **Create the data directory** — `data/<model>/<id>.json` (one file per item) or `data/<model>.json` (single collection)
60
- 3. **Add API routes** in `server/` that read/write the files (sanitize IDs from params)
61
- 4. **Wire SSE invalidation** — Add the query key to `useFileWatcher()` so the UI refreshes on changes
79
+ ### 4. OAuth Tokens credentials
62
80
 
63
- ## Judgment Criteria
81
+ For OAuth tokens acquired at runtime (Google, etc.). Never store these in settings — use the dedicated encrypted store.
64
82
 
65
- | Question | Single file | Directory of files |
66
- | ------------------------------------ | ----------------- | ---------------------------- |
67
- | Are items independently addressable? | No — use one file | Yes — one file per item |
68
- | Will there be >50 items? | Probably fine | Definitely split |
69
- | Do items need individual URLs? | No | Yes |
70
- | Do items change independently? | No | Yes — avoids write conflicts |
83
+ ```ts
84
+ import { saveOAuthTokens, getOAuthTokens, listOAuthAccounts } from "@agent-native/core/oauth-tokens";
71
85
 
72
- ## Scaling Guidance
86
+ await saveOAuthTokens("google", "user@gmail.com", { access_token: "...", refresh_token: "..." });
87
+ const tokens = await getOAuthTokens("google", "user@gmail.com");
88
+ const accounts = await listOAuthAccounts("google");
89
+ ```
73
90
 
74
- | File Count | Recommendation |
75
- | ---------- | --------------------------------------------------------------------- |
76
- | Under 50 | Read-all with `readdirSync` + `readFileSync` is fine |
77
- | 50–200 | Add an index file (`data/<model>/_index.json`) with IDs and summaries |
78
- | 200+ | Partition into subdirectories |
91
+ ## Which Layer to Use
79
92
 
80
- For list endpoints serving many files, use `fs.promises.readFile` instead of `readFileSync` to avoid blocking the event loop.
93
+ | Data | Layer | Why |
94
+ |------|-------|-----|
95
+ | User preferences, theme, config | Settings | Persistent KV, SSE notifications, simple read/write |
96
+ | What the user sees on screen | Application State | Ephemeral, real-time sync, agent ↔ UI bridge |
97
+ | Compose drafts, wizard steps | Application State | Temporary, deleted when done |
98
+ | Domain records (forms, bookings) | Drizzle table | Needs schema, queries, relationships |
99
+ | OAuth refresh tokens | OAuth Tokens | Secure, per-provider, per-account |
81
100
 
82
- ## Security
101
+ ## Environment Variables
83
102
 
84
- - **Path sanitization** Always sanitize IDs from request params before constructing file paths. Use `id.replace(/[^a-zA-Z0-9_-]/g, "")` or the core utility `isValidPath()`. Without this, `../../.env` as an ID reads your environment file.
85
- - **Validate before writing** — Check data shape before writing files, especially for user-submitted data. A malformed write can break all subsequent reads.
103
+ Infrastructure config stays in `.env` these differ per deployment:
86
104
 
87
- ## Related Skills
105
+ - `DATABASE_URL` — database connection (default: `file:./data/app.db`)
106
+ - `DATABASE_AUTH_TOKEN` — for remote databases
107
+ - `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` — OAuth app credentials
108
+ - `ACCESS_TOKEN` — production auth token
88
109
 
89
- - **sse-file-watcher** Set up real-time sync so the UI updates when data files change
90
- - **scripts** — Create scripts that read/write data files for complex operations
91
- - **self-modifying-code** — The agent writes data files as Tier 1 (auto-apply) modifications
110
+ Everything else (user settings, tokens, app state) goes in SQL.
@@ -61,9 +61,9 @@ In the agent-native framework context:
61
61
  - For complex visual effects, use a `<style>` tag in the component or a dedicated CSS file
62
62
  - Fonts can be loaded from Google Fonts via `@import` in a CSS file or `<link>` in `index.html`
63
63
  - Animation libraries: prefer CSS transitions and keyframes; use Framer Motion for complex sequences
64
- - All new UI components should be placed in `client/components/`
64
+ - All new UI components should be placed in `app/components/`
65
65
 
66
66
  ## Related Skills
67
67
 
68
68
  - **self-modifying-code** — The agent can edit source code to apply design changes
69
- - **files-as-database** — Design configuration can be stored as JSON in `data/` for agent-editable theming
69
+ - **storing-data** — Design configuration can be stored in the settings table for agent-editable theming