@voltro/cli 0.36.0 → 0.38.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 (126) hide show
  1. package/CHANGELOG.md +182 -0
  2. package/dist/{apiBuild-DiE9zcj6.js → apiBuild-CvacV4zA.js} +2 -2
  3. package/dist/apiBuild-ttSDDOGp.js +2 -0
  4. package/dist/{baselineCommand-DIttzO8A.js → baselineCommand-C6NMt-oa.js} +1 -4
  5. package/dist/baselineCommand-Cfw2Afwm.js +2 -0
  6. package/dist/bin.js +1 -1
  7. package/dist/bootRefusal-pgvDxlrU.js +7 -0
  8. package/dist/{build-DBe6c7qC.js → build-_LoTC1s0.js} +31 -31
  9. package/dist/{checkCommand-BhG0gmUD.js → checkCommand-Pjk5sBl2.js} +3 -3
  10. package/dist/{checkCommand-BTA6P3Yr.js → checkCommand-wibtQx-N.js} +1 -1
  11. package/dist/{cloudCmd-Cvv5HGaZ.js → cloudCmd-NQSwe_Qk.js} +1 -1
  12. package/dist/{codegen-CYM3Zqrf.js → codegen-GYYcdpCg.js} +2 -2
  13. package/dist/codegen-uYrrDzQv.js +2 -0
  14. package/dist/{codegenCommand-DH-8ZXzR.js → codegenCommand-C60m_LCp.js} +2 -2
  15. package/dist/{codemodRunner-DjQGrdmg.js → codemodRunner-CXgQ-ecJ.js} +339 -167
  16. package/dist/{commands-Bp7utV-7.js → commands-DaZVi9wi.js} +74 -73
  17. package/dist/{dashboardCommand-D5Jwjmr1.js → dashboardCommand-Dxy_kmoW.js} +3 -3
  18. package/dist/{dataCommand-DnCm0B2C.js → dataCommand-D6-Ha2lf.js} +2 -2
  19. package/dist/{dbCommand-O8HA63s2.js → dbCommand-C4UW8cVN.js} +353 -351
  20. package/dist/dbCommand-CC-qNzpz.js +2 -0
  21. package/dist/{dev-BSFTgCQ5.js → dev-CAOoXOkc.js} +1 -1
  22. package/dist/{dev-Dc4cpmRl.js → dev-E7Eo5GHc.js} +262 -261
  23. package/dist/doctorCommand-Cjl8Yii8.js +2 -0
  24. package/dist/{doctorCommand-CNFtt3nR.js → doctorCommand-gmDyALFL.js} +10 -10
  25. package/dist/{dormancyCommand-6F6NsJKf.js → dormancyCommand-CE6wG8lj.js} +1 -1
  26. package/dist/{embeddingsCommand-DRRdneJD.js → embeddingsCommand-C3uAuf6N.js} +1 -1
  27. package/dist/{envCommand-TZzcyqZ-.js → envCommand-DzuWh8ya.js} +19 -19
  28. package/dist/{evolveCommand-iU35TPjT.js → evolveCommand-DPLqcYb2.js} +2 -2
  29. package/dist/index.js +2 -2
  30. package/dist/{infoCommand-unqisJGp.js → infoCommand-CmczGj_l.js} +1 -1
  31. package/dist/inspectGateHint-BF6608UT.js +4 -0
  32. package/dist/{metaCommands-7MJfZ5cf.js → metaCommands-CIoQNlaQ.js} +1 -1
  33. package/dist/{migrate-BV7I-ZHZ.js → migrate-RwgUWXfc.js} +1 -1
  34. package/dist/{privacyCommand-C-Df56U_.js → privacyCommand-XejDMvmu.js} +4 -3
  35. package/dist/{probeCommand-CZfaaUOZ.js → probeCommand-BPEpwT32.js} +40 -39
  36. package/dist/{projectScaffold-DmzEKHib.js → projectScaffold-CxgtJvlb.js} +1 -1
  37. package/dist/{projectScaffold-LMMtaavR.js → projectScaffold-DDgWbNLe.js} +2 -2
  38. package/dist/{runtimeTrace-D5LJ_N55.js → runtimeTrace-6jfznSzr.js} +1 -1
  39. package/dist/{sdkgen-82xVuvbt.js → sdkgen-CEJZZQUA.js} +1 -1
  40. package/dist/serveCommand-DNRF2nDI.js +2 -0
  41. package/dist/{serveCommand-VVGcIMIw.js → serveCommand-DnY4VS3D.js} +541 -540
  42. package/dist/serveEntry.js +1 -1
  43. package/dist/{start-BgN62boB.js → start-CidwCcjl.js} +1 -1
  44. package/dist/{start-T4VesWiM.js → start-RCh6qKFe.js} +24 -24
  45. package/dist/startEntry.js +1 -1
  46. package/dist/startup.d.ts +40 -1
  47. package/dist/startup.js +2 -2
  48. package/dist/startupRunner-CEqQq7ax.js +108 -0
  49. package/dist/subcommandNames-CKG5Dz3a.js +27 -0
  50. package/dist/{templates-De8IR5-c.js → templates-BR-fb4SP.js} +1 -4
  51. package/dist/{test-CI6iDsYc.js → test-DIQ0jlkQ.js} +1 -1
  52. package/dist/updateCommand-B0J_T9Vs.js +2 -0
  53. package/dist/{updateCommand-CwnUK_mf.js → updateCommand-CmksX7m_.js} +1 -1
  54. package/dist/{webDev-Dybxew86.js → webDev-BKdD7c_a.js} +689 -691
  55. package/dist/webDev-CcJfdSjl2.js +2 -0
  56. package/dist/{webhooksCommand-di1CJVzu.js → webhooksCommand-BHeaF1ZJ.js} +1 -1
  57. package/package.json +35 -17
  58. package/templates/AGENTS.md +1 -1
  59. package/templates/agent-docs/_index.md +1 -1
  60. package/templates/agent-docs/cli.md +16 -0
  61. package/templates/agent-docs/data.md +30 -0
  62. package/templates/agent-docs/plugins/audit.md +50 -0
  63. package/templates/agent-docs/plugins/auth.md +4 -6
  64. package/templates/agent-docs/reference.md +3 -2
  65. package/templates/agent-docs/whats-new.md +59 -35
  66. package/templates/apps/api-ai/package.json +7 -7
  67. package/templates/apps/api-auth/package.json +8 -8
  68. package/templates/apps/api-backend/package.json +7 -7
  69. package/templates/apps/api-backend-deactivation/package.json +7 -7
  70. package/templates/apps/api-backend-mail/package.json +8 -8
  71. package/templates/apps/api-backend-mariadb/package.json +9 -9
  72. package/templates/apps/api-backend-sqlite/package.json +8 -8
  73. package/templates/apps/api-backend-storage/package.json +8 -8
  74. package/templates/apps/api-cms/package.json +10 -10
  75. package/templates/apps/api-cms/tests/content.write.test.ts +16 -2
  76. package/templates/apps/api-collab/mutations/documents.setBody.mutation.server.ts +11 -5
  77. package/templates/apps/api-collab/package.json +8 -8
  78. package/templates/apps/api-collab/tests/documents.setBody.test.ts +8 -2
  79. package/templates/apps/api-data-advanced/package.json +8 -8
  80. package/templates/apps/api-durable/package.json +8 -8
  81. package/templates/apps/api-feature-flags/package.json +9 -9
  82. package/templates/apps/api-governance/package.json +8 -8
  83. package/templates/apps/api-kv/package.json +8 -8
  84. package/templates/apps/api-moderation/package.json +8 -8
  85. package/templates/apps/api-observability/package.json +8 -8
  86. package/templates/apps/api-ratelimit/package.json +8 -8
  87. package/templates/apps/api-rbac/package.json +8 -8
  88. package/templates/apps/api-rest/package.json +7 -7
  89. package/templates/apps/api-saas/package.json +11 -11
  90. package/templates/apps/api-saas-starter/package.json +10 -10
  91. package/templates/apps/api-search/package.json +8 -8
  92. package/templates/apps/api-status/package.json +8 -8
  93. package/templates/apps/api-versioning/mutations/documents.update.mutation.server.ts +7 -5
  94. package/templates/apps/api-versioning/package.json +8 -8
  95. package/templates/apps/api-webhooks/package.json +9 -9
  96. package/templates/apps/changelog/package.json +6 -6
  97. package/templates/apps/edge-functions/package.json +2 -2
  98. package/templates/apps/frontend-admin/package.json +8 -8
  99. package/templates/apps/frontend-app/package.json +9 -9
  100. package/templates/apps/frontend-auth/package.json +8 -8
  101. package/templates/apps/frontend-blank/package.json +7 -7
  102. package/templates/apps/frontend-cms/package.json +9 -9
  103. package/templates/apps/frontend-collab/package.json +10 -10
  104. package/templates/apps/frontend-contact/package.json +7 -7
  105. package/templates/apps/frontend-dashboard/package.json +7 -7
  106. package/templates/apps/frontend-docs/package.json +7 -7
  107. package/templates/apps/frontend-i18n/package.json +6 -6
  108. package/templates/apps/frontend-landing/package.json +7 -7
  109. package/templates/apps/frontend-portal/package.json +8 -8
  110. package/templates/apps/frontend-saas/package.json +8 -8
  111. package/templates/apps/frontend-spa/package.json +7 -7
  112. package/templates/apps/frontend-ssr/package.json +7 -7
  113. package/templates/apps/frontend-ssr-api/package.json +8 -8
  114. package/templates/apps/frontend-static-blog/package.json +6 -6
  115. package/templates/apps/frontend-status/package.json +8 -8
  116. package/templates/apps/mobile-app/package.json +3 -3
  117. package/templates/patches/@effect__cluster@0.60.0.patch +51 -3
  118. package/dist/apiBuild-ZEZnCXn2.js +0 -2
  119. package/dist/baselineCommand-C2ClWZN3.js +0 -2
  120. package/dist/codegen-ChBi_hVa.js +0 -2
  121. package/dist/dbCommand-DS4b97Is.js +0 -2
  122. package/dist/doctorCommand-BYffQc0s.js +0 -2
  123. package/dist/serveCommand-CEBVP36A.js +0 -2
  124. package/dist/startupRunner-DPGFchOa.js +0 -71
  125. package/dist/updateCommand-CSBXVsYq.js +0 -2
  126. package/dist/webDev-BcykISYQ2.js +0 -2
