@voltro/cli 0.33.0 → 0.35.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 (343) hide show
  1. package/CHANGELOG.md +1968 -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-B8aoJvuw.js +2 -0
  10. package/dist/{apiBuild-h9VHtnlw.js → apiBuild-DYD_ONLD.js} +46 -46
  11. package/dist/{appGraph-gQ_6GkQQ.js → appGraph-KGDPTuTy.js} +1 -1
  12. package/dist/appGraph-zuMGKVYX.js +2 -0
  13. package/dist/appPort-B_HpJ_ck.js +48 -0
  14. package/dist/baselineCommand-C2ClWZN3.js +2 -0
  15. package/dist/baselineCommand-DIttzO8A.js +227 -0
  16. package/dist/bin.js +71 -28
  17. package/dist/build-CD8K4XOr.js +711 -0
  18. package/dist/cacheCommand-DA4OH9xt.js +42 -0
  19. package/dist/capabilitiesCommand-nq_pz5xd.js +123 -0
  20. package/dist/checkCommand-Ct9xkTrS.js +232 -0
  21. package/dist/checkCommand-DKpDLlqu.js +2 -0
  22. package/dist/{cliArgs-qdZSElM3.js → cliArgs-D4p8n7EE.js} +12 -1
  23. package/dist/cliError-BmdYnghb.js +10 -0
  24. package/dist/cliOutput-D1tSBoRM.js +15 -0
  25. package/dist/{cliRuntime-Oh517vCV.js → cliRuntime-Dh7UDinH.js} +20 -20
  26. package/dist/cloudClient-DWL-Hw_T.js +67 -0
  27. package/dist/cloudCmd-Cvv5HGaZ.js +364 -0
  28. package/dist/clusterCmd-D5wsCmA_.js +54 -0
  29. package/dist/codegen-CYM3Zqrf.js +605 -0
  30. package/dist/codegen-ChBi_hVa.js +2 -0
  31. package/dist/codegenCommand-C4YoQIc2.js +30 -0
  32. package/dist/codemodRunner-BnFq3Fgu.js +5384 -0
  33. package/dist/commandRunner-BLAEFLjp.js +47 -0
  34. package/dist/commands-BE8E7zF3.js +816 -0
  35. package/dist/connectionConfig-UFlIEiys.js +66 -0
  36. package/dist/dashboardCommand-D7SgZGaN.js +25 -0
  37. package/dist/dataCommand-BhYwDgg-.js +537 -0
  38. package/dist/dataProfile-dW-PsfLB.js +15 -0
  39. package/dist/dbCommand-DS4b97Is.js +2 -0
  40. package/dist/{dbCommand-DTLKAfbA.js → dbCommand-O8HA63s2.js} +552 -402
  41. package/dist/{dev-C_P8FLSx.js → dev-C7sFZq3m.js} +3670 -3169
  42. package/dist/dev-D2BikO7a.js +3 -0
  43. package/dist/devActivity-Dx_3nnGv.js +100 -0
  44. package/dist/devActivity.js +1 -1
  45. package/dist/dialectDriver-CgXnDfec.js +39 -0
  46. package/dist/discover-C9XKJDco.js +25 -0
  47. package/dist/doctorCommand-CM4Ch9C7.js +2 -0
  48. package/dist/{checkCommand-xGhRFFg2.js → doctorCommand-DnimF5IM.js} +523 -1278
  49. package/dist/dormancyCommand-QewYug_s.js +69 -0
  50. package/dist/e2eCmd-BRabZww-.js +147 -0
  51. package/dist/embeddingsCommand-BfiLS_QI.js +73 -0
  52. package/dist/envCommand-CCGPRQY1.js +60 -0
  53. package/dist/evalCommand-6RUfPen4.js +118 -0
  54. package/dist/evolveCommand-CHsLCtDf.js +281 -0
  55. package/dist/fileTaxonomy-CJfgOllU.js +457 -0
  56. package/dist/frameworkTableAssembly-YyVe32Cb.js +2 -0
  57. package/dist/frameworkTableAssembly-oMPBKqlE.js +511 -0
  58. package/dist/generateCommand-DbgcUpGw.js +147 -0
  59. package/dist/index.d.ts +45 -0
  60. package/dist/index.js +4 -3
  61. package/dist/infoCommand-DwOgK1t6.js +60 -0
  62. package/dist/{inspect-BUUjt773.js → inspect-CjTYzAs_.js} +113 -41
  63. package/dist/inspect-P4pxoMaV.js +2 -0
  64. package/dist/inspectCmd-EHFZ9yYu.js +224 -0
  65. package/dist/inspectFetch-EMuhTG_9.js +151 -0
  66. package/dist/inspectMetrics-CfdKLh6t.js +72 -0
  67. package/dist/loadEnv-D9nEOClM.js +44 -0
  68. package/dist/logFileSink-C_D2wRN1.js +105 -0
  69. package/dist/logsCmd-D36xK7Zu.js +260 -0
  70. package/dist/manifestBuild-COkJoyAr.js +2 -0
  71. package/dist/{manifestBuild-BLrVuSlM.js → manifestBuild-hpPLaGxV.js} +1 -1
  72. package/dist/metaCommands-7MJfZ5cf.js +196 -0
  73. package/dist/migrate-BV7I-ZHZ.js +83 -0
  74. package/dist/mssqlClusterPatch-_4cE_nun.js +44 -0
  75. package/dist/newCommand-COWOJ1_E.js +156 -0
  76. package/dist/nodeEnvironment-cGFAj1J8.js +28 -0
  77. package/dist/packageCommand-Cug_3Ogl.js +271 -0
  78. package/dist/pageConvention-cEiRxdab.js +5 -0
  79. package/dist/privacyCommand-C-Df56U_.js +146 -0
  80. package/dist/probeCommand-CZfaaUOZ.js +122 -0
  81. package/dist/projectScaffold-DmzEKHib.js +2 -0
  82. package/dist/projectScaffold-LMMtaavR.js +814 -0
  83. package/dist/renderModeScan-D7J1B7Kw.js +105 -0
  84. package/dist/renderProfile-1OWWAAtx.js +81 -0
  85. package/dist/runtimeRegistry-DMeKfTHP.js +81 -0
  86. package/dist/runtimeTrace-CH3eUiMw.js +91 -0
  87. package/dist/scheduleCmd-DQRu6BZC.js +149 -0
  88. package/dist/scheduleManifestCmd-D2x0CTTY.js +249 -0
  89. package/dist/schemaIr-UJybUUZW.js +103 -0
  90. package/dist/{sdkgen-C81QIkiL.js → sdkgen-BLkvGRfX.js} +111 -209
  91. package/dist/seedRunner-ZmLSqNe2.js +333 -0
  92. package/dist/serveCommand-CbDHU6l-.js +2 -0
  93. package/dist/serveCommand-iwlUBNS1.js +1766 -0
  94. package/dist/serveEntry.js +5 -5
  95. package/dist/serverlessCommand-CfJZy6dS.js +482 -0
  96. package/dist/start-BgN62boB.js +3 -0
  97. package/dist/start-T4VesWiM.js +1087 -0
  98. package/dist/startEntry.js +2 -2
  99. package/dist/staticCommand-Dr2M6tpU.js +304 -0
  100. package/dist/storageCommand-Co6NfLqN.js +42 -0
  101. package/dist/templates-De8IR5-c.js +102 -0
  102. package/dist/test-CI6iDsYc.js +115 -0
  103. package/dist/tracesCmd-DStmCJPi.js +232 -0
  104. package/dist/tsconfigPaths-BWXBWgcl.js +107 -0
  105. package/dist/tsxLoader-EuXmSJ1K.js +51 -0
  106. package/dist/typecheckCommand-BlsWiCNq.js +61 -0
  107. package/dist/updateCommand-BlMZhWgO.js +2 -0
  108. package/dist/updateCommand-x0pI_x-B.js +585 -0
  109. package/dist/webDev-BcykISYQ2.js +2 -0
  110. package/dist/{inspectMetrics-1xzTKAFx.js → webDev-Dybxew86.js} +988 -1560
  111. package/dist/webhookDiscovery-CrGAfhIG.js +2 -0
  112. package/dist/webhookDiscovery-D7VaeMlz.js +51 -0
  113. package/dist/webhooksCommand-DlAgS2Iw.js +267 -0
  114. package/dist/workflowsCmd-BGF-mRZ5.js +608 -0
  115. package/package.json +209 -17
  116. package/templates/AGENTS.core.md +58 -3
  117. package/templates/AGENTS.md +64 -7
  118. package/templates/agent-docs/_index.md +6 -4
  119. package/templates/agent-docs/_manifest.json +23 -6
  120. package/templates/agent-docs/ai.md +370 -0
  121. package/templates/agent-docs/authentication.md +313 -31
  122. package/templates/agent-docs/caching.md +6 -0
  123. package/templates/agent-docs/cli.md +853 -50
  124. package/templates/agent-docs/data.md +608 -12
  125. package/templates/agent-docs/database/migrations.md +223 -25
  126. package/templates/agent-docs/database/misc.md +156 -40
  127. package/templates/agent-docs/database/querying.md +19 -1
  128. package/templates/agent-docs/database/scaling.md +60 -0
  129. package/templates/agent-docs/database/schema.md +1 -0
  130. package/templates/agent-docs/database/seedsdialects.md +208 -19
  131. package/templates/agent-docs/database/transactions.md +68 -0
  132. package/templates/agent-docs/deployment.md +284 -25
  133. package/templates/agent-docs/introduction.md +88 -17
  134. package/templates/agent-docs/local-first-mobile.md +79 -4
  135. package/templates/agent-docs/multi-tenancy.md +188 -42
  136. package/templates/agent-docs/observability.md +58 -3
  137. package/templates/agent-docs/plugins/ai-flows.md +247 -2
  138. package/templates/agent-docs/plugins/analytics-postgres.md +1 -1
  139. package/templates/agent-docs/plugins/audit.md +37 -1
  140. package/templates/agent-docs/plugins/auth-social.md +143 -0
  141. package/templates/agent-docs/plugins/auth-workos.md +4 -2
  142. package/templates/agent-docs/plugins/auth.md +131 -6
  143. package/templates/agent-docs/plugins/billing.md +132 -15
  144. package/templates/agent-docs/plugins/cdc-out.md +46 -7
  145. package/templates/agent-docs/plugins/clickhouse.md +32 -1
  146. package/templates/agent-docs/plugins/duckdb.md +1 -1
  147. package/templates/agent-docs/plugins/flags.md +132 -0
  148. package/templates/agent-docs/plugins/governance.md +105 -7
  149. package/templates/agent-docs/plugins/multitenancy.md +9 -4
  150. package/templates/agent-docs/plugins/presence.md +13 -2
  151. package/templates/agent-docs/plugins/ratelimit.md +9 -0
  152. package/templates/agent-docs/plugins/search.md +162 -8
  153. package/templates/agent-docs/plugins/sso-saml.md +47 -8
  154. package/templates/agent-docs/plugins/storage.md +11 -0
  155. package/templates/agent-docs/plugins/webhooks.md +105 -0
  156. package/templates/agent-docs/plugins.md +152 -18
  157. package/templates/agent-docs/reference.md +60 -3
  158. package/templates/agent-docs/releases.md +1117 -0
  159. package/templates/agent-docs/routing.md +43 -25
  160. package/templates/agent-docs/scheduling.md +27 -0
  161. package/templates/agent-docs/schema-driven-ui.md +92 -12
  162. package/templates/agent-docs/security.md +426 -0
  163. package/templates/agent-docs/templates/apibackends.md +87 -18
  164. package/templates/agent-docs/templates/appshells.md +32 -14
  165. package/templates/agent-docs/templates/overview.md +13 -8
  166. package/templates/agent-docs/testing.md +211 -14
  167. package/templates/agent-docs/whats-new.md +98 -136
  168. package/templates/agent-docs/workflows.md +231 -14
  169. package/templates/apps/api-ai/actions/summarize.action.ts +11 -0
  170. package/templates/apps/api-ai/package.json +8 -7
  171. package/templates/apps/api-auth/actions/me.action.ts +13 -0
  172. package/templates/apps/api-auth/package.json +9 -8
  173. package/templates/apps/api-backend/mutations/notes.create.mutation.ts +9 -0
  174. package/templates/apps/api-backend/package.json +12 -8
  175. package/templates/apps/api-backend/queries/notes.query.ts +30 -8
  176. package/templates/apps/api-backend-deactivation/actions/users.get.action.ts +14 -0
  177. package/templates/apps/api-backend-deactivation/mutations/users.create.mutation.ts +8 -0
  178. package/templates/apps/api-backend-deactivation/mutations/users.deactivate.mutation.ts +10 -0
  179. package/templates/apps/api-backend-deactivation/package.json +8 -7
  180. package/templates/apps/api-backend-mail/actions/sendWelcome.action.ts +17 -0
  181. package/templates/apps/api-backend-mail/mutations/notes.create.mutation.ts +9 -0
  182. package/templates/apps/api-backend-mail/package.json +9 -8
  183. package/templates/apps/api-backend-mail/queries/notes.query.ts +30 -8
  184. package/templates/apps/api-backend-mariadb/.env.example +14 -0
  185. package/templates/apps/api-backend-mariadb/mutations/notes.create.mutation.ts +9 -0
  186. package/templates/apps/api-backend-mariadb/package.json +10 -9
  187. package/templates/apps/api-backend-mariadb/queries/notes.query.ts +30 -8
  188. package/templates/apps/api-backend-sqlite/.env.example +14 -0
  189. package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +9 -0
  190. package/templates/apps/api-backend-sqlite/package.json +9 -8
  191. package/templates/apps/api-backend-sqlite/queries/notes.query.ts +30 -8
  192. package/templates/apps/api-backend-storage/actions/uploadAvatar.action.ts +13 -0
  193. package/templates/apps/api-backend-storage/actions/uploadDocument.action.ts +12 -0
  194. package/templates/apps/api-backend-storage/mutations/notes.create.mutation.ts +9 -0
  195. package/templates/apps/api-backend-storage/package.json +9 -8
  196. package/templates/apps/api-backend-storage/queries/notes.query.ts +30 -8
  197. package/templates/apps/api-cms/actions/content.get.action.ts +7 -0
  198. package/templates/apps/api-cms/actions/content.types.action.ts +6 -0
  199. package/templates/apps/api-cms/actions/me.action.ts +13 -0
  200. package/templates/apps/api-cms/app.config.ts +19 -0
  201. package/templates/apps/api-cms/authz.ts +63 -0
  202. package/templates/apps/api-cms/mutations/content.publish.mutation.ts +10 -0
  203. package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +10 -0
  204. package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +5 -0
  205. package/templates/apps/api-cms/package.json +11 -10
  206. package/templates/apps/api-cms/queries/content.list.query.ts +23 -7
  207. package/templates/apps/api-cms/tests/accessDecisions.test.ts +121 -0
  208. package/templates/apps/api-cms/tests/content.descriptors.test.ts +8 -4
  209. package/templates/apps/api-collab/mutations/documents.create.mutation.ts +8 -0
  210. package/templates/apps/api-collab/mutations/documents.setBody.mutation.ts +13 -0
  211. package/templates/apps/api-collab/package.json +9 -8
  212. package/templates/apps/api-collab/queries/documents.query.ts +19 -7
  213. package/templates/apps/api-data-advanced/package.json +9 -8
  214. package/templates/apps/api-data-advanced/queries/authors.withBooks.query.ts +12 -0
  215. package/templates/apps/api-data-advanced/queries/books.search.query.ts +9 -0
  216. package/templates/apps/api-durable/mutations/orders.approve.mutation.ts +17 -0
  217. package/templates/apps/api-durable/mutations/orders.place.mutation.ts +9 -0
  218. package/templates/apps/api-durable/package.json +9 -8
  219. package/templates/apps/api-feature-flags/actions/notes.export.action.ts +16 -0
  220. package/templates/apps/api-feature-flags/mutations/notes.create.mutation.ts +12 -0
  221. package/templates/apps/api-feature-flags/package.json +10 -9
  222. package/templates/apps/api-governance/README.md +30 -8
  223. package/templates/apps/api-governance/actions/profiles.get.action.server.ts +17 -1
  224. package/templates/apps/api-governance/actions/profiles.get.action.ts +29 -4
  225. package/templates/apps/api-governance/database/schema.ts +16 -4
  226. package/templates/apps/api-governance/mutations/profiles.create.mutation.ts +12 -0
  227. package/templates/apps/api-governance/package.json +9 -8
  228. package/templates/apps/api-kv/actions/sync.pull.action.ts +15 -0
  229. package/templates/apps/api-kv/actions/sync.reset.action.ts +13 -0
  230. package/templates/apps/api-kv/actions/sync.status.action.ts +7 -0
  231. package/templates/apps/api-kv/package.json +9 -8
  232. package/templates/apps/api-kv/queries/events.list.query.ts +19 -8
  233. package/templates/apps/api-moderation/mutations/comments.create.mutation.ts +11 -0
  234. package/templates/apps/api-moderation/mutations/posts.create.mutation.ts +13 -0
  235. package/templates/apps/api-moderation/package.json +9 -8
  236. package/templates/apps/api-observability/mutations/notes.create.mutation.ts +8 -0
  237. package/templates/apps/api-observability/package.json +9 -8
  238. package/templates/apps/api-observability/queries/notes.list.query.ts +13 -0
  239. package/templates/apps/api-ratelimit/mutations/notes.create.mutation.ts +14 -0
  240. package/templates/apps/api-ratelimit/package.json +9 -8
  241. package/templates/apps/api-rbac/package.json +9 -8
  242. package/templates/apps/api-rest/package.json +8 -7
  243. package/templates/apps/api-saas/mutations/projects.create.mutation.ts +13 -0
  244. package/templates/apps/api-saas/package.json +12 -11
  245. package/templates/apps/api-saas/queries/projects.list.query.ts +11 -0
  246. package/templates/apps/api-saas-starter/actions/me.action.ts +13 -0
  247. package/templates/apps/api-saas-starter/app.config.ts +19 -0
  248. package/templates/apps/api-saas-starter/authz.ts +75 -0
  249. package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +10 -0
  250. package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +9 -0
  251. package/templates/apps/api-saas-starter/package.json +15 -11
  252. package/templates/apps/api-saas-starter/queries/invites.list.query.ts +19 -8
  253. package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -7
  254. package/templates/apps/api-saas-starter/tests/accessDecisions.test.ts +135 -0
  255. package/templates/apps/api-search/mutations/articles.create.mutation.ts +14 -0
  256. package/templates/apps/api-search/package.json +9 -8
  257. package/templates/apps/api-search/queries/articles.list.query.ts +21 -8
  258. package/templates/apps/api-status/README.md +10 -3
  259. package/templates/apps/api-status/app.config.ts +8 -3
  260. package/templates/apps/api-status/authz.ts +5 -3
  261. package/templates/apps/api-status/package.json +9 -8
  262. package/templates/apps/api-status/queries/components.list.query.ts +14 -6
  263. package/templates/apps/api-status/queries/incidents.live.query.ts +23 -10
  264. package/templates/apps/api-status/queries/updates.list.query.ts +16 -9
  265. package/templates/apps/api-status/tests/status.test.ts +9 -1
  266. package/templates/apps/api-versioning/actions/documents.asOf.action.ts +12 -0
  267. package/templates/apps/api-versioning/actions/documents.history.action.ts +13 -0
  268. package/templates/apps/api-versioning/mutations/documents.create.mutation.ts +9 -0
  269. package/templates/apps/api-versioning/mutations/documents.update.mutation.ts +12 -0
  270. package/templates/apps/api-versioning/package.json +9 -8
  271. package/templates/apps/api-webhooks/mutations/orders.fulfill.mutation.ts +16 -0
  272. package/templates/apps/api-webhooks/package.json +10 -9
  273. package/templates/apps/api-webhooks/queries/orders.list.query.ts +10 -0
  274. package/templates/apps/changelog/package.json +8 -6
  275. package/templates/apps/edge-functions/package.json +2 -2
  276. package/templates/apps/frontend-admin/package.json +10 -8
  277. package/templates/apps/frontend-admin/src/lib/admin.ts +20 -9
  278. package/templates/apps/frontend-admin/src/locales/de.ts +11 -1
  279. package/templates/apps/frontend-admin/src/locales/en.ts +13 -1
  280. package/templates/apps/frontend-admin/src/pages/admin/[entity]/page.tsx +65 -22
  281. package/templates/apps/frontend-admin/src/pages/admin/entity.test.tsx +130 -23
  282. package/templates/apps/frontend-admin/src/pages/admin/layout.tsx +3 -2
  283. package/templates/apps/frontend-admin/src/pages/admin/page.test.tsx +19 -2
  284. package/templates/apps/frontend-admin/src/pages/admin/page.tsx +9 -4
  285. package/templates/apps/frontend-app/app.config.ts +4 -3
  286. package/templates/apps/frontend-app/package.json +11 -8
  287. package/templates/apps/frontend-app/src/lib/api.ts +25 -0
  288. package/templates/apps/frontend-app/src/pages/page.test.tsx +130 -82
  289. package/templates/apps/frontend-app/src/pages/page.tsx +14 -18
  290. package/templates/apps/frontend-auth/package.json +10 -8
  291. package/templates/apps/frontend-blank/package.json +9 -7
  292. package/templates/apps/frontend-cms/package.json +11 -9
  293. package/templates/apps/frontend-collab/package.json +12 -9
  294. package/templates/apps/frontend-collab/src/pages/page.test.tsx +122 -78
  295. package/templates/apps/frontend-contact/package.json +9 -7
  296. package/templates/apps/frontend-dashboard/package.json +9 -7
  297. package/templates/apps/frontend-docs/package.json +9 -7
  298. package/templates/apps/frontend-i18n/package.json +8 -6
  299. package/templates/apps/frontend-landing/package.json +9 -7
  300. package/templates/apps/frontend-portal/package.json +10 -8
  301. package/templates/apps/frontend-saas/app.config.ts +10 -6
  302. package/templates/apps/frontend-saas/package.json +10 -8
  303. package/templates/apps/frontend-saas/src/lib/api.ts +27 -32
  304. package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +7 -8
  305. package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +27 -3
  306. package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +4 -4
  307. package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +3 -4
  308. package/templates/apps/frontend-spa/package.json +9 -7
  309. package/templates/apps/frontend-ssr/package.json +9 -7
  310. package/templates/apps/frontend-ssr-api/package.json +10 -8
  311. package/templates/apps/frontend-static-blog/package.json +8 -6
  312. package/templates/apps/frontend-status/package.json +10 -8
  313. package/templates/apps/mobile-app/README.md +1 -0
  314. package/templates/apps/mobile-app/package.json +4 -2
  315. package/templates/apps/mobile-app/src/app/index.tsx +22 -12
  316. package/templates/apps/mobile-app/src/app/orders/[id].tsx +1 -1
  317. package/templates/apps/mobile-app/src/lib/api.ts +34 -0
  318. package/templates/apps/mobile-app/voltro.mobile.ts +4 -2
  319. package/templates/baselines/bare/.env.example +14 -0
  320. package/templates/baselines/bare/baseline.json +4 -4
  321. package/templates/baselines/compose/.env.example +14 -0
  322. package/templates/baselines/compose/README.md +1 -1
  323. package/templates/baselines/compose/baseline.json +5 -5
  324. package/templates/baselines/compose-mariadb/.env.example +14 -0
  325. package/templates/baselines/compose-mariadb/README.md +1 -1
  326. package/templates/baselines/compose-mariadb/baseline.json +5 -5
  327. package/templates/baselines/helm/.env.example +14 -0
  328. package/templates/baselines/helm/baseline.json +4 -4
  329. package/dist/apiBuild-C-x9YacA.js +0 -2
  330. package/dist/appGraph-CvQCte0z.js +0 -2
  331. package/dist/checkCommand-DRovTKza.js +0 -2
  332. package/dist/commands-CJfepbm4.js +0 -11541
  333. package/dist/dbCommand-b1gum4td.js +0 -2
  334. package/dist/dev-iiMtlkfs.js +0 -3
  335. package/dist/devActivity-BhIu6ncs.js +0 -159
  336. package/dist/frameworkTableAssembly-BwIrO5nv.js +0 -638
  337. package/dist/frameworkTableAssembly-D-EebUQX.js +0 -2
  338. package/dist/inspect-mmBuRXmy.js +0 -2
  339. package/dist/manifestBuild-Dj8Jjoto.js +0 -2
  340. package/dist/seedRunner-Bqxgp7HZ.js +0 -230
  341. package/dist/serveCommand-DdaM4Hup.js +0 -1608
  342. package/dist/start-C0koT0UO.js +0 -1084
  343. /package/templates/apps/api-ai/actions/{summarize.action.server.tsx → summarize.action.server.ts} +0 -0
