@voltro/cli 0.2.0 → 0.2.1

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 (48) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/{apiBuild-CnF3GAcP.js → apiBuild-B0dd-oDo.js} +1 -1
  3. package/dist/apiBuild-D09wjKKO.js +2 -0
  4. package/dist/bin.js +2 -2
  5. package/dist/{commands-5AlC8Udj.js → commands-BgOfGwLc.js} +4 -4
  6. package/dist/{dev-CZ2WE3zn.js → dev-BGYmeKEx.js} +53 -55
  7. package/dist/dev-DoTIxucX.js +2 -0
  8. package/dist/index.js +1 -1
  9. package/package.json +17 -17
  10. package/templates/apps/api-ai/package.json +7 -7
  11. package/templates/apps/api-auth/package.json +8 -8
  12. package/templates/apps/api-backend/package.json +7 -7
  13. package/templates/apps/api-backend-deactivation/package.json +7 -7
  14. package/templates/apps/api-backend-mail/package.json +8 -8
  15. package/templates/apps/api-backend-mariadb/package.json +9 -9
  16. package/templates/apps/api-backend-storage/package.json +8 -8
  17. package/templates/apps/api-data-advanced/package.json +8 -8
  18. package/templates/apps/api-durable/package.json +8 -8
  19. package/templates/apps/api-feature-flags/package.json +9 -9
  20. package/templates/apps/api-governance/package.json +8 -8
  21. package/templates/apps/api-kv/package.json +8 -8
  22. package/templates/apps/api-moderation/package.json +8 -8
  23. package/templates/apps/api-observability/package.json +8 -8
  24. package/templates/apps/api-ratelimit/package.json +8 -8
  25. package/templates/apps/api-rbac/package.json +8 -8
  26. package/templates/apps/api-rest/package.json +7 -7
  27. package/templates/apps/api-saas/package.json +11 -11
  28. package/templates/apps/api-search/package.json +8 -8
  29. package/templates/apps/api-versioning/package.json +8 -8
  30. package/templates/apps/api-webhooks/package.json +8 -8
  31. package/templates/apps/changelog/package.json +6 -6
  32. package/templates/apps/edge-functions/package.json +2 -2
  33. package/templates/apps/frontend-admin/package.json +8 -8
  34. package/templates/apps/frontend-app/package.json +8 -8
  35. package/templates/apps/frontend-blank/package.json +7 -7
  36. package/templates/apps/frontend-contact/package.json +7 -7
  37. package/templates/apps/frontend-dashboard/package.json +7 -7
  38. package/templates/apps/frontend-docs/package.json +7 -7
  39. package/templates/apps/frontend-i18n/package.json +6 -6
  40. package/templates/apps/frontend-landing/package.json +7 -7
  41. package/templates/apps/frontend-spa/package.json +7 -7
  42. package/templates/apps/frontend-ssr/package.json +7 -7
  43. package/templates/apps/frontend-ssr-api/package.json +8 -8
  44. package/templates/apps/frontend-static-blog/package.json +6 -6
  45. package/templates/baselines/compose/docker/api.Dockerfile +1 -1
  46. package/templates/baselines/compose-mariadb/docker/api.Dockerfile +1 -1
  47. package/dist/apiBuild-CRV5VLc-.js +0 -2
  48. package/dist/dev-DFhyP4GC.js +0 -2
package/CHANGELOG.md CHANGED
@@ -39,6 +39,14 @@ _Changes staged for the next release accumulate here (rolled up from
39
39
 
40
40
  ---
41
41
 
42
+ ## [0.2.1] — 2026-07-17
43
+
44
+ ### Fixed
45
+
46
+ - **@voltro/cli, @voltro/database** — `voltro codegen` / `dev` / `serve` / `build` no longer crash with `Cannot find package '@voltro/sql-mysql'` on an app that doesn't declare that driver (e.g. a memory-store app, or a postgres app for the mysql/mssql drivers). The CLI's framework-table assembly statically imported the CDC-offsets table schema from `@voltro/sql-mysql` / `@voltro/sql-mssql` (`import { _voltroCdcOffsetsTable } from '@voltro/sql-mysql'`), so merely LOADING the CLI resolved those driver packages — failing whenever one wasn't installed. This surfaced only in a production install where the drivers aren't present (0.2.0's app-declared-driver change), not in the workspace where all drivers are devDependencies. The two CDC-offsets table schemas (pure schema, no driver runtime) move to `@voltro/database` — the driver-agnostic package both the CLI and the drivers already depend on; the drivers re-export them so their public API + CDC readers are unchanged. The CLI now references a SQL driver only through the runtime `importDriver()` lookup (lazy, and only for the dialect actually in use). The lazily-imported driver modules are also typed with local structural interfaces instead of `typeof import('@voltro/sql-*')`, so no driver package is referenced in a type position either.
47
+
48
+ ---
49
+
42
50
  ## [0.2.0] — 2026-07-17
43
51
 
44
52
  ### ⚠ BREAKING
@@ -1,4 +1,4 @@
1
- import { d as e } from "./dev-CZ2WE3zn.js";
1
+ import { d as e } from "./dev-BGYmeKEx.js";
2
2
  import { isAbsolute as t, join as n, relative as r, resolve as i } from "node:path";
3
3
  import { createLogger as a } from "@voltro/logger";
4
4
  import { existsSync as o, promises as s } from "node:fs";
@@ -0,0 +1,2 @@
1
+ import { r as e } from "./apiBuild-B0dd-oDo.js";
2
+ export { e as runApiBuild };
package/dist/bin.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
- import { Ot as e } from "./dev-CZ2WE3zn.js";
3
- import { n as t } from "./commands-5AlC8Udj.js";
2
+ import { Ot as e } from "./dev-BGYmeKEx.js";
3
+ import { n as t } from "./commands-BgOfGwLc.js";
4
4
  import { createLogger as n } from "@voltro/logger";
5
5
  //#region src/bin.ts
6
6
  var r = n({ scope: "voltro:cli" }), i = process.argv.slice(2);
@@ -1,6 +1,6 @@
1
- import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, J as v, Jt as y, K as b, Kt as x, L as S, Lt as C, M as w, Mt as ee, N as te, Nt as ne, O as re, P as ie, Pt as ae, Q as T, R as oe, Rt as se, S as ce, St as le, T as E, Tt as ue, U as de, Ut as fe, V as pe, Vt as me, W as he, Wt as ge, X as _e, Xt as ve, Y as ye, Yt as be, Z as xe, _ as Se, _t as Ce, at as we, b as Te, bt as Ee, ct as De, d as Oe, dt as D, et as ke, f as Ae, ft as je, g as Me, gt as Ne, h as Pe, ht as Fe, i as Ie, it as Le, j as Re, jt as ze, k as Be, l as Ve, lt as He, m as Ue, mt as We, n as Ge, nt as Ke, o as qe, ot as Je, p as Ye, q as Xe, qt as Ze, rt as Qe, s as $e, st as et, t as tt, tt as nt, ut as rt, v as it, vt as at, w as ot, wt as st, x as ct, xt as lt, y as ut, yt as dt, z as ft, zt as pt } from "./dev-CZ2WE3zn.js";
1
+ import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as p, Gt as m, H as h, Ht as g, I as _, J as v, Jt as y, K as b, Kt as x, L as S, Lt as C, M as w, Mt as ee, N as te, Nt as ne, O as re, P as ie, Pt as ae, Q as T, R as oe, Rt as se, S as ce, St as le, T as E, Tt as ue, U as de, Ut as fe, V as pe, Vt as me, W as he, Wt as ge, X as _e, Xt as ve, Y as ye, Yt as be, Z as xe, _ as Se, _t as Ce, at as we, b as Te, bt as Ee, ct as De, d as Oe, dt as D, et as ke, f as Ae, ft as je, g as Me, gt as Ne, h as Pe, ht as Fe, i as Ie, it as Le, j as Re, jt as ze, k as Be, l as Ve, lt as He, m as Ue, mt as We, n as Ge, nt as Ke, o as qe, ot as Je, p as Ye, q as Xe, qt as Ze, rt as Qe, s as $e, st as et, t as tt, tt as nt, ut as rt, v as it, vt as at, w as ot, wt as st, x as ct, xt as lt, y as ut, yt as dt, z as ft, zt as pt } from "./dev-BGYmeKEx.js";
2
2
  import { i as mt } from "./startupRunner-DAexyPkM.js";
