@voltro/cli 0.30.2 → 0.31.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 (120) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/dist/apiBuild-BOqL1dlg.js +2 -0
  3. package/dist/{apiBuild-BUS1RfPi.js → apiBuild-CLPt-pX6.js} +2 -2
  4. package/dist/appGraph-CvQCte0z.js +2 -0
  5. package/dist/appGraph-gQ_6GkQQ.js +110 -0
  6. package/dist/bin.js +3 -3
  7. package/dist/checkCommand-ClRvH_SN.js +2 -0
  8. package/dist/{checkCommand-D_wdOFhw.js → checkCommand-D7r6_pk7.js} +309 -453
  9. package/dist/{commands-BgGAUcku.js → commands-CNVVv03h.js} +2566 -2505
  10. package/dist/{dbCommand-CbPRCD1x.js → dbCommand-BH8GAYuf.js} +22 -2
  11. package/dist/dbCommand-BwQ_Jl98.js +2 -0
  12. package/dist/{dev-tPcOmjPJ.js → dev-DOZVMVfi.js} +1 -1
  13. package/dist/{dev-GAOIot9G.js → dev-DdQEn2Ia.js} +1774 -1771
  14. package/dist/index.js +1 -1
  15. package/dist/{inspectMetrics-BM1vrsga.js → inspectMetrics-BeEAnjqw.js} +727 -480
  16. package/dist/{sdkgen-BV4fFucu.js → sdkgen-v9WV8zRi.js} +1 -1
  17. package/dist/{serveCommand-ClqXCX1y.js → serveCommand-KsKXXWn4.js} +289 -289
  18. package/dist/serveEntry.js +2 -2
  19. package/dist/{start-CTnNvKlk.js → start-CI2QdKy9.js} +204 -199
  20. package/dist/startEntry.js +2 -2
  21. package/package.json +17 -17
  22. package/templates/AGENTS.md +43 -43
  23. package/templates/agent-docs/_index.md +43 -43
  24. package/templates/agent-docs/_manifest.json +84 -42
  25. package/templates/agent-docs/database/migrations.md +14 -1
  26. package/templates/agent-docs/internationalization.md +29 -0
  27. package/templates/agent-docs/plugins/ai-flows.md +148 -0
  28. package/templates/agent-docs/plugins/analytics-postgres.md +90 -0
  29. package/templates/agent-docs/plugins/atlassian.md +378 -0
  30. package/templates/agent-docs/plugins/audit.md +324 -0
  31. package/templates/agent-docs/plugins/auth-auth0.md +92 -0
  32. package/templates/agent-docs/plugins/auth-clerk.md +90 -0
  33. package/templates/agent-docs/plugins/auth-kinde.md +88 -0
  34. package/templates/agent-docs/plugins/auth-oidc.md +95 -0
  35. package/templates/agent-docs/plugins/auth-supabase.md +103 -0
  36. package/templates/agent-docs/plugins/auth-workos.md +105 -0
  37. package/templates/agent-docs/plugins/auth.md +227 -0
  38. package/templates/agent-docs/plugins/billing.md +324 -0
  39. package/templates/agent-docs/plugins/broadcast.md +144 -0
  40. package/templates/agent-docs/plugins/cdc-out.md +116 -0
  41. package/templates/agent-docs/plugins/clickhouse.md +91 -0
  42. package/templates/agent-docs/plugins/datadog.md +105 -0
  43. package/templates/agent-docs/plugins/deactivation.md +114 -0
  44. package/templates/agent-docs/plugins/duckdb.md +82 -0
  45. package/templates/agent-docs/plugins/flags.md +146 -0
  46. package/templates/agent-docs/plugins/governance.md +143 -0
  47. package/templates/agent-docs/plugins/licensing.md +74 -0
  48. package/templates/agent-docs/plugins/logship.md +56 -0
  49. package/templates/agent-docs/plugins/mail.md +334 -0
  50. package/templates/agent-docs/plugins/moderation.md +65 -0
  51. package/templates/agent-docs/plugins/multitenancy.md +99 -0
  52. package/templates/agent-docs/plugins/notifications.md +252 -0
  53. package/templates/agent-docs/plugins/openapi.md +94 -0
  54. package/templates/agent-docs/plugins/postgis.md +140 -0
  55. package/templates/agent-docs/plugins/posthog.md +91 -0
  56. package/templates/agent-docs/plugins/presence.md +115 -0
  57. package/templates/agent-docs/plugins/prometheus.md +124 -0
  58. package/templates/agent-docs/plugins/ratelimit.md +274 -0
  59. package/templates/agent-docs/plugins/rbac.md +270 -0
  60. package/templates/agent-docs/plugins/scim.md +63 -0
  61. package/templates/agent-docs/plugins/search.md +116 -0
  62. package/templates/agent-docs/plugins/sentry.md +192 -0
  63. package/templates/agent-docs/plugins/soft-delete.md +72 -0
  64. package/templates/agent-docs/plugins/sso-saml.md +132 -0
  65. package/templates/agent-docs/plugins/storage.md +709 -0
  66. package/templates/agent-docs/plugins/tinybird.md +92 -0
  67. package/templates/agent-docs/plugins/versioning.md +226 -0
  68. package/templates/agent-docs/plugins/webhooks.md +585 -0
  69. package/templates/agent-docs/security.md +12 -1
  70. package/templates/agent-docs/whats-new.md +90 -23
  71. package/templates/apps/api-ai/package.json +7 -7
  72. package/templates/apps/api-auth/package.json +8 -8
  73. package/templates/apps/api-backend/package.json +7 -7
  74. package/templates/apps/api-backend-deactivation/package.json +7 -7
  75. package/templates/apps/api-backend-mail/package.json +8 -8
  76. package/templates/apps/api-backend-mariadb/package.json +9 -9
  77. package/templates/apps/api-backend-sqlite/package.json +8 -8
  78. package/templates/apps/api-backend-storage/package.json +8 -8
  79. package/templates/apps/api-cms/package.json +10 -10
  80. package/templates/apps/api-collab/package.json +8 -8
  81. package/templates/apps/api-data-advanced/package.json +8 -8
  82. package/templates/apps/api-durable/package.json +8 -8
  83. package/templates/apps/api-feature-flags/package.json +9 -9
  84. package/templates/apps/api-governance/package.json +8 -8
  85. package/templates/apps/api-kv/package.json +8 -8
  86. package/templates/apps/api-moderation/package.json +8 -8
  87. package/templates/apps/api-observability/package.json +8 -8
  88. package/templates/apps/api-ratelimit/package.json +8 -8
  89. package/templates/apps/api-rbac/package.json +8 -8
  90. package/templates/apps/api-rest/package.json +7 -7
  91. package/templates/apps/api-saas/package.json +11 -11
  92. package/templates/apps/api-saas-starter/package.json +10 -10
  93. package/templates/apps/api-search/package.json +8 -8
  94. package/templates/apps/api-status/package.json +8 -8
  95. package/templates/apps/api-versioning/package.json +8 -8
  96. package/templates/apps/api-webhooks/package.json +9 -9
  97. package/templates/apps/changelog/package.json +6 -6
  98. package/templates/apps/edge-functions/package.json +2 -2
  99. package/templates/apps/frontend-admin/package.json +8 -8
  100. package/templates/apps/frontend-app/package.json +8 -8
  101. package/templates/apps/frontend-auth/package.json +8 -8
  102. package/templates/apps/frontend-blank/package.json +7 -7
  103. package/templates/apps/frontend-cms/package.json +9 -9
  104. package/templates/apps/frontend-collab/package.json +9 -9
  105. package/templates/apps/frontend-contact/package.json +7 -7
  106. package/templates/apps/frontend-dashboard/package.json +7 -7
  107. package/templates/apps/frontend-docs/package.json +7 -7
  108. package/templates/apps/frontend-i18n/package.json +6 -6
  109. package/templates/apps/frontend-landing/package.json +7 -7
  110. package/templates/apps/frontend-portal/package.json +8 -8
  111. package/templates/apps/frontend-saas/package.json +8 -8
  112. package/templates/apps/frontend-spa/package.json +7 -7
  113. package/templates/apps/frontend-ssr/package.json +7 -7
  114. package/templates/apps/frontend-ssr-api/package.json +8 -8
  115. package/templates/apps/frontend-static-blog/package.json +6 -6
  116. package/templates/apps/frontend-status/package.json +8 -8
  117. package/templates/apps/mobile-app/package.json +2 -2
  118. package/dist/apiBuild-DMlxvL8h.js +0 -2
  119. package/dist/checkCommand-CARZ36Tr.js +0 -2
  120. package/dist/dbCommand-Ht47LrV-.js +0 -2
@@ -1,12 +1,12 @@
1
- import { ct as e, t, ut as n } from "./inspectMetrics-BM1vrsga.js";
2
- import { n as r, s as i, t as a } from "./seedRunner-Bqxgp7HZ.js";
3
- import { r as o, t as s } from "./appModuleLoader-C9r9mxZt.js";
4
- import { $ as c, $t as l, A as u, At as d, B as ee, Bt as f, C as te, Ct as ne, D as p, Dt as m, E as h, Et as g, F as _, Ft as re, G as ie, H as v, I as y, It as ae, J as oe, Jt as b, K as se, L as ce, M as le, Mt as x, N as S, Nt as ue, O as de, Ot as fe, P as pe, Pt as me, Q as he, Qt as ge, R as _e, Rt as C, S as ve, St as ye, T as be, Tt as w, U as xe, V as Se, Vt as T, W as E, X as Ce, Xt as D, Y as we, Yt as Te, Z as Ee, Zt as De, _ as Oe, _t as ke, an as O, at as k, b as Ae, bt as je, c as Me, ct as A, d as Ne, dt as Pe, en as Fe, et as Ie, ft as Le, g as Re, gt as ze, h as Be, ht as Ve, i as He, it as Ue, j, jt as We, k as Ge, kt as Ke, lt as qe, mt as Je, nn as Ye, nt as Xe, o as Ze, on as Qe, ot as $e, pt as M, q as et, qt as tt, r as nt, rn as N, rt, sn as it, st as P, t as at, tn as ot, tt as st, u as ct, ut as lt, v as ut, vt as dt, w as ft, wt as pt, x as mt, xt as ht, y as F, yt as gt, zt as _t } from "./dev-GAOIot9G.js";
1
+ import { _t as e, ht as t, ot as n, t as r } from "./inspectMetrics-BeEAnjqw.js";
2
+ import { n as i, s as a, t as o } from "./seedRunner-Bqxgp7HZ.js";
3
+ import { r as s, t as c } from "./appModuleLoader-C9r9mxZt.js";
4
+ import { $ as l, $t as u, A as d, At as f, B as p, Bt as ee, C as te, Ct as ne, D as m, Dt as h, E as re, Et as ie, F as g, Ft as ae, G as _, H as oe, I as v, J as y, Jt as se, K as ce, Kt as le, L as ue, Lt as de, M as fe, Mt as pe, N as b, Nt as x, O as S, Ot as me, P as he, Pt as C, Q as w, Qt as ge, R as _e, Rt as ve, S as T, St as ye, T as be, Tt as xe, U as Se, V as Ce, W as we, X as Te, Xt as E, Y as Ee, Yt as D, Z as De, Zt as Oe, _ as ke, _t as O, an as Ae, at as k, b as je, bt as Me, c as A, ct as Ne, d as Pe, dt as Fe, en as Ie, et as Le, ft as Re, g as ze, gt as Be, h as Ve, ht as He, i as j, in as Ue, it as We, j as Ge, jt as Ke, k as qe, kt as Je, lt as Ye, mt as Xe, nn as Ze, nt as Qe, o as M, on as $e, ot as et, pt as tt, q as nt, qt as N, r as P, rt, st as it, t as at, tn as ot, tt as st, u as ct, ut as lt, v as ut, vt as dt, w as ft, wt as pt, x as mt, xt as ht, y as gt, yt as F, zt as _t } from "./dev-DdQEn2Ia.js";
5
5
  import { b as vt, f as yt, g as I, h as L, m as bt, r as xt, y as St } from "./frameworkTableAssembly-BwIrO5nv.js";