package/dist/index.d.ts CHANGED
@@ -15,6 +15,35 @@ export declare const CLI_NAME: "framework";
15
15
  */
16
16
  export declare const COMMAND_GROUPS: ReadonlyArray<readonly [string, ReadonlyArray<string>]>;
17
17
 
18
+ /**
19
+ * Structured `--help` for a command that does not print its own.
20
+ *
21
+ * The dispatcher used to answer `--help` for 39 of the 53 commands with a
22
+ * single summary line — no flags, no example — and `--help` is the second thing
23
+ * a user types after a command surprises them. One renderer
24
+ * (`renderCommandHelp`) turns this data into that page, so growing the coverage
25
+ * is a data edit rather than 39 hand-written print blocks.
26
+ *
27
+ * **Every flag named here must be one the command actually parses.**
28
+ * `commandHelp.test.ts` derives each command's implementation module from the
29
+ * `import('./x')` in its own dispatch entry and fails if a documented flag is
30
+ * not read there — the per-command form of the repo-wide `check-message-apis`
31
+ * rule, which can only see the union of all sources and would therefore accept
32
+ * `voltro test --create-only` because `migrate` happens to parse it.
33
+ */
34
+ export declare interface CommandHelp {
35
+ /** Usage line WITHOUT the leading `voltro <name>` — e.g. `[app] [--watch]`. */
36
+ readonly usage?: string;
37
+ /** `[flag, what it does]`. The flag includes its dashes and any `<value>`. */
38
+ readonly flags?: ReadonlyArray<readonly [string, string]>;
39
+ /** `[full command line, what it does]`. Each must start with `voltro <name>`. */
40
+ readonly examples?: ReadonlyArray<readonly [string, string]>;
41
+ /** Environment variables that change what this command does. */
42
+ readonly env?: ReadonlyArray<readonly [string, string]>;
43
+ /** Anything else worth a sentence — printed under the flags. */
44
+ readonly notes?: ReadonlyArray<string>;
45
+ }
46
+
18
47
  export declare const COMMANDS: ReadonlyArray<CommandSpec>;
