@voltro/cli 0.34.0 → 0.36.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 (138) hide show
  1. package/CHANGELOG.md +235 -0
  2. package/dist/{apiBuild-DZF_f0_I.js → apiBuild-DiE9zcj6.js} +2 -2
  3. package/dist/apiBuild-ZEZnCXn2.js +2 -0
  4. package/dist/{appGraph-gQ_6GkQQ.js → appGraph-KGDPTuTy.js} +1 -1
  5. package/dist/appGraph-zuMGKVYX.js +2 -0
  6. package/dist/bin.js +1 -1
  7. package/dist/{build-CE7Ca9gm.js → build-DBe6c7qC.js} +7 -7
  8. package/dist/{checkCommand-YZDmkAGd.js → checkCommand-BTA6P3Yr.js} +1 -1
  9. package/dist/{checkCommand-Dv8r9tGO.js → checkCommand-BhG0gmUD.js} +8 -7
  10. package/dist/{clusterCmd-CNXKlcvD.js → clusterCmd-D5wsCmA_.js} +1 -1
  11. package/dist/{codegenCommand-DC6w2tNZ.js → codegenCommand-DH-8ZXzR.js} +3 -3
  12. package/dist/{codemodRunner-DRRqXR74.js → codemodRunner-DjQGrdmg.js} +195 -37
  13. package/dist/{commands-gutsz-Ac.js → commands-Bp7utV-7.js} +37 -29
  14. package/dist/{dashboardCommand-3YG8p-UA.js → dashboardCommand-D5Jwjmr1.js} +3 -3
  15. package/dist/{dataCommand-qL0r7fPO.js → dataCommand-DnCm0B2C.js} +56 -54
  16. package/dist/dbCommand-DS4b97Is.js +2 -0
  17. package/dist/{dbCommand-B6X0FZbq.js → dbCommand-O8HA63s2.js} +6 -6
  18. package/dist/{dev-CoG-ZPx8.js → dev-BSFTgCQ5.js} +1 -1
  19. package/dist/{dev-CerMd0mW.js → dev-Dc4cpmRl.js} +2741 -2233
  20. package/dist/doctorCommand-BYffQc0s.js +2 -0
  21. package/dist/{doctorCommand-CnDXQxfa.js → doctorCommand-CNFtt3nR.js} +76 -73
  22. package/dist/{dormancyCommand-Dszo57d6.js → dormancyCommand-6F6NsJKf.js} +1 -1
  23. package/dist/{embeddingsCommand-C0sKVRo1.js → embeddingsCommand-DRRdneJD.js} +1 -1
  24. package/dist/{envCommand-DPgdV1Bq.js → envCommand-TZzcyqZ-.js} +2 -2
  25. package/dist/{evolveCommand-DHpkgjgH.js → evolveCommand-iU35TPjT.js} +2 -2
  26. package/dist/frameworkTableAssembly-YyVe32Cb.js +2 -0
  27. package/dist/frameworkTableAssembly-oMPBKqlE.js +511 -0
  28. package/dist/{generateCommand-oibemh97.js → generateCommand-DbgcUpGw.js} +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/{infoCommand-BJw9nLUR.js → infoCommand-unqisJGp.js} +1 -1
  31. package/dist/{inspect-CBqFtAKA.js → inspect-CjTYzAs_.js} +32 -2
  32. package/dist/inspect-P4pxoMaV.js +2 -0
  33. package/dist/{inspectCmd-Bppy-GGw.js → inspectCmd-EHFZ9yYu.js} +1 -1
  34. package/dist/{inspectFetch-Cm8_wVvp.js → inspectFetch-EMuhTG_9.js} +1 -1
  35. package/dist/{logsCmd-CCca3KRZ.js → logsCmd-D36xK7Zu.js} +1 -1
  36. package/dist/manifestBuild-COkJoyAr.js +2 -0
  37. package/dist/{manifestBuild-sxpwdKY1.js → manifestBuild-hpPLaGxV.js} +1 -1
  38. package/dist/{migrate-CBwOt_iV.js → migrate-BV7I-ZHZ.js} +3 -3
  39. package/dist/probeCommand-CZfaaUOZ.js +122 -0
  40. package/dist/{runtimeTrace-CRxalXTs.js → runtimeTrace-D5LJ_N55.js} +1 -1
  41. package/dist/scheduleCmd-DQRu6BZC.js +149 -0
  42. package/dist/{sdkgen-CYJscZC7.js → sdkgen-82xVuvbt.js} +1 -1
  43. package/dist/{seedRunner-TFHHiToI.js → seedRunner-ZmLSqNe2.js} +74 -70
  44. package/dist/serveCommand-CEBVP36A.js +2 -0
  45. package/dist/serveCommand-VVGcIMIw.js +1766 -0
  46. package/dist/serveEntry.js +1 -1
  47. package/dist/{start-B-9Nsp-S.js → start-BgN62boB.js} +1 -1
  48. package/dist/{start-9LiUOfES.js → start-T4VesWiM.js} +2 -2
  49. package/dist/startEntry.js +1 -1
  50. package/dist/{tracesCmd-CkEZQrtt.js → tracesCmd-DStmCJPi.js} +1 -1
  51. package/dist/updateCommand-CSBXVsYq.js +2 -0
  52. package/dist/{updateCommand-Bkptutss.js → updateCommand-CwnUK_mf.js} +1 -1
  53. package/dist/webDev-BcykISYQ2.js +2 -0
  54. package/dist/{webDev-CBYvPqQr.js → webDev-Dybxew86.js} +14 -2
  55. package/dist/{webhooksCommand-CID96Rga.js → webhooksCommand-di1CJVzu.js} +1 -1
  56. package/dist/{workflowsCmd-D1VTmLMY.js → workflowsCmd-BGF-mRZ5.js} +1 -1
  57. package/package.json +53 -17
  58. package/templates/AGENTS.md +1 -1
  59. package/templates/agent-docs/_index.md +1 -1
  60. package/templates/agent-docs/_manifest.json +1 -1
  61. package/templates/agent-docs/authentication.md +55 -7
  62. package/templates/agent-docs/cli.md +81 -0
  63. package/templates/agent-docs/data.md +59 -2
  64. package/templates/agent-docs/database/migrations.md +50 -1
  65. package/templates/agent-docs/database/misc.md +33 -0
  66. package/templates/agent-docs/deployment.md +214 -21
  67. package/templates/agent-docs/introduction.md +1 -1
  68. package/templates/agent-docs/multi-tenancy.md +93 -22
  69. package/templates/agent-docs/plugins/ai-flows.md +86 -0
  70. package/templates/agent-docs/plugins/billing.md +1 -1
  71. package/templates/agent-docs/plugins/clickhouse.md +31 -0
  72. package/templates/agent-docs/plugins/search.md +6 -3
  73. package/templates/agent-docs/plugins/storage.md +11 -0
  74. package/templates/agent-docs/plugins.md +3 -1
  75. package/templates/agent-docs/scheduling.md +17 -0
  76. package/templates/agent-docs/security.md +2 -2
  77. package/templates/agent-docs/whats-new.md +31 -1764
  78. package/templates/agent-docs/workflows.md +101 -0
  79. package/templates/apps/api-ai/package.json +7 -7
  80. package/templates/apps/api-auth/package.json +8 -8
  81. package/templates/apps/api-backend/package.json +7 -7
  82. package/templates/apps/api-backend-deactivation/package.json +7 -7
  83. package/templates/apps/api-backend-mail/package.json +8 -8
  84. package/templates/apps/api-backend-mariadb/package.json +9 -9
  85. package/templates/apps/api-backend-sqlite/package.json +8 -8
  86. package/templates/apps/api-backend-storage/package.json +8 -8
  87. package/templates/apps/api-cms/package.json +10 -10
  88. package/templates/apps/api-collab/package.json +8 -8
  89. package/templates/apps/api-data-advanced/package.json +8 -8
  90. package/templates/apps/api-durable/package.json +8 -8
  91. package/templates/apps/api-feature-flags/package.json +9 -9
  92. package/templates/apps/api-governance/package.json +8 -8
  93. package/templates/apps/api-kv/package.json +8 -8
  94. package/templates/apps/api-moderation/package.json +8 -8
  95. package/templates/apps/api-observability/package.json +8 -8
  96. package/templates/apps/api-ratelimit/package.json +8 -8
  97. package/templates/apps/api-rbac/package.json +8 -8
  98. package/templates/apps/api-rest/package.json +7 -7
  99. package/templates/apps/api-saas/package.json +11 -11
  100. package/templates/apps/api-saas-starter/package.json +10 -10
  101. package/templates/apps/api-search/package.json +8 -8
  102. package/templates/apps/api-status/package.json +8 -8
  103. package/templates/apps/api-versioning/package.json +8 -8
  104. package/templates/apps/api-webhooks/package.json +9 -9
  105. package/templates/apps/changelog/package.json +6 -6
  106. package/templates/apps/edge-functions/package.json +2 -2
  107. package/templates/apps/frontend-admin/package.json +8 -8
  108. package/templates/apps/frontend-app/package.json +9 -9
  109. package/templates/apps/frontend-auth/package.json +8 -8
  110. package/templates/apps/frontend-blank/package.json +7 -7
  111. package/templates/apps/frontend-cms/package.json +9 -9
  112. package/templates/apps/frontend-collab/package.json +10 -10
  113. package/templates/apps/frontend-contact/package.json +7 -7
  114. package/templates/apps/frontend-dashboard/package.json +7 -7
  115. package/templates/apps/frontend-docs/package.json +7 -7
  116. package/templates/apps/frontend-i18n/package.json +6 -6
  117. package/templates/apps/frontend-landing/package.json +7 -7
  118. package/templates/apps/frontend-portal/package.json +8 -8
  119. package/templates/apps/frontend-saas/package.json +8 -8
  120. package/templates/apps/frontend-spa/package.json +7 -7
  121. package/templates/apps/frontend-ssr/package.json +7 -7
  122. package/templates/apps/frontend-ssr-api/package.json +8 -8
  123. package/templates/apps/frontend-static-blog/package.json +6 -6
  124. package/templates/apps/frontend-status/package.json +8 -8
  125. package/templates/apps/mobile-app/package.json +3 -3
  126. package/dist/apiBuild-BICVGnEC.js +0 -2
  127. package/dist/appGraph-CvQCte0z.js +0 -2
  128. package/dist/dbCommand-CpdKLeQq.js +0 -2
  129. package/dist/doctorCommand-BvqGBwNG.js +0 -2
  130. package/dist/frameworkTableAssembly-BGHmck-x.js +0 -2
  131. package/dist/frameworkTableAssembly-DkkP6BgC.js +0 -674
  132. package/dist/inspect-C_T_WGvl.js +0 -2
  133. package/dist/manifestBuild-ChsKAhmn.js +0 -2
  134. package/dist/scheduleCmd--jksTrf6.js +0 -69
  135. package/dist/serveCommand-B_isw7q4.js +0 -1647
  136. package/dist/serveCommand-DOvbgRnQ.js +0 -2
  137. package/dist/updateCommand-us1_hdIC.js +0 -2
  138. package/dist/webDev-Cg-fFiyd2.js +0 -2
