@voltro/cli 0.30.1 → 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 (124) hide show
  1. package/CHANGELOG.md +163 -0
  2. package/dist/apiBuild-BOqL1dlg.js +2 -0
  3. package/dist/{apiBuild-DmkzRyv7.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-C4konUy9.js → checkCommand-D7r6_pk7.js} +439 -530
  9. package/dist/{commands-BkJft9K2.js → commands-CNVVv03h.js} +1941 -1880
  10. package/dist/{dbCommand-qn__kLEt.js → dbCommand-BH8GAYuf.js} +76 -19
  11. package/dist/dbCommand-BwQ_Jl98.js +2 -0
  12. package/dist/{dev-DXhhZ7-f.js → dev-DOZVMVfi.js} +1 -1
  13. package/dist/{dev-C_NPcLDp.js → dev-DdQEn2Ia.js} +1986 -1967
  14. package/dist/{frameworkTableAssembly-Cpgn2e88.js → frameworkTableAssembly-BwIrO5nv.js} +122 -103
  15. package/dist/frameworkTableAssembly-D-EebUQX.js +2 -0
  16. package/dist/index.js +1 -1
  17. package/dist/{inspectMetrics-CkB2J0Zn.js → inspectMetrics-BeEAnjqw.js} +774 -527
  18. package/dist/{sdkgen-wsWLrq4l.js → sdkgen-v9WV8zRi.js} +1 -1
  19. package/dist/{serveCommand-HtI4X5kj.js → serveCommand-KsKXXWn4.js} +294 -293
  20. package/dist/serveEntry.js +2 -2
  21. package/dist/{start-egkbpugc.js → start-CI2QdKy9.js} +351 -346
  22. package/dist/startEntry.js +2 -2
  23. package/package.json +17 -17
  24. package/templates/AGENTS.md +43 -43
  25. package/templates/agent-docs/_index.md +43 -43
  26. package/templates/agent-docs/_manifest.json +84 -42
  27. package/templates/agent-docs/cli.md +4 -2
  28. package/templates/agent-docs/database/migrations.md +14 -1
  29. package/templates/agent-docs/internationalization.md +54 -3
  30. package/templates/agent-docs/plugins/ai-flows.md +148 -0
  31. package/templates/agent-docs/plugins/analytics-postgres.md +90 -0
  32. package/templates/agent-docs/plugins/atlassian.md +378 -0
  33. package/templates/agent-docs/plugins/audit.md +324 -0
  34. package/templates/agent-docs/plugins/auth-auth0.md +92 -0
  35. package/templates/agent-docs/plugins/auth-clerk.md +90 -0
  36. package/templates/agent-docs/plugins/auth-kinde.md +88 -0
  37. package/templates/agent-docs/plugins/auth-oidc.md +95 -0
  38. package/templates/agent-docs/plugins/auth-supabase.md +103 -0
  39. package/templates/agent-docs/plugins/auth-workos.md +105 -0
  40. package/templates/agent-docs/plugins/auth.md +227 -0
  41. package/templates/agent-docs/plugins/billing.md +324 -0
  42. package/templates/agent-docs/plugins/broadcast.md +144 -0
  43. package/templates/agent-docs/plugins/cdc-out.md +116 -0
  44. package/templates/agent-docs/plugins/clickhouse.md +91 -0
  45. package/templates/agent-docs/plugins/datadog.md +105 -0
  46. package/templates/agent-docs/plugins/deactivation.md +114 -0
  47. package/templates/agent-docs/plugins/duckdb.md +82 -0
  48. package/templates/agent-docs/plugins/flags.md +146 -0
  49. package/templates/agent-docs/plugins/governance.md +143 -0
  50. package/templates/agent-docs/plugins/licensing.md +74 -0
  51. package/templates/agent-docs/plugins/logship.md +56 -0
  52. package/templates/agent-docs/plugins/mail.md +334 -0
  53. package/templates/agent-docs/plugins/moderation.md +65 -0
  54. package/templates/agent-docs/plugins/multitenancy.md +99 -0
  55. package/templates/agent-docs/plugins/notifications.md +252 -0
  56. package/templates/agent-docs/plugins/openapi.md +94 -0
  57. package/templates/agent-docs/plugins/postgis.md +140 -0
  58. package/templates/agent-docs/plugins/posthog.md +91 -0
  59. package/templates/agent-docs/plugins/presence.md +115 -0
  60. package/templates/agent-docs/plugins/prometheus.md +124 -0
  61. package/templates/agent-docs/plugins/ratelimit.md +274 -0
  62. package/templates/agent-docs/plugins/rbac.md +270 -0
  63. package/templates/agent-docs/plugins/scim.md +63 -0
  64. package/templates/agent-docs/plugins/search.md +116 -0
  65. package/templates/agent-docs/plugins/sentry.md +192 -0
  66. package/templates/agent-docs/plugins/soft-delete.md +72 -0
  67. package/templates/agent-docs/plugins/sso-saml.md +132 -0
  68. package/templates/agent-docs/plugins/storage.md +709 -0
  69. package/templates/agent-docs/plugins/tinybird.md +92 -0
  70. package/templates/agent-docs/plugins/versioning.md +226 -0
  71. package/templates/agent-docs/plugins/webhooks.md +585 -0
  72. package/templates/agent-docs/security.md +12 -1
  73. package/templates/agent-docs/whats-new.md +81 -37
  74. package/templates/apps/api-ai/package.json +7 -7
  75. package/templates/apps/api-auth/package.json +8 -8
  76. package/templates/apps/api-backend/package.json +7 -7
  77. package/templates/apps/api-backend-deactivation/package.json +7 -7
  78. package/templates/apps/api-backend-mail/package.json +8 -8
  79. package/templates/apps/api-backend-mariadb/package.json +9 -9
  80. package/templates/apps/api-backend-sqlite/package.json +8 -8
  81. package/templates/apps/api-backend-storage/package.json +8 -8
  82. package/templates/apps/api-cms/package.json +10 -10
  83. package/templates/apps/api-collab/package.json +8 -8
  84. package/templates/apps/api-data-advanced/package.json +8 -8
  85. package/templates/apps/api-durable/package.json +8 -8
  86. package/templates/apps/api-feature-flags/package.json +9 -9
  87. package/templates/apps/api-governance/package.json +8 -8
  88. package/templates/apps/api-kv/package.json +8 -8
  89. package/templates/apps/api-moderation/package.json +8 -8
  90. package/templates/apps/api-observability/package.json +8 -8
  91. package/templates/apps/api-ratelimit/package.json +8 -8
  92. package/templates/apps/api-rbac/package.json +8 -8
  93. package/templates/apps/api-rest/package.json +7 -7
  94. package/templates/apps/api-saas/package.json +11 -11
  95. package/templates/apps/api-saas-starter/package.json +10 -10
  96. package/templates/apps/api-search/package.json +8 -8
  97. package/templates/apps/api-status/package.json +8 -8
  98. package/templates/apps/api-versioning/package.json +8 -8
  99. package/templates/apps/api-webhooks/package.json +9 -9
  100. package/templates/apps/changelog/package.json +6 -6
  101. package/templates/apps/edge-functions/package.json +2 -2
  102. package/templates/apps/frontend-admin/package.json +8 -8
  103. package/templates/apps/frontend-app/package.json +8 -8
  104. package/templates/apps/frontend-auth/package.json +8 -8
  105. package/templates/apps/frontend-blank/package.json +7 -7
  106. package/templates/apps/frontend-cms/package.json +9 -9
  107. package/templates/apps/frontend-collab/package.json +9 -9
  108. package/templates/apps/frontend-contact/package.json +7 -7
  109. package/templates/apps/frontend-dashboard/package.json +7 -7
  110. package/templates/apps/frontend-docs/package.json +7 -7
  111. package/templates/apps/frontend-i18n/package.json +6 -6
  112. package/templates/apps/frontend-landing/package.json +7 -7
  113. package/templates/apps/frontend-portal/package.json +8 -8
  114. package/templates/apps/frontend-saas/package.json +8 -8
  115. package/templates/apps/frontend-spa/package.json +7 -7
  116. package/templates/apps/frontend-ssr/package.json +7 -7
  117. package/templates/apps/frontend-ssr-api/package.json +8 -8
  118. package/templates/apps/frontend-static-blog/package.json +6 -6
  119. package/templates/apps/frontend-status/package.json +8 -8
  120. package/templates/apps/mobile-app/package.json +2 -2
  121. package/dist/apiBuild-Ca6Sq5jy.js +0 -2
  122. package/dist/checkCommand-DHD0aBeR.js +0 -2
  123. package/dist/dbCommand-wfGi3FgG.js +0 -2
  124. package/dist/frameworkTableAssembly-Bn_c4Mnl.js +0 -2