19
48
 
20
49
  export declare type CommandSpec = {
@@ -27,6 +56,9 @@ export declare type CommandSpec = {
27
56
  /** This command prints its own richer `--help` — let `--help`/`-h` reach it
28
57
  * instead of the dispatcher's uniform one-line fallback. */
29
58
  readonly handlesHelp?: boolean;
59
+ /** Flags + examples the shared renderer turns into a real `--help` page.
60
+ * Mutually exclusive with `handlesHelp` (that command prints its own). */
61
+ readonly help?: CommandHelp;
30
62
  };
31
63
 
32
64
  export declare const dispatch: (argv: ReadonlyArray<string>) => Promise<number>;
@@ -39,6 +71,19 @@ export declare const listTemplates: () => Promise<ReadonlyArray<TemplateInfo>>;
39
71
 
40
72
  export declare const printUsage: () => void;
41
73
 
74
+ /**
75
+ * ONE renderer for every command's `--help`.
76
+ *
77
+ * Returned as lines rather than printed so the test can assert on the page
78
+ * without capturing stdout — and so `voltro help <command>` and
79
+ * `voltro <command> --help` cannot render differently.
80
+ *
81
+ * A command with no `help` block still gets a real page: name, summary, docs
82
+ * link. That is the old fallback, kept as the FLOOR rather than as the answer —
83
+ * what changed is that a command CAN now say more without printing it by hand.
84
+ */
85
+ export declare const renderCommandHelp: (command: CommandSpec) => ReadonlyArray<string>;
86
+
42
87
  /** Command names close enough to a typo to suggest. Also matches on prefix /
43
88
  * substring, so `voltro work` suggests `workflows`. Exported for the test. */
44
89
  export declare const suggestCommands: (input: string, limit?: number) => ReadonlyArray<string>;
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
- import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-CJfepbm4.js";
1
+ import { a as e, i as t, n, o as r, r as i, t as a } from "./commands-BE8E7zF3.js";
2
+ import { r as o } from "./templates-De8IR5-c.js";
2
3
  //#region src/index.ts
3
- var o = "framework";
4
+ var s = "framework";
4
5
  //#endregion
5
- export { o as CLI_NAME, a as COMMANDS, n as COMMAND_GROUPS, i as dispatch, r as listTemplates, t as printUsage, e as suggestCommands };
6
+ export { s as CLI_NAME, a as COMMANDS, n as COMMAND_GROUPS, i as dispatch, o as listTemplates, t as printUsage, e as renderCommandHelp, r as suggestCommands };
@@ -0,0 +1,60 @@
1
+ import { n as e, r as t, t as n } from "./cliOutput-D1tSBoRM.js";
2
+ import { o as r } from "./updateCommand-x0pI_x-B.js";
3
+ import { join as i, resolve as a } from "node:path";
4
+ import { readFileSync as o, readdirSync as s, statSync as c } from "node:fs";
5
+ //#region src/infoCommand.ts
6
+ var l = () => {
7
+ let e = new URL("data:video/mp2t;base64,Ly8gQHZvbHRyby9jbGkg4oCUIHRoZSBgZnJhbWV3b3JrYCBjb21tYW5kLWxpbmUgdG9vbC4gRmlyc3Qgc2xpY2UgZXhwb3NlcwovLyB0aGUgY29tbWFuZCByZWdpc3RyeSBhbmQgZGlzcGF0Y2g7IGVhY2ggc3ViY29tbWFuZCdzIGltcGxlbWVudGF0aW9uIGxhbmRzCi8vIGFzIHRoZSByZWxldmFudCBwcmltaXRpdmUgY29tZXMgb25saW5lLgoKZXhwb3J0IGNvbnN0IENMSV9OQU1FID0gJ2ZyYW1ld29yaycgYXMgY29uc3QKCmV4cG9ydCAqIGZyb20gJy4vY29tbWFuZHMnCmV4cG9ydCB7IGxpc3RUZW1wbGF0ZXMsIHR5cGUgVGVtcGxhdGVJbmZvIH0gZnJvbSAnLi90ZW1wbGF0ZXMnCgovLyBgU3RhcnR1cENvbnRleHRgIC8gYFN0YXJ0dXBGbmAgYXJlIGV4cG9zZWQgdmlhIHRoZSBkZWRpY2F0ZWQKLy8gc3VicGF0aCBgQHZvbHRyby9jbGkvc3RhcnR1cGAuIFN1YnBhdGggaW1wb3J0IGtlZXBzIHRoZSBDTEkncyBoZWF2eQovLyB0cmFuc2l0aXZlIGRlcHMgKHN0YXJ0LnRzLCBkZXYudHMsIOKApikgb3V0IG9mIHVzZXItYXBwCi8vIHR5cGVjaGVja2luZyB3aGVuIGFsbCB0aGV5IG5lZWQgaXMgdGhlIHR5cGUuCg==", "" + import.meta.url).pathname;
8
+ for (let t of [i(e, "..", "package.json"), i(e, "package.json")]) try {
9
+ return JSON.parse(o(t, "utf8")).version ?? "0.0.0";
10
+ } catch {}
11
+ return "0.0.0";
12
+ }, u = (e) => {
13
+ let t = i(e, "node_modules", "@voltro"), n;
14
+ try {
15
+ n = s(t).filter((e) => {
16
+ try {
17
+ return c(i(t, e)).isDirectory();
18
+ } catch {
19
+ return !1;
20
+ }
21
+ });
22
+ } catch {
23
+ return [];
24
+ }
25
+ let r = [];
26
+ for (let e of [...n].sort()) {
27
+ let n = "unknown";
28
+ try {
29
+ n = JSON.parse(o(i(t, e, "package.json"), "utf8")).version ?? "unknown";
30
+ } catch {}
31
+ r.push({
32
+ name: `@voltro/${e}`,
33
+ version: n
34
+ });
35
+ }
36
+ return r;
37
+ }, d = (e, t = process.env) => {
38
+ let n = u(e), i = [...new Set(n.map((e) => e.version).filter((e) => e !== "unknown"))].sort();
39
+ return {
40
+ cliVersion: l(),
41
+ node: process.version,
42
+ platform: `${process.platform}-${process.arch}`,
43
+ packageManager: r(e),
44
+ dialect: (t.DB_DIALECT ?? "postgres").toLowerCase(),
45
+ dbUrlConfigured: typeof t.DB_URL == "string" && t.DB_URL.length > 0,
46
+ voltroPackages: n,
47
+ versionSkew: i.length > 1 ? i : []
48
+ };
49
+ }, f = async (r) => {
50
+ let i = t(r);
51
+ i && n();
52
+ let o = a(r.find((e) => !e.startsWith("-")) ?? process.cwd()), s = d(o);
53
+ if (i) return e(s), +(s.versionSkew.length > 0);
54
+ if (console.log(`voltro v${s.cliVersion}`), console.log(` node ${s.node} (${s.platform})`), console.log(` package manager ${s.packageManager}`), console.log(` dialect ${s.dialect}${s.dbUrlConfigured ? "" : " (DB_URL not set)"}`), s.voltroPackages.length === 0) return console.log(`\n No @voltro packages found under ${o}/node_modules — run from an app root with deps installed.`), 0;
55
+ console.log(`\n @voltro packages (${s.voltroPackages.length}):`);
56
+ for (let e of s.voltroPackages) console.log(` ${e.name.padEnd(28)} ${e.version}`);
57
+ return s.versionSkew.length > 0 ? (console.log(""), console.log(` ⚠ version skew — @voltro/* are released in lockstep but ${s.versionSkew.length} versions are installed:`), console.log(` ${s.versionSkew.join(", ")}`), console.log(" Run `voltro update` to realign every @voltro/* package."), 1) : 0;
58
+ };
59
+ //#endregion
60
+ export { f as runInfoCommand };
@@ -46,6 +46,13 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
46
46
  let t = [];
47
47
  for (let n of e) {
48
48
  if (typeof n != "object" || !n) continue;
49
+ if (typeof n.open == "string") {
50
+ t.push({
51
+ kind: "open",
52
+ reason: n.open
53
+ });
54
+ continue;
55
+ }
49
56
  if (typeof n.action == "string" && typeof n.resourceType == "string") {
50
57
  t.push({
51
58
  kind: "policy",
@@ -172,12 +179,17 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
172
179
  name: e.name,
173
180
  reactive: e.isReactive,
174
181
  framework: e.isFrameworkTable,
182
+ editable: e.editable ?? !0,
183
+ ...e.pkColumn === void 0 ? {} : { pkColumn: e.pkColumn },
175
184
  columns: e.columns.map((e) => ({
176
185
  name: e.name,
177
186
  type: String(e.type),
178
187
  nullable: e.nullable,
179
188
  ...e.referencesTable === void 0 ? {} : { refersTo: e.referencesTable },
180
- ...e.oneOf === void 0 ? {} : { enum: e.oneOf }
189
+ ...e.oneOf === void 0 ? {} : { enum: e.oneOf },
190
+ ...e.serverOnly === !0 ? { serverOnly: !0 } : {},
191
+ ...e.encrypted === !0 ? { encrypted: !0 } : {},
192
+ ...e.sensitive === void 0 ? {} : { sensitive: e.sensitive }
181
193
  }))
182
194
  }))
183
195
  }), S = (e, t, n = {}, i = {}) => {
@@ -252,11 +264,22 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
252
264
  set: 0,
253
265
  missingRequired: 0
254
266
  }