3
- import { t as ht } from "./apiBuild-CnF3GAcP.js";
3
+ import { t as ht } from "./apiBuild-B0dd-oDo.js";
4
4
  import { basename as gt, dirname as O, extname as _t, isAbsolute as vt, join as k, relative as A, resolve as j } from "node:path";
5
5
  import { fileURLToPath as yt, pathToFileURL as bt } from "node:url";
6
6
  import { FileSystem as xt } from "@effect/platform";
@@ -576,10 +576,10 @@ external scheduler owns the once-only guarantee.
576
576
  }, sa = async (e) => {
577
577
  let t = await Je(e);
578
578
  if (!t) {
579
- let { loadApiConfig: t } = await import("./dev-DFhyP4GC.js"), n = await t(e);
579
+ let { loadApiConfig: t } = await import("./dev-DoTIxucX.js"), n = await t(e);
580
580
  if (n) {
581
581
  z.info("building api app", { app: n.name ?? "(unnamed)" });
582
- let { runApiBuild: t } = await import("./apiBuild-CRV5VLc-.js");
582
+ let { runApiBuild: t } = await import("./apiBuild-D09wjKKO.js");
583
583
  return await t(e), {
584
584
  ran: !0,
585
585
  exitCode: 0
@@ -25,10 +25,8 @@ import { SqlClient as R } from "@effect/sql";
25
25
  import { WorkflowEngine as Sn } from "@effect/workflow";
26
26
  import { WorkflowStepInterceptorTag as Cn, _voltroWorkflowRunEventsTable as wn, _voltroWorkflowRunStepsTable as Tn, _voltroWorkflowRunsTable as En, _voltroWorkflowStartContextsTable as Dn, closeWorkflowChildrenForParent as On, completeSuspendingSignal as kn, getWorkflowVersionMetadata as An, isWorkflowWorkerLayer as jn, makeWorkflowRunRecorder as Mn, sendWorkflowSignal as Nn, sendWorkflowUpdate as Pn, serialiseWorkflowRowForWire as Fn, wrapWorkflowExecuteWithRunRecording as In } from "@voltro/workflow";
27
27
  import { makeClusterCronLayer as Ln, parseShardLockMode as Rn, resolveRunnerIdentity as zn, resolveRunnerStorage as Bn, workflowEngineLayer as Vn } from "@voltro/workflow/cluster";
28
- import { _voltroApiKeysTable as Hn, _voltroIdempotencyTable as Un, _voltroKvTable as Wn, _voltroMigrationPlansTable as z, _voltroMigrationsTable as Gn, _voltroSeedsTable as Kn, actorsTable as qn, allRegisteredTables as Jn, and as Yn, auditAllTableIndexes as Xn, drainIdentifierWarnings as Zn, ensureTableRegistered as Qn, eq as B, formatIndexAuditIssue as $n, isSeedDefinition as er, isSqliteFamily as tr, lt as nr, or as rr, registerCoreTables as ir, registerDiscoveredRelations as ar, resolveTenantNamespace as or, walkLeaves as sr } from "@voltro/database";
29
- import { _voltroWebhookDeliveriesTable as cr, _voltroWebhookTargetsTable as lr } from "@voltro/plugin-webhooks/mixin";
30
- import { _voltroCdcOffsetsTable as ur } from "@voltro/sql-mysql";
31
- import { _voltroMssqlCdcOffsetsTable as V } from "@voltro/sql-mssql";
28
+ import { _voltroApiKeysTable as Hn, _voltroCdcOffsetsTable as Un, _voltroIdempotencyTable as Wn, _voltroKvTable as z, _voltroMigrationPlansTable as Gn, _voltroMigrationsTable as Kn, _voltroMssqlCdcOffsetsTable as qn, _voltroSeedsTable as Jn, actorsTable as Yn, allRegisteredTables as Xn, and as Zn, auditAllTableIndexes as Qn, drainIdentifierWarnings as $n, ensureTableRegistered as er, eq as B, formatIndexAuditIssue as tr, isSeedDefinition as nr, isSqliteFamily as rr, lt as ir, or as ar, registerCoreTables as or, registerDiscoveredRelations as sr, resolveTenantNamespace as cr, walkLeaves as lr } from "@voltro/database";
29
+ import { _voltroWebhookDeliveriesTable as ur, _voltroWebhookTargetsTable as V } from "@voltro/plugin-webhooks/mixin";
32
30
  import { _voltroStorageBlobsTable as dr, _voltroStorageGrantsTable as fr, _voltroStorageRefsTable as H, _voltroStorageUsageTable as pr } from "@voltro/plugin-storage";
33
31
  import { AuthMiddleware as mr, ConnectionInfoMiddleware as hr, Unauthenticated as gr, WorkflowRunHandleSchema as _r, actionToRpc as vr, anonymousSubject as yr, checkFrameworkCompat as br, composeAuthStrategies as xr, composeRpcInterceptors as Sr, defineAction as Cr, defineMutation as wr, defineQuery as Tr, mutationToRpc as Er, publishServerError as U, queryToRpc as Dr, streamToRpc as Or, undoApplyDescriptor as kr, undoLogQueryDescriptor as Ar, undoRedoDescriptor as jr, workflowCancelDescriptor as Mr, workflowDomainEventsQueryDescriptor as Nr, workflowEventDeliveriesQueryDescriptor as Pr, workflowResumeDescriptor as Fr, workflowRunEventsQueryDescriptor as Ir, workflowRunQueryDescriptor as Lr, workflowRunStepsQueryDescriptor as Rr, workflowRunsQueryDescriptor as zr, workflowSignalDescriptor as Br, workflowUpdateDescriptor as Vr } from "@voltro/protocol";
34
32
  import { declaredSnapshot as Hr, describeOutcome as Ur, fingerprintSchema as Wr, introspectSchema as Gr, planMigrations as Kr, runFileBasedMigrations as qr, runFrameworkBootstrap as Jr, runPlannedMigrations as Yr } from "@voltro/database/sql";
@@ -4182,15 +4180,15 @@ ${a.join("\n\n")}\n`);
4182
4180
  return (await zc(t))[Rc[e]];
4183
4181
  }, Vc = [
4184
4182
  {
4185
- table: Gn,
4183
+ table: Kn,
4186
4184
  when: "always"
4187
4185
  },
4188
4186
  {
4189
- table: Kn,
4187
+ table: Jn,
4190
4188
  when: "always"
4191
4189
  },
4192
4190
  {
4193
- table: z,
4191
+ table: Gn,
4194
4192
  when: "always"
4195
4193
  },
4196
4194
  {
@@ -4226,11 +4224,11 @@ ${a.join("\n\n")}\n`);
4226
4224
  when: "schedules"
4227
4225
  },
4228
4226
  {
4229
- table: lr,
4227
+ table: V,
4230
4228
  when: "webhooks"
4231
4229
  },
4232
4230
  {
4233
- table: cr,
4231
+ table: ur,
4234
4232
  when: "webhooks"
4235
4233
  },
4236
4234
  {
@@ -4262,7 +4260,7 @@ ${a.join("\n\n")}\n`);
4262
4260
  when: "always"
4263
4261
  },
4264
4262
  {
4265
- table: Un,
4263
+ table: Wn,
4266
4264
  when: "always"
4267
4265
  },
4268
4266
  {
@@ -4270,12 +4268,12 @@ ${a.join("\n\n")}\n`);
4270
4268
  when: "always"
4271
4269
  },
4272
4270
  {
4273
- table: Wn,
4271
+ table: z,
4274
4272
  when: "always"
4275
4273
  }
4276
4274
  ], Hc = (e) => {
4277
4275
  let t = Vc.filter((t) => t.when === "always" || t.when === "workflows" && e.workflows || t.when === "schedules" && e.schedules || t.when === "webhooks" && e.webhooks || t.when === "traces" && e.traces || t.when === "undo" && e.undo === !0).map((e) => e.table);
4278
- return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? V : ur), t;
4276
+ return e.cdc === !0 && t.push(e.cdcDialect === "mssql" ? qn : Un), t;
4279
4277
  }, Uc = (e) => {
4280
4278
  let t = e.startsWith("@") ? e.replace(/^@[^/]+\//, "") : e;
4281
4279
  return (t.startsWith("plugin-") ? t.slice(7) : t).replace(/-([a-zA-Z0-9])/g, (e, t) => t.toUpperCase());
@@ -4627,7 +4625,7 @@ ${a.join("\n\n")}\n`);
4627
4625
  let n = await t.query({
4628
4626
  table: "_voltro_traces",
4629
4627
  order: [],
4630
- predicate: nr("startedAt", e),
4628
+ predicate: ir("startedAt", e),
4631
4629
  projection: ["id"],
4632
4630
  skip: void 0,
4633
4631
  take: c
@@ -4741,7 +4739,7 @@ ${a.join("\n\n")}\n`);
4741
4739
  table: "_voltro_workflow_runs",
4742
4740
  timeColumn: "completedAt",
4743
4741
  ttlMs: Ot(n.VOLTRO_WORKFLOW_RUNS_TTL_HOURS, 720),
4744
- where: rr(B("status", "succeeded"), B("status", "failed"), B("status", "cancelled"))
4742
+ where: ar(B("status", "succeeded"), B("status", "failed"), B("status", "cancelled"))
4745
4743
  });