@@ -1,12 +1,12 @@
1
- import { lt as e, st as t, t as n } from "./inspectMetrics-CkB2J0Zn.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-C_NPcLDp.js";
5
- import { d as vt, h as yt, m as I, n as L, p as bt, v as xt, y as St } from "./frameworkTableAssembly-Cpgn2e88.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
+ 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-DmkzRyv7.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 t = (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
- ...t ? { 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 = n(), 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(_);
1100
+ let g = process.cwd(), oe = Number(process.env.PORT ?? li(f, "--port") ?? 4e3), v = await A(g);
1101
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
- xt(St(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)
1126
+ St(vt(v?.plugins ?? []), [
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 = L({
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,31 +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
- dialect: y
1226
+ dialect: y,
1227
+ log: { info: (e) => $.info(e) }
1227
1228
  }), F = v?.plugins ?? [], jt = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Mt, H;
1228
- 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));
1229
1230
  let zt = hn({
1230
1231
  coordinator: [
1231
1232
  "postgres",
@@ -1235,12 +1236,12 @@ var Ur = (e, t) => {
1235
1236
  ].includes(y) ? un(k, jt, $) : Rn,
1236
1237
  replicaId: jt,
1237
1238
  log: $
1238
- }), 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));
1239
1240
  {
1240
- let e = Oe(v?.plugins, v?.name ?? Nt(_));
1241
+ let e = ke(v?.plugins, v?.name ?? Nt(g));
1241
1242
  e !== void 0 && $.warn(e);
1242
1243
  }
1243
- let Kt = Ae(v?.plugins, {
1244
+ let Kt = je(v?.plugins, {
1244
1245
  instanceId: Vt,
1245
1246
  namespace: Ut,
1246
1247
  meta: { mode: "serve" },
@@ -1257,39 +1258,39 @@ var Ur = (e, t) => {
1257
1258
  }
1258
1259
  };
1259
1260
  for (let e of F) e.bindDataStore?.(k, qt);
1260
- j({
1261
+ Ge({
1261
1262
  store: k,
1262
- ...u(),
1263
+ ...d(),
1263
1264
  log: $
1264
1265
  });
1265
1266
  let Jt = F.filter((e) => typeof e.onChangeEvent == "function");
1266
1267
  if (Jt.length > 0) {
1267
1268
  let e = k.changeScope ?? "local";
1268
1269
  k.onChange((t) => {
1269
- let n = fe(t, e);
1270
+ let n = h(t, e);
1270
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) })))));
1271
1272
  });
1272
1273
  }