255
- }, c) : s(200, t.env(), c) : o === "/_voltro/inspect/data/tables" ? t.kind === "api" ? t.inspectTables === void 0 ? s(200, { tables: [] }, c) : s(200, t.inspectTables(), c) : s(404, { error: "data viewer is api-only" }, c) : o === "/_voltro/inspect/invoke" ? s(404, { error: "invoke not enabled here — use POST handler" }, c) : s(404, {
267
+ }, c) : s(200, t.env(), c) : o === "/_voltro/inspect/data/tables" ? t.kind === "api" ? t.inspectTables === void 0 ? s(200, { tables: [] }, c) : s(200, t.inspectTables(), c) : s(404, { error: "data viewer is api-only" }, c) : o === "/_voltro/inspect/invoke" ? s(404, { error: "invoke not enabled here — use POST handler" }, c) : C.has(o) ? s(404, {
268
+ error: "endpoint not mounted on this instance",
269
+ path: o,
270
+ reason: "This inspect endpoint is served by `voltro dev`. A production `voltro serve` does not mount it — the data behind it (the in-memory log ring, the span buffer, the dev route table) is not collected there. This is not a missing token: the same request with no token would be 401."
271
+ }, c) : s(404, {
256
272
  error: "unknown inspect endpoint",
257
273
  path: o
258
274
  }, c);