@@ -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-CerMd0mW.js";
2
+ import { c as t, i as n, o as r } from "./dev-Dc4cpmRl.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
- import { o as c, t as l } from "./inspectFetch-Cm8_wVvp.js";
7
- import { r as u } from "./dbCommand-B6X0FZbq.js";
6
+ import { o as c, t as l } from "./inspectFetch-EMuhTG_9.js";
7
+ import { r as u } from "./dbCommand-O8HA63s2.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";
@@ -331,32 +331,32 @@ var P = "voltro-backup-stamp.json", le = (e) => ({
331
331
  ...x.masking ? { maskedColumns: x.masking.transformed.length } : {}
332
332
  }), 0;
333
333
  }, Ce = async (e) => {
334
- let t = H(e, "--target") === "api", n = H(e, "--bundle-key"), r = U(e);
335
- if (!r && !(t && n)) return L.error("usage: voltro data import <bundleDir> [--target direct|api] [--api-url <url>] [--token <secret>] [--bundle-key <storage-key>] [--mode upsert|append|replace] [--on-conflict skip|fail] [--atomic] [--assets] [--no-verify] [--force] [--allow-live] (--force: import despite schema drift AND cross-dialect warnings)"), 1;
336
- let i = H(e, "--mode") ?? "upsert", a = H(e, "--on-conflict") ?? "skip";
334
+ let t = H(e, "--target") === "api", n = H(e, "--bundle-key"), i = U(e);
335
+ if (!i && !(t && n)) return L.error("usage: voltro data import <bundleDir> [--target direct|api] [--api-url <url>] [--token <secret>] [--bundle-key <storage-key>] [--mode upsert|append|replace] [--on-conflict skip|fail] [--atomic] [--assets] [--no-verify] [--force] [--allow-live] (--force: import despite schema drift AND cross-dialect warnings)"), 1;
336
+ let a = H(e, "--mode") ?? "upsert", o = H(e, "--on-conflict") ?? "skip";
337
337
  if (t) {
338
338
  let t = H(e, "--api-url");
339
339
  if (!t) return L.error("--target api requires --api-url <url> (the running instance)"), 1;
340
- let o = H(e, "--token") ?? process.env.VOLTRO_DATA_TRANSFER_SECRET;
341
- if (!o) return L.error("--target api requires --token <secret> (or VOLTRO_DATA_TRANSFER_SECRET) matching the instance secret"), 1;
340
+ let r = H(e, "--token") ?? process.env.VOLTRO_DATA_TRANSFER_SECRET;
341
+ if (!r) return L.error("--target api requires --token <secret> (or VOLTRO_DATA_TRANSFER_SECRET) matching the instance secret"), 1;
342
342
  let s = {
343
- authorization: `Bearer ${o}`,
344
- "x-import-mode": i,
345
- "x-import-on-conflict": a,
343
+ authorization: `Bearer ${r}`,
344
+ "x-import-mode": a,
345
+ "x-import-on-conflict": o,
346
346
  ...e.includes("--atomic") ? { "x-import-atomic": "1" } : {},
347
347
  ...e.includes("--force") ? { "x-import-force": "1" } : {}
348
348
  }, { resolve: c } = await import("node:path"), l;
349
349
  if (n) s["content-type"] = "application/json", l = JSON.stringify({ bundleKey: n });
350
- else if (Y(r)) {
351
- let t = Z(c(process.cwd(), r)), n = X(e);
350
+ else if (Y(i)) {
351
+ let t = Z(c(process.cwd(), i)), n = X(e);
352
352
  n && (t = T(t, n));
353
- let i = [];
354
- for await (let e of t) i.push(Buffer.from(e));
355
- s["content-type"] = "application/octet-stream", l = Buffer.concat(i);
353
+ let r = [];
354
+ for await (let e of t) r.push(Buffer.from(e));
355
+ s["content-type"] = "application/octet-stream", l = Buffer.concat(r);
356
356
  } else {
357
- await (await import("node:fs/promises")).access(c(process.cwd(), r, "assets", "index.ndjson")).then(() => !0, () => !1) && L.warn("this directory bundle has assets; --target api uploads DATA ONLY. Pack a single-file `.vbundle` (voltro data export <name>.vbundle --assets) to transfer assets over the API.");
357
+ await (await import("node:fs/promises")).access(c(process.cwd(), i, "assets", "index.ndjson")).then(() => !0, () => !1) && L.warn("this directory bundle has assets; --target api uploads DATA ONLY. Pack a single-file `.vbundle` (voltro data export <name>.vbundle --assets) to transfer assets over the API.");
358
358
  let e = [];
359
- for await (let t of E({ dir: c(process.cwd(), r) })) e.push(Buffer.from(t));
359
+ for await (let t of E({ dir: c(process.cwd(), i) })) e.push(Buffer.from(t));
360
360
  s["content-type"] = "application/octet-stream", l = Buffer.concat(e);
361
361
  }
362
362
  let u = await fetch(`${t.replace(/\/+$/, "")}/_voltro/admin/import`, {
@@ -369,64 +369,66 @@ var P = "voltro-backup-stamp.json", le = (e) => ({
369
369
  ...await u.json()
370
370
  }), 0) : (L.error(`api import failed: HTTP ${u.status} — ${await u.text()}`), 1);
371
371
  }
372
- if (!r) return L.error("a <bundleDir> is required for a direct import"), 1;
372
+ if (!i) return L.error("a <bundleDir> is required for a direct import"), 1;
373
373
  if (!await V(e)) return 1;
374
- let { store: o, snapshot: s } = await q(), c = e.includes("--force"), l = (e) => L.warn(e), u = e.includes("--assets") ? C({}) : void 0;
375
- if (Y(r)) {
376
- let t = await import("node:os"), n = await import("node:fs/promises"), { resolve: d, join: p } = await import("node:path"), m = await n.mkdtemp(p(t.tmpdir(), "voltro-import-"));
374
+ let { store: s, snapshot: c } = await q(), l = e.includes("--force"), u = (e) => L.warn(e), d = e.includes("--assets") ? C({}) : void 0, p = W() === "postgres" ? (await import("@voltro/sql-postgres")).makePgCopySession(r()) : void 0;
375
+ if (Y(i)) {
376
+ let t = await import("node:os"), n = await import("node:fs/promises"), { resolve: r, join: m } = await import("node:path"), h = await n.mkdtemp(m(t.tmpdir(), "voltro-import-"));
377
377
  try {
378
- let t = Z(d(process.cwd(), r)), n = X(e);
378
+ let t = Z(r(process.cwd(), i)), n = X(e);
379
379
  n && (t = T(t, n)), await ce(t, {
380
- dir: m,
381
- blobs: oe(u ?? C({}))
380
+ dir: h,
381
+ blobs: oe(d ?? C({}))
382
382
  });
383
- let p = await f.runPromise(A({
384
- store: o,
385
- bundleDir: m,
386
- mode: i,
387
- onConflict: a,
383
+ let m = await f.runPromise(A({
384
+ store: s,
385
+ bundleDir: h,
386
+ mode: a,
387
+ onConflict: o,
388
388
  atomic: e.includes("--atomic"),
389
389
  verify: !e.includes("--no-verify"),
390
390
  targetDialect: W(),
391
- allowIncompatible: c,
392
- targetSnapshot: s,
393
- force: c,
394
- onWarn: l,
391
+ allowIncompatible: l,
392
+ targetSnapshot: c,
393
+ force: l,
394
+ onWarn: u,
395
395
  onProgress: z,
396
- assetsAlreadyRestored: !0
396
+ assetsAlreadyRestored: !0,
397
+ ...p ? { copyLoader: p } : {}
397
398
  }));
398
399
  return L.info("import complete (single file)", {
399
- file: r,
400
- tables: p.tables.length,
401
- rows: p.tables.reduce((e, t) => e + t.rowCount, 0)
400
+ file: i,
401
+ tables: m.tables.length,
402
+ rows: m.tables.reduce((e, t) => e + t.rowCount, 0)
402
403
  }), 0;
403
404
  } finally {
404
- await n.rm(m, {
405
+ await p?.close(), await n.rm(h, {
405
406
  recursive: !0,
406
407
  force: !0
407
408
  });
408
409
  }
409
410
  }
410
- let d = await f.runPromise(A({
411
- store: o,
412
- bundleDir: r,
413
- mode: i,
414
- onConflict: a,
411
+ let m = await f.runPromise(A({
412
+ store: s,
413
+ bundleDir: i,
414
+ mode: a,
415
+ onConflict: o,
415
416
  atomic: e.includes("--atomic"),
416
417
  verify: !e.includes("--no-verify"),
417
418
  targetDialect: W(),
418
- allowIncompatible: c,
419
- targetSnapshot: s,
420
- force: c,
421
- onWarn: l,
419
+ allowIncompatible: l,
420
+ targetSnapshot: c,
421
+ force: l,
422
+ onWarn: u,
422
423
  onProgress: z,
423
- ...u ? { assets: M(u) } : {}
424
- }));
424
+ ...d ? { assets: M(d) } : {},
425
+ ...p ? { copyLoader: p } : {}
426
+ })).finally(() => p?.close());
425
427
  return L.info("import complete", {
426
- bundleDir: r,
427
- tables: d.tables.length,
428
- rows: d.tables.reduce((e, t) => e + t.rowCount, 0),
429
- assets: d.assets.count
428
+ bundleDir: i,
429
+ tables: m.tables.length,
430
+ rows: m.tables.reduce((e, t) => e + t.rowCount, 0),
431
+ assets: m.assets.count
430
432
  }), 0;
431
433
  }, $ = () => {
432
434
  let e = r();
@@ -0,0 +1,2 @@
1
+ import { s as e } from "./dbCommand-O8HA63s2.js";
2
+ export { e as runDbCommand };
@@ -4,8 +4,8 @@ import { n as r } from "./appModuleLoader-C9r9mxZt.js";
4
4
  import { a as i, i as a, n as o, t as s } from "./cliArgs-D4p8n7EE.js";
5
5
  import { r as c } from "./dialectDriver-CgXnDfec.js";
6
6
  import { a as l } from "./connectionConfig-UFlIEiys.js";
7
- import { i as u, n as d, r as f, s as p, t as m } from "./seedRunner-TFHHiToI.js";
8
- import { n as h, o as g, y as _ } from "./frameworkTableAssembly-DkkP6BgC.js";
7
+ import { i as u, n as d, r as f, s as p, t as m } from "./seedRunner-ZmLSqNe2.js";
8
+ import { n as h, s as g, y as _ } from "./frameworkTableAssembly-oMPBKqlE.js";
9
9
  import { b as v, x as y } from "./fileConventions-Cof68_BL.js";
10
10
  import { basename as b, join as x, relative as S, resolve as C } from "node:path";
11
11
  import { promises as w, writeSync as ee } from "node:fs";
@@ -339,9 +339,9 @@ var ke = (e) => typeof e != "string", Ae = (e, t, n, r) => {
339
339
  });
340
340
  }
341
341
  return [...n].sort((e, t) => e.definition.id < t.definition.id ? -1 : 1);
342
- }, et = (e) => {
343
- let t = (process.env.DB_DIALECT ?? "postgres").toLowerCase(), n = t === "memory" ? "postgres" : t;
344
- return E.runPromise(O(P, n).pipe(E.provide(e)));
342
+ }, et = async (e) => {
343
+ let t = (process.env.DB_DIALECT ?? "postgres").toLowerCase(), n = t === "memory" ? "postgres" : t, r = n, i = t === "memory" ? void 0 : await c(n).then((e) => e.retryFilter, () => void 0);
344
+ return E.runPromise(O(P, r, void 0, i === void 0 ? {} : { retryFilter: i }).pipe(E.provide(e)));
345
345
  }, tt = (e) => E.runPromise(E.gen(function* () {
346
346
  let e = yield* (yield* D.SqlClient)`SELECT id, status, hash, "appliedAt" FROM "_voltro_migrations"`.pipe(E.orElseSucceed(() => []));
347
347
  return new Map(e.map((e) => [e.id, e]));
@@ -1414,7 +1414,7 @@ var ke = (e) => typeof e != "string", Ae = (e, t, n, r) => {
1414
1414
  }
1415
1415
  }, an = async (e) => {
1416
1416
  let t = H(e), n = await q(), r = $();
1417
- await J(n, O(P, W()));
1417
+ await J(n, O(P, W(), void 0, { retryFilter: (await c(W())).retryFilter }));
1418
1418
  let i = await J(n, D.SqlClient.pipe(E.flatMap((e) => me(e, {
1419
1419
  projectRoot: t,
1420
1420
  env: r,
@@ -1,3 +1,3 @@
1
- import { c as e, d as t, f as n, i as r, u as i } from "./dev-CerMd0mW.js";
1
+ import { c as e, d as t, f as n, i as r, u as i } from "./dev-Dc4cpmRl.js";
2
2
  import "./dialectDriver-CgXnDfec.js";
3
3
  export { r as buildStore, e as loadApiConfig, i as loadDiscovered, t as runDev, n as walk };