1273
- let Yt = et({
1274
+ let Yt = nt({
1274
1275
  plugins: F,
1275
1276
  appName: v?.name ?? "voltro-api",
1276
1277
  appType: "api",
1277
1278
  voltroVersion: process.env.npm_package_version ?? "0.0.0",
1278
1279
  log: $
1279
1280
  });
1280
- F.length && await Yt.activate(), g.mark("plugins");
1281
+ F.length && await Yt.activate(), p.mark("plugins");
1281
1282
  let U = await Yt.gatherObservability(), Xt = {
1282
1283
  info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
1283
1284
  warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
1284
1285
  debug: () => {}
1285
- }, W, Zt = await Re(k, v, y, Ut, Xt, (e, t) => {
1286
+ }, W, Zt = await ze(k, v, y, Ut, Xt, (e, t) => {
1286
1287
  W?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
1287
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;
1288
1289
  cn && On(() => cn.shutdown());
1289
1290
  let ln = sn ? dn(sn, {
1290
1291
  prefix: on,
1291
1292
  ...cn ? { usage: cn } : {}
1292
- }) : 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 ? {
1293
1294
  store: tn(k),
1294
1295
  header: (typeof yn == "object" ? yn.header : void 0) ?? "Idempotency-Key",
1295
1296
  ttlMs: (typeof yn == "object" ? yn.ttlMs : void 0) ?? 864e5
@@ -1300,27 +1301,27 @@ var Ur = (e, t) => {
1300
1301
  clientId: -1
1301
1302
  })).subject,
1302
1303
  ...bn ? { idempotency: bn } : {}
1303
- }) : [], 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({
1304
1305
  analyticsLayer: E.layer,
1305
- cacheService: Pe,
1306
- kvService: it,
1307
- ...We === void 0 ? {} : { semanticCache: We },
1306
+ cacheService: Ne,
1307
+ kvService: lt,
1308
+ ...Ke === void 0 ? {} : { semanticCache: Ke },
1308
1309
  pluginServices: Sn,
1309
1310
  userLayers: v?.layers ?? []
1310
- }), 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([
1311
1312
  "postgres",
1312
1313
  "mysql",
1313
1314
  "mariadb",
1314
1315
  "mssql"
1315
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";
1316
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");
1317
- 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;
1318
1319
  if (Mn) {
1319
1320
  if (y === "mssql") {
1320
- let e = await C(process.cwd());
1321
+ let e = await de(process.cwd());
1321
1322
  e && $.warn(e);
1322
1323
  }
1323
- 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({
1324
1325
  name: e.name,
1325
1326
  cron: $t(e),
1326
1327
  execute: async () => {
@@ -1328,52 +1329,52 @@ var Ur = (e, t) => {
1328
1329
  }
1329
1330
  })) : [];
1330
1331
  Pn = y === "memory" ? e.layerMemory : await (async () => {
1331
- 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" });
1332
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({
1333
- sqlClientLayer: e.makeSqlLayer(Ze()),
1334
+ sqlClientLayer: e.makeSqlLayer(M()),
1334
1335
  runnerStorage: t,
1335
1336
  dialectId: e.id,
1336
1337
  ...process.env.VOLTRO_WORKFLOW_RUNNER_PORT ? { runnerListenPort: Number(process.env.VOLTRO_WORKFLOW_RUNNER_PORT) } : {},
1337
- ...a(),
1338
+ ...i(),
1338
1339
  ...o.length > 0 ? { extraShardingLayers: o } : {}
1339
1340
  });
1340
1341
  })();
1341
1342
  }
1342
- let In = ie(F, n()), 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();
1343
1344
  if (q.length > 0 && y !== "memory") try {
1344
- Xn = pt((await i(y)).makeSqlLayer(Ze()));
1345
+ Xn = ne((await a(y)).makeSqlLayer(M()));
1345
1346
  } catch (e) {
1346
1347
  $.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
1347
1348
  }
1348
- 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) => vt.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));
1349
1350
  if (ar.length > 0) {
1350
- let e = $.child("agent"), t = x.filter((e) => bt.test(e));
1351
- t.length > 0 && await yt(t, e);
1352
- let n = await I(ar, e);
1353
- for (let e of n.agents) for (let t of Ce(e)) (t.kind === "action" ? J : ir).push({
1351
+ let e = $.child("agent"), t = b.filter((e) => bt.test(e));
1352
+ t.length > 0 && await I(t, e);
1353
+ let n = await L(ar, e);
1354
+ for (let e of n.agents) for (let t of Te(e)) (t.kind === "action" ? J : ir).push({
1354
1355
  file: t.file,
1355
1356
  descriptor: t.descriptor,
1356
1357
  executor: t.executor
1357
1358
  });
1358
1359
  n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
1359
1360
  }
1360
- g.mark("workflow");
1361
+ p.mark("workflow");
1361
1362
  let Y = () => {
1362
1363
  let e = Z.workflowWriteActions();
1363
1364
  if (e === void 0) throw Error("workflow actions: this app registers no workflows");
1364
1365
  return e;
1365
- }, X = await Ee({
1366
- files: x,
1366
+ }, X = await De({
1367
+ files: b,
1367
1368
  store: k,
1368
1369
  log: $,
1369
1370
  seedPolicy: "report",
1370
- seedPattern: a,
1371
- loadSeedFiles: r,
1371
+ seedPattern: o,
1372
+ loadSeedFiles: i,
1372
1373
  startupPattern: Ct,
1373
1374
  loadStartupFiles: kt,
1374
1375
  runStartups: Ot,
1375
- emailPattern: he,
1376
- loadEmailFiles: c,
1376
+ emailPattern: w,
1377
+ loadEmailFiles: l,
1377
1378
  registerEmailTemplates: Nr
1378
1379
  });
1379
1380
  (X.startupCount > 0 || X.emailCount > 0) && $.info("boot lifecycle", {
@@ -1387,40 +1388,40 @@ var Ur = (e, t) => {
1387
1388
  meta: {
1388
1389
  name: v?.name ?? "voltro-api",
1389
1390
  voltroVersion: at,
1390
- port: re,
1391
+ port: oe,
1391
1392
  mode: "start",
1392
1393
  store: y,
1393
- cdc: oe ? "on" : "off"
1394
+ cdc: ce ? "on" : "off"
1394
1395
  },
1395
- rpc: O(S, _),
1396
- workflows: Qe(S, _),
1396
+ rpc: Ue(x, g),
1397
+ workflows: Ae(x, g),
1397
1398
  events: () => Z.eventsSnapshot(),
1398
1399
  members: () => Z.membersSnapshot(),
1399
1400
  inspectFireSchedule: async ({ name: e, trigger: t }) => {
1400
1401
  if (!jn) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
1401
1402
  return { runId: await jn.fireNow(e, t) ?? null };
1402
1403
  },
1403
- ...w === void 0 ? {} : { webhooks: () => Ge({
1404
+ ...Se === void 0 ? {} : { webhooks: () => qe({
1404
1405
  store: k,
1405
- discoveredWebhooks: w
1406
+ discoveredWebhooks: Se
1406
1407
  }) },
1407
1408
  plugins: () => ({
1408
1409
  plugins: Yt.snapshot(),
1409
1410
  capturedAt: Date.now()
1410
1411
  }),
1411
- env: () => t(v?.name ?? Nt(_), {
1412
+ env: () => t(v?.name ?? Nt(g), {
1412
1413
  ...v?.env !== void 0 && gr(v.env) ? { contract: v.env } : {},
1413
1414
  plugins: v?.plugins ?? []
1414
1415
  }),
1415
- dataCache: () => ve({
1416
+ dataCache: () => T({
1416
1417
  stats: $e,
1417
- backendKind: Je
1418
+ backendKind: Qe
1418
1419
  }),
1419
1420
  subscriptions: () => te(() => W),
1420
- inspectTables: () => ce(S.tables),
1421
+ inspectTables: () => ue(x.tables),
1421
1422
  inspectRows: _e({
1422
1423
  store: k,
1423
- tables: S.tables,
1424
+ tables: x.tables,
1424
1425
  mask: !0
1425
1426
  }),
1426
1427
  metrics: (e) => Z.rpcMetrics().snapshot(e),
@@ -1430,15 +1431,15 @@ var Ur = (e, t) => {
1430
1431
  useClusterCron: K,
1431
1432
  scheduleCoordChoice: Dn
1432
1433
  }),
1433
- inspectSchedules: () => p({
1434
- schedules: S.schedules,
1434
+ inspectSchedules: () => m({
1435
+ schedules: x.schedules,
1435
1436
  defaultTrigger: En,
1436
1437
  coordination: An
1437
1438
  }),
1438
- inspectScheduleRuns: (e) => h(k, e),
1439
+ inspectScheduleRuns: (e) => re(k, e),
1439
1440
  ...be(k, {
1440
- controls: A(S.workflows ?? []),
1441
- active: (S.workflows?.length ?? 0) > 0,
1441
+ controls: it(x.workflows ?? []),
1442
+ active: (x.workflows?.length ?? 0) > 0,
1442
1443
  cancellation: () => Z.flowControlHealth()
1443
1444
  }),
1444
1445
  webhookActions: ft(() => Z.webhooksService()),
@@ -1450,12 +1451,12 @@ var Ur = (e, t) => {
1450
1451
  inspectRetryWorkflowRun: (e) => Y().inspectRetryWorkflowRun(e),
1451
1452
  inspectSignalWorkflowRun: (e) => Y().inspectSignalWorkflowRun(e),
1452
1453
  inspectUpdateWorkflowRun: (e) => Y().inspectUpdateWorkflowRun(e),
1453
- inspectInferences: (e) => Ue({
1454
+ inspectInferences: (e) => rt({
1454
1455
  store: k,
1455
- active: (S.workflows?.length ?? 0) > 0,
1456
+ active: (x.workflows?.length ?? 0) > 0,
1456
1457
  dispatcher: () => Z.inferenceHealth()
1457
1458
  }, e.limit === void 0 ? {} : { limit: e.limit }),
1458
- ...P({
1459
+ ...et({
1459
1460
  store: k,
1460
1461
  cancelRun: async (e) => await Z.runCanceller()?.(e) ?? !1,
1461
1462
  retryRun: async (e) => Y().inspectRetryWorkflowRun({ runId: e }),
@@ -1465,7 +1466,7 @@ var Ur = (e, t) => {
1465
1466
  inspectRedriveWorkflowRun: (e) => Z.redriveWorkflowRun(e),
1466
1467
  inspectResumeWorkflowRunFromStep: (e) => Z.resumeWorkflowRunFromStep(e)
1467
1468
  }, Z = await si({
1468
- bootTiming: g,
1469
+ bootTiming: p,
1469
1470
  broadcastNamespace: Ut,
1470
1471
  membership: {
1471
1472
  ...Kt,
@@ -1477,37 +1478,37 @@ var Ur = (e, t) => {
1477
1478
  ttlMs: bn.ttlMs
1478
1479
  } } : {},
1479
1480
  discovered: {
1480
- queries: [...S.queries, ...ir],
1481
- mutations: S.mutations,
1482
- actions: [...S.actions, ...J],
1483
- streams: S.streams,
1484
- events: S.events,
1485
- workflows: S.workflows,
1486
- workflowWorkers: S.workflowWorkers,
1487
- eventTriggers: S.eventTriggers,
1488
- 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,
1489
1490
  subscribers: zn,
1490
1491
  outboxHandlers: Gn,
1491
- connections: S.connections,
1492
+ connections: x.connections,
1492
1493
  reactions: Vn,
1493
1494
  aggregates: q,
1494
1495
  expectations: $n,
1495
1496
  budgets: tr,
1496
1497
  experiments: rr,
1497
- ...w === void 0 ? {} : { webhooks: w }
1498
+ ...Se === void 0 ? {} : { webhooks: Se }
1498
1499
  },
1499
1500
  log: $,
1500
1501
  analytics: E.sink,
1501
1502
  aggregateStorage: Xn,
1502
1503
  aggregateCoordinator: Zn,
1503
1504
  store: k,
1504
- kv: rt,
1505
- cache: Ve,
1506
- snapshotCache: ze,
1507
- schemaRegistry: De,
1508
- tenantScopedTables: S.tenantScopedTables,
1509
- softDeleteScopedTables: S.softDeleteScopedTables,
1510
- 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),
1511
1512
  dataTransferDialect: y,
1512
1513
  tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? v?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
1513
1514
  resolveSubject: async (e, t) => {
@@ -1518,7 +1519,7 @@ var Ur = (e, t) => {
1518
1519
  return kn(t, n.credentialExpiresAt), n.subject;
1519
1520
  },
1520
1521
  httpRoutes: [...F.flatMap((e) => e.httpRoutes ?? []), ...xn],
1521
- getStore: () => je,
1522
+ getStore: () => Me,
1522
1523
  ...Cn ? { baseLayer: Cn } : {},
1523
1524
  ...Pn === void 0 ? {} : { workflowEngineLayer: Pn },
1524
1525
  scheduleDefaultTrigger: En,
@@ -1530,7 +1531,7 @@ var Ur = (e, t) => {
1530
1531
  onSchedulerReady: (e) => {
1531
1532
  jn = e;
1532
1533
  },
1533
- 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, {
1534
1535
  method: n,
1535
1536
  ...r === void 0 ? {} : { body: r }
1536
1537
  }) || (Dt(e, or, t, {
@@ -1543,29 +1544,29 @@ var Ur = (e, t) => {
1543
1544
  }) },
1544
1545
  ...v?.name === void 0 ? {} : { appName: v.name },
1545
1546
  observability: U,
1546
- port: re,
1547
+ port: oe,
1547
1548
  ...v?.transport?.wsPath ? { path: v.transport.wsPath } : {}
1548
1549
  });
1549
- return W = Z.dispatcher, T(f([
1550
- S.queries,
1551
- S.mutations,
1552
- S.actions,
1553
- S.streams
1550
+ return W = Z.dispatcher, ee(_t([
1551
+ x.queries,
1552
+ x.mutations,
1553
+ x.actions,
1554
+ x.streams
1554
1555
  ]), (e) => {
1555
1556
  $.warn(e);
1556
- }), $.info(`API listening on :${re}`, {
1557
+ }), $.info(`API listening on :${oe}`, {
1557
1558
  dialect: y,
1558
- queries: S.queries.length,
1559
- mutations: S.mutations.length,
1560
- actions: S.actions.length,
1561
- streams: S.streams.length,
1562
- workflows: S.workflows.length,
1563
- workflowWorkers: S.workflowWorkers.length,
1564
- 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,
1565
1566
  scheduleCoordination: An
1566
- }), g.finish($), On(async () => {
1567
+ }), p.finish($), On(async () => {
1567
1568
  for (let e of Bt) e.stop();
1568
- st.detach(), ht.stop(), tt(), Mt?.dispose();
1569
+ pt.detach(), gt.stop(), tt(), Mt?.dispose();
1569
1570
  try {
1570
1571
  await Yt.deactivate(), await Zt?.close(), await E.dispose(), await Z.close(), await k.close?.();
1571
1572
  } catch (e) {