@@ -1,20 +1,21 @@
1
- import { dirname as e, join as t, resolve as n } from "node:path";
2
- import { readFileSync as r } from "node:fs";
3
- import { fileURLToPath as i } from "node:url";
1
+ import { n as e, r as t, t as n } from "./subcommandNames-CKG5Dz3a.js";
2
+ import { dirname as r, join as i, resolve as a } from "node:path";
3
+ import { readFileSync as o } from "node:fs";
4
+ import { fileURLToPath as s } from "node:url";
4
5
  //#region src/commands.ts
5
- var a = () => {
6
+ var c = () => {
6
7
  try {
7
- let n = t(e(i(import.meta.url)), "..", "package.json");
8
- return JSON.parse(r(n, "utf8")).version ?? "0.0.0";
8
+ let e = i(r(s(import.meta.url)), "..", "package.json");
9
+ return JSON.parse(o(e, "utf8")).version ?? "0.0.0";
9
10
  } catch {
10
11
  return "0.0.0";
11
12
  }
12
- }, o = [
13
+ }, l = [
13
14
  {
14
15
  name: "list-templates",
15
16
  summary: "List available app templates (kind, summary, tags).",
16
17
  status: "wired",
17
- run: (e) => import("./projectScaffold-DmzEKHib.js").then((t) => t.runListTemplates(e)),
18
+ run: (e) => import("./projectScaffold-CxgtJvlb.js").then((t) => t.runListTemplates(e)),
18
19
  help: {
19
20
  usage: "",
20
21
  examples: [["voltro list-templates", "every template `create-project` / `add-app` can scaffold"]]
@@ -24,7 +25,7 @@ var a = () => {
24
25
  name: "create-project",
25
26
  summary: "Scaffold a new project under apps/<name>/ from one or more templates (creates the workspace root when there is none).",
26
27
  status: "wired",
27
- run: (e) => import("./projectScaffold-DmzEKHib.js").then((t) => t.runCreateProject(e)),
28
+ run: (e) => import("./projectScaffold-CxgtJvlb.js").then((t) => t.runCreateProject(e)),
28
29
  help: {
29
30
  usage: "<name> [--api <templateId>] [--web <templateId>] [--mobile[=<templateId>]] [--no-register]",
30
31
  flags: [
@@ -64,7 +65,7 @@ var a = () => {
64
65
  name: "add-app",
65
66
  summary: "Add a new app to an existing project from a template. Usage: voltro add-app <appName> --template <id> [--to <projectName>].",
66
67
  status: "wired",
67
- run: (e) => import("./projectScaffold-DmzEKHib.js").then((t) => t.runAddApp(e)),
68
+ run: (e) => import("./projectScaffold-CxgtJvlb.js").then((t) => t.runAddApp(e)),
68
69
  help: {
69
70
  usage: "<appName> --template <templateId> [--to <projectName>] [--no-register]",
70
71
  flags: [
@@ -79,7 +80,7 @@ var a = () => {
79
80
  name: "init",
80
81
  summary: "Initialise the current directory as a Voltro workspace root (pnpm-workspace.yaml, root scripts, .gitignore, git init). Idempotent; takes no arguments.",
81
82
  status: "wired",
82
- run: (e) => import("./metaCommands-7MJfZ5cf.js").then((t) => t.runInit(e)),
83
+ run: (e) => import("./metaCommands-CIoQNlaQ.js").then((t) => t.runInit(e)),
83
84
  help: {
84
85
  usage: "",
85
86
  examples: [["voltro init", "make the current directory a workspace root, then `voltro create-project <name>`"]],
@@ -90,7 +91,7 @@ var a = () => {
90
91
  name: "dev",
91
92
  summary: "Start the local development server (auto-discovers routes / mutations).",
92
93
  status: "wired",
93
- run: (e) => import("./dev-BSFTgCQ5.js").then((t) => t.runDev(e)),
94
+ run: (e) => import("./dev-CAOoXOkc.js").then((t) => t.runDev(e)),
94
95
  help: {
95
96
  usage: "[app]",
96
97
  examples: [["voltro dev", "boot the app in the current directory"], ["voltro dev apps/acme/api", "boot a specific app"]],
@@ -108,7 +109,7 @@ var a = () => {
108
109
  name: "dashboard",
109
110
  summary: "Serve the DevTools dashboard standalone (from @voltro/dashboard). Targets via VOLTRO_DASHBOARD_APPS; --port to override.",
110
111
  status: "wired",
111
- run: (e) => import("./dashboardCommand-D5Jwjmr1.js").then((t) => t.runDashboardCommand(e)),
112
+ run: (e) => import("./dashboardCommand-Dxy_kmoW.js").then((t) => t.runDashboardCommand(e)),
112
113
  help: {
113
114
  usage: "[--port <n>]",
114
115
  flags: [["--port <n>", "port to serve the dashboard on"]],
@@ -120,7 +121,7 @@ var a = () => {
120
121
  name: "check",
121
122
  summary: "Verify the app graph (blast-radius checks) against a running api; LLM-shaped --json diagnostics. Flags: --json, --process <p>, --diff removeTable:<name>.",
122
123
  status: "wired",
123
- run: (e) => import("./checkCommand-BTA6P3Yr.js").then((t) => t.runCheckCommand(e)),
124
+ run: (e) => import("./checkCommand-wibtQx-N.js").then((t) => t.runCheckCommand(e)),
124
125
  help: {
125
126
  usage: "[--json] [--offline] [--process <name>] [--diff removeTable:<name>]",
126
127
  flags: [
@@ -154,7 +155,7 @@ var a = () => {
154
155
  name: "webhooks",
155
156
  summary: "Outbound-webhook artefacts. `consumer` generates the ZERO-DEPENDENCY Standard-Webhooks verification package a subscriber installs, from this app's own declared events; `events` lists the events a subscriber can register for. Usage: voltro webhooks <consumer|events> [path] [--out <dir>] [--name <pkg>] [--json].",
156
157
  status: "wired",
157
- run: (e) => import("./webhooksCommand-di1CJVzu.js").then((t) => t.runWebhooksCommand(e)),
158
+ run: (e) => import("./webhooksCommand-BHeaF1ZJ.js").then((t) => t.runWebhooksCommand(e)),
158
159
  help: {
159
160
  usage: "<consumer|events> [path] [--out <dir>] [--name <pkg>] [--json]",
160
161
  flags: [
@@ -170,7 +171,7 @@ var a = () => {
170
171
  name: "evolve",
171
172
  summary: "Schema-evolution copilot: propose an observed-graph-driven codemod + a branch-verified backfill for a schema change (rename/retype/split/drop a column, rename a table). Dry-run by default; --write applies. Usage: voltro evolve rename-column <table>.<col> --to <newName> [--write] [--json].",
172
173
  status: "wired",
173
- run: (e) => import("./evolveCommand-iU35TPjT.js").then((t) => t.runEvolveCommand(e)),
174
+ run: (e) => import("./evolveCommand-DPLqcYb2.js").then((t) => t.runEvolveCommand(e)),
174
175
  help: {
175
176
  usage: "<rename-column|rename-table|retype-column|split-column|drop-column> <target> [--to <new>] [--write]",
176
177
  flags: [
@@ -187,7 +188,7 @@ var a = () => {
187
188
  name: "codegen",
188
189
  summary: "Emit rpcGroup.generated.ts from discovered route / mutation descriptors.",
189
190
  status: "wired",
190
- run: (e) => import("./codegenCommand-DH-8ZXzR.js").then((t) => t.runCodegenCommand(e)),
191
+ run: (e) => import("./codegenCommand-C60m_LCp.js").then((t) => t.runCodegenCommand(e)),
191
192
  help: {
192
193
  usage: "[app]",
193
194
  examples: [["voltro codegen", "regenerate rpcGroup.generated.ts for the app in the cwd"]],
@@ -198,7 +199,7 @@ var a = () => {
198
199
  name: "migrate",
199
200
  summary: "Apply the declared schema to the database (alias of `db apply` — diffs declared vs live and emits the ALTERs). `--create-only` for the bootstrap-only CREATE TABLE IF NOT EXISTS path.",
200
201
  status: "wired",
201
- run: (e) => import("./migrate-BV7I-ZHZ.js").then((t) => t.runMigrateCommand(e)),
202
+ run: (e) => import("./migrate-RwgUWXfc.js").then((t) => t.runMigrateCommand(e)),
202
203
  help: {
203
204
  usage: "[app] [--create-only]",
204
205
  flags: [["--create-only", "only CREATE TABLE IF NOT EXISTS — never ALTER (bootstrap)"]],
@@ -210,7 +211,7 @@ var a = () => {
210
211
  name: "test",
211
212
  summary: "Run vitest against the app at the cwd (auto-discovers *.test.ts/tsx).",
212
213
  status: "wired",
213
- run: (e) => import("./test-CI6iDsYc.js").then((t) => t.runTestCommand(e)),
214
+ run: (e) => import("./test-DIQ0jlkQ.js").then((t) => t.runTestCommand(e)),
214
215
  help: {
215
216
  usage: "[dir] [filter…] [--watch] [-t <pattern>]",
216
217
  flags: [
@@ -258,7 +259,7 @@ var a = () => {
258
259
  name: "info",
259
260
  summary: "Report versions (CLI, node, every installed @voltro/* — flags lockstep skew), package manager, and dialect. --json for CI. Exits 1 on version skew.",
260
261
  status: "wired",
261
- run: (e) => import("./infoCommand-unqisJGp.js").then((t) => t.runInfoCommand(e)),
262
+ run: (e) => import("./infoCommand-CmczGj_l.js").then((t) => t.runInfoCommand(e)),
262
263
  help: {
263
264
  usage: "[--json]",
264
265
  flags: [["--json", "machine-readable report"]],
@@ -279,7 +280,7 @@ var a = () => {
279
280
  name: "env",
280
281
  summary: "Inspect/sync the typed-env manifest. Subcommands: check (default), sync (.env.example), types (env.generated.d.ts for CI tsc), turbo.",
281
282
  status: "wired",
282
- run: (e) => import("./envCommand-TZzcyqZ-.js").then((t) => t.runEnvCommand(e)),
283
+ run: (e) => import("./envCommand-DzuWh8ya.js").then((t) => t.runEnvCommand(e)),
283
284
  help: {
284
285
  usage: "[check|sync|types|turbo] [--force]",
285
286
  flags: [["--force", "overwrite the generated file instead of refusing on a conflict"]],
@@ -308,15 +309,15 @@ var a = () => {
308
309
  run: async (e) => {
309
310
  let t = e.find((e) => !e.startsWith("-")) ?? process.cwd();
310
311
  if (e.includes("--preflight")) {
311
- let { runServePreflight: e } = await import("./doctorCommand-BYffQc0s.js");
312
- return e(n(t), !0);
312
+ let { runServePreflight: e } = await import("./doctorCommand-Cjl8Yii8.js");
313
+ return e(a(t), !0);
313
314
  }
314
- let { tryRunWebServe: r } = await import("./webDev-BcykISYQ2.js"), i = await r(n(t));
315
- if (!i.ran) {
316
- let { runServeDispatch: t } = await import("./serveCommand-CEBVP36A.js");
315
+ let { tryRunWebServe: n } = await import("./webDev-CcJfdSjl2.js"), r = await n(a(t));
316
+ if (!r.ran) {
317
+ let { runServeDispatch: t } = await import("./serveCommand-DNRF2nDI.js");
317
318
  return t(e);
318
319
  }
319
- return i.exitCode;
320
+ return r.exitCode;
320
321
  },
321
322
  help: {
322
323
  usage: "[app] [--preflight]",
@@ -341,13 +342,13 @@ var a = () => {
341
342
  handlesHelp: !0,
342
343
  summary: "Preflight an app for production: the precompiled serve bundle, hand-rolled primitives (naming the shipped one), @voltro/* version skew, executors with no access check, `.serverOnly()` leaks, and junction-FK gaps.",
343
344
  status: "wired",
344
- run: (e) => import("./doctorCommand-BYffQc0s.js").then((t) => t.runDoctorCommand(e))
345
+ run: (e) => import("./doctorCommand-Cjl8Yii8.js").then((t) => t.runDoctorCommand(e))
345
346
  },
346
347
  {
347
348
  name: "build",
348
349
  summary: "Production build for a web app (vite build + per-page SSG pre-render).",
349
350
  status: "wired",
350
- run: (e) => import("./build-DBe6c7qC.js").then((t) => t.runBuildCommand(e)),
351
+ run: (e) => import("./build-_LoTC1s0.js").then((t) => t.runBuildCommand(e)),
351
352
  help: {
352
353
  usage: "[app] [--target <t>]",
353
354
  flags: [["--target <t>", "build target"]],
@@ -363,7 +364,7 @@ var a = () => {
363
364
  name: "prune-runtime",
364
365
  summary: "Trim a deployed web tree’s node_modules to the reachable runtime set (standalone image slimming).",
365
366
  status: "wired",
366
- run: (e) => import("./runtimeTrace-D5LJ_N55.js").then((t) => t.runPruneRuntimeCommand(e)),
367
+ run: (e) => import("./runtimeTrace-6jfznSzr.js").then((t) => t.runPruneRuntimeCommand(e)),
367
368
  hidden: !0
368
369
  },
369
370
  {
@@ -381,7 +382,7 @@ var a = () => {
381
382
  name: "dormancy",
382
383
  summary: "Single-node scale-to-zero: front the API with a wake-orchestrator that stops the app when idle and brings it back on a request or a due wakeup (cron/workflow). Needs a SQL store. Flags: --port, --app-port, --idle-grace-ms, --tick-ms.",
383
384
  status: "wired",
384
- run: (e) => import("./dormancyCommand-6F6NsJKf.js").then((t) => t.runDormancyCommand(e)),
385
+ run: (e) => import("./dormancyCommand-CE6wG8lj.js").then((t) => t.runDormancyCommand(e)),
385
386
  help: {
386
387
  usage: "[app] [--port <n>] [--app-port <n>] [--idle-grace-ms <n>] [--tick-ms <n>]",
387
388
  flags: [
@@ -398,7 +399,7 @@ var a = () => {
398
399
  name: "start",
399
400
  summary: "Production runtime: serves dist + SSR-on-demand for ssr/isr pages.",
400
401
  status: "wired",
401
- run: (e) => import("./start-BgN62boB.js").then((t) => t.runStartCommand(e)),
402
+ run: (e) => import("./start-CidwCcjl.js").then((t) => t.runStartCommand(e)),
402
403
  help: {
403
404
  usage: "[app]",
404
405
  examples: [["voltro start", "serve a built web app (dist + SSR-on-demand)"]],
@@ -409,7 +410,7 @@ var a = () => {
409
410
  name: "deploy",
410
411
  summary: "Show deploy options + `voltro deploy plan` auto-detects the target tier (static-cdn / container / functions) per app + function.",
411
412
  status: "wired",
412
- run: (e) => import("./metaCommands-7MJfZ5cf.js").then((t) => t.runDeploy(e)),
413
+ run: (e) => import("./metaCommands-CIoQNlaQ.js").then((t) => t.runDeploy(e)),
413
414
  help: {
414
415
  usage: "[plan]",
415
416
  examples: [["voltro deploy plan", "the auto-detected target tier per app + function"]]
@@ -433,9 +434,9 @@ var a = () => {
433
434
  name: "privacy",
434
435
  summary: "GDPR / DSAR tooling. scope [root] — derive the subject graph from the schema AND print what it cannot see. export <subjectId> --url <app> / erase <subjectId> --url <app> --confirm — run against the RUNNING app's admin-gated governance endpoint, so the erasure log and configured anonymize fields apply.",
435
436
  status: "wired",
436
- run: (e) => import("./privacyCommand-C-Df56U_.js").then((t) => t.runPrivacyCommand(e)),
437
+ run: (e) => import("./privacyCommand-XejDMvmu.js").then((t) => t.runPrivacyCommand(e)),
437
438
  help: {
438
- usage: "<scope|export|erase>",
439
+ usage: t(e),
439
440
  examples: [
440
441
  ["voltro privacy scope --subject-table users", "every table a DSAR reaches, and every table it does not"],
441
442
  ["voltro privacy export usr_123 --url https://api.example.com", "the subject's portable bundle"],
@@ -450,11 +451,11 @@ var a = () => {
450
451
  },
451
452
  {
452
453
  name: "db",
453
- summary: "Database subcommands. Declarative flow: plan, apply, branch, plans, drift [--accept], squash, restore-snapshot. File migrations: generate [name], migrate, rollback, status, files, rollback-file. Also: seed, gc-snapshots.",
454
+ summary: "Database subcommands. Declarative flow: plan, apply, branch, plans, drift [--accept], squash, restore-snapshot. File migrations: generate [name], migrate, rollback, status, files, rollback-file. Data + housekeeping: seed, gc-snapshots, adopt. Credentials at rest: scan-credentials (find plaintext), encrypt-column (migrate a populated column onto .encrypted()).",
454
455
  status: "wired",
455
- run: (e) => import("./dbCommand-DS4b97Is.js").then((t) => t.runDbCommand(e)),
456
+ run: (e) => import("./dbCommand-CC-qNzpz.js").then((t) => t.runDbCommand(e)),
456
457
  help: {
457
- usage: "<plan|apply|branch|plans|drift|squash|restore-snapshot|generate|migrate|rollback|status|files|rollback-file|seed|gc-snapshots>",
458
+ usage: t(n),
458
459
  examples: [
459
460
  ["voltro db plan", "the diff between the declared schema and the live database"],
460
461
  ["voltro db apply", "apply that diff"],
@@ -468,7 +469,7 @@ var a = () => {
468
469
  name: "data",
469
470
  summary: "Export/import + backup/restore of app data. Logical (rows + optional assets): export <dir> [--tenant <id>|--tables a,b] [--assets] [--compression zstd|gzip|none] [--consistency live|snapshot]; import <dir> [--assets] [--no-verify]. Native (rows ONLY — no blobs): backup <dir> / restore <dir> (pg_dump/mariadb-dump/…). Resumable; typed-NDJSON; content-addressed assets on the logical path.",
470
471
  status: "wired",
471
- run: (e) => import("./dataCommand-DnCm0B2C.js").then((t) => t.runDataCommand(e)),
472
+ run: (e) => import("./dataCommand-D6-Ha2lf.js").then((t) => t.runDataCommand(e)),
472
473
  help: {
473
474
  usage: "<export|import|backup|restore> <dir> [options]",
474
475
  flags: [
@@ -499,7 +500,7 @@ var a = () => {
499
500
  handlesHelp: !0,
500
501
  summary: "Manage the project deploy baseline (bare / compose / helm). Subcommands: list, status, set.",
501
502
  status: "wired",
502
- run: (e) => import("./baselineCommand-C2ClWZN3.js").then((t) => t.runBaselineCommand(e))
503
+ run: (e) => import("./baselineCommand-Cfw2Afwm.js").then((t) => t.runBaselineCommand(e))
503
504
  },
504
505
  {
505
506
  name: "add",
@@ -516,27 +517,27 @@ var a = () => {
516
517
  handlesHelp: !0,
517
518
  summary: "Generate strong secrets. `generate [purpose]` (data-transfer, session, bundle-key, field-encryption, …) emits the right var+format; `generate` alone prints a generic secret; `list` shows all. Encrypted per-env storage is in Voltro Cloud.",
518
519
  status: "wired",
519
- run: (e) => import("./metaCommands-7MJfZ5cf.js").then((t) => t.runSecret(e))
520
+ run: (e) => import("./metaCommands-CIoQNlaQ.js").then((t) => t.runSecret(e))
520
521
  },
521
522
  {
522
523
  name: "update",
523
524
  handlesHelp: !0,
524
525
  summary: "Upgrade the app to the latest framework: bump every @voltro/* dependency (across ALL workspace members, install once at the workspace root), then run the codemods shipped with the target version. Flags: --to <version>, --from <version>, --codemods-only, --dry-run, --force, --exact, --help. After: run `voltro db apply`.",
525
526
  status: "wired",
526
- run: (e) => import("./updateCommand-CSBXVsYq.js").then((t) => t.runUpdateCommand(e))
527
+ run: (e) => import("./updateCommand-B0J_T9Vs.js").then((t) => t.runUpdateCommand(e))
527
528
  },
528
529
  {
529
530
  name: "_apply-codemods",
530
531
  summary: "Internal: apply shipped codemods for a framework version jump (re-exec target of `voltro update`).",
531
532
  status: "wired",
532
533
  hidden: !0,
533
- run: (e) => import("./updateCommand-CSBXVsYq.js").then((t) => t.runApplyCodemods(e))
534
+ run: (e) => import("./updateCommand-B0J_T9Vs.js").then((t) => t.runApplyCodemods(e))
534
535
  },
535
536
  {
536
537
  name: "embeddings",
537
538
  summary: "Embeddings tooling. Subcommand: backfill <table> --text <field> --vector <field> [--model <m>] [--model-field <f>] [--batch <n>] [--dry-run] — (re)embed rows the vectorEmbedding() mixin missed.",
538
539
  status: "wired",
539
- run: (e) => import("./embeddingsCommand-DRRdneJD.js").then((t) => t.runEmbeddingsCommand(e)),
540
+ run: (e) => import("./embeddingsCommand-C3uAuf6N.js").then((t) => t.runEmbeddingsCommand(e)),
540
541
  help: {
541
542
  usage: "backfill <table> --text <field> --vector <field> [--model <m>] [--batch <n>] [--dry-run]",
542
543
  flags: [
@@ -554,7 +555,7 @@ var a = () => {
554
555
  name: "telemetry",
555
556
  summary: "Report telemetry status — Voltro collects none (no phone-home, nothing to opt out of).",
556
557
  status: "wired",
557
- run: (e) => import("./metaCommands-7MJfZ5cf.js").then((t) => t.runTelemetry(e)),
558
+ run: (e) => import("./metaCommands-CIoQNlaQ.js").then((t) => t.runTelemetry(e)),
558
559
  help: {
559
560
  usage: "",
560
561
  examples: [["voltro telemetry", "confirm what is collected: nothing"]],
@@ -582,7 +583,7 @@ var a = () => {
582
583
  summary: "Ask a RUNNING app whether its declared access is enforced. `access` calls every guarded procedure with NO credentials and reports any that answer (--process, --url, --strict, --format).",
583
584
  status: "wired",
584
585
  handlesHelp: !0,
585
- run: (e) => import("./probeCommand-CZfaaUOZ.js").then((t) => t.runProbeCommand(e))
586
+ run: (e) => import("./probeCommand-BPEpwT32.js").then((t) => t.runProbeCommand(e))
586
587
  },
587
588
  {
588
589
  name: "schedule",
@@ -645,7 +646,7 @@ var a = () => {
645
646
  name: "login",
646
647
  summary: "Log in to Voltro Cloud — opens a browser (WorkOS) and returns to the CLI after success. Alias for `voltro cloud login`. `--token <t>` (or VOLTRO_CLOUD_TOKEN) for headless.",
647
648
  status: "wired",
648
- run: (e) => import("./cloudCmd-Cvv5HGaZ.js").then((t) => t.runCloudCommand(["login", ...e])),
649
+ run: (e) => import("./cloudCmd-NQSwe_Qk.js").then((t) => t.runCloudCommand(["login", ...e])),
649
650
  help: {
650
651
  usage: "[--token <t>]",
651
652
  flags: [["--token <t>", "headless login with an existing token (or set VOLTRO_CLOUD_TOKEN)"]],
@@ -657,21 +658,21 @@ var a = () => {
657
658
  handlesHelp: !0,
658
659
  summary: "Control-plane client. Subcommands: login (browser/WorkOS), whoami, projects, project create, env list|set|pull, import, deploy, scan, rollback, register. Base url via VOLTRO_CLOUD_URL.",
659
660
  status: "wired",
660
- run: (e) => import("./cloudCmd-Cvv5HGaZ.js").then((t) => t.runCloudCommand(e))
661
+ run: (e) => import("./cloudCmd-NQSwe_Qk.js").then((t) => t.runCloudCommand(e))
661
662
  },
662
663
  {
663
664
  name: "help",
664
665
  summary: "Print this help.",
665
666
  status: "wired",
666
- run: async (e) => (l(), 0)
667
+ run: async (e) => (f(), 0)
667
668
  },
668
669
  {
669
670
  name: "version",
670
671
  summary: "Print the voltro version.",
671
672
  status: "wired",
672
- run: async () => (console.log(a()), 0)
673
+ run: async () => (console.log(c()), 0)
673
674
  }
674
- ], s = [
675
+ ], u = [
675
676
  ["Start a project", [
676
677
  "init",
677
678
  "create-project",
@@ -739,32 +740,32 @@ var a = () => {
739
740
  "info"
740
741
  ]],
741
742
  ["Meta", ["help", "version"]]
742
- ], c = (e, t = 68) => {
743
+ ], d = (e, t = 68) => {
743
744
  let n = e.search(/\.(\s|$)/), r = n > 0 ? e.slice(0, n) : e;
744
745
  return r.length <= t ? r : `${r.slice(0, t - 1).trimEnd()}…`;
745
- }, l = () => {
746
- let e = o.filter((e) => !e.hidden), t = new Map(e.map((e) => [e.name, e])), n = e.reduce((e, t) => Math.max(e, t.name.length), 0);
747
- console.log(`voltro v${a()}`), console.log("voltro <command> [args]");
748
- for (let [e, r] of s) {
746
+ }, f = () => {
747
+ let e = l.filter((e) => !e.hidden), t = new Map(e.map((e) => [e.name, e])), n = e.reduce((e, t) => Math.max(e, t.name.length), 0);
748
+ console.log(`voltro v${c()}`), console.log("voltro <command> [args]");
749
+ for (let [e, r] of u) {
749
750
  let i = r.map((e) => t.get(e)).filter((e) => e !== void 0);
750
751
  if (i.length !== 0) {
751
752
  console.log(`\n${e}`);
752
753
  for (let e of i) {
753
754
  let t = " ".repeat(n - e.name.length + 2);
754
- console.log(` ${e.name}${t}${c(e.summary)}`);
755
+ console.log(` ${e.name}${t}${d(e.summary)}`);
755
756
  }
756
757
  }
757
758
  }
758
- let r = new Set(s.flatMap(([, e]) => e)), i = e.filter((e) => !r.has(e.name));
759
+ let r = new Set(u.flatMap(([, e]) => e)), i = e.filter((e) => !r.has(e.name));
759
760
  if (i.length > 0) {
760
761
  console.log("\nOther");
761
762
  for (let e of i) {
762
763
  let t = " ".repeat(n - e.name.length + 2);
763
- console.log(` ${e.name}${t}${c(e.summary)}`);
764
+ console.log(` ${e.name}${t}${d(e.summary)}`);
764
765
  }
765
766
  }
766
767
  console.log("\nRun 'voltro <command> --help' for the full description, or see https://voltro.dev/docs/cli.");
767
- }, u = (e, t) => {
768
+ }, p = (e, t) => {
768
769
  let n = Array.from({ length: t.length + 1 }, (e, t) => t), r = Array(t.length + 1).fill(0);
769
770
  for (let i = 1; i <= e.length; i++) {
770
771
  r[0] = i;
@@ -775,13 +776,13 @@ var a = () => {
775
776
  for (let e = 0; e <= t.length; e++) n[e] = r[e];
776
777
  }
777
778
  return n[t.length];
778
- }, d = (e, t = 3) => {
779
- let n = o.filter((e) => !e.hidden).map((e) => e.name), r = e.length <= 4 ? 1 : e.length <= 8 ? 2 : 3;
779
+ }, m = (e, t = 3) => {
780
+ let n = l.filter((e) => !e.hidden).map((e) => e.name), r = e.length <= 4 ? 1 : e.length <= 8 ? 2 : 3;
780
781
  return n.map((t) => ({
781
782
  name: t,
782
- score: t.startsWith(e) || e.startsWith(t) ? -2 : t.includes(e) ? -1 : u(e, t)
783
+ score: t.startsWith(e) || e.startsWith(t) ? -2 : t.includes(e) ? -1 : p(e, t)
783
784
  })).filter((e) => e.score <= r).sort((e, t) => e.score - t.score || e.name.localeCompare(t.name)).slice(0, t).map((e) => e.name);
784
- }, f = (e) => {
785
+ }, h = (e) => {
785
786
  let t = [`voltro ${e.name} — ${e.summary}`], n = e.help, r = (e) => {
786
787
  let t = e.reduce((e, [t]) => Math.max(e, t.length), 0);
787
788
  return e.map(([e, n]) => ` ${e}${" ".repeat(t - e.length + 2)}${n}`);
@@ -791,26 +792,26 @@ var a = () => {
791
792
  for (let [e, r] of n.examples) t.push(` ${e}`, ` ${r}`);
792
793
  }
793
794
  return n?.notes !== void 0 && n.notes.length > 0 && t.push("", ...n.notes), t.push("", `Docs: https://voltro.dev/docs/cli/${e.name}`), t;
794
- }, p = /* @__PURE__ */ new Set(["--help", "-h"]), m = async (e) => {
795
+ }, g = /* @__PURE__ */ new Set(["--help", "-h"]), _ = async (e) => {
795
796
  let [t, ...n] = e;
796
- if (!t || p.has(t)) return l(), 0;
797
- if (t === "--version" || t === "-v") return console.log(a()), 0;
798
- if (t === "help" && n.length > 0 && !n[0].startsWith("-")) return m([n[0], "--help"]);
799
- let r = o.find((e) => e.name === t);
797
+ if (!t || g.has(t)) return f(), 0;
798
+ if (t === "--version" || t === "-v") return console.log(c()), 0;
799
+ if (t === "help" && n.length > 0 && !n[0].startsWith("-")) return _([n[0], "--help"]);
800
+ let r = l.find((e) => e.name === t);
800
801
  if (!r) {
801
802
  console.error(`voltro: unknown command '${t}'`);
802
- let e = d(t);
803
+ let e = m(t);
803
804
  if (e.length > 0) {
804
805
  console.error(`\nDid you mean${e.length > 1 ? " one of" : ""}?`);
805
806
  for (let t of e) console.error(` voltro ${t}`);
806
807
  }
807
808
  return console.error("\nrun 'voltro help' for available commands"), 2;
808
809
  }
809
- if (!r.handlesHelp && n.some((e) => p.has(e))) {
810
- for (let e of f(r)) console.log(e);
810
+ if (!r.handlesHelp && n.some((e) => g.has(e))) {
811
+ for (let e of h(r)) console.log(e);
811
812
  return 0;
812
813
  }
813
814
  return r.run(n);
814
815
  };
815
816
  //#endregion
816
- export { f as a, l as i, s as n, d as o, m as r, o as t };
817
+ export { h as a, f as i, u as n, m as o, _ as r, l as t };
@@ -1,6 +1,6 @@
1
- import { d as e } from "./dev-Dc4cpmRl.js";
2
- import { P as t, j as n } from "./webDev-Dybxew86.js";
3
- import { t as r } from "./start-T4VesWiM.js";
1
+ import { d as e } from "./dev-E7Eo5GHc.js";
2
+ import { P as t, j as n } from "./webDev-BKdD7c_a.js";
3
+ import { t as r } from "./start-RCh6qKFe.js";
4
4
  import { join as i } from "node:path";
5
5
  import { existsSync as a } from "node:fs";
6
6
  import { createLogger as o } from "@voltro/logger";
@@ -1,10 +1,10 @@
1
1
  import { t as e } from "./cliError-BmdYnghb.js";
2
- import { c as t, i as n, o as r } from "./dev-Dc4cpmRl.js";
2
+ import { c as t, i as n, o as r } from "./dev-E7Eo5GHc.js";
3
3
  import { n as i, t as a } from "./cliArgs-D4p8n7EE.js";
4
4
  import { r as o } from "./dialectDriver-CgXnDfec.js";
5
5
  import { t as s } from "./dataProfile-dW-PsfLB.js";
6
6
  import { o as c, t as l } from "./inspectFetch-EMuhTG_9.js";
7
- import { r as u } from "./dbCommand-O8HA63s2.js";
7
+ import { r as u } from "./dbCommand-C4UW8cVN.js";
8
8
  import { createLogger as d } from "@voltro/logger";
9
9
  import { Effect as f, Stream as p } from "effect";
10
10
  import { SqlClient as m } from "@effect/sql";