259
- }, C = async (e, t, n, i = {}) => {
275
+ }, C = /* @__PURE__ */ new Set([
276
+ `${n}/logs`,
277
+ `${n}/traces`,
278
+ `${n}/workflows`,
279
+ `${n}/storage`,
280
+ `${n}/aggregates`,
281
+ `${n}/flags`
282
+ ]), w = async (e, t, n, i = {}) => {
260
283
  let o = l(t.origin ?? t.Origin);
261
284
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
262
285
  let c = (i.method ?? "POST").toUpperCase();
@@ -291,7 +314,26 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
291
314
  n !== "cookie" && (h[n] = t);
292
315
  }
293
316
  return s(200, await p(f.input, h), o);
294
- }, w = async (e, t, i, o, c = {}) => {
317
+ }, T = async (e, t, n, i = {}) => {
318
+ let o = _(e);
319
+ if (!y(o) || o !== "/_voltro/inspect/migrations" || (i.method ?? "GET").toUpperCase() !== "GET") return null;
320
+ let c = l(n.origin ?? n.Origin);
321
+ if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, c);
322
+ let u = (i.authResolver ?? a)(n, "GET");
323
+ return u.ok ? t.kind === "api" ? t.migrations === void 0 ? s(200, {
324
+ drift: {
325
+ isDrifted: !1,
326
+ liveFingerprint: "",
327
+ liveSnapshot: { tables: [] }
328
+ },
329
+ pending: null,
330
+ history: [],
331
+ softDropSnapshots: []
332
+ }, c) : s(200, await t.migrations(), c) : s(404, { error: "migrations endpoint is api-only" }, c) : s(401, {
333
+ error: "unauthorized",
334
+ reason: u.reason
335
+ }, c);
336
+ }, E = async (e, t, i, o, c = {}) => {
295
337
  let u = _(e);
296
338
  if (!y(u) || !u.startsWith("/_voltro/inspect/webhooks/")) return null;
297
339
  let f = l(i.origin ?? i.Origin);
@@ -351,7 +393,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
351
393
  message: e?.message ?? String(e)
352
394
  }, f);