6
6
  import { S as Ct, c as wt, n as Tt, p as Et, s as R } from "./fileConventions-Cof68_BL.js";
7
7
  import { m as Dt } from "./inspect-BUUjt773.js";
8
8
  import { n as Ot, t as kt } from "./startupRunner-DPGFchOa.js";
9
- import { r as At, u as jt } from "./apiBuild-BUS1RfPi.js";
9
+ import { r as At, u as jt } from "./apiBuild-CLPt-pX6.js";
10
10
  import { t as z } from "./bootTiming-BdyP9nYw.js";
11
11
  import { n as Mt } from "./cliArgs-qdZSElM3.js";
12
12
  import { basename as Nt, join as Pt } from "node:path";
@@ -69,15 +69,15 @@ var Ur = (e, t) => {
69
69
  if (!e.openArchive) return Q(501, { error: "storage transport not configured on this instance" });
70
70
  c = e.openArchive(n.bundleKey), l = "storage";
71
71
  }
72
- let u = await import("node:os"), d = await import("node:fs/promises"), ee = await import("node:path"), f = await d.mkdtemp(ee.join(u.tmpdir(), "voltro-admin-import-"));
72
+ let u = await import("node:os"), d = await import("node:fs/promises"), f = await import("node:path"), p = await d.mkdtemp(f.join(u.tmpdir(), "voltro-admin-import-"));
73
73
  try {
74
74
  e.assetSink ? await Vr(c, {
75
- dir: f,
75
+ dir: p,
76
76
  blobs: e.assetSink
77
- }) : await Hr(c, f);
77
+ }) : await Hr(c, p);
78
78
  let t = await B.runPromiseExit(Rr({
79
79
  store: e.store,
80
- bundleDir: f,
80
+ bundleDir: p,
81
81
  ...r ? { mode: r } : {},
82
82
  ...i ? { onConflict: i } : {},
83
83
  ...a ? { atomic: a } : {},
@@ -125,7 +125,7 @@ var Ur = (e, t) => {
125
125
  message: e?.message ?? String(e)
126
126
  });
127
127
  } finally {
128
- await d.rm(f, {
128
+ await d.rm(p, {
129
129
  recursive: !0,
130
130
  force: !0
131
131
  });
@@ -161,13 +161,13 @@ var Ur = (e, t) => {
161
161
  });
162
162
  }
163
163
  }
164
- let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? ni(r), c = typeof r.bundleKey == "string" && r.bundleKey.length > 0, l = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, u = await import("node:os"), d = await import("node:fs/promises"), ee = await import("node:path"), f = await d.mkdtemp(ee.join(u.tmpdir(), "voltro-admin-export-"));
164
+ let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? ni(r), c = typeof r.bundleKey == "string" && r.bundleKey.length > 0, l = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, u = await import("node:os"), d = await import("node:fs/promises"), f = await import("node:path"), p = await d.mkdtemp(f.join(u.tmpdir(), "voltro-admin-export-"));
165
165
  try {
166
166
  let t = await B.runPromise(Lr({
167
167
  store: e.store,
168
168
  snapshot: e.snapshot,
169
169
  dialect: e.dialect,
170
- outDir: f,
170
+ outDir: p,
171
171
  ...i.subset ? { subset: i.subset } : {
172
172
  scope: s,
173
173
  ...e.tenantTables && e.tenantTables.length > 0 ? { tenantTables: e.tenantTables } : {}
@@ -180,7 +180,7 @@ var Ur = (e, t) => {
180
180
  if (!e.putArchive) return Q(501, { error: "storage transport not configured on this instance" });
181
181
  let i = r.bundleKey;
182
182
  return await e.putArchive(i, () => Ir({
183
- dir: f,
183
+ dir: p,
184
184
  ...l
185
185
  })), ei.info("admin.export", {
186
186
  transport: "storage",
@@ -197,7 +197,7 @@ var Ur = (e, t) => {
197
197
  });
198
198
  }
199
199
  let d = await ti(Ir({
200
- dir: f,
200
+ dir: p,
201
201
  ...l
202
202
  }));
203
203
  return ei.info("admin.export", {
@@ -222,7 +222,7 @@ var Ur = (e, t) => {
222
222
  message: e?.message ?? String(e)
223
223
  });
224
224
  } finally {
225
- await d.rm(f, {
225
+ await d.rm(p, {
226
226
  recursive: !0,
227
227
  force: !0
228
228
  });
@@ -262,22 +262,22 @@ var Ur = (e, t) => {
262
262
  dataStore: e.store,
263
263
  schemaRegistry: e.schemaRegistry
264
264
  });
265
- let n = (e.discovered.budgets?.length ?? 0) > 0, r, i = new Vt({
265
+ let t = (e.discovered.budgets?.length ?? 0) > 0, n, i = new Vt({
266
266
  store: e.store,
267
267
  ...e.snapshotCache ? { cache: e.snapshotCache } : {},
268
- ...n ? { recordCost: (e) => r?.record(e) } : {},
268
+ ...t ? { recordCost: (e) => n?.record(e) } : {},
269
269
  recordDelivery: (e) => An({
270
270
  label: e.label,
271
271
  kind: e.kind,
272
272
  durationMs: e.durationMs,
273
273
  rowCount: e.rowCount
274
274
  })
275
- }), a = e.cache ?? oi, o = e.kv ?? K, s, c = () => void 0, l, u, d, f, te, ne, p, m = /* @__PURE__ */ new Map(), h = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, ie = async (t, n, r) => {
275
+ }), a = e.cache ?? oi, o = e.kv ?? K, s, c = () => void 0, l, u, d, ee, te, ne, m, h = /* @__PURE__ */ new Map(), re = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, ie = async (t, n, r) => {
276
276
  let i = {
277
277
  ...r,
278
278
  source: r.source ?? `workflow:${t}`
279
279
  };
280
- m.set(n, i);
280
+ h.set(n, i);
281
281
  try {
282
282
  let r = await e.store.query({
283
283
  table: "_voltro_workflow_start_contexts",
@@ -297,14 +297,14 @@ var Ur = (e, t) => {
297
297
  createdAt: /* @__PURE__ */ new Date()
298
298
  };
299
299
  r[0] === void 0 ? await e.store.insert("_voltro_workflow_start_contexts", {
300
- id: h(),
300
+ id: re(),
301
301
  ...a
302
302
  }) : await e.store.update("_voltro_workflow_start_contexts", r[0].id, a);
303
303
  } catch (e) {
304
304
  process.stderr.write(`[workflow] failed to persist start context for ${t}/${n}: ${e?.message ?? String(e)}\n`);
305
305
  }
306
306
  }, ae = async (t, n) => {
307
- let r = m.get(n);
307
+ let r = h.get(n);
308
308
  if (r !== void 0) return r;
309
309
  try {
310
310
  let t = (await e.store.query({
@@ -323,42 +323,42 @@ var Ur = (e, t) => {
323
323
  ...t.parentExecutionId === null ? {} : { parentExecutionId: t.parentExecutionId },
324
324
  ...t.parentClosePolicy === null ? {} : { parentClosePolicy: t.parentClosePolicy }
325
325
  };
326
- return m.set(n, r), r;
326
+ return h.set(n, r), r;
327
327
  } catch (e) {
328
328
  process.stderr.write(`[workflow] failed to load start context for ${n}: ${e?.message ?? String(e)}\n`);
329
329
  return;
330
330
  }
331
- }, b = (e.discovered.workflows?.length ?? 0) > 0 ? _n(() => s) : void 0, ce = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, ue = ce || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", de = e.tenantIsolation === "namespace", fe = (e.log ?? H({ scope: "voltro:serve" })).child("webhooks"), he, _e, C = e.discovered.webhooks;
332
- if (C && C.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
331
+ }, _ = (e.discovered.workflows?.length ?? 0) > 0 ? _n(() => s) : void 0, se = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, ue = se || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", de = e.tenantIsolation === "namespace", pe = (e.log ?? H({ scope: "voltro:serve" })).child("webhooks"), S, me, w = e.discovered.webhooks;
332
+ if (w && w.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
333
333
  e.workflowEngineLayer;
334
- let t = ge({
334
+ let t = Oe({
335
335
  store: e.store,
336
336
  schemaRegistry: e.schemaRegistry,
337
337
  cache: a,
338
338
  kv: o
339
- }), n = C.outgoing.map((e) => e.descriptor);
340
- _e = Dr.toLayer(wr(t, { events: n })), he = Tr(t, async (e) => {
339
+ }), n = w.outgoing.map((e) => e.descriptor);
340
+ me = Dr.toLayer(wr(t, { events: n })), S = Tr(t, async (e) => {
341
341
  let t = d;
342
342
  if (t === void 0) {
343
- fe.error("webhook delivery skipped — the workflow runtime was never built. This is a framework defect, not a configuration problem: report it with your engine setting. Deliveries are NOT queued and will not be retried.", {
343
+ pe.error("webhook delivery skipped — the workflow runtime was never built. This is a framework defect, not a configuration problem: report it with your engine setting. Deliveries are NOT queued and will not be retried.", {
344
344
  deliveryId: e.deliveryId,
345
345
  targetId: e.targetId
346
346
  });
347
347
  return;
348
348
  }
349
349
  t.runPromise(Dr.execute(e)).catch((t) => {
350
- fe.error("deliverWebhook workflow crashed", {
350
+ pe.error("deliverWebhook workflow crashed", {
351
351
  deliveryId: e.deliveryId,
352
352
  targetId: e.targetId
353
353
  }, t);
354
354
  });
355
355
  }, { events: n });
356
356
  }
357
- let ve = /* @__PURE__ */ new Map();
358
- if (C) for (let e of C.incoming) {
357
+ let ge = /* @__PURE__ */ new Map();
358
+ if (w) for (let e of w.incoming) {
359
359
  let t = e.descriptor.path ?? Er(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = kr(e.descriptor, {
360
360
  resolveSecret: async () => process.env[n] ?? null,
361
- resolveWorkflows: () => b === void 0 ? void 0 : G(b, {
361
+ resolveWorkflows: () => _ === void 0 ? void 0 : G(_, {
362
362
  traceId: `incoming:${e.descriptor.id}`,
363
363
  source: `incoming:${e.descriptor.id}`
364
364
  }),
@@ -370,27 +370,27 @@ var Ur = (e, t) => {
370
370
  idempotency: e.idempotency,
371
371
  durationMs: e.durationMs
372
372
  };
373
- e.status >= 500 ? fe.error("incoming delivery failed", t) : e.status >= 400 ? fe.warn("incoming delivery rejected", t) : fe.info("incoming delivery handled", t);
373
+ e.status >= 500 ? pe.error("incoming delivery failed", t) : e.status >= 400 ? pe.warn("incoming delivery rejected", t) : pe.info("incoming delivery handled", t);
374
374
  }
375
375
  });
376
- ve.set(t, { handle: r });
376
+ ge.set(t, { handle: r });
377
377
  }
378
378
  sn(), Ln((t) => cn(e.store, t.subjectId, t.resourceType, t.resourceId));
379
- let ye = [...e.discovered.outboxHandlers ?? [], ...Pe((C?.outgoing.length ?? 0) + (C?.incoming.length ?? 0) + (C?.providers.length ?? 0), []) ? [{
379
+ let _e = [...e.discovered.outboxHandlers ?? [], ...lt((w?.outgoing.length ?? 0) + (w?.incoming.length ?? 0) + (w?.providers.length ?? 0), []) ? [{
380
380
  file: "<framework>/webhooks",
381
381
  id: "voltro-webhook-emit",
382
- definition: Or(() => he)
383
- }] : []], be = ye.length > 0 ? me({
384
- handlers: ye,
382
+ definition: Or(() => S)
383
+ }] : []], ve = _e.length > 0 ? x({
384
+ handlers: _e,
385
385
  store: e.store,
386
386
  log: (e.log ?? H({ scope: "voltro:serve" })).child("outbox")
387
- }) : void 0, T = x({
387
+ }) : void 0, T = Ke({
388
388
  definitions: (e.discovered.connections ?? []).map((e) => e.definition),
389
389
  store: e.store,
390
- publicUrl: We(e.port ?? 4e3),
390
+ publicUrl: f(e.port ?? 4e3),
391
391
  log: (e.log ?? H({ scope: "voltro:serve" })).child("connections")
392
392
  });
393
- le({
393
+ fe({
394
394
  events: e.discovered.events ?? [],
395
395
  rpcTags: [
396
396
  ...e.discovered.queries.map((e) => e.descriptor.name),
@@ -399,113 +399,113 @@ var Ur = (e, t) => {
399
399
  ...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
400
400
  ]
401
401
  });
402
- let Ce = (e.log ?? H({ scope: "voltro:serve" })).child("events"), Te = e.broadcastNamespace ?? ut(e.plugins, void 0), Ee = F(e.plugins, Te, Ce), Oe = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ke = e.membership ?? Ae(e.plugins, {
403
- instanceId: Oe,
404
- namespace: Te,
402
+ let ye = (e.log ?? H({ scope: "voltro:serve" })).child("events"), be = e.broadcastNamespace ?? ut(e.plugins, void 0), Te = gt(e.plugins, be, ye), De = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ke = e.membership ?? je(e.plugins, {
403
+ instanceId: De,
404
+ namespace: be,
405
405
  meta: { mode: "serve" },
406
- logger: Ce
407
- }), O = S({
406
+ logger: ye
407
+ }), O = b({
408
408
  events: e.discovered.events ?? [],
409
- origin: Oe,
410
- ...Ee.publishRemote === void 0 ? {} : { publishRemote: Ee.publishRemote }
411
- }), Me = (e.discovered.events ?? []).length > 0 ? await Ee.attach(O.bus) : null, A = De({
409
+ origin: De,
410
+ ...Te.publishRemote === void 0 ? {} : { publishRemote: Te.publishRemote }
411
+ }), Ae = (e.discovered.events ?? []).length > 0 ? await Te.attach(O.bus) : null, A = E({
412
412
  store: e.store,
413
413
  schemaRegistry: e.schemaRegistry,
414
414
  cache: a,
415
415
  kv: o,
416
- ...he === void 0 ? {} : { webhooksService: he },
417
- ...b === void 0 ? {} : { workflowsProxy: b },
416
+ ...S === void 0 ? {} : { webhooksService: S },
417
+ ..._ === void 0 ? {} : { workflowsProxy: _ },
418
418
  eventTriggers: e.discovered.eventTriggers ?? [],
419
419
  namespaceIsolationOn: de,
420
- ...be === void 0 ? {} : { outbox: { nudge: be.nudge } },
420
+ ...ve === void 0 ? {} : { outbox: { nudge: ve.nudge } },
421
421
  ...T.active ? { connections: { registry: T.registry } } : {},
422
422
  eventBus: O.bus
423
- }), Ne = V.succeed(zt, ht), Fe = V.succeed(Ht, Ve), Le = V.succeed(Bt, Je), Re = V.succeed(Ut, ze), Be = (t, n) => {
423
+ }), Pe = V.succeed(zt, Me), Fe = V.succeed(Ht, Xe), Ie = V.succeed(Bt, tt), Re = V.succeed(Ut, He), ze = (t, n) => {
424
424
  let r = t.pipe(B.provide(gn(n)));
425
- return (e.baseLayer ? r.pipe(B.provide(e.baseLayer)) : r).pipe(B.provide(Ne)).pipe(B.provide(Fe)).pipe(B.provide(Le)).pipe(B.provide(Re));
426
- }, He = (e, t) => Pn(Be(e, t)), Ue = t(), j = se(e.plugins ?? [], Ue), Ge = E(e.plugins ?? [], Ue), Ke = yn({
425
+ return (e.baseLayer ? r.pipe(B.provide(e.baseLayer)) : r).pipe(B.provide(Pe)).pipe(B.provide(Fe)).pipe(B.provide(Ie)).pipe(B.provide(Re));
426
+ }, Be = (e, t) => Pn(ze(e, t)), Ve = r(), j = ce(e.plugins ?? [], Ve), Ue = we(e.plugins ?? [], Ve), Ge = yn({
427
427
  store: e.store,
428
428
  recordMetric: (e) => {
429
- Ue.record(e);
429
+ Ve.record(e);
430
430
  },
431
431
  ...j.mutation === void 0 ? {} : { interceptor: j.mutation },
432
432
  buildContext: (e, t, n) => A(e, t, n),
433
- runEffect: He,
434
- undoCapture: we()
435
- }), Ye = oe(), Xe = ln({
433
+ runEffect: Be,
434
+ undoCapture: Ee()
435
+ }), qe = y(), Je = ln({
436
436
  buildContext: (e) => A(e),
437
- runEffect: He,
437
+ runEffect: Be,
438
438
  recordMetric: (e) => {
439
- Ue.record(e);
439
+ Ve.record(e);
440
440
  },
441
441
  ...j.action === void 0 ? {} : { interceptor: j.action }
442
- }), Ze = Sn({
442
+ }), Ye = Sn({
443
443
  tenantScopedTables: e.tenantScopedTables,
444
444
  softDeleteScopedTables: e.softDeleteScopedTables
445
- }), Qe = {
445
+ }), Ze = {
446
446
  buildContext: (e) => A(e),
447
- finalize: (e, t) => Ze(e, t.subject),
448
- provideEffect: Be,
447
+ finalize: (e, t) => Ye(e, t.subject),
448
+ provideEffect: ze,
449
449
  ...j.query === void 0 ? {} : { interceptor: j.query }
450
- }, M = xn(Qe), et = bn({
451
- ...Qe,
450
+ }, M = xn(Ze), et = bn({
451
+ ...Ze,
452
452
  queryRows: (t, n) => e.store.query(t).then((e) => Vn(t.table, e, n.subject))
453
453
  }), nt = wn({
454
- ...Qe,
454
+ ...Ze,
455
455
  subscribeDescriptor: (e, t, n) => i.subscribe(e, t, n),
456
456
  subscribeComputed: (e, t, n) => i.subscribeComputed(e, t, n)
457
457
  }), N = (e) => e.filter((e) => ar(e.descriptor)), P = {};
458
458
  for (let t of [
459
459
  ...N(e.discovered.queries),
460
- ...Ye.queries,
460
+ ...qe.queries,
461
461
  ...T.queries
462
462
  ]) P[t.descriptor.name] = (e) => W(M(t, e), i, `subscription.${t.descriptor.name}`, void 0, void 0, Cn(t, e));
463
463
  for (let t of [
464
464
  ...N(e.discovered.mutations),
465
- ...Ye.mutations,
465
+ ...qe.mutations,
466
466
  ...T.mutations
467
467
  ]) {
468
468
  let n = vn(t.descriptor.output);
469
- P[t.descriptor.name] = (r) => U(async (e, n) => Ke(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
469
+ P[t.descriptor.name] = (r) => U(async (e, n) => Ge(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
470
470
  }
471
471
  for (let t of [...N(e.discovered.actions), ...T.actions]) {
472
472
  let n = vn(t.descriptor.output);
473
- P[t.descriptor.name] = (r) => U(async (e, n) => Xe(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
473
+ P[t.descriptor.name] = (r) => U(async (e, n) => Je(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
474
474
  }
475
- let at = () => `public-${Math.random().toString(36).slice(2, 10)}`, ot = [
475
+ let rt = () => `public-${Math.random().toString(36).slice(2, 10)}`, it = [
476
476
  ...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
477
477
  descriptor: e.descriptor,
478
478
  invoke: (t, n) => et(e, t, {
479
479
  subject: n.subject,
480
- traceId: at()
480
+ traceId: rt()
481
481
  }),
482
482
  subscribe: (t, n, r) => nt(e, t, {
483
483
  subject: n.subject,
484
- traceId: at()
484
+ traceId: rt()
485
485
  }, r)
486
486
  })),
487
487
  ...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
488
488
  descriptor: e.descriptor,
489
- invoke: (t, n) => Ke(e, t, {
489
+ invoke: (t, n) => Ge(e, t, {
490
490
  subject: n.subject,
491
- traceId: at()
491
+ traceId: rt()
492
492
  })
493
493
  })),
494
494
  ...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
495
495
  descriptor: e.descriptor,
496
- invoke: (t, n) => Xe(e, t, {
496
+ invoke: (t, n) => Je(e, t, {
497
497
  subject: n.subject,
498
- traceId: at()
498
+ traceId: rt()
499
499
  })
500
500
  }))
501
- ], ct = ot.length > 0 ? Mr(jr(ot), {
501
+ ], at = it.length > 0 ? Mr(jr(it), {
502
502
  store: e.store,
503
503
  resolveSubject: (t) => e.resolveSubject(t, -1)
504
- }) : [], lt = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, dt = lt && lt.length >= 16 ? [{
504
+ }) : [], ot = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, ct = ot && ot.length >= 16 ? [{
505
505
  method: "POST",
506
506
  path: Gr,
507
507
  handle: $r({
508
- secret: lt,
508
+ secret: ot,
509
509
  store: e.store,
510
510
  ...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
511
511
  assetSink: zr(Zn()),
@@ -515,7 +515,7 @@ var Ur = (e, t) => {
515
515
  method: "POST",
516
516
  path: Kr,
517
517
  handle: ri({
518
- secret: lt,
518
+ secret: ot,
519
519
  store: e.store,
520
520
  snapshot: e.dataTransferSnapshot ?? { tables: [] },
521
521
  dialect: e.dataTransferDialect ?? "memory",
@@ -527,10 +527,10 @@ var Ur = (e, t) => {
527
527
  await B.runPromise(er(r, e, i, { contentType: "application/octet-stream" }));
528
528
  }
529
529
  })
530
- }] : [], ft = [
530
+ }] : [], dt = [
531
531
  ...e.httpRoutes ?? [],
532
+ ...at,
532
533
  ...ct,
533
- ...dt,
534
534
  ...T.httpRoutes
535
535
  ];
536
536
  Object.assign(P, O.handlers);
@@ -538,19 +538,19 @@ var Ur = (e, t) => {
538
538
  let i = A(r), a = t.executor(n, i);
539
539
  if (B.isEffect(a)) {
540
540
  let t = a.pipe(B.provide(gn(i.store)));
541
- return (e.baseLayer ? t.pipe(B.provide(e.baseLayer)) : t).pipe(B.provide(Ne)).pipe(B.provide(Fe)).pipe(B.provide(Le)).pipe(B.provide(Re));
541
+ return (e.baseLayer ? t.pipe(B.provide(e.baseLayer)) : t).pipe(B.provide(Pe)).pipe(B.provide(Fe)).pipe(B.provide(Ie)).pipe(B.provide(Re));
542
542
  }
543
543
  return typeof a == "object" && a && typeof a.then == "function" ? B.promise(() => a) : a;
544
544
  }, `stream.${t.descriptor.name}`);
545
545
  for (let t of e.discovered.workflows ?? []) P[t.definition.name] = (e) => U(async (e, n) => {
546
546
  let r = n;
547
- return G(b, {
547
+ return G(_, {
548
548
  subject: r.subject,
549
549
  traceId: r.traceId,
550
550
  source: "workflow-rpc"
551
551
  }).start(t.definition.name, e);
552
552
  }, e, `workflow.${t.definition.name}`);
553
- ce && (P[dr.name] = (e) => W(M({
553
+ se && (P[dr.name] = (e) => W(M({
554
554
  descriptor: dr,
555
555
  executor: (e) => {
556
556
  let t = e.id;
@@ -648,30 +648,30 @@ var Ur = (e, t) => {
648
648
  }
649
649
  }, e), i, `subscription.${cr.name}`), P[Z.name] = (t) => U(async (t, n) => {
650
650
  let r = t;
651
- return await D(e.store, n.subject, { executionId: r.executionId }), await b.cancel(r.workflowName, r.executionId), await xt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
651
+ return await D(e.store, n.subject, { executionId: r.executionId }), await _.cancel(r.workflowName, r.executionId), await xt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
652
652
  }, t, `action.${Z.name}`), P[lr.name] = (t) => U(async (t, n) => {
653
653
  let r = t;
654
- return await D(e.store, n.subject, { executionId: r.executionId }), await b.resume(r.workflowName, r.executionId), { ok: !0 };
654
+ return await D(e.store, n.subject, { executionId: r.executionId }), await _.resume(r.workflowName, r.executionId), { ok: !0 };
655
655
  }, t, `action.${lr.name}`), P[mr.name] = (t) => U(async (t, n) => {
656
656
  let r = t;
657
- return await D(e.store, n.subject, { id: r.id }), b.signal({ id: r.id }, r.signalName, r.payload);
657
+ return await D(e.store, n.subject, { id: r.id }), _.signal({ id: r.id }, r.signalName, r.payload);
658
658
  }, t, `action.${mr.name}`), P[hr.name] = (t) => U(async (t, n) => {
659
659
  let r = t;
660
- return await D(e.store, n.subject, { id: r.id }), b.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
660
+ return await D(e.store, n.subject, { id: r.id }), _.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
661
661
  }, t, `action.${hr.name}`));
662
- let pt = [
662
+ let ft = [
663
663
  ...N(e.discovered.queries).map((e) => X(e.descriptor)),
664
664
  ...N(e.discovered.mutations).map((e) => Y(e.descriptor)),
665
665
  ...N(e.discovered.actions).map((e) => J(e.descriptor)),
666
- ...Ye.queries.map((e) => X(e.descriptor)),
667
- ...Ye.mutations.map((e) => Y(e.descriptor)),
666
+ ...qe.queries.map((e) => X(e.descriptor)),
667
+ ...qe.mutations.map((e) => Y(e.descriptor)),
668
668
  ...T.queries.map((e) => X(e.descriptor)),
669
669
  ...T.mutations.map((e) => Y(e.descriptor)),
670
670
  ...T.actions.map((e) => J(e.descriptor)),
671
671
  ...N(e.discovered.streams ?? []).map((e) => or(e.descriptor)),
672
672
  ...O.rpcs,
673
673
  ...(e.discovered.workflows ?? []).map((e) => Un(e.definition)),
674
- ...ce ? [
674
+ ...se ? [
675
675
  X(dr),
676
676
  X(pr),
677
677
  X(fr),
@@ -683,7 +683,7 @@ var Ur = (e, t) => {
683
683
  J(mr),
684
684
  J(hr)
685
685
  ] : []
686
- ], mt = Gn.make(...pt).middleware(nr).middleware(rr), gt = V.succeed(nr, nr.of(({ headers: t, clientId: n }) => B.promise(() => e.resolveSubject(t, n)))), _t = V.succeed(rr, rr.of(({ headers: e, clientId: t }) => B.sync(() => {
686
+ ], mt = Gn.make(...ft).middleware(nr).middleware(rr), ht = V.succeed(nr, nr.of(({ headers: t, clientId: n }) => B.promise(() => e.resolveSubject(t, n)))), _t = V.succeed(rr, rr.of(({ headers: e, clientId: t }) => B.sync(() => {
687
687
  let n = on(t) ?? vr(e);
688
688
  return {
689
689
  clientId: t,
@@ -772,26 +772,26 @@ var Ur = (e, t) => {
772
772
  await u?.gate.release(e);
773
773
  },
774
774
  recorder: L,
775
- pluginWorkflowStepLayer: Ge,
775
+ pluginWorkflowStepLayer: Ue,
776
776
  recordRun: jn
777
777
  }, n);
778
778
  }),
779
779
  ...e.discovered.workflowWorkers ?? [],
780
- ..._e === void 0 ? [] : [_e]
780
+ ...me === void 0 ? [] : [me]
781
781
  ], Ct = St.length > 0 ? V.mergeAll(...St) : V.empty;
782
- if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || _e !== void 0) && e.workflowEngineLayer !== void 0) {
782
+ if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || me !== void 0) && e.workflowEngineLayer !== void 0) {
783
783
  let t = Ct.pipe(V.provideMerge(e.workflowEngineLayer));
784
784
  d = Lt.make(e.baseLayer === void 0 ? t : t.pipe(V.provideMerge(e.baseLayer))), await d.runPromise(B.void);
785
785
  let n = await import("@voltro/workflow/cluster"), r = (e) => d.runPromise(n.redriveFailedRun(e)), i = (e) => d.runPromise(n.resumeRunFromStep(e));
786
- ne = await it({
786
+ ne = await $e({
787
787
  provider: Fr(e.plugins ?? [])?.broadcast?.provider,
788
788
  crossReplica: Fr(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
789
- namespace: Te,
789
+ namespace: be,
790
790
  replicaId: crypto.randomUUID(),
791
791
  pollStorage: () => d.runPromise(n.pollWorkflowStorage),
792
792
  log: (e.log ?? H({ scope: "voltro:serve" })).child("workflow")
793
- }), f = async (t) => {
794
- let n = await Se({
793
+ }), ee = async (t) => {
794
+ let n = await Ce({
795
795
  store: e.store,
796
796
  workflows: e.discovered.workflows ?? [],
797
797
  runRedrive: r
@@ -809,7 +809,7 @@ var Ur = (e, t) => {
809
809
  reason: n.outcome.reason
810
810
  };
811
811
  }, te = async (t) => {
812
- let n = await v({
812
+ let n = await oe({
813
813
  store: e.store,
814
814
  workflows: e.discovered.workflows ?? [],
815
815
  runResume: i
@@ -842,9 +842,9 @@ var Ur = (e, t) => {
842
842
  error: (e, t) => {
843
843
  process.stderr.write(`[flow-control] ERROR ${e} ${t ? JSON.stringify(t) : ""}\n`);
844
844
  }
845
- }, p, m = () => {
846
- if (p !== void 0) return p;
847
- if (!(s === void 0 || L === void 0)) return p = _({
845
+ }, f, m = () => {
846
+ if (f !== void 0) return f;
847
+ if (!(s === void 0 || L === void 0)) return f = g({
848
848
  store: e.store,
849
849
  log: z,
850
850
  workflows: e.discovered.workflows ?? [],
@@ -852,16 +852,16 @@ var Ur = (e, t) => {
852
852
  workflowRuntime: d,
853
853
  workflowRunRecorder: L,
854
854
  closeChildrenForParent: bt
855
- }), p;
855
+ }), f;
856
856
  };
857
- c = m, u = qe({
857
+ c = m, u = Ne({
858
858
  store: e.store,
859
859
  workflows: e.discovered.workflows ?? [],
860
860
  facade: () => s,
861
861
  cancelRunWithReason: m,
862
862
  scheduleCoordinated: a,
863
863
  onAbandoned: async (t) => {
864
- await Ie({
864
+ await Le({
865
865
  workflows: e.discovered.workflows ?? [],
866
866
  facade: () => s,
867
867
  log: o,
@@ -871,13 +871,13 @@ var Ur = (e, t) => {
871
871
  log: o
872
872
  });
873
873
  let h = u;
874
- h !== void 0 && On(() => h.stop()), l = $e({
874
+ h !== void 0 && On(() => h.stop()), l = k({
875
875
  store: e.store,
876
876
  enabled: (e.discovered.workflows?.length ?? 0) > 0,
877
877
  resumeSignal: () => d === void 0 || I === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
878
878
  await d.runPromise(I.completeSuspendingSignal({
879
879
  store: e.store,
880
- target: k(t, n),
880
+ target: We(t, n),
881
881
  signalName: r,
882
882
  payload: i
883
883
  }));
@@ -886,8 +886,8 @@ var Ur = (e, t) => {
886
886
  scheduleCoordinated: a,
887
887
  log: o
888
888
  });
889
- let g = l;
890
- g !== void 0 && On(() => g.stop()), s = (e.discovered.workflows?.length ?? 0) > 0 ? En({
889
+ let re = l;
890
+ re !== void 0 && On(() => re.stop()), s = (e.discovered.workflows?.length ?? 0) > 0 ? En({
891
891
  workflows: e.discovered.workflows ?? [],
892
892
  runEffect: (e) => d.runPromise(e),
893
893
  onEnqueue: () => ne?.publishWake(),
@@ -919,20 +919,20 @@ var Ur = (e, t) => {
919
919
  payload: r,
920
920
  ...i === void 0 ? {} : { options: i }
921
921
  }),
922
- listRuns: (t) => ee(e.store, t),
923
- retry: (t, n) => xe({
922
+ listRuns: (t) => p(e.store, t),
923
+ retry: (t, n) => Se({
924
924
  store: e.store,
925
925
  workflows: e.discovered.workflows ?? [],
926
926
  runPromise: (e) => d.runPromise(e)
927
927
  }, t, n),
928
- redrive: (t) => Se({
928
+ redrive: (t) => Ce({
929
929
  store: e.store,
930
930
  workflows: e.discovered.workflows ?? [],
931
931
  runRedrive: r
932
932
  }, t).then((e) => e.outcome)
933
933
  }) : void 0;
934
934
  }
935
- let wt = V.mergeAll(mt.toLayer(P), gt, _t), Tt = tt(P, e.discovered.queries.map((e) => e.descriptor.name), ce), Et = V.mergeAll(mt.toLayer(Tt), gt, _t), R = e.observability, Dt = await Zt({
935
+ let wt = V.mergeAll(mt.toLayer(P), ht, _t), Tt = le(P, e.discovered.queries.map((e) => e.descriptor.name), se), Et = V.mergeAll(mt.toLayer(Tt), ht, _t), R = e.observability, Dt = await Zt({
936
936
  ...e.appName === void 0 ? {} : { serviceName: e.appName },
937
937
  ...R && R.spanProcessors.length > 0 ? { extraSpanProcessors: R.spanProcessors } : {},
938
938
  ...R && R.metricReaders.length > 0 ? { extraMetricReaders: R.metricReaders } : {},
@@ -950,14 +950,14 @@ var Ur = (e, t) => {
950
950
  isReady: () => Ot,
951
951
  ...kt ? { ping: kt } : {}
952
952
  },
953
- ...ft.length > 0 ? { httpRoutes: ft } : {},
953
+ ...dt.length > 0 ? { httpRoutes: dt } : {},
954
954
  ...e.getStore === void 0 ? {} : { getStore: e.getStore },
955
- ...ve.size > 0 ? { webhookRoutes: ve } : {},
955
+ ...ge.size > 0 ? { webhookRoutes: ge } : {},
956
956
  ...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
957
957
  });
958
958
  if (await Yt(At), (e.discovered.schedules?.length ?? 0) > 0) {
959
959
  let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? un(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Rn;
960
- p = await Bn(e.discovered.schedules ?? [], {
960
+ m = await Bn(e.discovered.schedules ?? [], {
961
961
  store: e.store,
962
962
  coordinator: t,
963
963
  defaultTrigger: e.scheduleDefaultTrigger ?? "self",
@@ -983,26 +983,26 @@ var Ur = (e, t) => {
983
983
  },
984
984
  ...e.scheduleFireInterceptor === void 0 ? {} : { interceptFire: e.scheduleFireInterceptor },
985
985
  ...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
986
- }), e.onSchedulerReady?.(p);
986
+ }), e.onSchedulerReady?.(m);
987
987
  }
988
988
  let z = e.log ?? H({ scope: "voltro:serve" }), Mt, Nt;
989
- if ((e.discovered.subscribers?.length ?? 0) > 0 && (Mt = re(e.discovered.subscribers ?? [], e.store, z.child("subscribe"), e.schemaRegistry, O.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
989
+ if ((e.discovered.subscribers?.length ?? 0) > 0 && (Mt = C(e.discovered.subscribers ?? [], e.store, z.child("subscribe"), e.schemaRegistry, O.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
990
990
  let t = z.child("reaction"), n = async (n, r) => {
991
991
  if (n.kind === "workflow") {
992
- if (b === void 0) {
992
+ if (_ === void 0) {
993
993
  t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
994
994
  return;
995
995
  }
996
996
  let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
997
- await G(b, {
997
+ await G(_, {
998
998
  traceId: `reaction:${n.workflow}`,
999
999
  source: `reaction:${n.workflow}`
1000
1000
  }).start(n.workflow, e);
1001
1001
  return;
1002
1002
  }
1003
- await g(n.agent, r, {
1003
+ await xe(n.agent, r, {
1004
1004
  findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
1005
- runAction: (e, t, n) => Promise.resolve(Xe(e, t, n)),
1005
+ runAction: (e, t, n) => Promise.resolve(Je(e, t, n)),
1006
1006
  makeSubject: (e) => ir(e),
1007
1007
  now: () => Date.now(),
1008
1008
  log: t
@@ -1017,31 +1017,31 @@ var Ur = (e, t) => {
1017
1017
  } catch (e) {
1018
1018
  return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
1019
1019
  }
1020
- }, i = rt(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
1021
- Nt = w(e.discovered.reactions ?? [], e.store, {
1020
+ }, i = Qe(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
1021
+ Nt = pt(e.discovered.reactions ?? [], e.store, {
1022
1022
  runAct: n,
1023
1023
  checkBudget: r,
1024
1024
  claimRateSlot: (e) => i.claim(e)
1025
1025
  }, t);
1026
1026
  }
1027
1027
  let Pt;
1028
- (e.discovered.aggregates?.length ?? 0) > 0 && (Pt = await je({
1028
+ (e.discovered.aggregates?.length ?? 0) > 0 && (Pt = await F({
1029
1029
  discovered: e.discovered.aggregates ?? [],
1030
1030
  store: e.store,
1031
1031
  log: z.child("aggregate"),
1032
1032
  ...e.analytics === void 0 ? {} : { analytics: e.analytics },
1033
1033
  ...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
1034
1034
  ...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
1035
- }), Ne = V.succeed(zt, Pt.registry));
1035
+ }), Pe = V.succeed(zt, Pt.registry));
1036
1036
  let Ft;
1037
1037
  (e.discovered.expectations?.length ?? 0) > 0 && (Ft = Kt({
1038
1038
  discovered: e.discovered.expectations ?? [],
1039
1039
  store: e.store,
1040
1040
  log: z.child("expectation")
1041
- }), Fe = V.succeed(Ht, Ft.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (r = Jt({
1041
+ }), Fe = V.succeed(Ht, Ft.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = Jt({
1042
1042
  discovered: e.discovered.budgets ?? [],
1043
1043
  log: z.child("finops")
1044
- }), Le = V.succeed(Bt, r.registry));
1044
+ }), Ie = V.succeed(Bt, n.registry));
1045
1045
  let It;
1046
1046
  return (e.discovered.experiments?.length ?? 0) > 0 && (It = qt({
1047
1047
  discovered: e.discovered.experiments ?? [],
@@ -1050,18 +1050,18 @@ var Ur = (e, t) => {
1050
1050
  }), Re = V.succeed(Ut, It.registry)), Ot = !0, e.bootTiming?.mark("ready"), {
1051
1051
  dispatcher: i,
1052
1052
  server: At,
1053
- scheduler: p,
1054
- eventsSnapshot: pe(O.bus, O.declared),
1053
+ scheduler: m,
1054
+ eventsSnapshot: he(O.bus, O.declared),
1055
1055
  membersSnapshot: () => ({
1056
1056
  members: ke.membership.list(),
1057
1057
  capturedAt: Date.now()
1058
1058
  }),
1059
- rpcMetrics: () => Ue,
1060
- webhooksService: () => he,
1059
+ rpcMetrics: () => Ve,
1060
+ webhooksService: () => S,
1061
1061
  runCanceller: () => c(),
1062
1062
  flowControlHealth: () => u?.cancelHealth(),
1063
1063
  inferenceHealth: () => l?.health(),
1064
- workflowWriteActions: () => b === void 0 || L === void 0 ? void 0 : y({
1064
+ workflowWriteActions: () => _ === void 0 || L === void 0 ? void 0 : v({
1065
1065
  store: e.store,
1066
1066
  log: z,
1067
1067
  workflows: e.discovered.workflows ?? [],
@@ -1070,10 +1070,10 @@ var Ur = (e, t) => {
1070
1070
  workflowRunRecorder: L,
1071
1071
  closeChildrenForParent: bt
1072
1072
  }),
1073
- redriveWorkflowRun: (e) => f ? f(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
1073
+ redriveWorkflowRun: (e) => ee ? ee(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
1074
1074
  resumeWorkflowRunFromStep: (e) => te ? te(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
1075
1075
  close: async () => {
1076
- Ot = !1, await Me?.detach(), await ke.detach(), Pt?.detach(), Ft?.detach(), r?.detach(), It?.detach(), Nt?.(), Mt?.(), await p?.shutdown(), i.close(), await ne?.detach(), await d?.dispose(), await new Promise((e) => At.close(() => e())), await jt();
1076
+ Ot = !1, await Ae?.detach(), await ke.detach(), Pt?.detach(), Ft?.detach(), n?.detach(), It?.detach(), Nt?.(), Mt?.(), await m?.shutdown(), i.close(), await ne?.detach(), await d?.dispose(), await new Promise((e) => At.close(() => e())), await jt();
1077
1077
  }
1078
1078
  };
1079
1079
  }, $ = H({ scope: "voltro:serve" }), ci = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", li = Mt, ui = async (e) => {
@@ -1089,111 +1089,111 @@ var Ur = (e, t) => {
1089
1089
  if (n) return $.info("serve: booting from the precompiled serve bundle"), n(e);
1090
1090
  }
1091
1091
  return di(e);
1092
- }, di = async (ee) => {
1093
- let g = z();
1092
+ }, di = async (f) => {
1093
+ let p = z();
1094
1094
  process.env.NODE_ENV || (process.env.NODE_ENV = "production");
1095
1095
  try {
1096
1096
  _r();
1097
1097
  } catch (e) {
1098
- throw Xe(e instanceof Error ? e.message : String(e));
1098
+ throw n(e instanceof Error ? e.message : String(e));
1099
1099
  }
1100
- let _ = process.cwd(), re = Number(process.env.PORT ?? li(ee, "--port") ?? 4e3), v = await Me(_);
1101
- Fn(Nn(v?.secrets)), await n({
1100
+ let g = process.cwd(), oe = Number(process.env.PORT ?? li(f, "--port") ?? 4e3), v = await A(g);
1101
+ Fn(Nn(v?.secrets)), await e({
1102
1102
  rawEnv: v?.env,
1103
1103
  appType: "api",
1104
- root: _,
1104
+ root: g,
1105
1105
  log: $,
1106
1106
  generateTypes: !1
1107
- }), g.mark("config");
1108
- let y = (process.env.DB_DIALECT ?? v?.store ?? "memory").toLowerCase(), oe = (y === "mariadb" || y === "postgres" || y === "mssql") && (process.env.CDC ?? "1") !== "0", se = y === "mariadb" ? "mariadb" : y === "mssql" ? "mssql" : void 0, le = At(_);
1109
- if (!s() && Rt(le)) try {
1110
- let e = await import(Ft(le).href);
1107
+ }), p.mark("config");
1108
+ let y = (process.env.DB_DIALECT ?? v?.store ?? "memory").toLowerCase(), ce = (y === "mariadb" || y === "postgres" || y === "mssql") && (process.env.CDC ?? "1") !== "0", le = y === "mariadb" ? "mariadb" : y === "mssql" ? "mssql" : void 0, fe = At(g);
1109
+ if (!c() && Rt(fe)) try {
1110
+ let e = await import(Ft(fe).href);
1111
1111
  if (e.modules) {
1112
1112
  let t = {};
1113
- for (let [n, r] of Object.entries(e.modules)) t[Pt(_, n)] = r;
1114
- o(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
1113
+ for (let [n, r] of Object.entries(e.modules)) t[Pt(g, n)] = r;
1114
+ s(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
1115
1115
  }
1116
1116
  } catch (e) {
1117
1117
  $.warn("precompiled api bundle failed to load — falling back to source", {}, e);
1118
1118
  }
1119
- let x = await Be(_), S = await ct(x, { cdc: oe && se !== void 0 });
1119
+ let b = await Ve(g), x = await ct(b, { cdc: ce && le !== void 0 });
1120
1120
  {
1121
1121
  let e = /* @__PURE__ */ new Set([
1122
- ...S.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
1123
- ...S.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
1124
- ...S.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
1122
+ ...x.queries.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
1123
+ ...x.mutations.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name),
1124
+ ...x.actions.filter((e) => e.descriptor.overridesPlugin === !0).map((e) => e.descriptor.name)
1125
1125
  ]);
1126
1126
  St(vt(v?.plugins ?? []), [
1127
- ...S.queries.map((e) => e.descriptor.name),
1128
- ...S.mutations.map((e) => e.descriptor.name),
1129
- ...S.actions.map((e) => e.descriptor.name),
1130
- ...S.streams.map((e) => e.descriptor.name)
1127
+ ...x.queries.map((e) => e.descriptor.name),
1128
+ ...x.mutations.map((e) => e.descriptor.name),
1129
+ ...x.actions.map((e) => e.descriptor.name),
1130
+ ...x.streams.map((e) => e.descriptor.name)
1131
1131
  ], e);
1132
- let t = d(S.serverOnlyLeaks, Ke(process.env, "strict"), nn, "`voltro serve`");
1133
- if (t.action === "fail") throw Xe(t.message ?? "");
1132
+ let t = Je(x.serverOnlyLeaks, me(process.env, "strict"), nn, "`voltro serve`");
1133
+ if (t.action === "fail") throw n(t.message ?? "");
1134
1134
  t.action === "warn" && $.warn(t.message ?? "");
1135
1135
  }
1136
- let pe = x.filter((e) => lt.test(e)), me = pe.length > 0 ? await Le(pe, $.child("webhooks")) : {
1136
+ let he = b.filter((e) => Ye.test(e)), C = he.length > 0 ? await Fe(he, $.child("webhooks")) : {
1137
1137
  outgoing: [],
1138
1138
  incoming: [],
1139
1139
  providers: []
1140
- }, ge = M(S.events), w = me.outgoing.length + me.incoming.length + me.providers.length + ge.length === 0 ? void 0 : {
1141
- ...me,
1142
- outgoing: [...me.outgoing, ...ge]
1143
- }, xe = xt({
1144
- mix: S.featureMix,
1140
+ }, xe = Re(x.events), Se = C.outgoing.length + C.incoming.length + C.providers.length + xe.length === 0 ? void 0 : {
1141
+ ...C,
1142
+ outgoing: [...C.outgoing, ...xe]
1143
+ }, Ce = xt({
1144
+ mix: x.featureMix,
1145
1145
  plugins: v?.plugins ?? [],
1146
- cdc: oe && se !== void 0,
1147
- ...se ? { cdcDialect: se } : {}
1148
- }), Se = v?.analytics !== void 0 && v.analytics.kind !== "noop" && y !== "memory" ? (await i(y)).makeSqlLayer(Ze()) : void 0, E = await _t({
1146
+ cdc: ce && le !== void 0,
1147
+ ...le ? { cdcDialect: le } : {}
1148
+ }), we = v?.analytics !== void 0 && v.analytics.kind !== "noop" && y !== "memory" ? (await a(y)).makeSqlLayer(M()) : void 0, E = await ve({
1149
1149
  spec: v?.analytics,
1150
- sqlLayer: Se,
1150
+ sqlLayer: we,
1151
1151
  log: $
1152
- }), D = (() => {
1153
- let e = new Set(S.tables.map((e) => e.tableName)), t = [...S.tables];
1154
- for (let n of [...xe, ...E.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
1152
+ }), Ee = (() => {
1153
+ let e = new Set(x.tables.map((e) => e.tableName)), t = [...x.tables];
1154
+ for (let n of [...Ce, ...E.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
1155
1155
  return t;
1156
1156
  })();
1157
- for (let e of D) Yn(e);
1157
+ for (let e of Ee) Yn(e);
1158
1158
  {
1159
- let e = rn(Hn(S.queries.map((e) => ({
1159
+ let e = rn(Hn(x.queries.map((e) => ({
1160
1160
  name: e.descriptor.name,
1161
1161
  source: e.descriptor.source
1162
- })), new Set(D.flatMap((e) => {
1162
+ })), new Set(Ee.flatMap((e) => {
1163
1163
  let t = e.tableName;
1164
1164
  return t === void 0 ? [] : [t];
1165
1165
  }))));
1166
1166
  e !== void 0 && $.warn(e);
1167
1167
  }
1168
- let we = (process.env.NODE_ENV ?? "").toLowerCase();
1169
- if (ci(we, y, process.env.VOLTRO_AUTO_MIGRATE)) {
1170
- let e = (await i(y)).makeSqlLayer(Ze()), t = await B.runPromise(Kn.SqlClient.pipe(B.flatMap((e) => Cr(e, D, {
1171
- appliedBy: `serve:${we}`,
1168
+ let D = (process.env.NODE_ENV ?? "").toLowerCase();
1169
+ if (ci(D, y, process.env.VOLTRO_AUTO_MIGRATE)) {
1170
+ let e = (await a(y)).makeSqlLayer(M()), t = await B.runPromise(Kn.SqlClient.pipe(B.flatMap((e) => Cr(e, Ee, {
1171
+ appliedBy: `serve:${D}`,
1172
1172
  environment: "prod",
1173
1173
  dialectId: y
1174
1174
  })), B.provide(e)));
1175
1175
  t.kind === "prod-mismatch" && ($.error(Sr(t, y)), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(Sr(t, y));
1176
1176
  }
1177
- let De = Tn(D);
1178
- g.mark("discover");
1179
- let k = await He(v, void 0), je = Wn(k, y);
1180
- for (let e of N({
1177
+ let Oe = Tn(Ee);
1178
+ p.mark("discover");
1179
+ let k = await j(v, void 0), Me = Wn(k, y);
1180
+ for (let e of Ze({
1181
1181
  dialect: String(v?.store ?? process.env.DB_DIALECT ?? "postgres"),
1182
1182
  changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
1183
1183
  dbUrl: process.env.DB_URL,
1184
- tables: S.tables.map((e) => ({
1184
+ tables: x.tables.map((e) => ({
1185
1185
  tableName: e.tableName,
1186
1186
  isReactive: e.isReactive === !0
1187
1187
  })),
1188
- querySources: S.queries.flatMap((e) => {
1188
+ querySources: x.queries.flatMap((e) => {
1189
1189
  let t = e.descriptor.source;
1190
1190
  return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
1191
1191
  })
1192
1192
  })) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
1193
1193
  {
1194
- let e = Ye(ot({
1194
+ let e = ot(Ie({
1195
1195
  tables: qn().map((e) => ({ tableName: e.tableName })),
1196
- queries: S.queries.map((e) => ({
1196
+ queries: x.queries.map((e) => ({
1197
1197
  name: e.descriptor.name,
1198
1198
  source: e.descriptor.source
1199
1199
  }))
@@ -1201,32 +1201,32 @@ var Ur = (e, t) => {
1201
1201
  e !== void 0 && $.warn(e);
1202
1202
  }
1203
1203
  v?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = v.cache), v?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = v.cacheRedisUrl), v?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = v.cacheRedisDriver), v?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = v.cacheKeyPrefix);
1204
- let { service: Pe, invalidationBus: Ie, snapshotCache: ze, cache: Ve, semantic: We, evictSource: qe, backend: Je, stats: $e, dispose: tt } = await Fe({
1204
+ let { service: Ne, invalidationBus: Le, snapshotCache: He, cache: We, semantic: Ke, evictSource: Xe, backend: Qe, stats: $e, dispose: tt } = await u({
1205
1205
  env: process.env,
1206
1206
  semantic: v?.cacheSemantic ?? !1
1207
1207
  });
1208
- We !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${Je}` + (Je === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), k.onChange((e) => {
1209
- if (B.runFork(Ie.publish(e.table)), qe !== void 0) {
1208
+ Ke !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${Qe}` + (Qe === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), k.onChange((e) => {
1209
+ if (B.runFork(Le.publish(e.table)), Xe !== void 0) {
1210
1210
  let t = (e.new ?? e.old)?.id;
1211
- qe({
1211
+ Xe({
1212
1212
  table: e.table,
1213
1213
  op: e.op,
1214
1214
  ...t === void 0 ? {} : { id: t }
1215
1215
  });
1216
1216
  }
1217
1217
  }), v?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = v.kv), v?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = v.kvRedisUrl), v?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = v.kvKeyPrefix);
1218
- let { kv: rt, service: it } = await mn({ store: k });
1219
- $.info(Ur(Ne(), Wr())), g.mark("store");
1220
- let st = Gt({
1218
+ let { kv: st, service: lt } = await mn({ store: k });
1219
+ $.info(Ur(Pe(), Wr())), p.mark("store");
1220
+ let pt = Gt({
1221
1221
  store: k,
1222
1222
  sink: E.sink,
1223
1223
  log: $
1224
- }), ht = l({
1224
+ }), gt = ge({
1225
1225
  store: k,
1226
1226
  dialect: y,
1227
1227
  log: { info: (e) => $.info(e) }
1228
1228
  }), F = v?.plugins ?? [], jt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Mt, H;
1229
- y !== "memory" && (Mt = Lt.make((await i(y)).makeSqlLayer(Ze())), H = await Mt.runPromise(Kn.SqlClient));
1229
+ y !== "memory" && (Mt = Lt.make((await a(y)).makeSqlLayer(M())), H = await Mt.runPromise(Kn.SqlClient));
1230
1230
  let zt = hn({
1231
1231
  coordinator: [
1232
1232
  "postgres",
@@ -1236,12 +1236,12 @@ var Ur = (e, t) => {
1236
1236
  ].includes(y) ? un(k, jt, $) : Rn,
1237
1237
  replicaId: jt,
1238
1238
  log: $
1239
- }), Bt = [], Vt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Ht = Fr(v?.plugins ?? [])?.broadcast?.provider, Ut = ut(v?.plugins, v?.name ?? Nt(_));
1239
+ }), Bt = [], Vt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Ht = Fr(v?.plugins ?? [])?.broadcast?.provider, Ut = ut(v?.plugins, v?.name ?? Nt(g));
1240
1240
  {
1241
- let e = Oe(v?.plugins, v?.name ?? Nt(_));
1241
+ let e = ke(v?.plugins, v?.name ?? Nt(g));
1242
1242
  e !== void 0 && $.warn(e);
1243
1243
  }
1244
- let Kt = Ae(v?.plugins, {
1244
+ let Kt = je(v?.plugins, {
1245
1245
  instanceId: Vt,
1246
1246
  namespace: Ut,
1247
1247
  meta: { mode: "serve" },
@@ -1258,39 +1258,39 @@ var Ur = (e, t) => {
1258
1258
  }
1259
1259
  };
1260
1260
  for (let e of F) e.bindDataStore?.(k, qt);
1261
- j({
1261
+ Ge({
1262
1262
  store: k,
1263
- ...u(),
1263
+ ...d(),
1264
1264
  log: $
1265
1265
  });
1266
1266
  let Jt = F.filter((e) => typeof e.onChangeEvent == "function");
1267
1267
  if (Jt.length > 0) {
1268
1268
  let e = k.changeScope ?? "local";
1269
1269
  k.onChange((t) => {
1270
- let n = fe(t, e);
1270
+ let n = h(t, e);
1271
1271
  for (let e of Jt) B.runFork(e.onChangeEvent(n).pipe(B.catchAllCause((t) => B.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: It.pretty(t) })))));
1272
1272
  });
1273
1273
  }
1274
- let Yt = et({
1274
+ let Yt = nt({
1275
1275
  plugins: F,
1276
1276
  appName: v?.name ?? "voltro-api",
1277
1277
  appType: "api",
1278
1278
  voltroVersion: process.env.npm_package_version ?? "0.0.0",
1279
1279
  log: $
1280
1280
  });
1281
- F.length && await Yt.activate(), g.mark("plugins");
1281
+ F.length && await Yt.activate(), p.mark("plugins");
1282
1282
  let U = await Yt.gatherObservability(), Xt = {
1283
1283
  info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
1284
1284
  warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
1285
1285
  debug: () => {}
1286
- }, W, Zt = await Re(k, v, y, Ut, Xt, (e, t) => {
1286
+ }, W, Zt = await ze(k, v, y, Ut, Xt, (e, t) => {
1287
1287
  W?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
1288
1288
  }), Qt = v?.apiKeys, on = (typeof Qt == "object" ? Qt.prefix : void 0) ?? "voltro_", sn = Qt ? en(k) : void 0, cn = sn ? fn({ flush: pn(sn) }) : void 0;
1289
1289
  cn && On(() => cn.shutdown());
1290
1290
  let ln = sn ? dn(sn, {
1291
1291
  prefix: on,
1292
1292
  ...cn ? { usage: cn } : {}
1293
- }) : void 0, gn = ln ? [an(ln, { prefix: on })] : [], _n = nt([...v?.auth?.strategies ?? [], ...gn], Ar(v?.plugins ?? []), v?.auth?.anonymousTenantRequired ?? !1, v?.auth?.resolveScopes, () => je), vn = [...v?.restRoutes ?? [], ...ln ? Wt(ln, (typeof Qt == "object" ? Qt.managementPath : void 0) ?? "/v1/api-keys") : []], yn = v?.idempotency, bn = yn ? {
1293
+ }) : void 0, gn = ln ? [an(ln, { prefix: on })] : [], _n = P([...v?.auth?.strategies ?? [], ...gn], Ar(v?.plugins ?? []), v?.auth?.anonymousTenantRequired ?? !1, v?.auth?.resolveScopes, () => Me), vn = [...v?.restRoutes ?? [], ...ln ? Wt(ln, (typeof Qt == "object" ? Qt.managementPath : void 0) ?? "/v1/api-keys") : []], yn = v?.idempotency, bn = yn ? {
1294
1294
  store: tn(k),
1295
1295
  header: (typeof yn == "object" ? yn.header : void 0) ?? "Idempotency-Key",
1296
1296
  ttlMs: (typeof yn == "object" ? yn.ttlMs : void 0) ?? 864e5
@@ -1301,27 +1301,27 @@ var Ur = (e, t) => {
1301
1301
  clientId: -1
1302
1302
  })).subject,
1303
1303
  ...bn ? { idempotency: bn } : {}
1304
- }) : [], Sn = F.map((e) => e.services).filter((e) => e !== void 0), Cn = V.mergeAll(Te({
1304
+ }) : [], Sn = F.map((e) => e.services).filter((e) => e !== void 0), Cn = V.mergeAll(se({
1305
1305
  analyticsLayer: E.layer,
1306
- cacheService: Pe,
1307
- kvService: it,
1308
- ...We === void 0 ? {} : { semanticCache: We },
1306
+ cacheService: Ne,
1307
+ kvService: lt,
1308
+ ...Ke === void 0 ? {} : { semanticCache: Ke },
1309
1309
  pluginServices: Sn,
1310
1310
  userLayers: v?.layers ?? []
1311
- }), b(v?.http ?? {})), wn = v?.scheduling ?? {}, En = wn.trigger ?? "self", G = /* @__PURE__ */ new Set([
1311
+ }), N(v?.http ?? {})), wn = v?.scheduling ?? {}, En = wn.trigger ?? "self", G = /* @__PURE__ */ new Set([
1312
1312
  "postgres",
1313
1313
  "mysql",
1314
1314
  "mariadb",
1315
1315
  "mssql"
1316
1316
  ]), Dn = wn.coordination ?? (G.has(y) ? "advisoryLock" : "single"), K = Dn === "cluster" && G.has(y), An = K ? "cluster" : Dn === "advisoryLock" && G.has(y) ? "advisoryLock" : "single";
1317
1317
  Dn === "cluster" && !K && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), Dn === "advisoryLock" && !G.has(y) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
1318
- let jn, Mn = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (w?.outgoing.length ?? 0) > 0 || K, Pn;
1318
+ let jn, Mn = x.workflows.length > 0 || x.workflowWorkers.length > 0 || x.eventTriggers.length > 0 || (Se?.outgoing.length ?? 0) > 0 || K, Pn;
1319
1319
  if (Mn) {
1320
1320
  if (y === "mssql") {
1321
- let e = await C(process.cwd());
1321
+ let e = await de(process.cwd());
1322
1322
  e && $.warn(e);
1323
1323
  }
1324
- let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: a }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), o = K ? S.schedules.filter((e) => (e.trigger ?? En) === "self").map((e) => t({
1324
+ let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), o = K ? x.schedules.filter((e) => (e.trigger ?? En) === "self").map((e) => t({
1325
1325
  name: e.name,
1326
1326
  cron: $t(e),
1327
1327
  execute: async () => {
@@ -1329,52 +1329,52 @@ var Ur = (e, t) => {
1329
1329
  }
1330
1330
  })) : [];
1331
1331
  Pn = y === "memory" ? e.layerMemory : await (async () => {
1332
- let e = await i(y), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
1332
+ let e = await a(y), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
1333
1333
  return $.info(`workflow engine: cluster-${t}, dialect=${e.id}` + (t === "memory" ? " — single-process durable replay, no cross-pod shard handoff" + (e.id !== "sqlite" && e.id !== "turso" ? " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)" : "") : "")), n({
1334
- sqlClientLayer: e.makeSqlLayer(Ze()),
1334
+ sqlClientLayer: e.makeSqlLayer(M()),
1335
1335
  runnerStorage: t,
1336
1336
  dialectId: e.id,
1337
1337
  ...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
1338
- ...a(),
1338
+ ...i(),
1339
1339
  ...o.length > 0 ? { extraShardingLayers: o } : {}
1340
1340
  });
1341
1341
  })();
1342
1342
  }
1343
- let In = ie(F, t()), Ln = x.filter((e) => /\.subscribe\.tsx?$/.test(e)), zn = Ln.length > 0 ? await ae(Ln, $) : [], Bn = x.filter((e) => /\.reaction\.tsx?$/.test(e)), Vn = Bn.length > 0 ? await m(Bn, $) : [], Un = x.filter((e) => Et.test(e)), Gn = Un.length > 0 ? await ue(Un, $) : [], Jn = x.filter((e) => /\.aggregate\.tsx?$/.test(e)), q = Jn.length > 0 ? await ye(Jn, $) : [], Xn = ne();
1343
+ let In = _(F, r()), Ln = b.filter((e) => /\.subscribe\.tsx?$/.test(e)), zn = Ln.length > 0 ? await ae(Ln, $) : [], Bn = b.filter((e) => /\.reaction\.tsx?$/.test(e)), Vn = Bn.length > 0 ? await ie(Bn, $) : [], Un = b.filter((e) => Et.test(e)), Gn = Un.length > 0 ? await pe(Un, $) : [], Jn = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), q = Jn.length > 0 ? await ht(Jn, $) : [], Xn = ye();
1344
1344
  if (q.length > 0 && y !== "memory") try {
1345
- Xn = pt((await i(y)).makeSqlLayer(Ze()));
1345
+ Xn = ne((await a(y)).makeSqlLayer(M()));
1346
1346
  } catch (e) {
1347
1347
  $.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
1348
1348
  }
1349
- let Zn = y === "memory" ? Rn : un(k, `aggregate@${process.pid}`, $), Qn = x.filter((e) => R.test(e)), $n = Qn.length > 0 ? await dt(Qn, $) : [], er = x.filter((e) => Tt.test(e)), tr = er.length > 0 ? await ke(er, $) : [], nr = x.filter((e) => wt.test(e)), rr = nr.length > 0 ? await gt(nr, $) : [], J = [], ir = [], ar = x.filter((e) => yt.test(e));
1349
+ let Zn = y === "memory" ? Rn : un(k, `aggregate@${process.pid}`, $), Qn = b.filter((e) => R.test(e)), $n = Qn.length > 0 ? await O(Qn, $) : [], er = b.filter((e) => Tt.test(e)), tr = er.length > 0 ? await Be(er, $) : [], nr = b.filter((e) => wt.test(e)), rr = nr.length > 0 ? await dt(nr, $) : [], J = [], ir = [], ar = b.filter((e) => yt.test(e));
1350
1350
  if (ar.length > 0) {
1351
- let e = $.child("agent"), t = x.filter((e) => bt.test(e));
1351
+ let e = $.child("agent"), t = b.filter((e) => bt.test(e));
1352
1352
  t.length > 0 && await I(t, e);
1353
1353
  let n = await L(ar, e);
1354
- for (let e of n.agents) for (let t of Ce(e)) (t.kind === "action" ? J : ir).push({
1354
+ for (let e of n.agents) for (let t of Te(e)) (t.kind === "action" ? J : ir).push({
1355
1355
  file: t.file,
1356
1356
  descriptor: t.descriptor,
1357
1357
  executor: t.executor
1358
1358
  });
1359
1359
  n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
1360
1360
  }
1361
- g.mark("workflow");
1361
+ p.mark("workflow");
1362
1362
  let Y = () => {
1363
1363
  let e = Z.workflowWriteActions();
1364
1364
  if (e === void 0) throw Error("workflow actions: this app registers no workflows");
1365
1365
  return e;
1366
- }, X = await Ee({
1367
- files: x,
1366
+ }, X = await De({
1367
+ files: b,
1368
1368
  store: k,
1369
1369
  log: $,
1370
1370
  seedPolicy: "report",
1371
- seedPattern: a,
1372
- loadSeedFiles: r,
1371
+ seedPattern: o,
1372
+ loadSeedFiles: i,
1373
1373
  startupPattern: Ct,
1374
1374
  loadStartupFiles: kt,
1375
1375
  runStartups: Ot,
1376
- emailPattern: he,
1377
- loadEmailFiles: c,
1376
+ emailPattern: w,
1377
+ loadEmailFiles: l,
1378
1378
  registerEmailTemplates: Nr
1379
1379
  });
1380
1380
  (X.startupCount > 0 || X.emailCount > 0) && $.info("boot lifecycle", {
@@ -1388,40 +1388,40 @@ var Ur = (e, t) => {
1388
1388
  meta: {
1389
1389
  name: v?.name ?? "voltro-api",
1390
1390
  voltroVersion: at,
1391
- port: re,
1391
+ port: oe,
1392
1392
  mode: "start",
1393
1393
  store: y,
1394
- cdc: oe ? "on" : "off"
1394
+ cdc: ce ? "on" : "off"
1395
1395
  },
1396
- rpc: O(S, _),
1397
- workflows: Qe(S, _),
1396
+ rpc: Ue(x, g),
1397
+ workflows: Ae(x, g),
1398
1398
  events: () => Z.eventsSnapshot(),
1399
1399
  members: () => Z.membersSnapshot(),
1400
1400
  inspectFireSchedule: async ({ name: e, trigger: t }) => {
1401
1401
  if (!jn) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
1402
1402
  return { runId: await jn.fireNow(e, t) ?? null };
1403
1403
  },
1404
- ...w === void 0 ? {} : { webhooks: () => Ge({
1404
+ ...Se === void 0 ? {} : { webhooks: () => qe({
1405
1405
  store: k,
1406
- discoveredWebhooks: w
1406
+ discoveredWebhooks: Se
1407
1407
  }) },
1408
1408
  plugins: () => ({
1409
1409
  plugins: Yt.snapshot(),
1410
1410
  capturedAt: Date.now()
1411
1411
  }),
1412
- env: () => e(v?.name ?? Nt(_), {
1412
+ env: () => t(v?.name ?? Nt(g), {
1413
1413
  ...v?.env !== void 0 && gr(v.env) ? { contract: v.env } : {},
1414
1414
  plugins: v?.plugins ?? []
1415
1415
  }),
1416
- dataCache: () => ve({
1416
+ dataCache: () => T({
1417
1417
  stats: $e,
1418
- backendKind: Je
1418
+ backendKind: Qe
1419
1419
  }),
1420
1420
  subscriptions: () => te(() => W),
1421
- inspectTables: () => ce(S.tables),
1421
+ inspectTables: () => ue(x.tables),
1422
1422
  inspectRows: _e({
1423
1423
  store: k,
1424
- tables: S.tables,
1424
+ tables: x.tables,
1425
1425
  mask: !0
1426
1426
  }),
1427
1427
  metrics: (e) => Z.rpcMetrics().snapshot(e),
@@ -1431,15 +1431,15 @@ var Ur = (e, t) => {
1431
1431
  useClusterCron: K,
1432
1432
  scheduleCoordChoice: Dn
1433
1433
  }),
1434
- inspectSchedules: () => p({
1435
- schedules: S.schedules,
1434
+ inspectSchedules: () => m({
1435
+ schedules: x.schedules,
1436
1436
  defaultTrigger: En,
1437
1437
  coordination: An
1438
1438
  }),
1439
- inspectScheduleRuns: (e) => h(k, e),
1439
+ inspectScheduleRuns: (e) => re(k, e),
1440
1440
  ...be(k, {
1441
- controls: A(S.workflows ?? []),
1442
- active: (S.workflows?.length ?? 0) > 0,
1441
+ controls: it(x.workflows ?? []),
1442
+ active: (x.workflows?.length ?? 0) > 0,
1443
1443
  cancellation: () => Z.flowControlHealth()
1444
1444
  }),
1445
1445
  webhookActions: ft(() => Z.webhooksService()),
@@ -1451,12 +1451,12 @@ var Ur = (e, t) => {
1451
1451
  inspectRetryWorkflowRun: (e) => Y().inspectRetryWorkflowRun(e),
1452
1452
  inspectSignalWorkflowRun: (e) => Y().inspectSignalWorkflowRun(e),
1453
1453
  inspectUpdateWorkflowRun: (e) => Y().inspectUpdateWorkflowRun(e),
1454
- inspectInferences: (e) => Ue({
1454
+ inspectInferences: (e) => rt({
1455
1455
  store: k,
1456
- active: (S.workflows?.length ?? 0) > 0,
1456
+ active: (x.workflows?.length ?? 0) > 0,
1457
1457
  dispatcher: () => Z.inferenceHealth()
1458
1458
  }, e.limit === void 0 ? {} : { limit: e.limit }),
1459
- ...P({
1459
+ ...et({
1460
1460
  store: k,
1461
1461
  cancelRun: async (e) => await Z.runCanceller()?.(e) ?? !1,
1462
1462
  retryRun: async (e) => Y().inspectRetryWorkflowRun({ runId: e }),
@@ -1466,7 +1466,7 @@ var Ur = (e, t) => {
1466
1466
  inspectRedriveWorkflowRun: (e) => Z.redriveWorkflowRun(e),
1467
1467
  inspectResumeWorkflowRunFromStep: (e) => Z.resumeWorkflowRunFromStep(e)
1468
1468
  }, Z = await si({
1469
- bootTiming: g,
1469
+ bootTiming: p,
1470
1470
  broadcastNamespace: Ut,
1471
1471
  membership: {
1472
1472
  ...Kt,
@@ -1478,37 +1478,37 @@ var Ur = (e, t) => {
1478
1478
  ttlMs: bn.ttlMs
1479
1479
  } } : {},
1480
1480
  discovered: {
1481
- queries: [...S.queries, ...ir],
1482
- mutations: S.mutations,
1483
- actions: [...S.actions, ...J],
1484
- streams: S.streams,
1485
- events: S.events,
1486
- workflows: S.workflows,
1487
- workflowWorkers: S.workflowWorkers,
1488
- eventTriggers: S.eventTriggers,
1489
- schedules: S.schedules,
1481
+ queries: [...x.queries, ...ir],
1482
+ mutations: x.mutations,
1483
+ actions: [...x.actions, ...J],
1484
+ streams: x.streams,
1485
+ events: x.events,
1486
+ workflows: x.workflows,
1487
+ workflowWorkers: x.workflowWorkers,
1488
+ eventTriggers: x.eventTriggers,
1489
+ schedules: x.schedules,
1490
1490
  subscribers: zn,
1491
1491
  outboxHandlers: Gn,
1492
- connections: S.connections,
1492
+ connections: x.connections,
1493
1493
  reactions: Vn,
1494
1494
  aggregates: q,
1495
1495
  expectations: $n,
1496
1496
  budgets: tr,
1497
1497
  experiments: rr,
1498
- ...w === void 0 ? {} : { webhooks: w }
1498
+ ...Se === void 0 ? {} : { webhooks: Se }
1499
1499
  },
1500
1500
  log: $,
1501
1501
  analytics: E.sink,
1502
1502
  aggregateStorage: Xn,
1503
1503
  aggregateCoordinator: Zn,
1504
1504
  store: k,
1505
- kv: rt,
1506
- cache: Ve,
1507
- snapshotCache: ze,
1508
- schemaRegistry: De,
1509
- tenantScopedTables: S.tenantScopedTables,
1510
- softDeleteScopedTables: S.softDeleteScopedTables,
1511
- dataTransferSnapshot: xr(D),
1505
+ kv: st,
1506
+ cache: We,
1507
+ snapshotCache: He,
1508
+ schemaRegistry: Oe,
1509
+ tenantScopedTables: x.tenantScopedTables,
1510
+ softDeleteScopedTables: x.softDeleteScopedTables,
1511
+ dataTransferSnapshot: xr(Ee),
1512
1512
  dataTransferDialect: y,
1513
1513
  tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? v?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
1514
1514
  resolveSubject: async (e, t) => {
@@ -1519,7 +1519,7 @@ var Ur = (e, t) => {
1519
1519
  return kn(t, n.credentialExpiresAt), n.subject;
1520
1520
  },
1521
1521
  httpRoutes: [...F.flatMap((e) => e.httpRoutes ?? []), ...xn],
1522
- getStore: () => je,
1522
+ getStore: () => Me,
1523
1523
  ...Cn ? { baseLayer: Cn } : {},
1524
1524
  ...Pn === void 0 ? {} : { workflowEngineLayer: Pn },
1525
1525
  scheduleDefaultTrigger: En,
@@ -1531,7 +1531,7 @@ var Ur = (e, t) => {
1531
1531
  onSchedulerReady: (e) => {
1532
1532
  jn = e;
1533
1533
  },
1534
- inspectRoute: { handle: async (e, t, n, r) => await de(e, or, t, {
1534
+ inspectRoute: { handle: async (e, t, n, r) => await S(e, or, t, {
1535
1535
  method: n,
1536
1536
  ...r === void 0 ? {} : { body: r }
1537
1537
  }) || (Dt(e, or, t, {
@@ -1544,29 +1544,29 @@ var Ur = (e, t) => {
1544
1544
  }) },
1545
1545
  ...v?.name === void 0 ? {} : { appName: v.name },
1546
1546
  observability: U,
1547
- port: re,
1547
+ port: oe,
1548
1548
  ...v?.transport?.wsPath ? { path: v.transport.wsPath } : {}
1549
1549
  });
1550
- return W = Z.dispatcher, T(f([
1551
- S.queries,
1552
- S.mutations,
1553
- S.actions,
1554
- S.streams
1550
+ return W = Z.dispatcher, ee(_t([
1551
+ x.queries,
1552
+ x.mutations,
1553
+ x.actions,
1554
+ x.streams
1555
1555
  ]), (e) => {
1556
1556
  $.warn(e);
1557
- }), $.info(`API listening on :${re}`, {
1557
+ }), $.info(`API listening on :${oe}`, {
1558
1558
  dialect: y,
1559
- queries: S.queries.length,
1560
- mutations: S.mutations.length,
1561
- actions: S.actions.length,
1562
- streams: S.streams.length,
1563
- workflows: S.workflows.length,
1564
- workflowWorkers: S.workflowWorkers.length,
1565
- schedules: S.schedules.length,
1559
+ queries: x.queries.length,
1560
+ mutations: x.mutations.length,
1561
+ actions: x.actions.length,
1562
+ streams: x.streams.length,
1563
+ workflows: x.workflows.length,
1564
+ workflowWorkers: x.workflowWorkers.length,
1565
+ schedules: x.schedules.length,
1566
1566
  scheduleCoordination: An
1567
- }), g.finish($), On(async () => {
1567
+ }), p.finish($), On(async () => {
1568
1568
  for (let e of Bt) e.stop();
1569
- st.detach(), ht.stop(), tt(), Mt?.dispose();
1569
+ pt.detach(), gt.stop(), tt(), Mt?.dispose();
1570
1570
  try {
1571
1571
  await Yt.deactivate(), await Zt?.close(), await E.dispose(), await Z.close(), await k.close?.();
1572
1572
  } catch (e) {