@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
package/README.md CHANGED
@@ -117,6 +117,37 @@ Or **[launch a template](https://agent-native.com/templates)** — no setup requ
117
117
  | **Ownership** | Rented | N/A | Yours but costly | You own the code |
118
118
  | **Non-dev friendly** | Yes | No | Rarely | Guided UI + agent |
119
119
 
120
+ ## Architecture
121
+
122
+ Agent-native is designed to be agnostic at every layer — use the defaults or swap in your own.
123
+
124
+ | Layer | Default | Swappable? |
125
+ | ------------ | ----------------------------------------------------------------- | ----------------------------------------------------------------------------- |
126
+ | **Server** | [Nitro](https://nitro.build) (H3) | Deploy anywhere Nitro supports (Node, Cloudflare, Vercel, Netlify, Deno, Bun) |
127
+ | **Auth** | Token-based (zero-config) | Plug in Auth.js, Clerk, Lucia, or any auth system via `getSession()` contract |
128
+ | **Database** | Files (`data/` directory) | Add Drizzle, Prisma, or any ORM when you need a real DB |
129
+ | **Frontend** | React + React Router + Tailwind | Modify or replace — it's your code |
130
+ | **Agent** | Works with any CLI-based agent (Claude Code, Codex, Cursor, etc.) | Agent-agnostic by design |
131
+ | **Hosting** | Any (Netlify, Vercel, Cloudflare, self-hosted) | Nitro's preset system handles deployment targets |
132
+
133
+ ### Auth: Zero to Production
134
+
135
+ Auth is invisible in development and automatic in production. No code changes required.
136
+
137
+ ```bash
138
+ # Development — no auth, no config
139
+ pnpm dev
140
+
141
+ # Production — set one env var, auth activates
142
+ ACCESS_TOKEN=your-secret pnpm start
143
+ ```
144
+
145
+ See [docs/auth.md](docs/auth.md) for the full auth guide, including multi-token team access and bring-your-own-auth.
146
+
147
+ ## Community
148
+
149
+ Join the **[Discord](https://discord.gg/qm82StQ2NC)** to ask questions, share what you're building, and get help.
150
+
120
151
  ## Docs
121
152
 
122
153
  Full documentation at **[agent-native.com](https://agent-native.com)**.
@@ -0,0 +1,24 @@
1
+ import type { FileSyncAdapter, FileRecord, FileChange, FileWritePayload, Unsubscribe } from "../sync/types.js";
2
+ export interface ConvexClient {
3
+ mutation(functionRef: string, args: Record<string, unknown>): Promise<unknown>;
4
+ query(functionRef: string, args: Record<string, unknown>): Promise<unknown>;
5
+ onUpdate(functionRef: string, args: Record<string, unknown>, callback: (result: unknown) => void): () => void;
6
+ close(): Promise<void>;
7
+ }
8
+ export declare class ConvexFileSyncAdapter implements FileSyncAdapter {
9
+ private client;
10
+ constructor(client: ConvexClient);
11
+ query(appId: string, ownerId: string): Promise<{
12
+ id: string;
13
+ data: FileRecord;
14
+ }[]>;
15
+ get(id: string): Promise<{
16
+ id: string;
17
+ data: FileRecord;
18
+ } | null>;
19
+ set(id: string, record: FileWritePayload): Promise<void>;
20
+ delete(id: string): Promise<void>;
21
+ subscribe(appId: string, ownerId: string, onChange: (changes: FileChange[]) => void, onError: (error: unknown) => void): Unsubscribe;
22
+ dispose(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/convex/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAM1B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;IACpB,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5E,QAAQ,CACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,GAClC,MAAM,IAAI,CAAC;IACd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAuCD,qBAAa,qBAAsB,YAAW,eAAe;IAC/C,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,YAAY;IAElC,KAAK,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IAYxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IASjE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,SAAS,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EACzC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAChC,WAAW;IAuER,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAG/B"}
@@ -0,0 +1,125 @@
1
+ import { createHash } from "crypto";
2
+ // ---------------------------------------------------------------------------
3
+ // Helpers
4
+ // ---------------------------------------------------------------------------
5
+ function toRecord(row) {
6
+ return {
7
+ path: row.path,
8
+ content: row.content,
9
+ app: row.app,
10
+ ownerId: row.ownerId,
11
+ lastUpdated: row.lastUpdated,
12
+ createdAt: row.createdAt,
13
+ };
14
+ }
15
+ function contentHash(content) {
16
+ return createHash("sha256").update(content).digest("hex");
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // Convex adapter
20
+ // ---------------------------------------------------------------------------
21
+ export class ConvexFileSyncAdapter {
22
+ client;
23
+ constructor(client) {
24
+ this.client = client;
25
+ }
26
+ async query(appId, ownerId) {
27
+ const rows = (await this.client.query("files:list", {
28
+ app: appId,
29
+ ownerId,
30
+ }));
31
+ return (rows ?? []).map((row) => ({
32
+ id: row.id,
33
+ data: toRecord(row),
34
+ }));
35
+ }
36
+ async get(id) {
37
+ const row = (await this.client.query("files:get", {
38
+ id,
39
+ }));
40
+ if (!row)
41
+ return null;
42
+ return { id: row.id, data: toRecord(row) };
43
+ }
44
+ async set(id, record) {
45
+ await this.client.mutation("files:upsert", {
46
+ id,
47
+ ...(record.path !== undefined && { path: record.path }),
48
+ ...(record.content !== undefined && { content: record.content }),
49
+ ...(record.app !== undefined && { app: record.app }),
50
+ ...(record.ownerId !== undefined && { ownerId: record.ownerId }),
51
+ ...(record.lastUpdated !== undefined && {
52
+ lastUpdated: record.lastUpdated,
53
+ }),
54
+ ...(record.createdAt !== undefined && { createdAt: record.createdAt }),
55
+ });
56
+ }
57
+ async delete(id) {
58
+ await this.client.mutation("files:remove", { id });
59
+ }
60
+ subscribe(appId, ownerId, onChange, onError) {
61
+ // Store content hashes for memory-efficient diffing
62
+ let previousHashes = new Map();
63
+ // Store last known records for removed file data
64
+ let previousRecords = new Map();
65
+ // Serialize callback processing to prevent race conditions
66
+ let processingChain = Promise.resolve();
67
+ const unsubscribe = this.client.onUpdate("files:list", { app: appId, ownerId }, (result) => {
68
+ processingChain = processingChain
69
+ .then(() => {
70
+ try {
71
+ const rows = result ?? [];
72
+ const currentHashes = new Map();
73
+ const currentRecords = new Map();
74
+ for (const row of rows) {
75
+ currentHashes.set(row.id, contentHash(row.content ?? ""));
76
+ currentRecords.set(row.id, toRecord(row));
77
+ }
78
+ const changes = [];
79
+ // Detect added + modified
80
+ for (const [id, hash] of currentHashes) {
81
+ const prevHash = previousHashes.get(id);
82
+ if (prevHash === undefined) {
83
+ changes.push({
84
+ type: "added",
85
+ id,
86
+ data: currentRecords.get(id),
87
+ });
88
+ }
89
+ else if (prevHash !== hash) {
90
+ changes.push({
91
+ type: "modified",
92
+ id,
93
+ data: currentRecords.get(id),
94
+ });
95
+ }
96
+ }
97
+ // Detect removed
98
+ for (const id of previousHashes.keys()) {
99
+ if (!currentHashes.has(id)) {
100
+ const record = previousRecords.get(id);
101
+ if (record) {
102
+ changes.push({ type: "removed", id, data: record });
103
+ }
104
+ }
105
+ }
106
+ previousHashes = currentHashes;
107
+ previousRecords = currentRecords;
108
+ if (changes.length > 0)
109
+ onChange(changes);
110
+ }
111
+ catch (err) {
112
+ onError(err);
113
+ }
114
+ })
115
+ .catch(() => {
116
+ // Prevent chain poisoning if onError throws
117
+ });
118
+ });
119
+ return unsubscribe;
120
+ }
121
+ async dispose() {
122
+ await this.client.close();
123
+ }
124
+ }
125
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/convex/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { ConvexFileSyncAdapter } from "./adapter.js";
2
+ export type { ConvexClient } from "./adapter.js";
3
+ export * from "../sync/index.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/convex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { ConvexFileSyncAdapter } from "./adapter.js";
2
+ export * from "../sync/index.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/convex/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,36 @@
1
+ import Database from "better-sqlite3";
2
+ import type { FileSyncAdapter, FileRecord, FileChange, FileWritePayload, Unsubscribe } from "../sync/types.js";
3
+ /**
4
+ * SQLite-backed file sync adapter using Drizzle ORM.
5
+ *
6
+ * Zero external dependencies beyond what @agent-native/core already ships
7
+ * (drizzle-orm + better-sqlite3). The SQLite database is created automatically
8
+ * at the provided path on construction.
9
+ *
10
+ * Since SQLite has no built-in change notifications, `subscribe()` uses a
11
+ * lightweight polling loop (~1s interval) that queries `MAX(last_updated)` and
12
+ * only fetches full rows when the max changes. This is efficient for local dev.
13
+ *
14
+ * Best for: single-instance / local dev. For multi-instance / team sync, use
15
+ * the Supabase, Firestore, or Convex adapters instead.
16
+ */
17
+ export declare class DrizzleFileSyncAdapter implements FileSyncAdapter {
18
+ private db;
19
+ private sqlite;
20
+ private pollIntervals;
21
+ constructor(dbPathOrInstance: string | Database.Database);
22
+ private ensureTable;
23
+ query(appId: string, ownerId: string): Promise<{
24
+ id: string;
25
+ data: FileRecord;
26
+ }[]>;
27
+ get(id: string): Promise<{
28
+ id: string;
29
+ data: FileRecord;
30
+ } | null>;
31
+ set(id: string, record: FileWritePayload): Promise<void>;
32
+ delete(id: string): Promise<void>;
33
+ subscribe(appId: string, ownerId: string, onChange: (changes: FileChange[]) => void, onError: (error: unknown) => void): Unsubscribe;
34
+ dispose(): Promise<void>;
35
+ }
36
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/adapters/drizzle/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAGtC,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACZ,MAAM,kBAAkB,CAAC;AAwB1B;;;;;;;;;;;;;GAaG;AACH,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,aAAa,CAAkD;gBAE3D,gBAAgB,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ;IAiBxD,OAAO,CAAC,WAAW;IAmBb,KAAK,CACT,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,EAAE,CAAC;IAUxC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,CAAC;IAOjE,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAyCxD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,SAAS,CACP,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,EACzC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAChC,WAAW;IAmFR,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B"}
@@ -0,0 +1,210 @@
1
+ import Database from "better-sqlite3";
2
+ import { drizzle } from "drizzle-orm/better-sqlite3";
3
+ import { eq, and, sql } from "drizzle-orm";
4
+ import { files } from "./schema.js";
5
+ // ---------------------------------------------------------------------------
6
+ // Column mapping helpers
7
+ // ---------------------------------------------------------------------------
8
+ function rowToRecord(row) {
9
+ return {
10
+ path: row.path,
11
+ content: row.content,
12
+ app: row.app,
13
+ ownerId: row.ownerId,
14
+ lastUpdated: row.lastUpdated,
15
+ createdAt: row.createdAt ?? undefined,
16
+ };
17
+ }
18
+ // ---------------------------------------------------------------------------
19
+ // DrizzleFileSyncAdapter
20
+ // ---------------------------------------------------------------------------
21
+ /**
22
+ * SQLite-backed file sync adapter using Drizzle ORM.
23
+ *
24
+ * Zero external dependencies beyond what @agent-native/core already ships
25
+ * (drizzle-orm + better-sqlite3). The SQLite database is created automatically
26
+ * at the provided path on construction.
27
+ *
28
+ * Since SQLite has no built-in change notifications, `subscribe()` uses a
29
+ * lightweight polling loop (~1s interval) that queries `MAX(last_updated)` and
30
+ * only fetches full rows when the max changes. This is efficient for local dev.
31
+ *
32
+ * Best for: single-instance / local dev. For multi-instance / team sync, use
33
+ * the Supabase, Firestore, or Convex adapters instead.
34
+ */
35
+ export class DrizzleFileSyncAdapter {
36
+ db;
37
+ sqlite;
38
+ pollIntervals = new Set();
39
+ constructor(dbPathOrInstance) {
40
+ if (typeof dbPathOrInstance === "string") {
41
+ this.sqlite = new Database(dbPathOrInstance);
42
+ // WAL mode for better concurrent read performance
43
+ this.sqlite.pragma("journal_mode = WAL");
44
+ }
45
+ else {
46
+ this.sqlite = dbPathOrInstance;
47
+ }
48
+ this.db = drizzle(this.sqlite);
49
+ this.ensureTable();
50
+ }
51
+ // ---------------------------------------------------------------------------
52
+ // Schema setup
53
+ // ---------------------------------------------------------------------------
54
+ ensureTable() {
55
+ this.sqlite.exec(`
56
+ CREATE TABLE IF NOT EXISTS files (
57
+ id TEXT PRIMARY KEY,
58
+ path TEXT NOT NULL,
59
+ content TEXT NOT NULL,
60
+ app TEXT NOT NULL,
61
+ owner_id TEXT NOT NULL,
62
+ last_updated INTEGER NOT NULL,
63
+ created_at INTEGER
64
+ );
65
+ CREATE INDEX IF NOT EXISTS idx_files_app_owner ON files(app, owner_id);
66
+ `);
67
+ }
68
+ // ---------------------------------------------------------------------------
69
+ // FileSyncAdapter interface
70
+ // ---------------------------------------------------------------------------
71
+ async query(appId, ownerId) {
72
+ const rows = this.db
73
+ .select()
74
+ .from(files)
75
+ .where(and(eq(files.app, appId), eq(files.ownerId, ownerId)))
76
+ .all();
77
+ return rows.map((row) => ({ id: row.id, data: rowToRecord(row) }));
78
+ }
79
+ async get(id) {
80
+ const row = this.db.select().from(files).where(eq(files.id, id)).get();
81
+ if (!row)
82
+ return null;
83
+ return { id: row.id, data: rowToRecord(row) };
84
+ }
85
+ async set(id, record) {
86
+ const existing = this.db.select().from(files).where(eq(files.id, id)).get();
87
+ if (existing) {
88
+ // Update only provided fields. Use a plain record to avoid drizzle's
89
+ // strict inferred-insert type, which may omit nullable columns.
90
+ const updates = {};
91
+ if (record.path !== undefined)
92
+ updates.path = record.path;
93
+ if (record.content !== undefined)
94
+ updates.content = record.content;
95
+ if (record.app !== undefined)
96
+ updates.app = record.app;
97
+ if (record.ownerId !== undefined)
98
+ updates.ownerId = record.ownerId;
99
+ if (record.lastUpdated !== undefined)
100
+ updates.lastUpdated = record.lastUpdated;
101
+ if (record.createdAt !== undefined)
102
+ updates.createdAt = record.createdAt;
103
+ if (Object.keys(updates).length > 0) {
104
+ this.db
105
+ .update(files)
106
+ .set(updates)
107
+ .where(eq(files.id, id))
108
+ .run();
109
+ }
110
+ }
111
+ else {
112
+ // Insert new record — require all required fields
113
+ const values = {
114
+ id,
115
+ path: record.path ?? "",
116
+ content: record.content ?? "",
117
+ app: record.app ?? "",
118
+ ownerId: record.ownerId ?? "",
119
+ lastUpdated: record.lastUpdated ?? 0,
120
+ };
121
+ if (record.createdAt !== undefined)
122
+ values.createdAt = record.createdAt;
123
+ this.db
124
+ .insert(files)
125
+ .values(values)
126
+ .run();
127
+ }
128
+ }
129
+ async delete(id) {
130
+ this.db.delete(files).where(eq(files.id, id)).run();
131
+ }
132
+ subscribe(appId, ownerId, onChange, onError) {
133
+ // Track a lightweight "high-water mark" — the MAX(last_updated) seen so far.
134
+ // On each tick we query the max; if it changed, we do a full diff.
135
+ let lastMaxUpdated = null;
136
+ const snapshot = new Map();
137
+ const tick = () => {
138
+ try {
139
+ // Cheap scalar query — only fetch rows when something changed
140
+ const maxRow = this.db
141
+ .select({ max: sql `MAX(${files.lastUpdated})` })
142
+ .from(files)
143
+ .where(and(eq(files.app, appId), eq(files.ownerId, ownerId)))
144
+ .get();
145
+ const currentMax = maxRow?.max ?? null;
146
+ if (currentMax === lastMaxUpdated)
147
+ return;
148
+ lastMaxUpdated = currentMax;
149
+ const rows = this.db
150
+ .select()
151
+ .from(files)
152
+ .where(and(eq(files.app, appId), eq(files.ownerId, ownerId)))
153
+ .all();
154
+ const currentIds = new Set();
155
+ const changes = [];
156
+ for (const row of rows) {
157
+ currentIds.add(row.id);
158
+ const prev = snapshot.get(row.id);
159
+ const data = rowToRecord(row);
160
+ if (!prev) {
161
+ changes.push({ type: "added", id: row.id, data });
162
+ }
163
+ else if (prev.content !== row.content ||
164
+ prev.lastUpdated !== row.lastUpdated) {
165
+ changes.push({ type: "modified", id: row.id, data });
166
+ }
167
+ snapshot.set(row.id, {
168
+ content: row.content,
169
+ lastUpdated: row.lastUpdated,
170
+ });
171
+ }
172
+ for (const [id] of snapshot) {
173
+ if (!currentIds.has(id)) {
174
+ changes.push({
175
+ type: "removed",
176
+ id,
177
+ data: {
178
+ path: "",
179
+ content: "",
180
+ app: appId,
181
+ ownerId,
182
+ lastUpdated: 0,
183
+ },
184
+ });
185
+ snapshot.delete(id);
186
+ }
187
+ }
188
+ if (changes.length > 0)
189
+ onChange(changes);
190
+ }
191
+ catch (err) {
192
+ onError(err);
193
+ }
194
+ };
195
+ const interval = setInterval(tick, 1000);
196
+ this.pollIntervals.add(interval);
197
+ return () => {
198
+ clearInterval(interval);
199
+ this.pollIntervals.delete(interval);
200
+ };
201
+ }
202
+ async dispose() {
203
+ for (const interval of this.pollIntervals) {
204
+ clearInterval(interval);
205
+ }
206
+ this.pollIntervals.clear();
207
+ this.sqlite.close();
208
+ }
209
+ }
210
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/adapters/drizzle/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { DrizzleFileSyncAdapter } from "./adapter.js";
2
+ export { files as fileSyncSchema } from "./schema.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/drizzle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DrizzleFileSyncAdapter } from "./adapter.js";
2
+ export { files as fileSyncSchema } from "./schema.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/drizzle/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,KAAK,IAAI,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * SQLite schema for the file sync adapter.
3
+ *
4
+ * Table schema:
5
+ * files(id TEXT PK, path TEXT, content TEXT, app TEXT, owner_id TEXT,
6
+ * last_updated INTEGER, created_at INTEGER)
7
+ *
8
+ * CREATE INDEX idx_files_app_owner ON files(app, owner_id);
9
+ */
10
+ export declare const files: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
11
+ name: "files";
12
+ schema: undefined;
13
+ columns: {
14
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
15
+ name: "id";
16
+ tableName: "files";
17
+ dataType: "string";
18
+ columnType: "SQLiteText";
19
+ data: string;
20
+ driverParam: string;
21
+ notNull: true;
22
+ hasDefault: false;
23
+ isPrimaryKey: true;
24
+ isAutoincrement: false;
25
+ hasRuntimeDefault: false;
26
+ enumValues: [string, ...string[]];
27
+ baseColumn: never;
28
+ identity: undefined;
29
+ generated: undefined;
30
+ }, {}, {
31
+ length: number;
32
+ }>;
33
+ path: import("drizzle-orm/sqlite-core").SQLiteColumn<{
34
+ name: "path";
35
+ tableName: "files";
36
+ dataType: "string";
37
+ columnType: "SQLiteText";
38
+ data: string;
39
+ driverParam: string;
40
+ notNull: true;
41
+ hasDefault: false;
42
+ isPrimaryKey: false;
43
+ isAutoincrement: false;
44
+ hasRuntimeDefault: false;
45
+ enumValues: [string, ...string[]];
46
+ baseColumn: never;
47
+ identity: undefined;
48
+ generated: undefined;
49
+ }, {}, {
50
+ length: number;
51
+ }>;
52
+ content: import("drizzle-orm/sqlite-core").SQLiteColumn<{
53
+ name: "content";
54
+ tableName: "files";
55
+ dataType: "string";
56
+ columnType: "SQLiteText";
57
+ data: string;
58
+ driverParam: string;
59
+ notNull: true;
60
+ hasDefault: false;
61
+ isPrimaryKey: false;
62
+ isAutoincrement: false;
63
+ hasRuntimeDefault: false;
64
+ enumValues: [string, ...string[]];
65
+ baseColumn: never;
66
+ identity: undefined;
67
+ generated: undefined;
68
+ }, {}, {
69
+ length: number;
70
+ }>;
71
+ app: import("drizzle-orm/sqlite-core").SQLiteColumn<{
72
+ name: "app";
73
+ tableName: "files";
74
+ dataType: "string";
75
+ columnType: "SQLiteText";
76
+ data: string;
77
+ driverParam: string;
78
+ notNull: true;
79
+ hasDefault: false;
80
+ isPrimaryKey: false;
81
+ isAutoincrement: false;
82
+ hasRuntimeDefault: false;
83
+ enumValues: [string, ...string[]];
84
+ baseColumn: never;
85
+ identity: undefined;
86
+ generated: undefined;
87
+ }, {}, {
88
+ length: number;
89
+ }>;
90
+ ownerId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
91
+ name: "owner_id";
92
+ tableName: "files";
93
+ dataType: "string";
94
+ columnType: "SQLiteText";
95
+ data: string;
96
+ driverParam: string;
97
+ notNull: true;
98
+ hasDefault: false;
99
+ isPrimaryKey: false;
100
+ isAutoincrement: false;
101
+ hasRuntimeDefault: false;
102
+ enumValues: [string, ...string[]];
103
+ baseColumn: never;
104
+ identity: undefined;
105
+ generated: undefined;
106
+ }, {}, {
107
+ length: number;
108
+ }>;
109
+ lastUpdated: import("drizzle-orm/sqlite-core").SQLiteColumn<{
110
+ name: "last_updated";
111
+ tableName: "files";
112
+ dataType: "number";
113
+ columnType: "SQLiteInteger";
114
+ data: number;
115
+ driverParam: number;
116
+ notNull: true;
117
+ hasDefault: false;
118
+ isPrimaryKey: false;
119
+ isAutoincrement: false;
120
+ hasRuntimeDefault: false;
121
+ enumValues: undefined;
122
+ baseColumn: never;
123
+ identity: undefined;
124
+ generated: undefined;
125
+ }, {}, {}>;
126
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
127
+ name: "created_at";
128
+ tableName: "files";
129
+ dataType: "number";
130
+ columnType: "SQLiteInteger";
131
+ data: number;
132
+ driverParam: number;
133
+ notNull: false;
134
+ hasDefault: false;
135
+ isPrimaryKey: false;
136
+ isAutoincrement: false;
137
+ hasRuntimeDefault: false;
138
+ enumValues: undefined;
139
+ baseColumn: never;
140
+ identity: undefined;
141
+ generated: undefined;
142
+ }, {}, {}>;
143
+ };
144
+ dialect: "sqlite";
145
+ }>;
146
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/adapters/drizzle/schema.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQhB,CAAC"}