4746
4744
  let r = e.raw?.bind(e), i = (e) => {
4747
4745
  if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)) throw Error(`retention: unsafe identifier "${e}"`);
@@ -4756,7 +4754,7 @@ ${a.join("\n\n")}\n`);
4756
4754
  };
4757
4755
  return (await r(e)).length;
4758
4756
  }
4759
- let d = nr(l, a), f = s === void 0 ? d : Yn(d, s), p = await e.query({
4757
+ let d = ir(l, a), f = s === void 0 ? d : Zn(d, s), p = await e.query({
4760
4758
  table: c,
4761
4759
  order: [],
4762
4760
  predicate: f,
@@ -4781,7 +4779,7 @@ ${a.join("\n\n")}\n`);
4781
4779
  let { store: t, schemaRegistry: n, cache: r, kv: i, webhooksService: a, workflowsProxy: o, eventTriggers: s, namespaceIsolationOn: c, onEventEmit: l } = e, u = (e, t) => {
4782
4780
  if (!c) return e;
4783
4781
  if (e.withNamespace === void 0) throw Error("tenantIsolation=namespace is set but the active store has no physical-namespace support (withNamespace).");
4784
- return e.withNamespace(or(t.tenantId));
4782
+ return e.withNamespace(cr(t.tenantId));
4785
4783
  };