353
395
  }
354
- }, T = async (e, t, i, o, c = {}) => {
396
+ }, D = async (e, t, i, o, c = {}) => {
355
397
  let u = _(e);
356
398
  if (!y(u)) return null;
357
399
  let d = l(i.origin ?? i.Origin), f = (c.method ?? "POST").toUpperCase();
@@ -394,7 +436,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
394
436
  message: e?.message ?? String(e)
395
437
  }, d);
396
438
  }
397
- }, E = async (e, t, n, i = {}) => {
439
+ }, O = async (e, t, n, i = {}) => {
398
440
  if (_(e) !== "/_voltro/inspect/data/rows") return null;
399
441
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
400
442
  if (c !== "GET") return s(405, {
@@ -409,9 +451,9 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
409
451
  }, o);
410
452
  if (t.kind !== "api") return s(404, { error: "data viewer is api-only" }, o);
411
453
  if (t.inspectRows === void 0) return s(404, { error: "inspectRows not configured" }, o);
412
- let d = O(e), f = d.get("table");
454
+ let d = A(e), f = d.get("table");
413
455
  if (!f) return s(400, { error: "query.table is required" }, o);
414
- let p = k(d.get("offset")) ?? 0, m = k(d.get("limit")) ?? 50, h = {}, g = d.get("q");
456
+ let p = j(d.get("offset")) ?? 0, m = j(d.get("limit")) ?? 50, h = {}, g = d.get("q");
415
457
  if (g) {
416
458
  if (g.length > 8192) return s(400, { error: "query.q too large" }, o);
417
459
  try {
@@ -436,7 +478,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
436
478
  message: e?.message ?? String(e)
437
479
  }, o);
438
480
  }
