@voltro/cli 0.33.0 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/CHANGELOG.md +1801 -0
  2. package/bin/nodeEnvironment.d.mts +30 -0
  3. package/bin/nodeEnvironment.mjs +158 -0
  4. package/bin/voltro.mjs +69 -5
  5. package/dist/addCommand-BNeoeSxe.js +124 -0
  6. package/dist/addCommand-aXSQveak.js +2 -0
  7. package/dist/agentsMd-BTchIZku.js +2 -0
  8. package/dist/agentsMd-mhQMF1bx.js +254 -0
  9. package/dist/apiBuild-BICVGnEC.js +2 -0
  10. package/dist/{apiBuild-h9VHtnlw.js → apiBuild-DZF_f0_I.js} +46 -46
  11. package/dist/appPort-B_HpJ_ck.js +48 -0
  12. package/dist/baselineCommand-C2ClWZN3.js +2 -0
  13. package/dist/baselineCommand-DIttzO8A.js +227 -0
  14. package/dist/bin.js +71 -28
  15. package/dist/build-CE7Ca9gm.js +711 -0
  16. package/dist/cacheCommand-DA4OH9xt.js +42 -0
  17. package/dist/capabilitiesCommand-nq_pz5xd.js +123 -0
  18. package/dist/checkCommand-Dv8r9tGO.js +231 -0
  19. package/dist/checkCommand-YZDmkAGd.js +2 -0
  20. package/dist/{cliArgs-qdZSElM3.js → cliArgs-D4p8n7EE.js} +12 -1
  21. package/dist/cliError-BmdYnghb.js +10 -0
  22. package/dist/cliOutput-D1tSBoRM.js +15 -0
  23. package/dist/{cliRuntime-Oh517vCV.js → cliRuntime-Dh7UDinH.js} +20 -20
  24. package/dist/cloudClient-DWL-Hw_T.js +67 -0
  25. package/dist/cloudCmd-Cvv5HGaZ.js +364 -0
  26. package/dist/clusterCmd-CNXKlcvD.js +54 -0
  27. package/dist/codegen-CYM3Zqrf.js +605 -0
  28. package/dist/codegen-ChBi_hVa.js +2 -0
  29. package/dist/codegenCommand-DC6w2tNZ.js +30 -0
  30. package/dist/codemodRunner-DRRqXR74.js +5243 -0
  31. package/dist/commandRunner-BLAEFLjp.js +47 -0
  32. package/dist/commands-gutsz-Ac.js +808 -0
  33. package/dist/connectionConfig-UFlIEiys.js +66 -0
  34. package/dist/dashboardCommand-3YG8p-UA.js +25 -0
  35. package/dist/dataCommand-qL0r7fPO.js +535 -0
  36. package/dist/dataProfile-dW-PsfLB.js +15 -0
  37. package/dist/{dbCommand-DTLKAfbA.js → dbCommand-B6X0FZbq.js} +551 -401
  38. package/dist/dbCommand-CpdKLeQq.js +2 -0
  39. package/dist/{dev-C_P8FLSx.js → dev-CerMd0mW.js} +3122 -3129
  40. package/dist/dev-CoG-ZPx8.js +3 -0
  41. package/dist/devActivity-Dx_3nnGv.js +100 -0
  42. package/dist/devActivity.js +1 -1
  43. package/dist/dialectDriver-CgXnDfec.js +39 -0
  44. package/dist/discover-C9XKJDco.js +25 -0
  45. package/dist/doctorCommand-BvqGBwNG.js +2 -0
  46. package/dist/{checkCommand-xGhRFFg2.js → doctorCommand-CnDXQxfa.js} +520 -1278
  47. package/dist/dormancyCommand-Dszo57d6.js +69 -0
  48. package/dist/e2eCmd-BRabZww-.js +147 -0
  49. package/dist/embeddingsCommand-C0sKVRo1.js +73 -0
  50. package/dist/envCommand-DPgdV1Bq.js +60 -0
  51. package/dist/evalCommand-6RUfPen4.js +118 -0
  52. package/dist/evolveCommand-DHpkgjgH.js +281 -0
  53. package/dist/fileTaxonomy-CJfgOllU.js +457 -0
  54. package/dist/frameworkTableAssembly-BGHmck-x.js +2 -0
  55. package/dist/{frameworkTableAssembly-BwIrO5nv.js → frameworkTableAssembly-DkkP6BgC.js} +184 -148
  56. package/dist/generateCommand-oibemh97.js +147 -0
  57. package/dist/index.d.ts +45 -0
  58. package/dist/index.js +4 -3
  59. package/dist/infoCommand-BJw9nLUR.js +60 -0
  60. package/dist/{inspect-BUUjt773.js → inspect-CBqFtAKA.js} +82 -40
  61. package/dist/inspect-C_T_WGvl.js +2 -0
  62. package/dist/inspectCmd-Bppy-GGw.js +224 -0
  63. package/dist/inspectFetch-Cm8_wVvp.js +151 -0
  64. package/dist/inspectMetrics-CfdKLh6t.js +72 -0
  65. package/dist/loadEnv-D9nEOClM.js +44 -0
  66. package/dist/logFileSink-C_D2wRN1.js +105 -0
  67. package/dist/logsCmd-CCca3KRZ.js +260 -0
  68. package/dist/manifestBuild-ChsKAhmn.js +2 -0
  69. package/dist/{manifestBuild-BLrVuSlM.js → manifestBuild-sxpwdKY1.js} +1 -1
  70. package/dist/metaCommands-7MJfZ5cf.js +196 -0
  71. package/dist/migrate-CBwOt_iV.js +83 -0
  72. package/dist/mssqlClusterPatch-_4cE_nun.js +44 -0
  73. package/dist/newCommand-COWOJ1_E.js +156 -0
  74. package/dist/nodeEnvironment-cGFAj1J8.js +28 -0
  75. package/dist/packageCommand-Cug_3Ogl.js +271 -0
  76. package/dist/pageConvention-cEiRxdab.js +5 -0
  77. package/dist/privacyCommand-C-Df56U_.js +146 -0
  78. package/dist/projectScaffold-DmzEKHib.js +2 -0
  79. package/dist/projectScaffold-LMMtaavR.js +814 -0
  80. package/dist/renderModeScan-D7J1B7Kw.js +105 -0
  81. package/dist/renderProfile-1OWWAAtx.js +81 -0
  82. package/dist/runtimeRegistry-DMeKfTHP.js +81 -0
  83. package/dist/runtimeTrace-CRxalXTs.js +91 -0
  84. package/dist/scheduleCmd--jksTrf6.js +69 -0
  85. package/dist/scheduleManifestCmd-D2x0CTTY.js +249 -0
  86. package/dist/schemaIr-UJybUUZW.js +103 -0
  87. package/dist/{sdkgen-C81QIkiL.js → sdkgen-CYJscZC7.js} +111 -209
  88. package/dist/seedRunner-TFHHiToI.js +329 -0
  89. package/dist/serveCommand-B_isw7q4.js +1647 -0
  90. package/dist/serveCommand-DOvbgRnQ.js +2 -0
  91. package/dist/serveEntry.js +5 -5
  92. package/dist/serverlessCommand-CfJZy6dS.js +482 -0
  93. package/dist/start-9LiUOfES.js +1087 -0
  94. package/dist/start-B-9Nsp-S.js +3 -0
  95. package/dist/startEntry.js +2 -2
  96. package/dist/staticCommand-Dr2M6tpU.js +304 -0
  97. package/dist/storageCommand-Co6NfLqN.js +42 -0
  98. package/dist/templates-De8IR5-c.js +102 -0
  99. package/dist/test-CI6iDsYc.js +115 -0
  100. package/dist/tracesCmd-CkEZQrtt.js +232 -0
  101. package/dist/tsconfigPaths-BWXBWgcl.js +107 -0
  102. package/dist/tsxLoader-EuXmSJ1K.js +51 -0
  103. package/dist/typecheckCommand-BlsWiCNq.js +61 -0
  104. package/dist/updateCommand-Bkptutss.js +585 -0
  105. package/dist/updateCommand-us1_hdIC.js +2 -0
  106. package/dist/{inspectMetrics-1xzTKAFx.js → webDev-CBYvPqQr.js} +975 -1559
  107. package/dist/webDev-Cg-fFiyd2.js +2 -0
  108. package/dist/webhookDiscovery-CrGAfhIG.js +2 -0
  109. package/dist/webhookDiscovery-D7VaeMlz.js +51 -0
  110. package/dist/webhooksCommand-CID96Rga.js +267 -0
  111. package/dist/workflowsCmd-D1VTmLMY.js +608 -0
  112. package/package.json +179 -17
  113. package/templates/AGENTS.core.md +58 -3
  114. package/templates/AGENTS.md +64 -7
  115. package/templates/agent-docs/_index.md +6 -4
  116. package/templates/agent-docs/_manifest.json +22 -5
  117. package/templates/agent-docs/ai.md +370 -0
  118. package/templates/agent-docs/authentication.md +265 -31
  119. package/templates/agent-docs/caching.md +6 -0
  120. package/templates/agent-docs/cli.md +794 -50
  121. package/templates/agent-docs/data.md +550 -11
  122. package/templates/agent-docs/database/migrations.md +174 -25
  123. package/templates/agent-docs/database/misc.md +156 -40
  124. package/templates/agent-docs/database/querying.md +19 -1
  125. package/templates/agent-docs/database/scaling.md +60 -0
  126. package/templates/agent-docs/database/schema.md +1 -0
  127. package/templates/agent-docs/database/seedsdialects.md +208 -19
  128. package/templates/agent-docs/database/transactions.md +68 -0
  129. package/templates/agent-docs/deployment.md +69 -3
  130. package/templates/agent-docs/introduction.md +87 -16
  131. package/templates/agent-docs/local-first-mobile.md +79 -4
  132. package/templates/agent-docs/multi-tenancy.md +95 -20
  133. package/templates/agent-docs/observability.md +58 -3
  134. package/templates/agent-docs/plugins/ai-flows.md +161 -2
  135. package/templates/agent-docs/plugins/analytics-postgres.md +1 -1
  136. package/templates/agent-docs/plugins/audit.md +37 -1
  137. package/templates/agent-docs/plugins/auth-social.md +143 -0
  138. package/templates/agent-docs/plugins/auth-workos.md +4 -2
  139. package/templates/agent-docs/plugins/auth.md +131 -6
  140. package/templates/agent-docs/plugins/billing.md +132 -15
  141. package/templates/agent-docs/plugins/cdc-out.md +46 -7
  142. package/templates/agent-docs/plugins/clickhouse.md +1 -1
  143. package/templates/agent-docs/plugins/duckdb.md +1 -1
  144. package/templates/agent-docs/plugins/flags.md +132 -0
  145. package/templates/agent-docs/plugins/governance.md +105 -7
  146. package/templates/agent-docs/plugins/multitenancy.md +9 -4
  147. package/templates/agent-docs/plugins/presence.md +13 -2
  148. package/templates/agent-docs/plugins/ratelimit.md +9 -0
  149. package/templates/agent-docs/plugins/search.md +157 -6
  150. package/templates/agent-docs/plugins/sso-saml.md +47 -8
  151. package/templates/agent-docs/plugins/webhooks.md +105 -0
  152. package/templates/agent-docs/plugins.md +150 -18
  153. package/templates/agent-docs/reference.md +60 -3
  154. package/templates/agent-docs/releases.md +1117 -0
  155. package/templates/agent-docs/routing.md +43 -25
  156. package/templates/agent-docs/scheduling.md +10 -0
  157. package/templates/agent-docs/schema-driven-ui.md +92 -12
  158. package/templates/agent-docs/security.md +426 -0
  159. package/templates/agent-docs/templates/apibackends.md +87 -18
  160. package/templates/agent-docs/templates/appshells.md +32 -14
  161. package/templates/agent-docs/templates/overview.md +13 -8
  162. package/templates/agent-docs/testing.md +211 -14
  163. package/templates/agent-docs/whats-new.md +1700 -104
  164. package/templates/agent-docs/workflows.md +130 -14
  165. package/templates/apps/api-ai/actions/summarize.action.ts +11 -0
  166. package/templates/apps/api-ai/package.json +8 -7
  167. package/templates/apps/api-auth/actions/me.action.ts +13 -0
  168. package/templates/apps/api-auth/package.json +9 -8
  169. package/templates/apps/api-backend/mutations/notes.create.mutation.ts +9 -0
  170. package/templates/apps/api-backend/package.json +12 -8
  171. package/templates/apps/api-backend/queries/notes.query.ts +30 -8
  172. package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +14 -0
  173. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +8 -0
  174. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +10 -0
  175. package/templates/apps/api-backend-deactivation/package.json +8 -7
  176. package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +17 -0
  177. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +9 -0
  178. package/templates/apps/api-backend-mail/package.json +9 -8
  179. package/templates/apps/api-backend-mail/queries/notes.query.ts +30 -8
  180. package/templates/apps/api-backend-mariadb/.env.example +14 -0
  181. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +9 -0
  182. package/templates/apps/api-backend-mariadb/package.json +10 -9
  183. package/templates/apps/api-backend-mariadb/queries/notes.query.ts +30 -8
  184. package/templates/apps/api-backend-sqlite/.env.example +14 -0
  185. package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +9 -0
  186. package/templates/apps/api-backend-sqlite/package.json +9 -8
  187. package/templates/apps/api-backend-sqlite/queries/notes.query.ts +30 -8
  188. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +13 -0
  189. package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +12 -0
  190. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +9 -0
  191. package/templates/apps/api-backend-storage/package.json +9 -8
  192. package/templates/apps/api-backend-storage/queries/notes.query.ts +30 -8
  193. package/templates/apps/api-cms/actions/content.get.action.ts +7 -0
  194. package/templates/apps/api-cms/actions/content.types.action.ts +6 -0
  195. package/templates/apps/api-cms/actions/me.action.ts +13 -0
  196. package/templates/apps/api-cms/app.config.ts +19 -0
  197. package/templates/apps/api-cms/authz.ts +63 -0
  198. package/templates/apps/api-cms/mutations/content.publish.mutation.ts +10 -0
  199. package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +10 -0
  200. package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +5 -0
  201. package/templates/apps/api-cms/package.json +11 -10
  202. package/templates/apps/api-cms/queries/content.list.query.ts +23 -7
  203. package/templates/apps/api-cms/tests/accessDecisions.test.ts +121 -0
  204. package/templates/apps/api-cms/tests/content.descriptors.test.ts +8 -4
  205. package/templates/apps/api-collab/mutations/documents.create.mutation.ts +8 -0
  206. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +13 -0
  207. package/templates/apps/api-collab/package.json +9 -8
  208. package/templates/apps/api-collab/queries/documents.query.ts +19 -7
  209. package/templates/apps/api-data-advanced/package.json +9 -8
  210. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +12 -0
  211. package/templates/apps/api-data-advanced/queries/books.search.query.ts +9 -0
  212. package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +17 -0
  213. package/templates/apps/api-durable/mutations/orders.place.mutation.ts +9 -0
  214. package/templates/apps/api-durable/package.json +9 -8
  215. package/templates/apps/api-feature-flags/actions/notes.export.action.ts +16 -0
  216. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +12 -0
  217. package/templates/apps/api-feature-flags/package.json +10 -9
  218. package/templates/apps/api-governance/README.md +30 -8
  219. package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -1
  220. package/templates/apps/api-governance/actions/profiles.get.action.ts +29 -4
  221. package/templates/apps/api-governance/database/schema.ts +16 -4
  222. package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +12 -0
  223. package/templates/apps/api-governance/package.json +9 -8
  224. package/templates/apps/api-kv/actions/sync.pull.action.ts +15 -0
  225. package/templates/apps/api-kv/actions/sync.reset.action.ts +13 -0
  226. package/templates/apps/api-kv/actions/sync.status.action.ts +7 -0
  227. package/templates/apps/api-kv/package.json +9 -8
  228. package/templates/apps/api-kv/queries/events.list.query.ts +19 -8
  229. package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +11 -0
  230. package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +13 -0
  231. package/templates/apps/api-moderation/package.json +9 -8
  232. package/templates/apps/api-observability/mutations/notes.create.mutation.ts +8 -0
  233. package/templates/apps/api-observability/package.json +9 -8
  234. package/templates/apps/api-observability/queries/notes.list.query.ts +13 -0
  235. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +14 -0
  236. package/templates/apps/api-ratelimit/package.json +9 -8
  237. package/templates/apps/api-rbac/package.json +9 -8
  238. package/templates/apps/api-rest/package.json +8 -7
  239. package/templates/apps/api-saas/mutations/projects.create.mutation.ts +13 -0
  240. package/templates/apps/api-saas/package.json +12 -11
  241. package/templates/apps/api-saas/queries/projects.list.query.ts +11 -0
  242. package/templates/apps/api-saas-starter/actions/me.action.ts +13 -0
  243. package/templates/apps/api-saas-starter/app.config.ts +19 -0
  244. package/templates/apps/api-saas-starter/authz.ts +75 -0
  245. package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +10 -0
  246. package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +9 -0
  247. package/templates/apps/api-saas-starter/package.json +15 -11
  248. package/templates/apps/api-saas-starter/queries/invites.list.query.ts +19 -8
  249. package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -7
  250. package/templates/apps/api-saas-starter/tests/accessDecisions.test.ts +135 -0
  251. package/templates/apps/api-search/mutations/articles.create.mutation.ts +14 -0
  252. package/templates/apps/api-search/package.json +9 -8
  253. package/templates/apps/api-search/queries/articles.list.query.ts +21 -8
  254. package/templates/apps/api-status/README.md +10 -3
  255. package/templates/apps/api-status/app.config.ts +8 -3
  256. package/templates/apps/api-status/authz.ts +5 -3
  257. package/templates/apps/api-status/package.json +9 -8
  258. package/templates/apps/api-status/queries/components.list.query.ts +14 -6
  259. package/templates/apps/api-status/queries/incidents.live.query.ts +23 -10
  260. package/templates/apps/api-status/queries/updates.list.query.ts +16 -9
  261. package/templates/apps/api-status/tests/status.test.ts +9 -1
  262. package/templates/apps/api-versioning/actions/documents.asOf.action.ts +12 -0
  263. package/templates/apps/api-versioning/actions/documents.history.action.ts +13 -0
  264. package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +9 -0
  265. package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +12 -0
  266. package/templates/apps/api-versioning/package.json +9 -8
  267. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +16 -0
  268. package/templates/apps/api-webhooks/package.json +10 -9
  269. package/templates/apps/api-webhooks/queries/orders.list.query.ts +10 -0
  270. package/templates/apps/changelog/package.json +8 -6
  271. package/templates/apps/edge-functions/package.json +2 -2
  272. package/templates/apps/frontend-admin/package.json +10 -8
  273. package/templates/apps/frontend-admin/src/lib/admin.ts +20 -9
  274. package/templates/apps/frontend-admin/src/locales/de.ts +11 -1
  275. package/templates/apps/frontend-admin/src/locales/en.ts +13 -1
  276. package/templates/apps/frontend-admin/src/pages/admin/[entity]/page.tsx +65 -22
  277. package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +130 -23
  278. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +3 -2
  279. package/templates/apps/frontend-admin/src/pages/admin/page.test.tsx +19 -2
  280. package/templates/apps/frontend-admin/src/pages/admin/page.tsx +9 -4
  281. package/templates/apps/frontend-app/app.config.ts +4 -3
  282. package/templates/apps/frontend-app/package.json +11 -8
  283. package/templates/apps/frontend-app/src/lib/api.ts +25 -0
  284. package/templates/apps/frontend-app/src/pages/page.test.tsx +130 -82
  285. package/templates/apps/frontend-app/src/pages/page.tsx +14 -18
  286. package/templates/apps/frontend-auth/package.json +10 -8
  287. package/templates/apps/frontend-blank/package.json +9 -7
  288. package/templates/apps/frontend-cms/package.json +11 -9
  289. package/templates/apps/frontend-collab/package.json +12 -9
  290. package/templates/apps/frontend-collab/src/pages/page.test.tsx +122 -78
  291. package/templates/apps/frontend-contact/package.json +9 -7
  292. package/templates/apps/frontend-dashboard/package.json +9 -7
  293. package/templates/apps/frontend-docs/package.json +9 -7
  294. package/templates/apps/frontend-i18n/package.json +8 -6
  295. package/templates/apps/frontend-landing/package.json +9 -7
  296. package/templates/apps/frontend-portal/package.json +10 -8
  297. package/templates/apps/frontend-saas/app.config.ts +10 -6
  298. package/templates/apps/frontend-saas/package.json +10 -8
  299. package/templates/apps/frontend-saas/src/lib/api.ts +27 -32
  300. package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +7 -8
  301. package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +27 -3
  302. package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +4 -4
  303. package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +3 -4
  304. package/templates/apps/frontend-spa/package.json +9 -7
  305. package/templates/apps/frontend-ssr/package.json +9 -7
  306. package/templates/apps/frontend-ssr-api/package.json +10 -8
  307. package/templates/apps/frontend-static-blog/package.json +8 -6
  308. package/templates/apps/frontend-status/package.json +10 -8
  309. package/templates/apps/mobile-app/README.md +1 -0
  310. package/templates/apps/mobile-app/package.json +4 -2
  311. package/templates/apps/mobile-app/src/app/index.tsx +22 -12
  312. package/templates/apps/mobile-app/src/app/orders/[id].tsx +1 -1
  313. package/templates/apps/mobile-app/src/lib/api.ts +34 -0
  314. package/templates/apps/mobile-app/voltro.mobile.ts +4 -2
  315. package/templates/baselines/bare/.env.example +14 -0
  316. package/templates/baselines/bare/baseline.json +4 -4
  317. package/templates/baselines/compose/.env.example +14 -0
  318. package/templates/baselines/compose/README.md +1 -1
  319. package/templates/baselines/compose/baseline.json +5 -5
  320. package/templates/baselines/compose-mariadb/.env.example +14 -0
  321. package/templates/baselines/compose-mariadb/README.md +1 -1
  322. package/templates/baselines/compose-mariadb/baseline.json +5 -5
  323. package/templates/baselines/helm/.env.example +14 -0
  324. package/templates/baselines/helm/baseline.json +4 -4
  325. package/dist/apiBuild-C-x9YacA.js +0 -2
  326. package/dist/checkCommand-DRovTKza.js +0 -2
  327. package/dist/commands-CJfepbm4.js +0 -11541
  328. package/dist/dbCommand-b1gum4td.js +0 -2
  329. package/dist/dev-iiMtlkfs.js +0 -3
  330. package/dist/devActivity-BhIu6ncs.js +0 -159
  331. package/dist/frameworkTableAssembly-D-EebUQX.js +0 -2
  332. package/dist/inspect-mmBuRXmy.js +0 -2
  333. package/dist/manifestBuild-Dj8Jjoto.js +0 -2
  334. package/dist/seedRunner-Bqxgp7HZ.js +0 -230
  335. package/dist/serveCommand-DdaM4Hup.js +0 -1608
  336. package/dist/start-C0koT0UO.js +0 -1084
  337. /package/templates/apps/api-ai/actions/{summarize.action.server.tsx → summarize.action.server.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/cli",
3
- "version": "0.33.0",
3
+ "version": "0.34.0",
4
4
  "description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
5
5
  "keywords": [
6
6
  "voltro",
@@ -376,6 +376,168 @@
376
376
  "title": "`CoordinatedScheduleHandle` gained `wake()`, `currentIntervalMs()` and `isArmed()` — update hand-written test doubles",
377
377
  "kind": "manual"
378
378
  },
379
+ {
380
+ "version": "0.34.0",
381
+ "id": "0.34.0/01_serve-does-mount-inspect",
382
+ "title": "Correction: `voltro serve` DOES mount an inspect surface (the 0.12.0 note said it mounts none)",
383
+ "kind": "manual"
384
+ },
385
+ {
386
+ "version": "0.34.0",
387
+ "id": "0.34.0/02_keyed-writes-are-tenant-scoped",
388
+ "title": "Keyed-by-pk writes are tenant-enforced, and `crud` refuses `.serverOnly()` input",
389
+ "kind": "manual"
390
+ },
391
+ {
392
+ "version": "0.34.0",
393
+ "id": "0.34.0/03_procedure-access-decision",
394
+ "title": "Every wire-exposed procedure declares an access decision (`guards:` or `openAccess:`)",
395
+ "kind": "manual"
396
+ },
397
+ {
398
+ "version": "0.34.0",
399
+ "id": "0.34.0/04_workos-oauth-state-pkce",
400
+ "title": "WorkOS hosted login: `workosAuthorizationUrl` → `workosBeginLogin`, with mandatory `state` + PKCE",
401
+ "kind": "manual"
402
+ },
403
+ {
404
+ "version": "0.34.0",
405
+ "id": "0.34.0/05_analytics-mirror-versioned-writes",
406
+ "title": "Analytics CDC-mirror: version-ordered writes, tombstoned deletes, retry + repair",
407
+ "kind": "manual"
408
+ },
409
+ {
410
+ "version": "0.34.0",
411
+ "id": "0.34.0/06_origin-guard-and-trusted-proxies",
412
+ "title": "Cross-site protection, trusted proxies and security headers are ON by default on the api listener",
413
+ "kind": "manual"
414
+ },
415
+ {
416
+ "version": "0.34.0",
417
+ "id": "0.34.0/07_incoming-webhook-declares-verification",
418
+ "title": "An incoming webhook with no signature scheme now refuses to boot",
419
+ "kind": "manual"
420
+ },
421
+ {
422
+ "version": "0.34.0",
423
+ "id": "0.34.0/08_init-initialises-the-workspace",
424
+ "title": "`voltro init` initialises the workspace root; scaffolding is `create-project` only",
425
+ "kind": "manual"
426
+ },
427
+ {
428
+ "version": "0.34.0",
429
+ "id": "0.34.0/09_workflow-messages-queries-removed",
430
+ "title": "`workflow({ messages: { queries } })` is removed — it never had a send path",
431
+ "kind": "manual"
432
+ },
433
+ {
434
+ "version": "0.34.0",
435
+ "id": "0.34.0/10_testing-mail-is-a-service",
436
+ "title": "`ctx.email` / `MockEmail` removed — assert mail through the mail plugin",
437
+ "kind": "manual"
438
+ },
439
+ {
440
+ "version": "0.34.0",
441
+ "id": "0.34.0/11_ai-flows-per-step-human-signal",
442
+ "title": "`HUMAN_RESPONSE_SIGNAL` removed — a human step's signal name is now per-step",
443
+ "kind": "manual"
444
+ },
445
+ {
446
+ "version": "0.34.0",
447
+ "id": "0.34.0/12_session-cookie-carries-identity",
448
+ "title": "The session cookie carries identity only — authority resolves per request",
449
+ "kind": "manual"
450
+ },
451
+ {
452
+ "version": "0.34.0",
453
+ "id": "0.34.0/13_billing-provider-dunning",
454
+ "title": "Billing dunning — `BillingProvider.fetchSubscription` is required, and `plan()` now honours a grace period",
455
+ "kind": "manual"
456
+ },
457
+ {
458
+ "version": "0.34.0",
459
+ "id": "0.34.0/14_search-memory-backend-refuses-production",
460
+ "title": "`plugin-search` on the in-memory backend now refuses to boot in production",
461
+ "kind": "manual"
462
+ },
463
+ {
464
+ "version": "0.34.0",
465
+ "id": "0.34.0/15_mysql-mssql-tls-honoured",
466
+ "title": "mysql/mariadb and mssql connections honour ?ssl= / ?sslmode= — or refuse to boot",
467
+ "kind": "manual"
468
+ },
469
+ {
470
+ "version": "0.34.0",
471
+ "id": "0.34.0/16_declare-node-env-for-migration-commands",
472
+ "title": "`voltro db apply` / `voltro migrate` now treat an unset NODE_ENV as production",
473
+ "kind": "manual"
474
+ },
475
+ {
476
+ "version": "0.34.0",
477
+ "id": "0.34.0/17_isr-postgres-refuses-without-a-database",
478
+ "title": "The postgres ISR cache + CDC invalidator read DB_URL, and no longer fall back silently",
479
+ "kind": "manual"
480
+ },
481
+ {
482
+ "version": "0.34.0",
483
+ "id": "0.34.0/18_serve-refuses-pending-file-migrations",
484
+ "title": "`voltro serve` refuses to boot with pending file-based migrations",
485
+ "kind": "manual"
486
+ },
487
+ {
488
+ "version": "0.34.0",
489
+ "id": "0.34.0/19_connection-override-carries-a-credential",
490
+ "title": "Soft re-auth presents a credential — it no longer hands the server a Subject",
491
+ "kind": "manual"
492
+ },
493
+ {
494
+ "version": "0.34.0",
495
+ "id": "0.34.0/20_user-store-auth-feature-methods",
496
+ "title": "UserStore gained the email-verification, invitation and impersonation methods",
497
+ "kind": "manual"
498
+ },
499
+ {
500
+ "version": "0.34.0",
501
+ "id": "0.34.0/20_workflow-authority-resolves-at-resume",
502
+ "title": "A resumed workflow re-resolves its caller's authority instead of restoring it",
503
+ "kind": "manual"
504
+ },
505
+ {
506
+ "version": "0.34.0",
507
+ "id": "0.34.0/21_admin-gates-on-declared-access",
508
+ "title": "The derived admin gates on the api's DECLARED access — the invented `<table>:create` scopes are gone",
509
+ "kind": "manual"
510
+ },
511
+ {
512
+ "version": "0.34.0",
513
+ "id": "0.34.0/22_write-rejections-carry-the-typed-error",
514
+ "title": "A rejected mutate/run/signal/upload carries the typed error, not a FiberFailure",
515
+ "kind": "manual"
516
+ },
517
+ {
518
+ "version": "0.34.0",
519
+ "id": "0.34.0/23_saml-signature-and-replay-defaults",
520
+ "title": "SAML: response-signature requirement relaxed + surfaced; replay protection ON by default",
521
+ "kind": "manual"
522
+ },
523
+ {
524
+ "version": "0.34.0",
525
+ "id": "0.34.0/24_webhook-signing-renders-headers",
526
+ "title": "Webhook signing: `signPayload`/`verifySignature` → `signRequest`/`verifyRequest`",
527
+ "kind": "manual"
528
+ },
529
+ {
530
+ "version": "0.34.0",
531
+ "id": "0.34.0/25_presence-has-no-table",
532
+ "title": "Presence: `_voltro_presence` is gone, and so is `lastSeen` on the roster",
533
+ "kind": "manual"
534
+ },
535
+ {
536
+ "version": "0.34.0",
537
+ "id": "0.34.0/26_route-http-is-async",
538
+ "title": "`routeHttp` returns a Promise",
539
+ "kind": "manual"
540
+ },
379
541
  {
380
542
  "version": "0.4.0",
381
543
  "id": "0.4.0/01_rbac-forbidden-to-scopeerror",
@@ -475,22 +637,22 @@
475
637
  "@effect/platform-node": "^0.108.0",
476
638
  "@effect/sql": "^0.52.0",
477
639
  "@effect/workflow": "^0.19.0",
478
- "@voltro/ai": "0.33.0",
479
- "@voltro/cache": "0.33.0",
480
- "@voltro/data-transfer": "0.33.0",
481
- "@voltro/database": "0.33.0",
482
- "@voltro/env": "0.33.0",
483
- "@voltro/kv": "0.33.0",
484
- "@voltro/logger": "0.33.0",
485
- "@voltro/plugin-auth": "0.33.0",
486
- "@voltro/plugin-broadcast": "0.33.0",
487
- "@voltro/plugin-mail": "0.33.0",
488
- "@voltro/plugin-storage": "0.33.0",
489
- "@voltro/plugin-webhooks": "0.33.0",
490
- "@voltro/protocol": "0.33.0",
491
- "@voltro/runtime": "0.33.0",
492
- "@voltro/serverless": "0.33.0",
493
- "@voltro/workflow": "0.33.0",
640
+ "@voltro/ai": "0.34.0",
641
+ "@voltro/cache": "0.34.0",
642
+ "@voltro/data-transfer": "0.34.0",
643
+ "@voltro/database": "0.34.0",
644
+ "@voltro/env": "0.34.0",
645
+ "@voltro/kv": "0.34.0",
646
+ "@voltro/logger": "0.34.0",
647
+ "@voltro/plugin-auth": "0.34.0",
648
+ "@voltro/plugin-broadcast": "0.34.0",
649
+ "@voltro/plugin-mail": "0.34.0",
650
+ "@voltro/plugin-storage": "0.34.0",
651
+ "@voltro/plugin-webhooks": "0.34.0",
652
+ "@voltro/protocol": "0.34.0",
653
+ "@voltro/runtime": "0.34.0",
654
+ "@voltro/serverless": "0.34.0",
655
+ "@voltro/workflow": "0.34.0",
494
656
  "chokidar": "^5.0.0",
495
657
  "ioredis": "^5.11.1",
496
658
  "tinyglobby": "^0.2.17",
@@ -148,7 +148,10 @@ line below replaces something real apps write by hand hundreds of times.
148
148
  parameterises it, so one aggregate serves per-team / per-period slices.
149
149
  5. **A permission check?** → declare **`guards:`** on the descriptor — it is
150
150
  enforced before the executor (and before a mutation's transaction opens) and
151
- fails with a typed `ScopeError`. Two kinds, same array, all must pass:
151
+ fails with a typed `ScopeError`. **This is not optional: a wire-exposed
152
+ procedure that declares neither `guards:` nor `openAccess:` is REFUSED AT
153
+ BOOT** (`security.defaultDeny`, on by default). Two kinds, same array, all
154
+ must pass:
152
155
  - `{ scope: 'notes:write' }` — may the caller do this AT ALL.
153
156
  - `{ action, resourceType, resource: (input) => input.id }` — may they do it
154
157
  to THIS ROW (relationship/ReBAC, against a `defineResourcePolicy`). Needs a
@@ -159,6 +162,13 @@ line below replaces something real apps write by hand hundreds of times.
159
162
  in-handler for checks that need LOADED data. A hand-written `requireScope(...)`
160
163
  at the top of every executor — or a hand-kept map from rpc tag to policy rule,
161
164
  which is fail-open by omission — is what `guards:` exists to delete.
165
+ **If the procedure really is open to everyone, say so — do not invent a
166
+ guard.** `openAccess: '<why anyone may call this>'` is the other accepted
167
+ answer, and the reason is required. Reaching for a scope every caller already
168
+ holds satisfies the gate, reads as protection, and enforces nothing. A
169
+ procedure only SERVER code calls wants neither: `internal: true` takes it off
170
+ the wire entirely (and then `openAccess` is refused — there is no wire to
171
+ decide about). `voltro doctor` lists every undecided procedure with its file.
162
172
  6. **Which ROWS may the caller see** (not: may they make the call)? →
163
173
  **`setRowFilter`** — a predicate derived from the Subject, AND-merged into
164
174
  EVERY read of that table, including every subscription delivery. `guards:`
@@ -210,6 +220,7 @@ line below replaces something real apps write by hand hundreds of times.
210
220
  | `WHERE ownerId = me` in every list handler | `setRowFilter` (covers the SUBSCRIPTION too) |
211
221
  | a counter recomputed by scanning rows on every read | `defineAggregate` (+ `incremental:`) |
212
222
  | `requireScope(...)` as the first line of every executor | `guards:` on the descriptor |
223
+ | a scope every caller holds, added to make a boot gate pass | `openAccess: '<why it is open>'` — the honest spelling |
213
224
  | a token/secret column written as plain text | `.encrypted()` |
214
225
  | `Effect.promise(() => ctx.store.query(...))` in an Effect handler | `yield* EffectStore` |
215
226
  | hand-rolled limit+1 / `hasMore` cursor paging | `paginateBy` / `paginateById` |
@@ -223,10 +234,49 @@ Deep dive: **`data.md`** (`.one()`, subscribers, reactions, aggregates),
223
234
  (`guards:`, resource policies), **`plugins/governance.md`** (`.encrypted()`),
224
235
  **`data.md`** (`defineConnection`, the credentials vault).
225
236
 
237
+ ### Bind the api ONCE — typed hooks, not string tags
238
+
239
+ Before any of the rubric below: app code calls the api through a **typed
240
+ binding**, not through `@voltro/client`'s tag-taking hooks.
241
+
242
+ ```ts
243
+ // src/lib/api.ts — one file, once per api
244
+ import { createHooks } from '@voltro/client'
245
+ import type { AppProcedures } from '@acme/api/rpcGroup' // generated by codegen
246
+
247
+ export const { useSubscription, useMutation, useAction } = createHooks<AppProcedures>('app')
248
+ ```
249
+
250
+ `'app'` is the key the web app's `app.config.ts` gave the api in `apis:` — spelled
251
+ once here, never at a call site again. Then:
252
+
253
+ ```tsx
254
+ import { useSubscription, useMutation } from '../lib/api'
255
+
256
+ const { data } = useSubscription('notes.list') // rows inferred — NO `<T>`
257
+ const create = useMutation('notes.create') // input + output inferred
258
+ ```
259
+
260
+ Do NOT write `useSubscription<ReadonlyArray<Note>>('app', 'notes.list')`. That
261
+ form spells the api name at every call site, leaves the tag an unchecked string
262
+ (a typo is a runtime error), and the `<T>` is an ASSERTION nothing compares
263
+ against the server — a hand-kept mirror of a type the generator already knows.
264
+ With the binding, a wrong tag, the wrong hook for the tag's kind, a missing
265
+ required input, and a wrongly-shaped input are all compile errors, and the row
266
+ type — including the client's `optimistic` marker — needs no annotation.
267
+
268
+ Destructure the result; do not `export const api = createHooks(...)` and call
269
+ `api.useSubscription(...)`. React's rules-of-hooks lint only sees a member call
270
+ as a hook when the object is PascalCase, so the namespace form silently turns
271
+ the hook lint off everywhere.
272
+
273
+ The tag-taking hooks stay for code that only learns the tag at RUNTIME — plugin
274
+ web bindings, libraries shipped against an unknown app. That is not app code.
275
+
226
276
  ### Pick the CLIENT primitive (decision rubric)
227
277
 
228
- `useSubscription` / `useMutation` / `useAction` are the transport — they are NOT
229
- the whole client surface. The framework ships a **headless primitive for every
278
+ `useSubscription` / `useMutation` / `useAction` (from your `src/lib/api.ts`
279
+ binding above) are the transport — they are NOT the whole client surface. The framework ships a **headless primitive for every
230
280
  common UI job**, each derived from the descriptor Schema you already wrote. Reach
231
281
  for one BEFORE hand-rolling; ask in order:
232
282
 
@@ -597,6 +647,11 @@ primitive → just save; the supervised dev loop respawns and regenerates.
597
647
  But DO call `assertOwnTenant(input.tenantId, ctx.request.subject)` (from
598
648
  `@voltro/plugin-multitenancy/guard`) in custom mutations that write raw rows,
599
649
  and declare `error: TenantMismatch` — subscriptions are auto-scoped, writes are not.
650
+ - **Every wire-exposed procedure declares an access decision, or it does not
651
+ boot.** `guards: [...]` (a check runs), `openAccess: '<why>'` (no check, on
652
+ purpose, with the reason in the source), or `internal: true` (off the wire).
653
+ `security: { defaultDeny: false }` in `app.config.ts` is the whole-app opt-out;
654
+ there is no env var for it.
600
655
  - **Gate authorization declaratively with `guards:`.** Add
601
656
  `guards: [{ scope: 'notes:write' }]` to `defineMutation`/`defineQuery`/`defineAction`
602
657
  — the framework enforces it BEFORE the executor (before the txn opens), fails
@@ -148,7 +148,10 @@ line below replaces something real apps write by hand hundreds of times.
148
148
  parameterises it, so one aggregate serves per-team / per-period slices.
149
149
  5. **A permission check?** → declare **`guards:`** on the descriptor — it is
150
150
  enforced before the executor (and before a mutation's transaction opens) and
151
- fails with a typed `ScopeError`. Two kinds, same array, all must pass:
151
+ fails with a typed `ScopeError`. **This is not optional: a wire-exposed
152
+ procedure that declares neither `guards:` nor `openAccess:` is REFUSED AT
153
+ BOOT** (`security.defaultDeny`, on by default). Two kinds, same array, all
154
+ must pass:
152
155
  - `{ scope: 'notes:write' }` — may the caller do this AT ALL.
153
156
  - `{ action, resourceType, resource: (input) => input.id }` — may they do it
154
157
  to THIS ROW (relationship/ReBAC, against a `defineResourcePolicy`). Needs a
@@ -159,6 +162,13 @@ line below replaces something real apps write by hand hundreds of times.
159
162
  in-handler for checks that need LOADED data. A hand-written `requireScope(...)`
160
163
  at the top of every executor — or a hand-kept map from rpc tag to policy rule,
161
164
  which is fail-open by omission — is what `guards:` exists to delete.
165
+ **If the procedure really is open to everyone, say so — do not invent a
166
+ guard.** `openAccess: '<why anyone may call this>'` is the other accepted
167
+ answer, and the reason is required. Reaching for a scope every caller already
168
+ holds satisfies the gate, reads as protection, and enforces nothing. A
169
+ procedure only SERVER code calls wants neither: `internal: true` takes it off
170
+ the wire entirely (and then `openAccess` is refused — there is no wire to
171
+ decide about). `voltro doctor` lists every undecided procedure with its file.
162
172
  6. **Which ROWS may the caller see** (not: may they make the call)? →
163
173
  **`setRowFilter`** — a predicate derived from the Subject, AND-merged into
164
174
  EVERY read of that table, including every subscription delivery. `guards:`
@@ -210,6 +220,7 @@ line below replaces something real apps write by hand hundreds of times.
210
220
  | `WHERE ownerId = me` in every list handler | `setRowFilter` (covers the SUBSCRIPTION too) |
211
221
  | a counter recomputed by scanning rows on every read | `defineAggregate` (+ `incremental:`) |
212
222
  | `requireScope(...)` as the first line of every executor | `guards:` on the descriptor |
223
+ | a scope every caller holds, added to make a boot gate pass | `openAccess: '<why it is open>'` — the honest spelling |
213
224
  | a token/secret column written as plain text | `.encrypted()` |
214
225
  | `Effect.promise(() => ctx.store.query(...))` in an Effect handler | `yield* EffectStore` |
215
226
  | hand-rolled limit+1 / `hasMore` cursor paging | `paginateBy` / `paginateById` |
@@ -223,10 +234,49 @@ Deep dive: **`data.md`** (`.one()`, subscribers, reactions, aggregates),
223
234
  (`guards:`, resource policies), **`plugins/governance.md`** (`.encrypted()`),
224
235
  **`data.md`** (`defineConnection`, the credentials vault).
225
236
 
237
+ ### Bind the api ONCE — typed hooks, not string tags
238
+
239
+ Before any of the rubric below: app code calls the api through a **typed
240
+ binding**, not through `@voltro/client`'s tag-taking hooks.
241
+
242
+ ```ts
243
+ // src/lib/api.ts — one file, once per api
244
+ import { createHooks } from '@voltro/client'
245
+ import type { AppProcedures } from '@acme/api/rpcGroup' // generated by codegen
246
+
247
+ export const { useSubscription, useMutation, useAction } = createHooks<AppProcedures>('app')
248
+ ```
249
+
250
+ `'app'` is the key the web app's `app.config.ts` gave the api in `apis:` — spelled
251
+ once here, never at a call site again. Then:
252
+
253
+ ```tsx
254
+ import { useSubscription, useMutation } from '../lib/api'
255
+
256
+ const { data } = useSubscription('notes.list') // rows inferred — NO `<T>`
257
+ const create = useMutation('notes.create') // input + output inferred
258
+ ```
259
+
260
+ Do NOT write `useSubscription<ReadonlyArray<Note>>('app', 'notes.list')`. That
261
+ form spells the api name at every call site, leaves the tag an unchecked string
262
+ (a typo is a runtime error), and the `<T>` is an ASSERTION nothing compares
263
+ against the server — a hand-kept mirror of a type the generator already knows.
264
+ With the binding, a wrong tag, the wrong hook for the tag's kind, a missing
265
+ required input, and a wrongly-shaped input are all compile errors, and the row
266
+ type — including the client's `optimistic` marker — needs no annotation.
267
+
268
+ Destructure the result; do not `export const api = createHooks(...)` and call
269
+ `api.useSubscription(...)`. React's rules-of-hooks lint only sees a member call
270
+ as a hook when the object is PascalCase, so the namespace form silently turns
271
+ the hook lint off everywhere.
272
+
273
+ The tag-taking hooks stay for code that only learns the tag at RUNTIME — plugin
274
+ web bindings, libraries shipped against an unknown app. That is not app code.
275
+
226
276
  ### Pick the CLIENT primitive (decision rubric)
227
277
 
228
- `useSubscription` / `useMutation` / `useAction` are the transport — they are NOT
229
- the whole client surface. The framework ships a **headless primitive for every
278
+ `useSubscription` / `useMutation` / `useAction` (from your `src/lib/api.ts`
279
+ binding above) are the transport — they are NOT the whole client surface. The framework ships a **headless primitive for every
230
280
  common UI job**, each derived from the descriptor Schema you already wrote. Reach
231
281
  for one BEFORE hand-rolling; ask in order:
232
282
 
@@ -597,6 +647,11 @@ primitive → just save; the supervised dev loop respawns and regenerates.
597
647
  But DO call `assertOwnTenant(input.tenantId, ctx.request.subject)` (from
598
648
  `@voltro/plugin-multitenancy/guard`) in custom mutations that write raw rows,
599
649
  and declare `error: TenantMismatch` — subscriptions are auto-scoped, writes are not.
650
+ - **Every wire-exposed procedure declares an access decision, or it does not
651
+ boot.** `guards: [...]` (a check runs), `openAccess: '<why>'` (no check, on
652
+ purpose, with the reason in the source), or `internal: true` (off the wire).
653
+ `security: { defaultDeny: false }` in `app.config.ts` is the whole-app opt-out;
654
+ there is no env var for it.
600
655
  - **Gate authorization declaratively with `guards:`.** Add
601
656
  `guards: [{ scope: 'notes:write' }]` to `defineMutation`/`defineQuery`/`defineAction`
602
657
  — the framework enforces it BEFORE the executor (before the txn opens), fails
@@ -652,7 +707,7 @@ each plugin's own README.
652
707
 
653
708
  | Topic | Open | Summary |
654
709
  |---|---|---|
655
- | **What's new in 0.33.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
710
+ | **What's new in 0.34.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
656
711
  | AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
657
712
  | Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
658
713
  | Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
@@ -663,7 +718,7 @@ each plugin's own README.
663
718
  | database.columnTypes | `node_modules/@voltro/cli/templates/agent-docs/database/columntypes.md` | Postgres-native ENUM types via dbEnum() — cheap ADD VALUE migrations, full type-narrowing. Falls back to CHECK constraints on other dialects. |
664
719
  | database.hosting | `node_modules/@voltro/cli/templates/agent-docs/database/hosting.md` | Run Voltro on any hosted Postgres, MySQL, MariaDB, or SQL Server — Supabase, Neon, Vercel Postgres, Railway, Render, Fly.io, AWS RDS, PlanetScale, Azure SQL, and more. Connection strings, pooling, gotchas. |
665
720
  | database.migrations | `node_modules/@voltro/cli/templates/agent-docs/database/migrations.md` | Voltro's planner-based migration system — diff your declared schema against the live DB, classify each change, refuse-to-apply anything risky without explicit intent. Dev auto-applies, prod refuses. |
666
- | Database | `node_modules/@voltro/cli/templates/agent-docs/database/misc.md` | Spin up an isolated branch of a tenant's dataa namespace snapshot/restore by default (dialect-agnostic, no vendor lock) or a Neon copy-on-write fast-path on Postgres then bind to it and tear it down. The basis for per-PR preview environments. |
721
+ | Database | `node_modules/@voltro/cli/templates/agent-docs/database/misc.md` | Branch the live schema and REHEARSE your migration on it apply the plan to a throwaway copy, flag every lossy operation, prove it converges, drop the branch. Plus the branch primitive itself (namespace snapshot on Postgres, Neon copy-on-write fast-path). |
667
722
  | Database | `node_modules/@voltro/cli/templates/agent-docs/database/overview.md` | How Voltro talks to Postgres — the schema DSL, the query builder, mixins, migrations, and the reactive engine's relationship to all of it. |
668
723
  | database.querying | `node_modules/@voltro/cli/templates/agent-docs/database/querying.md` | Three cardinalities, one DSL. Declaration via relations(), eager loading via .with(), reactive invalidation via the two-stage dependency-graph + per-field pre-filter. |
669
724
  | database.scaling | `node_modules/@voltro/cli/templates/agent-docs/database/scaling.md` | Transparent read-replica routing with read-your-writes (RYW) consistency, multi-instance RYW via Redis, region-aware replica selection, and the per-dialect adapter surface. |
@@ -678,6 +733,7 @@ each plugin's own README.
678
733
  | Observability | `node_modules/@voltro/cli/templates/agent-docs/observability.md` | OpenTelemetry tracing in Voltro — the auto-emitted spans for every primitive, span attributes and nesting, the three enabling modes (console / OTLP / buffer), and adding your own spans with Effect.withSpan. |
679
734
  | Plugins | `node_modules/@voltro/cli/templates/agent-docs/plugins.md` | How Voltro plugins compose into the runtime, what they can intercept, the catalogue, and writing your own. |
680
735
  | Reference | `node_modules/@voltro/cli/templates/agent-docs/reference.md` | The client-side hook surface, grouped by purpose. |
736
+ | Releases | `node_modules/@voltro/cli/templates/agent-docs/releases.md` | The largest release in the framework's history — what breaks your boot, what changes at runtime, and why none of it is rewritten for you. |
681
737
  | Routing | `node_modules/@voltro/cli/templates/agent-docs/routing.md` | Voltro's file-based router — pages, layouts, render modes, loaders, navigation, islands. The web side of the framework. |
682
738
  | Scheduling | `node_modules/@voltro/cli/templates/agent-docs/scheduling.md` | Deployment-agnostic scheduled jobs in Voltro — one *.cron.tsx definition that runs unchanged on a single box, a multi-instance fleet, or an external scheduler. |
683
739
  | Schema-driven UI | `node_modules/@voltro/cli/templates/agent-docs/schema-driven-ui.md` | Project the typed descriptor graph into UI — forms, tables, pickers, and reactive components, all bound to a descriptor with near-zero glue. |
@@ -686,7 +742,7 @@ each plugin's own README.
686
742
  | templates.appShells | `node_modules/@voltro/cli/templates/agent-docs/templates/appshells.md` | A marketing landing page — hero, features, CTA. Static-rendered with zero JS on the wire by default. |
687
743
  | templates.custom | `node_modules/@voltro/cli/templates/agent-docs/templates/custom.md` | Add a template the CLI can scaffold from — a directory under voltro-templates/apps/ with a manifest and the files to copy. |
688
744
  | templates.mobile | `node_modules/@voltro/cli/templates/agent-docs/templates/mobile.md` | An Expo (React Native) app that is the third consumer of your api — the same typed hooks (useSubscription / useMutation), offline-first by default, typed deep links, and device registration for push. Expo owns Metro; voltro dev runs the sibling api. |
689
- | Templates | `node_modules/@voltro/cli/templates/agent-docs/templates/overview.md` | Thirty-eight dogfooded starter templates ship with the framework — twenty-two backend shapes, fourteen frontend shapes, a serverless function library, and an Expo mobile app. Scaffold any of them with one CLI call. |
745
+ | Templates | `node_modules/@voltro/cli/templates/agent-docs/templates/overview.md` | Dozens of dogfooded starter templates ship with the framework — backend shapes, frontend shapes, a serverless function library, and an Expo mobile app. voltro list-templates is the authority; scaffold any of them with one CLI call. |
690
746
  | templates.serverless | `node_modules/@voltro/cli/templates/agent-docs/templates/serverless.md` | A library of standalone *.serverless.ts functions — pure compute, request-header/geo, outbound HTTP, Web Crypto HMAC, an LLM call, status-controlled errors. Run with voltro serverless; ship to node / Cloudflare / Scaleway. No server, no port. |
691
747
  | Testing | `node_modules/@voltro/cli/templates/agent-docs/testing.md` | Voltro's test story — the @voltro/testing package, the test pyramid (unit handlers/tools → workflow runner → e2e), and the voltro test / voltro e2e CLI commands. |
692
748
  | Workflows | `node_modules/@voltro/cli/templates/agent-docs/workflows.md` | Durable Effect workflows in Voltro — what they are, when to use them, and the current runtime boundaries. |
@@ -704,6 +760,7 @@ each plugin's own README.
704
760
  | auth-clerk | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-clerk.md` (or `node_modules/@voltro/plugin-auth-clerk/README.md`) | Clerk AuthStrategy — verifies Clerk-issued __session JWTs via the Frontend API JWKS (no secret key) and maps org_id → tenantId. |
705
761
  | auth-kinde | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-kinde.md` (or `node_modules/@voltro/plugin-auth-kinde/README.md`) | Kinde AuthStrategy — verifies Kinde-issued JWTs via JWKS at the configured issuer (no client secret) and maps org_code → tenantId. |
706
762
  | auth-oidc | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-oidc.md` (or `node_modules/@voltro/plugin-auth-oidc/README.md`) | Generic OIDC AuthStrategy — verifies any OpenID-Connect IdP's JWTs via JWKS (Okta, Keycloak, Cognito, Azure AD, Google Workspace). Discovery or explicit JWKS URL; maps a claim → tenantId. |
763
+ | auth-social | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-social.md` (or `node_modules/@voltro/plugin-auth-social/README.md`) | First-party Sign in with Google / GitHub / Apple — mandatory PKCE + state, JWKS-verified ID tokens, a deliberate account-linking policy, no identity vendor. |
707
764
  | auth-supabase | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-supabase.md` (or `node_modules/@voltro/plugin-auth-supabase/README.md`) | Supabase Auth (GoTrue) AuthStrategy — verifies Supabase-issued JWTs via the project's JWKS and maps app_metadata.tenant_id → tenantId. |
708
765
  | auth-workos | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-workos.md` (or `node_modules/@voltro/plugin-auth-workos/README.md`) | WorkOS AuthStrategy — verifies WorkOS AuthKit / SSO JWTs via JWKS (no API key) and maps org_id → tenantId. |
709
766
  | billing | `node_modules/@voltro/cli/templates/agent-docs/plugins/billing.md` (or `node_modules/@voltro/plugin-billing/README.md`) | Subscriptions, plans, entitlements, and usage metering over a pluggable provider (Stripe + mock). Money is integer minor units. |
@@ -719,7 +776,7 @@ each plugin's own README.
719
776
  | logship | `node_modules/@voltro/cli/templates/agent-docs/plugins/logship.md` (or `node_modules/@voltro/plugin-logship/README.md`) | Ship structured logs to Better Stack / Axiom / Loki / any HTTP sink — batched, redacted, fail-soft. Rides the framework log-sink hook. |
720
777
  | mail | `node_modules/@voltro/cli/templates/agent-docs/plugins/mail.md` (or `node_modules/@voltro/plugin-mail/README.md`) | Transactional email — Resend / Postmark / SendGrid / SMTP, React-Email templates with auto-discovery, per-tenant suppression, bounce/complaint handling, durable delivery via workflows. |
721
778
  | moderation | `node_modules/@voltro/cli/templates/agent-docs/plugins/moderation.md` (or `node_modules/@voltro/plugin-moderation/README.md`) | Moderate user content before it commits — keyword denylist or AI provider, block or flag via rpc interceptor, plus an in-handler redact helper. |
722
- | multitenancy | `node_modules/@voltro/cli/templates/agent-docs/plugins/multitenancy.md` (or `node_modules/@voltro/plugin-multitenancy/README.md`) | The tenant() schema mixin (auto-scope reads + auto-fill writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
779
+ | multitenancy | `node_modules/@voltro/cli/templates/agent-docs/plugins/multitenancy.md` (or `node_modules/@voltro/plugin-multitenancy/README.md`) | The tenant() schema mixin (auto-scoped reads, auto-filled inserts, tenant-resolved keyed writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
723
780
  | notifications | `node_modules/@voltro/cli/templates/agent-docs/plugins/notifications.md` (or `node_modules/@voltro/plugin-notifications/README.md`) | Unified notifications — one send API across email / Slack / SMS / push / in-app, with per-user channel preferences, an in-app inbox, and delivery records. |
724
781
  | openapi | `node_modules/@voltro/cli/templates/agent-docs/plugins/openapi.md` (or `node_modules/@voltro/plugin-openapi/README.md`) | Generate an OpenAPI 3.1 spec + Swagger-UI docs from your defineRestRoute descriptors and (opt-in) your rpc procedures. Your routes ARE the API docs — nothing hand-maintained. |
725
782
  | postgis | `node_modules/@voltro/cli/templates/agent-docs/plugins/postgis.md` (or `node_modules/@voltro/plugin-postgis/README.md`) | Postgres-native geography / geometry columns, geometry constructors (point/line/polygon/multi/GeoJSON), spatial predicates (ST_DWithin, ST_Within, ST_Contains, ST_Intersects, ST_Buffer, bbox &&), ST_Distance projection + <-> KNN ordering, and GiST indexes via expressionIndex. Postgres-only by design. |
@@ -9,7 +9,7 @@ each plugin's own README.
9
9
 
10
10
  | Topic | Open | Summary |
11
11
  |---|---|---|
12
- | **What's new in 0.33.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
12
+ | **What's new in 0.34.0** | `node_modules/@voltro/cli/templates/agent-docs/whats-new.md` | Everything that changed in this version. Read it before hand-rolling something the framework may now ship. |
13
13
  | AI | `node_modules/@voltro/cli/templates/agent-docs/ai.md` | How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework. |
14
14
  | Authentication | `node_modules/@voltro/cli/templates/agent-docs/authentication.md` | How @voltro/plugin-auth wires password + session-cookie auth across api + web, plus the pluggable identity-strategy protocol. |
15
15
  | Caching | `node_modules/@voltro/cli/templates/agent-docs/caching.md` | Voltro's caching layer (@voltro/cache) — an always-on memory default, swappable Redis-compatible backends, a low-level wrap primitive, and automatic query-result invalidation. |
@@ -20,7 +20,7 @@ each plugin's own README.
20
20
  | database.columnTypes | `node_modules/@voltro/cli/templates/agent-docs/database/columntypes.md` | Postgres-native ENUM types via dbEnum() — cheap ADD VALUE migrations, full type-narrowing. Falls back to CHECK constraints on other dialects. |
21
21
  | database.hosting | `node_modules/@voltro/cli/templates/agent-docs/database/hosting.md` | Run Voltro on any hosted Postgres, MySQL, MariaDB, or SQL Server — Supabase, Neon, Vercel Postgres, Railway, Render, Fly.io, AWS RDS, PlanetScale, Azure SQL, and more. Connection strings, pooling, gotchas. |
22
22
  | database.migrations | `node_modules/@voltro/cli/templates/agent-docs/database/migrations.md` | Voltro's planner-based migration system — diff your declared schema against the live DB, classify each change, refuse-to-apply anything risky without explicit intent. Dev auto-applies, prod refuses. |
23
- | Database | `node_modules/@voltro/cli/templates/agent-docs/database/misc.md` | Spin up an isolated branch of a tenant's dataa namespace snapshot/restore by default (dialect-agnostic, no vendor lock) or a Neon copy-on-write fast-path on Postgres then bind to it and tear it down. The basis for per-PR preview environments. |
23
+ | Database | `node_modules/@voltro/cli/templates/agent-docs/database/misc.md` | Branch the live schema and REHEARSE your migration on it apply the plan to a throwaway copy, flag every lossy operation, prove it converges, drop the branch. Plus the branch primitive itself (namespace snapshot on Postgres, Neon copy-on-write fast-path). |
24
24
  | Database | `node_modules/@voltro/cli/templates/agent-docs/database/overview.md` | How Voltro talks to Postgres — the schema DSL, the query builder, mixins, migrations, and the reactive engine's relationship to all of it. |
25
25
  | database.querying | `node_modules/@voltro/cli/templates/agent-docs/database/querying.md` | Three cardinalities, one DSL. Declaration via relations(), eager loading via .with(), reactive invalidation via the two-stage dependency-graph + per-field pre-filter. |
26
26
  | database.scaling | `node_modules/@voltro/cli/templates/agent-docs/database/scaling.md` | Transparent read-replica routing with read-your-writes (RYW) consistency, multi-instance RYW via Redis, region-aware replica selection, and the per-dialect adapter surface. |
@@ -35,6 +35,7 @@ each plugin's own README.
35
35
  | Observability | `node_modules/@voltro/cli/templates/agent-docs/observability.md` | OpenTelemetry tracing in Voltro — the auto-emitted spans for every primitive, span attributes and nesting, the three enabling modes (console / OTLP / buffer), and adding your own spans with Effect.withSpan. |
36
36
  | Plugins | `node_modules/@voltro/cli/templates/agent-docs/plugins.md` | How Voltro plugins compose into the runtime, what they can intercept, the catalogue, and writing your own. |
37
37
  | Reference | `node_modules/@voltro/cli/templates/agent-docs/reference.md` | The client-side hook surface, grouped by purpose. |
38
+ | Releases | `node_modules/@voltro/cli/templates/agent-docs/releases.md` | The largest release in the framework's history — what breaks your boot, what changes at runtime, and why none of it is rewritten for you. |
38
39
  | Routing | `node_modules/@voltro/cli/templates/agent-docs/routing.md` | Voltro's file-based router — pages, layouts, render modes, loaders, navigation, islands. The web side of the framework. |
39
40
  | Scheduling | `node_modules/@voltro/cli/templates/agent-docs/scheduling.md` | Deployment-agnostic scheduled jobs in Voltro — one *.cron.tsx definition that runs unchanged on a single box, a multi-instance fleet, or an external scheduler. |
40
41
  | Schema-driven UI | `node_modules/@voltro/cli/templates/agent-docs/schema-driven-ui.md` | Project the typed descriptor graph into UI — forms, tables, pickers, and reactive components, all bound to a descriptor with near-zero glue. |
@@ -43,7 +44,7 @@ each plugin's own README.
43
44
  | templates.appShells | `node_modules/@voltro/cli/templates/agent-docs/templates/appshells.md` | A marketing landing page — hero, features, CTA. Static-rendered with zero JS on the wire by default. |
44
45
  | templates.custom | `node_modules/@voltro/cli/templates/agent-docs/templates/custom.md` | Add a template the CLI can scaffold from — a directory under voltro-templates/apps/ with a manifest and the files to copy. |
45
46
  | templates.mobile | `node_modules/@voltro/cli/templates/agent-docs/templates/mobile.md` | An Expo (React Native) app that is the third consumer of your api — the same typed hooks (useSubscription / useMutation), offline-first by default, typed deep links, and device registration for push. Expo owns Metro; voltro dev runs the sibling api. |
46
- | Templates | `node_modules/@voltro/cli/templates/agent-docs/templates/overview.md` | Thirty-eight dogfooded starter templates ship with the framework — twenty-two backend shapes, fourteen frontend shapes, a serverless function library, and an Expo mobile app. Scaffold any of them with one CLI call. |
47
+ | Templates | `node_modules/@voltro/cli/templates/agent-docs/templates/overview.md` | Dozens of dogfooded starter templates ship with the framework — backend shapes, frontend shapes, a serverless function library, and an Expo mobile app. voltro list-templates is the authority; scaffold any of them with one CLI call. |
47
48
  | templates.serverless | `node_modules/@voltro/cli/templates/agent-docs/templates/serverless.md` | A library of standalone *.serverless.ts functions — pure compute, request-header/geo, outbound HTTP, Web Crypto HMAC, an LLM call, status-controlled errors. Run with voltro serverless; ship to node / Cloudflare / Scaleway. No server, no port. |
48
49
  | Testing | `node_modules/@voltro/cli/templates/agent-docs/testing.md` | Voltro's test story — the @voltro/testing package, the test pyramid (unit handlers/tools → workflow runner → e2e), and the voltro test / voltro e2e CLI commands. |
49
50
  | Workflows | `node_modules/@voltro/cli/templates/agent-docs/workflows.md` | Durable Effect workflows in Voltro — what they are, when to use them, and the current runtime boundaries. |
@@ -61,6 +62,7 @@ each plugin's own README.
61
62
  | auth-clerk | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-clerk.md` (or `node_modules/@voltro/plugin-auth-clerk/README.md`) | Clerk AuthStrategy — verifies Clerk-issued __session JWTs via the Frontend API JWKS (no secret key) and maps org_id → tenantId. |
62
63
  | auth-kinde | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-kinde.md` (or `node_modules/@voltro/plugin-auth-kinde/README.md`) | Kinde AuthStrategy — verifies Kinde-issued JWTs via JWKS at the configured issuer (no client secret) and maps org_code → tenantId. |
63
64
  | auth-oidc | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-oidc.md` (or `node_modules/@voltro/plugin-auth-oidc/README.md`) | Generic OIDC AuthStrategy — verifies any OpenID-Connect IdP's JWTs via JWKS (Okta, Keycloak, Cognito, Azure AD, Google Workspace). Discovery or explicit JWKS URL; maps a claim → tenantId. |
65
+ | auth-social | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-social.md` (or `node_modules/@voltro/plugin-auth-social/README.md`) | First-party Sign in with Google / GitHub / Apple — mandatory PKCE + state, JWKS-verified ID tokens, a deliberate account-linking policy, no identity vendor. |
64
66
  | auth-supabase | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-supabase.md` (or `node_modules/@voltro/plugin-auth-supabase/README.md`) | Supabase Auth (GoTrue) AuthStrategy — verifies Supabase-issued JWTs via the project's JWKS and maps app_metadata.tenant_id → tenantId. |
65
67
  | auth-workos | `node_modules/@voltro/cli/templates/agent-docs/plugins/auth-workos.md` (or `node_modules/@voltro/plugin-auth-workos/README.md`) | WorkOS AuthStrategy — verifies WorkOS AuthKit / SSO JWTs via JWKS (no API key) and maps org_id → tenantId. |
66
68
  | billing | `node_modules/@voltro/cli/templates/agent-docs/plugins/billing.md` (or `node_modules/@voltro/plugin-billing/README.md`) | Subscriptions, plans, entitlements, and usage metering over a pluggable provider (Stripe + mock). Money is integer minor units. |
@@ -76,7 +78,7 @@ each plugin's own README.
76
78
  | logship | `node_modules/@voltro/cli/templates/agent-docs/plugins/logship.md` (or `node_modules/@voltro/plugin-logship/README.md`) | Ship structured logs to Better Stack / Axiom / Loki / any HTTP sink — batched, redacted, fail-soft. Rides the framework log-sink hook. |
77
79
  | mail | `node_modules/@voltro/cli/templates/agent-docs/plugins/mail.md` (or `node_modules/@voltro/plugin-mail/README.md`) | Transactional email — Resend / Postmark / SendGrid / SMTP, React-Email templates with auto-discovery, per-tenant suppression, bounce/complaint handling, durable delivery via workflows. |
78
80
  | moderation | `node_modules/@voltro/cli/templates/agent-docs/plugins/moderation.md` (or `node_modules/@voltro/plugin-moderation/README.md`) | Moderate user content before it commits — keyword denylist or AI provider, block or flag via rpc interceptor, plus an in-handler redact helper. |
79
- | multitenancy | `node_modules/@voltro/cli/templates/agent-docs/plugins/multitenancy.md` (or `node_modules/@voltro/plugin-multitenancy/README.md`) | The tenant() schema mixin (auto-scope reads + auto-fill writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
81
+ | multitenancy | `node_modules/@voltro/cli/templates/agent-docs/plugins/multitenancy.md` (or `node_modules/@voltro/plugin-multitenancy/README.md`) | The tenant() schema mixin (auto-scoped reads, auto-filled inserts, tenant-resolved keyed writes), the assertOwnTenant write-guard, and the typed TenantMismatch error. |
80
82
  | notifications | `node_modules/@voltro/cli/templates/agent-docs/plugins/notifications.md` (or `node_modules/@voltro/plugin-notifications/README.md`) | Unified notifications — one send API across email / Slack / SMS / push / in-app, with per-user channel preferences, an in-app inbox, and delivery records. |
81
83
  | openapi | `node_modules/@voltro/cli/templates/agent-docs/plugins/openapi.md` (or `node_modules/@voltro/plugin-openapi/README.md`) | Generate an OpenAPI 3.1 spec + Swagger-UI docs from your defineRestRoute descriptors and (opt-in) your rpc procedures. Your routes ARE the API docs — nothing hand-maintained. |
82
84
  | postgis | `node_modules/@voltro/cli/templates/agent-docs/plugins/postgis.md` (or `node_modules/@voltro/plugin-postgis/README.md`) | Postgres-native geography / geometry columns, geometry constructors (point/line/polygon/multi/GeoJSON), spatial predicates (ST_DWithin, ST_Within, ST_Contains, ST_Intersects, ST_Buffer, bbox &&), ST_Distance projection + <-> KNN ordering, and GiST indexes via expressionIndex. Postgres-only by design. |
@@ -8,7 +8,7 @@
8
8
  "group": null,
9
9
  "description": "How Voltro treats AI — agents, tools, streaming, RAG — all primitives over the same WebSocket as the rest of the framework.",
10
10
  "path": "agent-docs/ai.md",
11
- "files": 9
11
+ "files": 11
12
12
  },
13
13
  {
14
14
  "id": "authentication",
@@ -53,7 +53,7 @@
53
53
  "group": null,
54
54
  "description": "How Voltro's reactive data layer works — queries, mutations, actions, streams, all over one WebSocket with typed errors and tracked dependencies.",
55
55
  "path": "agent-docs/data.md",
56
- "files": 18
56
+ "files": 19
57
57
  },
58
58
  {
59
59
  "id": "database/advancedqueries",
@@ -96,7 +96,7 @@
96
96
  "title": "Database",
97
97
  "section": "Database",
98
98
  "group": null,
99
- "description": "Spin up an isolated branch of a tenant's dataa namespace snapshot/restore by default (dialect-agnostic, no vendor lock) or a Neon copy-on-write fast-path on Postgres then bind to it and tear it down. The basis for per-PR preview environments.",
99
+ "description": "Branch the live schema and REHEARSE your migration on it apply the plan to a throwaway copy, flag every lossy operation, prove it converges, drop the branch. Plus the branch primitive itself (namespace snapshot on Postgres, Neon copy-on-write fast-path).",
100
100
  "path": "agent-docs/database/misc.md",
101
101
  "files": 2
102
102
  },
@@ -226,6 +226,15 @@
226
226
  "path": "agent-docs/reference.md",
227
227
  "files": 7
228
228
  },
229
+ {
230
+ "id": "releases",
231
+ "title": "Releases",
232
+ "section": "Releases",
233
+ "group": null,
234
+ "description": "The largest release in the framework's history — what breaks your boot, what changes at runtime, and why none of it is rewritten for you.",
235
+ "path": "agent-docs/releases.md",
236
+ "files": 1
237
+ },
229
238
  {
230
239
  "id": "routing",
231
240
  "title": "Routing",
@@ -303,7 +312,7 @@
303
312
  "title": "Templates",
304
313
  "section": "Templates",
305
314
  "group": null,
306
- "description": "Thirty-eight dogfooded starter templates ship with the framework — twenty-two backend shapes, fourteen frontend shapes, a serverless function library, and an Expo mobile app. Scaffold any of them with one CLI call.",
315
+ "description": "Dozens of dogfooded starter templates ship with the framework — backend shapes, frontend shapes, a serverless function library, and an Expo mobile app. voltro list-templates is the authority; scaffold any of them with one CLI call.",
307
316
  "path": "agent-docs/templates/overview.md",
308
317
  "files": 1
309
318
  },
@@ -408,6 +417,14 @@
408
417
  "doc": "plugins/auth-oidc.md",
409
418
  "module": "agent-docs/plugins/auth-oidc.md"
410
419
  },
420
+ {
421
+ "slug": "auth-social",
422
+ "title": "Social login (Google / GitHub / Apple)",
423
+ "description": "First-party Sign in with Google / GitHub / Apple — mandatory PKCE + state, JWKS-verified ID tokens, a deliberate account-linking policy, no identity vendor.",
424
+ "pkg": "@voltro/plugin-auth-social",
425
+ "doc": "plugins/auth-social.md",
426
+ "module": "agent-docs/plugins/auth-social.md"
427
+ },
411
428
  {
412
429
  "slug": "auth-supabase",
413
430
  "title": "Supabase Auth",
@@ -531,7 +548,7 @@
531
548
  {
532
549
  "slug": "multitenancy",
533
550
  "title": "Multi-tenancy",
534
- "description": "The tenant() schema mixin (auto-scope reads + auto-fill writes), the assertOwnTenant write-guard, and the typed TenantMismatch error.",
551
+ "description": "The tenant() schema mixin (auto-scoped reads, auto-filled inserts, tenant-resolved keyed writes), the assertOwnTenant write-guard, and the typed TenantMismatch error.",
535
552
  "pkg": "@voltro/plugin-multitenancy",
536
553
  "doc": "plugins/multitenancy.md",
537
554
  "module": "agent-docs/plugins/multitenancy.md"