4786
4784
  return (e, c = t, d, f = "app-context", p) => {
4787
4785
  let m = u(c, e.subject), h = o === void 0 ? void 0 : dt(o, {
@@ -4992,7 +4990,7 @@ ${a.join("\n\n")}\n`);
4992
4990
  t.warn("seed: failed to import", { file: r }, e);
4993
4991
  continue;
4994
4992
  }
4995
- let i = (e.default && er(e.default) ? e.default : void 0) ?? Object.values(e).find(er);
4993
+ let i = (e.default && nr(e.default) ? e.default : void 0) ?? Object.values(e).find(nr);
4996
4994
  if (!i) {
4997
4995
  t.warn("seed: no defineSeed export", { file: r });
4998
4996
  continue;
@@ -5021,7 +5019,7 @@ ${a.join("\n\n")}\n`);
5021
5019
  if (i.length === 1) {
5022
5020
  let e = i[0];
5023
5021
  a = B(e, n[e]);
5024
- } else a = Yn(...i.map((e) => B(e, n[e])));
5022
+ } else a = Zn(...i.map((e) => B(e, n[e])));
5025
5023
  let o = (await e.query({
5026
5024
  table: t,
5027
5025
  order: [],
@@ -6590,7 +6588,7 @@ ${a.join("\n\n")}\n`);
6590
6588
  }, Kd = (e) => {
6591
6589
  if (!e) return;
6592
6590
  let t = e.workflowName ?? e.tag, n = [];
6593
- if (t !== void 0 && n.push(B("tag", t)), e.status !== void 0 && n.push(B("status", e.status)), n.length !== 0) return n.length === 1 ? n[0] : Yn(...n);
6591
+ if (t !== void 0 && n.push(B("tag", t)), e.status !== void 0 && n.push(B("status", e.status)), n.length !== 0) return n.length === 1 ? n[0] : Zn(...n);
6594
6592
  }, qd = async (e, t) => {
6595
6593
  let n = Math.max(0, t?.offset ?? 0), r = Math.max(1, Math.min(500, t?.limit ?? 50)), i = Kd(t);
6596
6594
  return {
@@ -7168,11 +7166,11 @@ ${a.join("\n\n")}\n`);
7168
7166
  if (Xf.test(e)) {
7169
7167
  let e = await t(n);
7170
7168
  for (let t of Object.values(e)) lp(t) && (m.set(t.tableName, t), fp(t) && f.add(t.tableName), mp(t) && p.add(t.tableName));
7171
- ar(e);
7169
+ sr(e);
7172
7170
  continue;
7173
7171
  }
7174
7172
  if (Zf.test(e)) {
7175
- ar(await t(n)) === 0 && $.warn("skipping relations file — no relations(...) export found", { file: n });
7173
+ sr(await t(n)) === 0 && $.warn("skipping relations file — no relations(...) export found", { file: n });
7176
7174
  continue;
7177
7175
  }
7178
7176
  if (Bf.test(e)) {
@@ -7284,9 +7282,9 @@ ${a.join("\n\n")}\n`);
7284
7282
  executor: l
7285
7283
  });
7286
7284
  }
7287
- m.has("actors") || m.set("actors", qn);
7285
+ m.has("actors") || m.set("actors", Yn);
7288
7286
  let _ = m.get("actors"), v = m.get("tenants");
7289
- (_ !== void 0 || v !== void 0) && ir({
7287
+ (_ !== void 0 || v !== void 0) && or({
7290
7288
  ..._ === void 0 ? {} : { actors: () => _ },
7291
7289
  ...v === void 0 ? {} : { tenants: () => v }
7292
7290
  });
@@ -7376,13 +7374,13 @@ ${a.join("\n\n")}\n`);
7376
7374
  }, Tp = (e) => (process.env.DB_DIALECT ?? e?.store ?? "memory").toLowerCase(), Ep = async (e, t) => {
7377
7375
  let n = Tp(e);
7378
7376
  if (n === "memory") return $.info("sql dialect resolved: memory — in-process store, no persistence"), new ge({});
7379
- let i = (process.env.CDC ?? "1") !== "0", a = await Bc(n), o = a.id === "postgres" ? "LISTEN/NOTIFY" : tr(a.id) ? "in-process bus" : a.id === "mariadb" ? "binlog CDC (ROW)" : a.id === "mssql" ? "Change Tracking (polled)" : a.id === "mysql" ? "binlog CDC (ROW)" : "inline only", s = a.id === "postgres" ? "native" : a.id === "mysql" ? "INSERT/UPDATE/DELETE then SELECT (no RETURNING)" : a.id === "mariadb" ? "native (INSERT/DELETE); UPDATE then SELECT" : a.id === "mssql" ? "OUTPUT INSERTED/DELETED" : tr(a.id) ? "native" : "unknown";
7377
+ let i = (process.env.CDC ?? "1") !== "0", a = await Bc(n), o = a.id === "postgres" ? "LISTEN/NOTIFY" : rr(a.id) ? "in-process bus" : a.id === "mariadb" ? "binlog CDC (ROW)" : a.id === "mssql" ? "Change Tracking (polled)" : a.id === "mysql" ? "binlog CDC (ROW)" : "inline only", s = a.id === "postgres" ? "native" : a.id === "mysql" ? "INSERT/UPDATE/DELETE then SELECT (no RETURNING)" : a.id === "mariadb" ? "native (INSERT/DELETE); UPDATE then SELECT" : a.id === "mssql" ? "OUTPUT INSERTED/DELETED" : rr(a.id) ? "native" : "unknown";
7380
7378
  $.info(`sql dialect resolved: ${a.id} — CDC: ${i ? o : "inline emit (CDC=0)"}, RETURNING: ${s}`);
7381
7379
  let c = yp(), { summary: l, fromEnv: u } = Sp(c);
7382
7380
  $.info(`db connection: ${l}${u ? "" : " (DEFAULT FALLBACK — no DB_URL / PG_HOST set)"}`), u || $.warn("db connection: falling back to localhost:5432/app — no DB_URL or PG_HOST env var set.\n If this app should run against its OWN postgres (e.g. its docker-compose), set DB_URL.\n Copy `.env.example` to `.env` in the app dir, or set DB_URL in the shell.\n Otherwise this app is silently using whatever DB is at localhost:5432/app — which is\n voltro-starter's docker default + may carry foreign tables that confuse the planner.");
7383
7381
  let d;
7384
7382
  if (i && (a.id === "mysql" || a.id === "mariadb")) {
7385
- let { connectionFromConfig: e } = await zc("@voltro/sql-mysql"), t = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, n = Jn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
7383
+ let { connectionFromConfig: e } = await zc("@voltro/sql-mysql"), t = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, n = Xn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
7386
7384
  d = {
7387
7385
  serverId: wp(t),
7388
7386
  replicaId: t,
@@ -7394,7 +7392,7 @@ ${a.join("\n\n")}\n`);
7394
7392
  reactiveTables: n.length
7395
7393
  });
7396
7394
  } else if (i && a.id === "mssql") {
7397
- let { connectionFromConfig: e } = await zc("@voltro/sql-mssql"), t = e(c), n = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, r = Jn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
7395
+ let { connectionFromConfig: e } = await zc("@voltro/sql-mssql"), t = e(c), n = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, r = Xn().map((e) => e.tableName).filter((e) => !e.startsWith("_voltro_"));
7398
7396
  d = {
7399
7397
  serverId: 0,
7400
7398
  replicaId: n,
@@ -7424,7 +7422,7 @@ ${a.join("\n\n")}\n`);
7424
7422
  region: null,
7425
7423
  localityEnabled: !1
7426
7424
  }), f;
7427
- if (tr(a.id)) return $.warn(`read replicas: not applicable (${a.id} is single-process); ignoring DB_REPLICA_URLS`), r.recordReplication({
7425
+ if (rr(a.id)) return $.warn(`read replicas: not applicable (${a.id} is single-process); ignoring DB_REPLICA_URLS`), r.recordReplication({
7428
7426
  replicaCount: 0,
7429
7427
  rywPolicy: "off",
7430
7428
  rywStore: "memory",
@@ -7587,7 +7585,7 @@ ${a.join("\n\n")}\n`);
7587
7585
  }
7588
7586
  return t;
7589
7587
  })();
7590
- for (let e of I) Qn(e);
7588
+ for (let e of I) er(e);
7591
7589
  let xe = Nd({
7592
7590
  plugins: F?.plugins ?? [],
7593
7591
  appName: F?.name ?? i(t),
@@ -7664,7 +7662,7 @@ ${a.join("\n\n")}\n`);
7664
7662
  "__voltro.undo.redo"
7665
7663
  ] }));
7666
7664
  let qe = $.child("aggregate"), Je = v.filter((e) => Yf.test(e)), Ye = Je.length > 0 ? await zu(Je, qe) : [], rt = Ye.map((e) => e.definition.name);
7667
- for (let e of Zn()) $.warn(`identifier length · ${e}`);
7665
+ for (let e of $n()) $.warn(`identifier length · ${e}`);
7668
7666
  let ot = F?.restRoutes ?? [], lt = v.filter((e) => qf.test(e)).length, pt = v.filter((e) => Wf.test(e)).length, ht = v.filter((e) => /\.seed\.ts$/.test(e)).length, gt = v.filter((e) => Kf.test(e)).length, _t = v.filter((e) => hd.test(e)).length;
7669
7667
  $.info("app surface", {
7670
7668
  queryCount: O.length,
@@ -7865,21 +7863,21 @@ ${a.join("\n\n")}\n`);
7865
7863
  "mariadb",
7866
7864
  "mysql",
7867
7865
  "mssql"
7868
- ].includes(z) ? "advisoryLock" : "single"), er = Jn === "cluster" && (/* @__PURE__ */ new Set([
7866
+ ].includes(z) ? "advisoryLock" : "single"), Yn = Jn === "cluster" && (/* @__PURE__ */ new Set([
7869
7867
  "postgres",
7870
7868
  "mysql",
7871
7869
  "mariadb",
7872
7870
  "mssql"
7873
- ])).has(z), nr = er ? P.filter((e) => (e.trigger ?? qn) === "self").map((e) => Ln({
7871
+ ])).has(z), Xn = Yn ? P.filter((e) => (e.trigger ?? qn) === "self").map((e) => Ln({
7874
7872
  name: e.name,
7875
7873
  cron: Ie(e),
7876
7874
  execute: async () => {
7877
7875
  await Gn?.fireFromCluster(e.name);
7878
7876
  }
7879
- })) : [], ir = await (async () => {
7877
+ })) : [], nr = await (async () => {
7880
7878
  if (z === "memory") return Sn.layerMemory;
7881
- let e = await Bc(z), t = e.makeSqlLayer(yp()), n = Bn({ sqliteFamily: tr(e.id) });
7882
- if ($.info(`workflow engine: cluster-${n}, dialect=${e.id}` + (n === "memory" ? " — single-process durable replay, no horizontal scaling" + (tr(e.id) ? "" : " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)") : "")), e.id === "mssql") {
7879
+ let e = await Bc(z), t = e.makeSqlLayer(yp()), n = Bn({ sqliteFamily: rr(e.id) });
7880
+ if ($.info(`workflow engine: cluster-${n}, dialect=${e.id}` + (n === "memory" ? " — single-process durable replay, no horizontal scaling" + (rr(e.id) ? "" : " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)") : "")), e.id === "mssql") {
7883
7881
  let e = await fu(process.cwd());
7884
7882
  e && $.warn(e);
7885
7883
  }
@@ -7888,11 +7886,11 @@ ${a.join("\n\n")}\n`);
7888
7886
  runnerStorage: n,
7889
7887
  dialectId: e.id,
7890
7888
  ...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
7891
- ...nr.length > 0 ? { extraShardingLayers: nr } : {}
7889
+ ...Xn.length > 0 ? { extraShardingLayers: Xn } : {}
7892
7890
  });