439
- }, D = async (t, n, i, o = {}) => {
481
+ }, k = async (t, n, i, o = {}) => {
440
482
  if (_(t) !== "/_voltro/inspect/provenance") return null;
441
483
  let c = l(i.origin ?? i.Origin), u = (o.method ?? "GET").toUpperCase();
442
484
  if (u !== "GET") return s(405, {
@@ -453,7 +495,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
453
495
  if (p) return p;
454
496
  if (n.kind !== "api") return s(404, { error: "provenance is api-only" }, c);
455
497
  if (n.inspectRows === void 0) return s(404, { error: "inspectRows not configured" }, c);
456
- let m = O(t), h = m.get("table"), g = m.get("id"), v = m.get("column") ?? void 0;
498
+ let m = A(t), h = m.get("table"), g = m.get("id"), v = m.get("column") ?? void 0;
457
499
  if (!h || !g) return s(400, { error: "query.table and query.id are required" }, c);
458
500
  try {
459
501
  let t = (await n.inspectRows({
@@ -480,14 +522,14 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
480
522
  message: e?.message ?? String(e)
481
523
  }, c);
482
524
  }
483
- }, O = (e) => {
525
+ }, A = (e) => {
484
526
  let t = e.indexOf("?");
485
527
  return t < 0 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
486
- }, k = (e) => {
528
+ }, j = (e) => {
487
529
  if (e === null || e === "") return;
488
530
  let t = Number(e);
489
531
  return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
490
- }, A = async (e, t, n, i = {}) => {
532
+ }, M = async (e, t, n, i = {}) => {
491
533
  if (_(e) !== "/_voltro/inspect/workflows/runs") return null;
492
534
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
493
535
  if (c !== "GET") return s(405, {
@@ -507,7 +549,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
507
549
  offset: 0,
508
550
  limit: 50
509
551
  }, o);
510
- let d = O(e);
552
+ let d = A(e);
511
553
  try {
512
554
  let e = d.get("deadLettered") === "1" || d.get("deadLettered") === "true", n = (d.get("statuses") ?? "").split(",").map((e) => e.trim()).filter((e) => e !== "");
513
555
  return s(200, await t.inspectWorkflowRuns({
@@ -518,8 +560,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
518
560
  ...d.get("idPrefix") === null ? {} : { idPrefix: d.get("idPrefix") },
519
561
  ...d.get("from") === null ? {} : { startedAfter: d.get("from") },
520
562
  ...d.get("to") === null ? {} : { startedBefore: d.get("to") },
521
- offset: k(d.get("offset")) ?? 0,
522
- limit: k(d.get("limit")) ?? 50
563
+ offset: j(d.get("offset")) ?? 0,
564
+ limit: j(d.get("limit")) ?? 50
523
565
  }), o);
524
566
  } catch (e) {
525
567
  return s(500, {
@@ -527,7 +569,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
527
569
  message: e?.message ?? String(e)
528
570
  }, o);
529
571
  }
530
- }, j = async (e, t, n, i = {}) => {
572
+ }, N = async (e, t, n, i = {}) => {
531
573
  if (_(e) !== "/_voltro/inspect/workflows/stats") return null;
532
574
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
533
575
  if (c !== "GET") return s(405, {
@@ -549,11 +591,11 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
549
591
  total: 0,
550
592
  truncated: !1
551
593
  }, o);
552
- let d = O(e);
594
+ let d = A(e);
553
595
  try {
554
596
  return s(200, await t.inspectWorkflowRunStats({
555
597
  ...d.get("tag") === null ? {} : { tag: d.get("tag") },
556
- ...k(d.get("hours")) === void 0 ? {} : { hours: k(d.get("hours")) }
598
+ ...j(d.get("hours")) === void 0 ? {} : { hours: j(d.get("hours")) }
557
599
  }), o);
558
600
  } catch (e) {
559
601
  return s(500, {
@@ -561,7 +603,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
561
603
  message: e?.message ?? String(e)
562
604
  }, o);
563
605
  }
564
- }, M = async (e, t, n, i, o = {}) => {
606
+ }, P = async (e, t, n, i, o = {}) => {
565
607
  let c = _(e).match(/^\/_voltro\/inspect\/workflows\/start\/([^/]+)$/);
566
608
  if (!c) return null;
567
609
  let u = decodeURIComponent(c[1] ?? ""), d = l(n.origin ?? n.Origin), f = (o.method ?? "POST").toUpperCase();
@@ -594,7 +636,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
594
636
  message: e?.message ?? String(e)
595
637
  }, d);
596
638
  }
597
- }, N = async (e, t, n, i = {}) => {
639
+ }, F = async (e, t, n, i = {}) => {
598
640
  let o = _(e);
599
641
  if (!o.startsWith("/_voltro/inspect/schedules")) return null;
600
642
  let c = l(n.origin ?? n.Origin);
@@ -607,14 +649,44 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
607
649
  let f = d(i.method, n, c);
608
650
  if (f) return f;
609
651
  if (t.kind !== "api") return s(404, { error: "schedules are api-only" }, c);
610
- let p = (i.method ?? "GET").toUpperCase(), m = o.match(/^\/_voltro\/inspect\/schedules\/([^/]+)\/fire$/);
652
+ let p = (i.method ?? "GET").toUpperCase(), m = o.match(/^\/_voltro\/inspect\/schedules\/([^/]+)\/backfill$/);
611
653
  if (m) {
654
+ if (p !== "POST") return s(405, {
655
+ error: "method not allowed",
656
+ expected: "POST"
657
+ }, c);
658
+ if (!t.inspectBackfillSchedule) return s(404, { error: "inspectBackfillSchedule not configured" }, c);
659
+ let e = decodeURIComponent(m[1] ?? ""), n;
660
+ try {
661
+ n = JSON.parse(i.body ?? "{}");
662
+ } catch {
663
+ return s(400, { error: "invalid JSON body — expected { from, to, confirm?, limit? }" }, c);
664
+ }
665
+ if (typeof n.from != "string" || typeof n.to != "string") return s(400, { error: "body must carry ISO 'from' and 'to' instants" }, c);
666
+ try {
667
+ let r = await t.inspectBackfillSchedule({
668
+ name: e,
669
+ from: n.from,
670
+ to: n.to,
671
+ confirm: n.confirm === !0,
672
+ ...typeof n.limit == "number" ? { limit: n.limit } : {}
673
+ });
674
+ return s(r.kind === "refused" ? 409 : 200, r, c);
675
+ } catch (e) {
676
+ return s(500, {
677
+ error: "backfill failed",
678
+ message: e?.message ?? String(e)
679
+ }, c);
680
+ }
681
+ }
682
+ let h = o.match(/^\/_voltro\/inspect\/schedules\/([^/]+)\/fire$/);
683
+ if (h) {
612
684
  if (p !== "POST") return s(405, {
613
685
  error: "method not allowed",
614
686
  expected: "POST"
615
687
  }, c);
616
688
  if (!t.inspectFireSchedule) return s(404, { error: "inspectFireSchedule not configured" }, c);
617
- let n = decodeURIComponent(m[1] ?? ""), r = O(e).get("trigger") === "external" ? "external" : "manual";
689
+ let n = decodeURIComponent(h[1] ?? ""), r = A(e).get("trigger") === "external" ? "external" : "manual";
618
690
  try {
619
691
  return s(200, await t.inspectFireSchedule({
620
692
  name: n,
@@ -638,12 +710,12 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
638
710
  offset: 0,
639
711
  limit: 50
640
712
  }, c);
641
- let n = O(e);
713
+ let n = A(e);
642
714
  try {
643
715
  return s(200, await t.inspectScheduleRuns({
644
716
  ...n.get("name") === null ? {} : { name: n.get("name") },
645
- offset: k(n.get("offset")) ?? 0,
646
- limit: k(n.get("limit")) ?? 50
717
+ offset: j(n.get("offset")) ?? 0,
718
+ limit: j(n.get("limit")) ?? 50
647
719
  }), c);
648
720
  } catch (e) {
649
721
  return s(500, {
@@ -662,7 +734,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
662
734
  error: "unknown schedules endpoint",
663
735
  path: o
664
736
  }, c);
665
- }, P = async (e, t, n, i = {}) => {
737
+ }, I = async (e, t, n, i = {}) => {
666
738
  if (_(e) !== "/_voltro/inspect/cluster") return null;
667
739
  let o = l(n.origin ?? n.Origin);
668
740
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
@@ -710,7 +782,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
710
782
  message: e?.message ?? String(e)
711
783
  }, o);
712
784
  }
713
- }, F = async (e, t, n, i = {}) => {
785
+ }, L = async (e, t, n, i = {}) => {
714
786
  let o = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/steps$/);
715
787
  if (!o) return null;
716
788
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
@@ -734,7 +806,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
734
806
  message: e?.message ?? String(e)
735
807
  }, u);