7893
7891
  })();
7894
7892
  $.info("workflow engine selected", { engine: z === "postgres" ? "cluster-postgres" : "in-memory" });
7895
- let ar, or = /* @__PURE__ */ new Map(), cr = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, lr = async (e, t, n) => {
7893
+ let ir, or = /* @__PURE__ */ new Map(), sr = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, cr = async (e, t, n) => {
7896
7894
  let r = {
7897
7895
  ...n,
7898
7896
  source: n.source ?? `workflow:${e}`
@@ -7917,7 +7915,7 @@ ${a.join("\n\n")}\n`);
7917
7915
  createdAt: /* @__PURE__ */ new Date()
7918
7916
  };
7919
7917
  n[0] === void 0 ? await L.insert("_voltro_workflow_start_contexts", {
7920
- id: cr(),
7918
+ id: sr(),
7921
7919
  ...i
7922
7920
  }) : await L.update("_voltro_workflow_start_contexts", n[0].id, i);
7923
7921
  } catch (n) {
@@ -7961,7 +7959,7 @@ ${a.join("\n\n")}\n`);
7961
7959
  });
7962
7960
  return;
7963
7961
  }
7964
- }, V = M.length > 0 ? it(() => ar) : void 0, dr = $.child("webhooks"), fr = v.filter((e) => Kf.test(e)), H = fr.length > 0 ? await md(fr, dr) : {
7962
+ }, V = M.length > 0 ? it(() => ir) : void 0, dr = $.child("webhooks"), fr = v.filter((e) => Kf.test(e)), H = fr.length > 0 ? await md(fr, dr) : {
7965
7963
  outgoing: [],
7966
7964
  incoming: [],
7967
7965
  providers: []
@@ -8066,7 +8064,7 @@ ${a.join("\n\n")}\n`);
8066
8064
  }), kr = () => {
8067
8065
  let e = U.subscriptionSnapshot(), t = U.matcherStats(), n = e.map((e) => {
8068
8066
  let t = [];
8069
- for (let n of sr(e.predicate)) n.conjunctive && t.push(n.column);
8067
+ for (let n of lr(e.predicate)) n.conjunctive && t.push(n.column);
8070
8068
  return {
8071
8069
  fingerprint: e.fingerprint,
8072
8070
  table: e.table,
@@ -8146,8 +8144,8 @@ ${a.join("\n\n")}\n`);
8146
8144
  });
8147
8145
  let _i = (e, t) => kt(e.pipe(y.provide(nt(t)), y.provide(gi), y.provide(Df))), vi = ct(I);
8148
8146
  if ((process.env.VOLTRO_INDEX_AUDIT ?? "on") !== "off") {
8149
- let e = Xn(I), t = process.stdout.isTTY === !0 && (process.env.NO_COLOR ?? "") === "";
8150
- for (let n of e) $.warn("\n" + $n(n, {
8147
+ let e = Qn(I), t = process.stdout.isTTY === !0 && (process.env.NO_COLOR ?? "") === "";
8148
+ for (let n of e) $.warn("\n" + tr(n, {
8151
8149
  color: t,
8152
8150
  indent: " "
8153
8151
  }));
@@ -8167,7 +8165,7 @@ ${a.join("\n\n")}\n`);
8167
8165
  kv: en
8168
8166
  }, t = H.outgoing.map((e) => e.descriptor);
8169
8167
  W = oi(e, async (n) => {
8170
- let r = ci.execute(n).pipe(y.provide(ci.toLayer(ai(e, { events: t })).pipe(S.provideMerge(ir))));
8168
+ let r = ci.execute(n).pipe(y.provide(ci.toLayer(ai(e, { events: t })).pipe(S.provideMerge(nr))));
8171
8169
  y.runPromise(r).catch((e) => {
8172
8170
  dr.error("deliverWebhook workflow crashed", {
8173
8171
  deliveryId: n.deliveryId,
@@ -8191,7 +8189,7 @@ ${a.join("\n\n")}\n`);
8191
8189
  }), xi = async () => {
8192
8190
  if (P.length === 0) return;
8193
8191
  let e = process.env.HOSTNAME ?? `pid-${process.pid}`, t;
8194
- er ? t = Mt : Jn === "cluster" ? ($.warn("scheduling.coordination=cluster needs store=postgres — falling back to single (dev/memory)"), t = Mt) : Jn === "advisoryLock" ? z === "memory" ? ($.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single (memory)"), t = Mt) : t = Ze(L, e, {
8192
+ Yn ? t = Mt : Jn === "cluster" ? ($.warn("scheduling.coordination=cluster needs store=postgres — falling back to single (dev/memory)"), t = Mt) : Jn === "advisoryLock" ? z === "memory" ? ($.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single (memory)"), t = Mt) : t = Ze(L, e, {
8195
8193
  info: (e, t) => $.info(e, t ?? {}),
8196
8194
  warn: (e, t) => $.warn(e, t ?? {})
8197
8195
  }) : t = Mt;
@@ -8201,7 +8199,7 @@ ${a.join("\n\n")}\n`);
8201
8199
  coordinator: t,
8202
8200
  defaultTrigger: qn,
8203
8201
  replicaId: e,
8204
- armSelf: !er,
8202
+ armSelf: !Yn,
8205
8203
  dormancy: F?.dormancy ?? "always-on",
8206
8204
  dormancyTenantId: kf,
8207
8205
  buildContext: ({ traceId: e, scheduleName: t }) => bi({
@@ -8220,15 +8218,15 @@ ${a.join("\n\n")}\n`);
8220
8218
  ...n === void 0 ? {} : { interceptFire: n }
8221
8219
  }), $.info("scheduler ready", {
8222
8220
  schedules: P.length,
8223
- coordination: er ? "cluster" : t.kind,
8224
- clusterCrons: nr.length
8221
+ coordination: Yn ? "cluster" : t.kind,
8222
+ clusterCrons: Xn.length
8225
8223
  }), process.on("beforeExit", () => {
8226
8224
  Gn?.shutdown();
8227
8225
  });