736
808
  }
737
- }, I = async (e, t, n, i = {}) => {
809
+ }, R = async (e, t, n, i = {}) => {
738
810
  let o = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/events$/);
739
811
  if (!o) return null;
740
812
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
@@ -758,7 +830,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
758
830
  message: e?.message ?? String(e)
759
831
  }, u);
760
832
  }
761
- }, L = async (e, t, n, i = {}) => {
833
+ }, z = async (e, t, n, i = {}) => {
762
834
  if (_(t) !== "/_voltro/inspect/workflows/events") return null;
763
835
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
764
836
  if (c !== "GET") return s(405, {
@@ -791,7 +863,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
791
863
  message: e?.message ?? String(e)
792
864
  }, o);
793
865
  }
794
- }, R = async (e, t, n, i = {}) => {
866
+ }, B = async (e, t, n, i = {}) => {
795
867
  let o = _(t).match(/^\/_voltro\/inspect\/workflows\/events\/([^/]+)\/deliveries$/);
796
868
  if (!o) return null;
797
869
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
@@ -815,7 +887,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
815
887
  message: e?.message ?? String(e)
816
888
  }, u);
817
889
  }
818
- }, z = async (e, t, n, i = {}) => {
890
+ }, V = async (e, t, n, i = {}) => {
819
891
  if (_(e) !== "/_voltro/inspect/workflows/children") return null;
820
892
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
821
893
  if (c !== "GET") return s(405, {
@@ -829,7 +901,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
829
901
  reason: u.reason
830
902
  }, o);
831
903
  if (t.kind !== "api") return s(404, { error: "workflow children are api-only" }, o);
832
- let d = O(e).get("parentExecutionId");
904
+ let d = A(e).get("parentExecutionId");
833
905
  if (d === null || d === "") return s(400, { error: "parentExecutionId query param required" }, o);
834
906
  if (t.inspectWorkflowChildren === void 0) return s(200, {
835
907
  runs: [],
@@ -845,7 +917,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
845
917
  message: e?.message ?? String(e)
846
918
  }, o);
847
919
  }
848
- }, B = async (e, t, n, i, o = {}) => {
920
+ }, H = async (e, t, n, i, o = {}) => {
849
921
  let c = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/(cancel|retry|suspend|resume-from-step|resume|signal|update|discard|redrive)$/);
850
922
  if (!c) return null;
851
923
  let u = decodeURIComponent(c[1] ?? ""), d = c[2], f = l(n.origin ?? n.Origin), p = (o.method ?? "POST").toUpperCase();
@@ -903,7 +975,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
903
975
  message: e?.message ?? String(e)
904
976
  }, f);
905
977
  }
906
- }, V = async (e, t, n, i, o = {}) => {
978
+ }, U = async (e, t, n, i, o = {}) => {
907
979
  if (_(e) !== "/_voltro/inspect/data/import" || (o.method ?? "POST").toUpperCase() !== "POST") return null;
908
980
  let c = l(n.origin ?? n.Origin);
909
981
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, c);
@@ -936,7 +1008,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
936
1008
  message: e?.message ?? String(e)
937
1009
  }, c);
938
1010
  }
939
- }, H = async (e, t, n, i, o = {}) => {
1011
+ }, W = async (e, t, n, i, o = {}) => {
940
1012
  let c = _(e);
941
1013
  if (!c.startsWith("/_voltro/inspect/data/rows")) return null;
942
1014
  let u = (o.method ?? "POST").toUpperCase();
@@ -974,7 +1046,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
974
1046
  if (!p) return null;
975
1047
  let m = decodeURIComponent(p[1] ?? "");
976
1048
  if (!m) return s(400, { error: "row id is required in URL" }, d);
977
- let h = O(e).get("table") ?? "";
1049
+ let h = A(e).get("table") ?? "";
978
1050
  if (!h) return s(400, { error: "query.table is required" }, d);
979
1051
  if (u === "PATCH") {
980
1052
  if (!t.inspectUpdateRow) return s(404, { error: "inspectUpdateRow not configured" }, d);
@@ -1016,7 +1088,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
1016
1088
  error: "method not allowed",
1017
1089
  expected: "POST | PATCH | DELETE"
1018
1090
  }, d);
1019
- }, U = async (e, t, i, o, c = {}) => {
1091
+ }, G = async (e, t, i, o, c = {}) => {
1020
1092
  let u = _(e), d = `${n}/workflows/flow-control`;
1021
1093
  if (u !== d && !u.startsWith(`${d}/`)) return null;
1022
1094
  let f = l(i.origin ?? i.Origin), p = (c.method ?? "GET").toUpperCase();
@@ -1033,7 +1105,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
1033
1105
  expected: "GET"
1034
1106
  }, f);
1035
1107
  if (t.inspectInferences === void 0) return s(404, { error: "inspectInferences not configured" }, f);
1036
- let n = O(e).get("limit"), r = n === null ? void 0 : Number(n);
1108
+ let n = A(e).get("limit"), r = n === null ? void 0 : Number(n);
1037
1109
  try {
1038
1110
  return s(200, await t.inspectInferences(r !== void 0 && Number.isFinite(r) ? { limit: r } : {}), f);
1039
1111
  } catch (e) {
@@ -1049,7 +1121,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
1049
1121
  expected: "GET"
1050
1122
  }, f);
1051
1123
  if (t.inspectFlowControl === void 0) return s(404, { error: "inspectFlowControl not configured" }, f);
1052
- let n = O(e).get("limit"), r = n === null ? void 0 : Number(n);
1124
+ let n = A(e).get("limit"), r = n === null ? void 0 : Number(n);
1053
1125
  try {
1054
1126
  return s(200, await t.inspectFlowControl(r !== void 0 && Number.isFinite(r) ? { limit: r } : {}), f);
1055
1127
  } catch (e) {
@@ -1115,4 +1187,4 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
1115
1187
  }, f);
1116
1188
  };
1117
1189
  //#endregion
1118
- export { c as A, F as C, h as D, l as E, g as M, o as N, u as O, j as S, M as T, B as _, a, R as b, E as c, T as d, C as f, w as g, N as h, d as i, f as j, r as k, H as l, S as m, b as n, P as o, D as p, x as r, V as s, n as t, U as u, z as v, A as w, I as x, L as y };
1190
+ export { r as A, N as C, l as D, P as E, f as M, g as N, h as O, o as P, R as S, M as T, E as _, a, z as b, U as c, G as d, D as f, F as g, S as h, d as i, c as j, u as k, O as l, k as m, b as n, T as o, w as p, x as r, I as s, n as t, W as u, H as v, L as w, B as x, V as y };
@@ -0,0 +1,2 @@
1
+ import { r as e } from "./inspect-CjTYzAs_.js";
2
+ export { e as buildCapabilityManifest };