8228
8226
  }, G = {}, Si = (e, t) => Ee(De(e, ce, t.subject.tenantId), le), Ci = /* @__PURE__ */ new Set(), wi = (e) => {
8229
8227
  if (e.usingIndex !== void 0 || e.predicate === void 0) return;
8230
8228
  let t = /* @__PURE__ */ new Set();
8231
- for (let n of sr(e.predicate)) n.conjunctive && t.add(n.column);
8229
+ for (let n of lr(e.predicate)) n.conjunctive && t.add(n.column);
8232
8230
  if (t.size === 0 || vi.anyFieldIndexed(e.table, t)) return;
8233
8231
  let n = `${e.table}::${[...t].sort().join(",")}`;
8234
8232
  Ci.has(n) || (Ci.add(n), $.warn("non-indexed predicate — slow at scale", {
@@ -8302,7 +8300,7 @@ ${a.join("\n\n")}\n`);
8302
8300
  column: "startedAt",
8303
8301
  direction: "desc"
8304
8302
  }],
8305
- predicate: rr(B("id", t), B("executionId", t)),
8303
+ predicate: ar(B("id", t), B("executionId", t)),
8306
8304
  take: 1,
8307
8305
  skip: void 0,
8308
8306
  projection: void 0
@@ -8318,7 +8316,7 @@ ${a.join("\n\n")}\n`);
8318
8316
  column: "startedAt",
8319
8317
  direction: "desc"
8320
8318
  }],
8321
- predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : Yn(...n),
8319
+ predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : Zn(...n),
8322
8320
  take: r,
8323
8321
  skip: void 0,
8324
8322
  projection: void 0
@@ -8500,13 +8498,13 @@ ${a.join("\n\n")}\n`);
8500
8498
  }, qi = [...ft(M, {
8501
8499
  buildContext: Li,
8502
8500
  resolveStartContext: ur
8503
- }, (e, t, n) => Ki(e.definition.name, e.definition, t, n)), ...ie], Ji = qi.length > 0 ? S.mergeAll(...qi) : S.empty, Yi = C.make(Ji.pipe(S.provideMerge(ir)));
8501
+ }, (e, t, n) => Ki(e.definition.name, e.definition, t, n)), ...ie], Ji = qi.length > 0 ? S.mergeAll(...qi) : S.empty, Yi = C.make(Ji.pipe(S.provideMerge(nr)));
8504
8502
  process.on("beforeExit", () => {
8505
8503
  Yi.dispose();
8506
- }), ar = M.length > 0 ? ut({
8504
+ }), ir = M.length > 0 ? ut({
8507
8505
  workflows: M,
8508
8506
  runEffect: (e) => Yi.runPromise(e),
8509
- rememberStartContext: lr,
8507
+ rememberStartContext: cr,
8510
8508
  signal: async (e, t, n) => {
8511
8509
  let r = await Nn({
8512
8510
  store: L,
@@ -8801,7 +8799,7 @@ ${a.join("\n\n")}\n`);
8801
8799
  return {
8802
8800
  subscriptions: e.map((e) => {
8803
8801
  let t = [];
8804
- for (let n of sr(e.predicate)) n.conjunctive && t.push(n.column);
8802
+ for (let n of lr(e.predicate)) n.conjunctive && t.push(n.column);
8805
8803
  return {
8806
8804
  fingerprint: e.fingerprint,
8807
8805
  table: e.table,
@@ -9260,7 +9258,7 @@ ${a.join("\n\n")}\n`);
9260
9258
  ...e.description === void 0 ? {} : { description: e.description },
9261
9259
  nextFiringAt: mt(e).toISOString()
9262
9260
  })),
9263
- coordination: er ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single"
9261
+ coordination: Yn ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single"
9264
9262
  }),
9265
9263
  inspectScheduleRuns: async (e) => {
9266
9264
  let t = Math.max(0, e.offset ?? 0), n = Math.max(1, Math.min(500, e.limit ?? 50)), r = e.name === void 0 ? void 0 : B("name", e.name), i = await L.query({
@@ -9310,7 +9308,7 @@ ${a.join("\n\n")}\n`);
9310
9308
  let e = process.env.POD_NAME ?? process.env.HOSTNAME ?? `dev-${process.pid}`, t = z, n = t === "memory", r = n ? "none" : Bn({ sqliteFamily: t === "sqlite" || t === "turso" }), i = zn({
9311
9309
  runnerStorage: r === "sql" ? "sql" : "memory",
9312
9310
  ...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {}
9313
- }), a = !n && (process.env.CDC ?? "1") !== "0", o = t === "postgres" ? "LISTEN/NOTIFY" : t === "sqlite" || t === "turso" ? "in-process bus" : t === "mariadb" || t === "mysql" ? "binlog CDC (ROW)" : t === "mssql" ? "inline only" : t === "memory" ? "none (single-process)" : "inline only", s = t === "postgres" || t === "mariadb" || t === "mssql" ? "full" : t === "mysql" ? "inline-only" : t === "sqlite" || t === "turso" ? "single-process" : "none", c = er ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single", l = a && t === "mariadb" ? wp(e) : void 0, u = {
9311
+ }), a = !n && (process.env.CDC ?? "1") !== "0", o = t === "postgres" ? "LISTEN/NOTIFY" : t === "sqlite" || t === "turso" ? "in-process bus" : t === "mariadb" || t === "mysql" ? "binlog CDC (ROW)" : t === "mssql" ? "inline only" : t === "memory" ? "none (single-process)" : "inline only", s = t === "postgres" || t === "mariadb" || t === "mssql" ? "full" : t === "mysql" ? "inline-only" : t === "sqlite" || t === "turso" ? "single-process" : "none", c = Yn ? "cluster" : Jn === "advisoryLock" && z === "postgres" ? "advisoryLock" : "single", l = a && t === "mariadb" ? wp(e) : void 0, u = {
9314
9312
  replicaId: e,
9315
9313
  dialect: t,
9316
9314
  runnerHost: i.host,
@@ -0,0 +1,2 @@
1
+ import { o as e } from "./dev-BGYmeKEx.js";
2
+ export { e as loadApiConfig };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { i as e, n as t, r as n, t as r } from "./commands-5AlC8Udj.js";
1
+ import { i as e, n as t, r as n, t as r } from "./commands-BgOfGwLc.js";
2
2
  //#region src/index.ts
3
3
  var i = "framework";
4
4
  //#endregion
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voltro/cli",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "The `voltro` CLI — dev server, codegen, migrations, project scaffolding, agent-docs seeding, and production serve.",
5
5
  "keywords": [
6
6
  "voltro",
@@ -49,22 +49,22 @@
49
49
  "@effect/workflow": "^0.18.2",
50
50
  "@tailwindcss/vite": "^4.3.2",
51
51
  "@vitejs/plugin-react": "^6.0.3",
52
- "@voltro/ai": "0.2.0",
53
- "@voltro/cache": "0.2.0",
54
- "@voltro/data-transfer": "0.2.0",
55
- "@voltro/database": "0.2.0",
56
- "@voltro/env": "0.2.0",
57
- "@voltro/kv": "0.2.0",
58
- "@voltro/logger": "0.2.0",
59
- "@voltro/plugin-auth": "0.2.0",
60
- "@voltro/plugin-broadcast": "0.2.0",
61
- "@voltro/plugin-mail": "0.2.0",
62
- "@voltro/plugin-storage": "0.2.0",
63
- "@voltro/plugin-webhooks": "0.2.0",
64
- "@voltro/protocol": "0.2.0",
65
- "@voltro/runtime": "0.2.0",
66
- "@voltro/serverless": "0.2.0",
67
- "@voltro/workflow": "0.2.0",
52
+ "@voltro/ai": "0.2.1",
53
+ "@voltro/cache": "0.2.1",
54
+ "@voltro/data-transfer": "0.2.1",
55
+ "@voltro/database": "0.2.1",
56
+ "@voltro/env": "0.2.1",
57
+ "@voltro/kv": "0.2.1",
58
+ "@voltro/logger": "0.2.1",
59
+ "@voltro/plugin-auth": "0.2.1",
60
+ "@voltro/plugin-broadcast": "0.2.1",
61
+ "@voltro/plugin-mail": "0.2.1",
62
+ "@voltro/plugin-storage": "0.2.1",
63
+ "@voltro/plugin-webhooks": "0.2.1",
64
+ "@voltro/protocol": "0.2.1",
65
+ "@voltro/runtime": "0.2.1",
66
+ "@voltro/serverless": "0.2.1",
67
+ "@voltro/workflow": "0.2.1",
68
68
  "chokidar": "^5.0.0",
69
69
  "esbuild": "^0.28.0",
70
70
  "ioredis": "^5.11.1",
@@ -11,16 +11,16 @@
11
11
  "dependencies": {
12
12
  "@effect/platform": "^0.96.1",
13
13
  "@effect/rpc": "^0.75.1",
14
- "@voltro/ai": "0.2.0",
15
- "@voltro/cli": "0.2.0",
16
- "@voltro/database": "0.2.0",
17
- "@voltro/env": "0.2.0",
18
- "@voltro/protocol": "0.2.0",
19
- "@voltro/runtime": "0.2.0",
14
+ "@voltro/ai": "0.2.1",
15
+ "@voltro/cli": "0.2.1",
16
+ "@voltro/database": "0.2.1",
17
+ "@voltro/env": "0.2.1",
18
+ "@voltro/protocol": "0.2.1",
19
+ "@voltro/runtime": "0.2.1",
20
20
  "effect": "^3.21.2"
21
21
  },
22
22
  "devDependencies": {
23
- "@voltro/testing": "0.2.0",
23
+ "@voltro/testing": "0.2.1",
24
24
  "typescript": "^5.7.0",
25
25
  "vitest": "^3.0.0"
26
26
  }
@@ -12,17 +12,17 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.2.0",
16
- "@voltro/database": "0.2.0",
17
- "@voltro/env": "0.2.0",
18
- "@voltro/plugin-auth": "0.2.0",
19
- "@voltro/protocol": "0.2.0",
20
- "@voltro/runtime": "0.2.0",
21
- "@voltro/sql-postgres": "0.2.0",
15
+ "@voltro/cli": "0.2.1",
16
+ "@voltro/database": "0.2.1",
17
+ "@voltro/env": "0.2.1",
18
+ "@voltro/plugin-auth": "0.2.1",
19
+ "@voltro/protocol": "0.2.1",
20
+ "@voltro/runtime": "0.2.1",
21
+ "@voltro/sql-postgres": "0.2.1",
22
22
  "effect": "^3.21.2"
23
23
  },
24
24
  "devDependencies": {
25
- "@voltro/testing": "0.2.0",
25
+ "@voltro/testing": "0.2.1",
26
26
  "typescript": "^5.7.0",
27
27
  "vitest": "^3.0.0"
28
28
  }
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.2.0",
16
- "@voltro/database": "0.2.0",
17
- "@voltro/env": "0.2.0",
18
- "@voltro/plugin-multitenancy": "0.2.0",
19
- "@voltro/protocol": "0.2.0",
20
- "@voltro/runtime": "0.2.0",
15
+ "@voltro/cli": "0.2.1",
16
+ "@voltro/database": "0.2.1",
17
+ "@voltro/env": "0.2.1",
18
+ "@voltro/plugin-multitenancy": "0.2.1",
19
+ "@voltro/protocol": "0.2.1",
20
+ "@voltro/runtime": "0.2.1",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.2.0",
24
+ "@voltro/testing": "0.2.1",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }
@@ -12,16 +12,16 @@
12
12
  "dependencies": {
13
13
  "@effect/platform": "^0.96.1",
14
14
  "@effect/rpc": "^0.75.1",
15
- "@voltro/cli": "0.2.0",
16
- "@voltro/database": "0.2.0",
17
- "@voltro/env": "0.2.0",
18
- "@voltro/plugin-deactivation": "0.2.0",
19
- "@voltro/protocol": "0.2.0",
20
- "@voltro/runtime": "0.2.0",
15
+ "@voltro/cli": "0.2.1",
16
+ "@voltro/database": "0.2.1",
17
+ "@voltro/env": "0.2.1",
18
+ "@voltro/plugin-deactivation": "0.2.1",
19
+ "@voltro/protocol": "0.2.1",
20
+ "@voltro/runtime": "0.2.1",
21
21
  "effect": "^3.21.2"
22
22
  },
23
23
  "devDependencies": {
24
- "@voltro/testing": "0.2.0",
24
+ "@voltro/testing": "0.2.1",
25
25
  "typescript": "^5.7.0",
26
26
  "vitest": "^3.0.0"
27
27
  }