@voltro/cli 0.30.2 → 0.32.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 +278 -0
  2. package/dist/{apiBuild-BUS1RfPi.js → apiBuild-C4uEbs3s.js} +2 -2
  3. package/dist/apiBuild-OJEjtwcn.js +2 -0
  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-CwMrzAgV.js +2 -0
  8. package/dist/{checkCommand-D_wdOFhw.js → checkCommand-dm7OHtPt.js} +401 -505
  9. package/dist/{commands-BgGAUcku.js → commands-C0nEePif.js} +2601 -2498
  10. package/dist/dbCommand-By__Ev0R.js +2 -0
  11. package/dist/{dbCommand-CbPRCD1x.js → dbCommand-ifOMafuG.js} +112 -84
  12. package/dist/{dev-GAOIot9G.js → dev-5ficNnvF.js} +1843 -1832
  13. package/dist/{dev-tPcOmjPJ.js → dev-rc3fwPSZ.js} +1 -1
  14. package/dist/index.js +1 -1
  15. package/dist/{inspectMetrics-BM1vrsga.js → inspectMetrics-BqO4E9G0.js} +1008 -719
  16. package/dist/{sdkgen-BV4fFucu.js → sdkgen-B_5mHQS2.js} +1 -1
  17. package/dist/{serveCommand-ClqXCX1y.js → serveCommand-PxMmn96o.js} +454 -454
  18. package/dist/serveEntry.js +2 -2
  19. package/dist/{start-CTnNvKlk.js → start-D1-8eKrO.js} +204 -199
  20. package/dist/startEntry.js +2 -2
  21. package/package.json +417 -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 +348 -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 +21 -1
  70. package/templates/agent-docs/whats-new.md +137 -22
  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,20 +1,20 @@
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";
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
- import { S as Ct, c as wt, n as Tt, p as Et, s as R } from "./fileConventions-Cof68_BL.js";
7
- import { m as Dt } from "./inspect-BUUjt773.js";
8
- import { n as Ot, t as kt } from "./startupRunner-DPGFchOa.js";
9
- import { r as At, u as jt } from "./apiBuild-BUS1RfPi.js";
10
- import { t as z } from "./bootTiming-BdyP9nYw.js";
11
- import { n as Mt } from "./cliArgs-qdZSElM3.js";
12
- import { basename as Nt, join as Pt } from "node:path";
13
- import { pathToFileURL as Ft } from "node:url";
14
- import { Cause as It, Effect as B, Layer as V, ManagedRuntime as Lt } from "effect";
15
- import { createLogger as H } from "@voltro/logger";
16
- import { existsSync as Rt } from "node:fs";
17
- import { AggregateRegistry as zt, CostRegistry as Bt, Dispatcher as Vt, ExpectationRegistry as Ht, ExperimentRegistry as Ut, apiKeyManagementRoutes as Wt, attachAnalyticsMirror as Gt, attachExpectations as Kt, attachExperiments as qt, attachFinops as Jt, awaitServerListening as Yt, bindMutation as U, bindStream as Xt, bindSubscription as W, buildTracingLayer as Zt, cancelWakeup as Qt, compileCron as $t, dataStoreApiKeyStore as en, dataStoreIdempotencyStore as tn, formatServerOnlyLeaks as nn, formatUnresolvedSources as rn, frameworkApiKeyStrategy as an, getCredentialExpiry as on, installPolicyGuardResolver as sn, loadResourceTuples as cn, makeActionRunner as ln, makeAdvisoryLockCoordinator as un, makeApiKeyService as dn, makeApiKeyUsageBuffer as fn, makeApiKeyUsageFlusher as pn, makeAsyncKv as mn, makeCoordinatedScheduler as hn, makeEffectStoreLayer as gn, makeLazyWorkflowFacade as _n, makeMutationOutputCodec as vn, makeMutationRunner as yn, makeOneShotQueryRunner as bn, makeQueryDescriptorProducer as xn, makeQueryFinalizer as Sn, makeQueryReauthorizer as Cn, makeQuerySubscriber as wn, makeSchemaRegistry as Tn, makeWorkflowFacade as En, makeWorkflowFacadeWithCallerContext as G, makeWorkflowLayers as Dn, noopKv as K, onProcessShutdown as On, recordCredentialExpiry as kn, recordSubscriptionDelivery as An, recordWorkflowRun as jn, registerWakeup as Mn, resolveSecretsBackend as Nn, runProvidedEffect as Pn, setSecretsBackend as Fn, setSystemStoreHandle as In, setTupleSource as Ln, singleCoordinator as Rn, startRpcServer as zn, startScheduler as Bn, stripForbiddenForWire as Vn, unresolvedSources as Hn, workflowToRpc as Un, wrapStoreWithBootCodec as Wn } from "@voltro/runtime";
1
+ import { _t as e, ht as t, ot as n, t as r } from "./inspectMetrics-BqO4E9G0.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 me, Ot as he, P as ge, Pt as _e, Q as S, Qt as ve, R as ye, Rt as be, S as C, St as xe, T as Se, Tt as Ce, U as w, V as we, W as Te, X as Ee, Xt as De, Y as Oe, Yt as ke, Z as Ae, Zt as je, _ as Me, _t as T, an as Ne, at as E, b as Pe, bt as Fe, c as D, ct as Ie, d as Le, dt as Re, en as ze, et as Be, ft as Ve, g as He, gt as Ue, h as O, ht as We, i as k, in as Ge, it as Ke, j as qe, jt as Je, k as Ye, kt as Xe, lt as Ze, mt as Qe, nn as $e, nt as et, o as A, on as tt, ot as nt, pt as rt, q as it, qt as j, r as M, rt as at, st as ot, t as st, tn as ct, tt as lt, u as ut, ut as dt, v as ft, vt as pt, w as mt, wt as ht, x as gt, xt as _t, y as vt, yt as N, zt as yt } from "./dev-5ficNnvF.js";
5
+ import { b as bt, f as xt, g as P, h as F, m as St, r as Ct, y as wt } from "./frameworkTableAssembly-BwIrO5nv.js";
6
+ import { S as Tt, c as Et, n as Dt, p as Ot, s as kt } from "./fileConventions-Cof68_BL.js";
7
+ import { m as I } from "./inspect-BUUjt773.js";
8
+ import { n as At, t as jt } from "./startupRunner-DPGFchOa.js";
9
+ import { r as Mt, u as L } from "./apiBuild-C4uEbs3s.js";
10
+ import { t as Nt } from "./bootTiming-BdyP9nYw.js";
11
+ import { n as R } from "./cliArgs-qdZSElM3.js";
12
+ import { basename as Pt, join as Ft } from "node:path";
13
+ import { pathToFileURL as It } from "node:url";
14
+ import { Cause as Lt, Effect as z, Layer as B, ManagedRuntime as Rt } from "effect";
15
+ import { createLogger as V } from "@voltro/logger";
16
+ import { existsSync as zt } from "node:fs";
17
+ import { AggregateRegistry as Bt, CostRegistry as Vt, Dispatcher as Ht, ExpectationRegistry as Ut, ExperimentRegistry as H, apiKeyManagementRoutes as Wt, attachAnalyticsMirror as Gt, attachExpectations as Kt, attachExperiments as qt, attachFinops as Jt, awaitServerListening as Yt, bindMutation as U, bindStream as Xt, bindSubscription as W, buildTracingLayer as Zt, cancelWakeup as Qt, compileCron as $t, dataStoreApiKeyStore as en, dataStoreIdempotencyStore as tn, formatServerOnlyLeaks as nn, formatUnresolvedSources as rn, frameworkApiKeyStrategy as an, getCredentialExpiry as on, installPolicyGuardResolver as sn, loadResourceTuples as cn, makeActionRunner as ln, makeAdvisoryLockCoordinator as un, makeApiKeyService as dn, makeApiKeyUsageBuffer as fn, makeApiKeyUsageFlusher as pn, makeAsyncKv as mn, makeCoordinatedScheduler as hn, makeEffectStoreLayer as gn, makeLazyWorkflowFacade as _n, makeMutationOutputCodec as vn, makeMutationRunner as yn, makeOneShotQueryRunner as bn, makeQueryDescriptorProducer as xn, makeQueryFinalizer as Sn, makeQueryReauthorizer as Cn, makeQuerySubscriber as wn, makeSchemaRegistry as Tn, makeWorkflowFacade as En, makeWorkflowFacadeWithCallerContext as G, makeWorkflowLayers as Dn, noopKv as K, onProcessShutdown as On, recordCredentialExpiry as kn, recordSubscriptionDelivery as An, recordWorkflowRun as jn, registerWakeup as Mn, resolveSecretsBackend as Nn, runProvidedEffect as Pn, setSecretsBackend as Fn, setSystemStoreHandle as In, setTupleSource as Ln, singleCoordinator as Rn, startRpcServer as zn, startScheduler as Bn, stripForbiddenForWire as Vn, unresolvedSources as Hn, workflowToRpc as Un, wrapStoreWithBootCodec as Wn } from "@voltro/runtime";
18
18
  import { RpcGroup as Gn } from "@effect/rpc";
19
19
  import { SqlClient as Kn } from "@effect/sql";
20
20
  import { allRegisteredTables as qn, and as Jn, ensureTableRegistered as Yn, eq as q, or as Xn } from "@voltro/database";
@@ -51,7 +51,7 @@ var Ur = (e, t) => {
51
51
  if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
52
52
  let n = qr(e.headers);
53
53
  return !n || !Jr(n, t) ? Q(401, { error: "unauthorized" }) : null;
54
- }, Xr = H({ scope: "voltro:admin-import" }), Zr = "VBUNDLE2", Qr = async function* (e) {
54
+ }, Xr = V({ scope: "voltro:admin-import" }), Zr = "VBUNDLE2", Qr = async function* (e) {
55
55
  yield e;
56
56
  }, $r = (e) => async (t) => {
57
57
  let n = Yr(t, e.secret);
@@ -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);
78
- let t = await B.runPromiseExit(Rr({
77
+ }) : await Hr(c, p);
78
+ let t = await z.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,12 +125,12 @@ 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
  });
132
132
  }
133
- }, ei = H({ scope: "voltro:admin-export" }), ti = async (e) => {
133
+ }, ei = V({ scope: "voltro:admin-export" }), ti = async (e) => {
134
134
  let t = [];
135
135
  for await (let n of e) t.push(Buffer.from(n));
136
136
  return new Uint8Array(Buffer.concat(t));
@@ -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
- let t = await B.runPromise(Lr({
166
+ let t = await z.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
  });
@@ -239,7 +239,7 @@ var Ur = (e, t) => {
239
239
  if (!o) throw Error(`data profile '${i}' has no default export`);
240
240
  return o;
241
241
  }, ai = (e, t, n = {}) => (async function* () {
242
- let r = await tr((await B.runPromise($n(e, t).pipe(B.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
242
+ let r = await tr((await z.runPromise($n(e, t).pipe(z.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
243
243
  a && clearTimeout(a), a = setTimeout(() => r.destroy(/* @__PURE__ */ Error(`storage read stalled for ${i}ms reading '${t}'`)), i);
244
244
  };
245
245
  try {
@@ -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 Ht({
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,31 +323,31 @@ 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 ?? V({ scope: "voltro:serve" })).child("webhooks"), me, he, S = e.discovered.webhooks;
332
+ if (S && S.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
333
333
  e.workflowEngineLayer;
334
- let t = ge({
334
+ let t = je({
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 = S.outgoing.map((e) => e.descriptor);
340
+ he = Dr.toLayer(wr(t, { events: n })), me = 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);
@@ -355,10 +355,10 @@ var Ur = (e, t) => {
355
355
  }, { events: n });
356
356
  }
357
357
  let ve = /* @__PURE__ */ new Map();
358
- if (C) for (let e of C.incoming) {
358
+ if (S) for (let e of S.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
376
  ve.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 ye = [...e.discovered.outboxHandlers ?? [], ...dt((S?.outgoing.length ?? 0) + (S?.incoming.length ?? 0) + (S?.providers.length ?? 0), []) ? [{
380
380
  file: "<framework>/webhooks",
381
381
  id: "voltro-webhook-emit",
382
- definition: Or(() => he)
383
- }] : []], be = ye.length > 0 ? me({
382
+ definition: Or(() => me)
383
+ }] : []], be = ye.length > 0 ? x({
384
384
  handlers: ye,
385
385
  store: e.store,
386
- log: (e.log ?? H({ scope: "voltro:serve" })).child("outbox")
387
- }) : void 0, T = x({
386
+ log: (e.log ?? V({ scope: "voltro:serve" })).child("outbox")
387
+ }) : void 0, C = Je({
388
388
  definitions: (e.discovered.connections ?? []).map((e) => e.definition),
389
389
  store: e.store,
390
- publicUrl: We(e.port ?? 4e3),
391
- log: (e.log ?? H({ scope: "voltro:serve" })).child("connections")
390
+ publicUrl: f(e.port ?? 4e3),
391
+ log: (e.log ?? V({ 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,94 +399,94 @@ 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 xe = (e.log ?? V({ scope: "voltro:serve" })).child("events"), Se = e.broadcastNamespace ?? ft(e.plugins, void 0), Ee = vt(e.plugins, Se, xe), Ae = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Me = e.membership ?? Pe(e.plugins, {
403
+ instanceId: Ae,
404
+ namespace: Se,
405
405
  meta: { mode: "serve" },
406
- logger: Ce
407
- }), O = S({
406
+ logger: xe
407
+ }), T = b({
408
408
  events: e.discovered.events ?? [],
409
- origin: Oe,
409
+ origin: Ae,
410
410
  ...Ee.publishRemote === void 0 ? {} : { publishRemote: Ee.publishRemote }
411
- }), Me = (e.discovered.events ?? []).length > 0 ? await Ee.attach(O.bus) : null, A = De({
411
+ }), Ne = (e.discovered.events ?? []).length > 0 ? await Ee.attach(T.bus) : null, D = De({
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
+ ...me === void 0 ? {} : { webhooksService: me },
417
+ ..._ === void 0 ? {} : { workflowsProxy: _ },
418
418
  eventTriggers: e.discovered.eventTriggers ?? [],
419
419
  namespaceIsolationOn: de,
420
420
  ...be === void 0 ? {} : { outbox: { nudge: be.nudge } },
421
- ...T.active ? { connections: { registry: T.registry } } : {},
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) => {
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({
421
+ ...C.active ? { connections: { registry: C.registry } } : {},
422
+ eventBus: T.bus
423
+ }), Le = B.succeed(Bt, Fe), Re = B.succeed(Ut, Qe), ze = B.succeed(Vt, rt), Ve = B.succeed(H, We), He = (t, n) => {
424
+ let r = t.pipe(z.provide(gn(n)));
425
+ return (e.baseLayer ? r.pipe(z.provide(e.baseLayer)) : r).pipe(z.provide(Le)).pipe(z.provide(Re)).pipe(z.provide(ze)).pipe(z.provide(Ve));
426
+ }, Ue = (e, t) => Pn(He(e, t)), O = r(), k = ce(e.plugins ?? [], O), Ge = Te(e.plugins ?? [], O), qe = yn({
427
427
  store: e.store,
428
428
  recordMetric: (e) => {
429
- Ue.record(e);
429
+ O.record(e);
430
430
  },
431
- ...j.mutation === void 0 ? {} : { interceptor: j.mutation },
432
- buildContext: (e, t, n) => A(e, t, n),
433
- runEffect: He,
434
- undoCapture: we()
435
- }), Ye = oe(), Xe = ln({
436
- buildContext: (e) => A(e),
437
- runEffect: He,
431
+ ...k.mutation === void 0 ? {} : { interceptor: k.mutation },
432
+ buildContext: (e, t, n) => D(e, t, n),
433
+ runEffect: Ue,
434
+ undoCapture: Oe()
435
+ }), Ye = y(), Xe = ln({
436
+ buildContext: (e) => D(e),
437
+ runEffect: Ue,
438
438
  recordMetric: (e) => {
439
- Ue.record(e);
439
+ O.record(e);
440
440
  },
441
- ...j.action === void 0 ? {} : { interceptor: j.action }
441
+ ...k.action === void 0 ? {} : { interceptor: k.action }
442
442
  }), Ze = Sn({
443
443
  tenantScopedTables: e.tenantScopedTables,
444
444
  softDeleteScopedTables: e.softDeleteScopedTables
445
- }), Qe = {
446
- buildContext: (e) => A(e),
445
+ }), $e = {
446
+ buildContext: (e) => D(e),
447
447
  finalize: (e, t) => Ze(e, t.subject),
448
- provideEffect: Be,
449
- ...j.query === void 0 ? {} : { interceptor: j.query }
450
- }, M = xn(Qe), et = bn({
451
- ...Qe,
448
+ provideEffect: He,
449
+ ...k.query === void 0 ? {} : { interceptor: k.query }
450
+ }, A = xn($e), nt = bn({
451
+ ...$e,
452
452
  queryRows: (t, n) => e.store.query(t).then((e) => Vn(t.table, e, n.subject))
453
- }), nt = wn({
454
- ...Qe,
453
+ }), it = wn({
454
+ ...$e,
455
455
  subscribeDescriptor: (e, t, n) => i.subscribe(e, t, n),
456
456
  subscribeComputed: (e, t, n) => i.subscribeComputed(e, t, n)
457
- }), N = (e) => e.filter((e) => ar(e.descriptor)), P = {};
457
+ }), j = (e) => e.filter((e) => ar(e.descriptor)), M = {};
458
458
  for (let t of [
459
- ...N(e.discovered.queries),
459
+ ...j(e.discovered.queries),
460
460
  ...Ye.queries,
461
- ...T.queries
462
- ]) P[t.descriptor.name] = (e) => W(M(t, e), i, `subscription.${t.descriptor.name}`, void 0, void 0, Cn(t, e));
461
+ ...C.queries
462
+ ]) M[t.descriptor.name] = (e) => W(A(t, e), i, `subscription.${t.descriptor.name}`, void 0, void 0, Cn(t, e));
463
463
  for (let t of [
464
- ...N(e.discovered.mutations),
464
+ ...j(e.discovered.mutations),
465
465
  ...Ye.mutations,
466
- ...T.mutations
466
+ ...C.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
+ M[t.descriptor.name] = (r) => U(async (e, n) => qe(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
470
470
  }
471
- for (let t of [...N(e.discovered.actions), ...T.actions]) {
471
+ for (let t of [...j(e.discovered.actions), ...C.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
+ M[t.descriptor.name] = (r) => U(async (e, n) => Xe(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, t.descriptor.error);
474
474
  }
475
475
  let at = () => `public-${Math.random().toString(36).slice(2, 10)}`, ot = [
476
476
  ...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
477
477
  descriptor: e.descriptor,
478
- invoke: (t, n) => et(e, t, {
478
+ invoke: (t, n) => nt(e, t, {
479
479
  subject: n.subject,
480
480
  traceId: at()
481
481
  }),
482
- subscribe: (t, n, r) => nt(e, t, {
482
+ subscribe: (t, n, r) => it(e, t, {
483
483
  subject: n.subject,
484
484
  traceId: at()
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) => qe(e, t, {
490
490
  subject: n.subject,
491
491
  traceId: at()
492
492
  })
@@ -498,14 +498,14 @@ var Ur = (e, t) => {
498
498
  traceId: at()
499
499
  })
500
500
  }))
501
- ], ct = ot.length > 0 ? Mr(jr(ot), {
501
+ ], st = ot.length > 0 ? Mr(jr(ot), {
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
+ }) : [], ct = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, ut = ct && ct.length >= 16 ? [{
505
505
  method: "POST",
506
506
  path: Gr,
507
507
  handle: $r({
508
- secret: lt,
508
+ secret: ct,
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: ct,
519
519
  store: e.store,
520
520
  snapshot: e.dataTransferSnapshot ?? { tables: [] },
521
521
  dialect: e.dataTransferDialect ?? "memory",
@@ -524,33 +524,33 @@ var Ur = (e, t) => {
524
524
  assetSource: Br(Zn(), e.store),
525
525
  putArchive: async (e, t) => {
526
526
  let { Readable: n } = await import("node:stream"), r = Zn(), i = Qn("storage", () => n.from(t()));
527
- await B.runPromise(er(r, e, i, { contentType: "application/octet-stream" }));
527
+ await z.runPromise(er(r, e, i, { contentType: "application/octet-stream" }));
528
528
  }
529
529
  })
530
- }] : [], ft = [
530
+ }] : [], pt = [
531
531
  ...e.httpRoutes ?? [],
532
- ...ct,
533
- ...dt,
534
- ...T.httpRoutes
532
+ ...st,
533
+ ...ut,
534
+ ...C.httpRoutes
535
535
  ];
536
- Object.assign(P, O.handlers);
537
- for (let t of N(e.discovered.streams ?? [])) P[t.descriptor.name] = (n) => Xt((r) => {
538
- let i = A(r), a = t.executor(n, i);
539
- if (B.isEffect(a)) {
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));
536
+ Object.assign(M, T.handlers);
537
+ for (let t of j(e.discovered.streams ?? [])) M[t.descriptor.name] = (n) => Xt((r) => {
538
+ let i = D(r), a = t.executor(n, i);
539
+ if (z.isEffect(a)) {
540
+ let t = a.pipe(z.provide(gn(i.store)));
541
+ return (e.baseLayer ? t.pipe(z.provide(e.baseLayer)) : t).pipe(z.provide(Le)).pipe(z.provide(Re)).pipe(z.provide(ze)).pipe(z.provide(Ve));
542
542
  }
543
- return typeof a == "object" && a && typeof a.then == "function" ? B.promise(() => a) : a;
543
+ return typeof a == "object" && a && typeof a.then == "function" ? z.promise(() => a) : a;
544
544
  }, `stream.${t.descriptor.name}`);
545
- for (let t of e.discovered.workflows ?? []) P[t.definition.name] = (e) => U(async (e, n) => {
545
+ for (let t of e.discovered.workflows ?? []) M[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 && (M[dr.name] = (e) => W(A({
554
554
  descriptor: dr,
555
555
  executor: (e) => {
556
556
  let t = e.id;
@@ -566,7 +566,7 @@ var Ur = (e, t) => {
566
566
  projection: void 0
567
567
  };
568
568
  }
569
- }, e), i, `subscription.${dr.name}`), P[pr.name] = (e) => W(M({
569
+ }, e), i, `subscription.${dr.name}`), M[pr.name] = (e) => W(A({
570
570
  descriptor: pr,
571
571
  executor: (e) => {
572
572
  let t = e, n = [...t.tag === void 0 ? [] : [q("tag", t.tag)], ...t.status === void 0 ? [] : [q("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
@@ -582,7 +582,7 @@ var Ur = (e, t) => {
582
582
  projection: void 0
583
583
  };
584
584
  }
585
- }, e), i, `subscription.${pr.name}`), P[fr.name] = (e) => W(M({
585
+ }, e), i, `subscription.${pr.name}`), M[fr.name] = (e) => W(A({
586
586
  descriptor: fr,
587
587
  executor: (e) => {
588
588
  let t = e.runId;
@@ -598,7 +598,7 @@ var Ur = (e, t) => {
598
598
  projection: void 0
599
599
  };
600
600
  }
601
- }, e), i, `subscription.${fr.name}`), P[ur.name] = (e) => W(M({
601
+ }, e), i, `subscription.${fr.name}`), M[ur.name] = (e) => W(A({
602
602
  descriptor: ur,
603
603
  executor: (e) => {
604
604
  let t = e.runId;
@@ -614,7 +614,7 @@ var Ur = (e, t) => {
614
614
  projection: void 0
615
615
  };
616
616
  }
617
- }, e), i, `subscription.${ur.name}`), P[sr.name] = (e) => W(M({
617
+ }, e), i, `subscription.${ur.name}`), M[sr.name] = (e) => W(A({
618
618
  descriptor: sr,
619
619
  executor: (e) => {
620
620
  let t = e;
@@ -630,7 +630,7 @@ var Ur = (e, t) => {
630
630
  projection: void 0
631
631
  };
632
632
  }
633
- }, e), i, `subscription.${sr.name}`), P[cr.name] = (e) => W(M({
633
+ }, e), i, `subscription.${sr.name}`), M[cr.name] = (e) => W(A({
634
634
  descriptor: cr,
635
635
  executor: (e) => {
636
636
  let t = e.eventId;
@@ -646,32 +646,32 @@ var Ur = (e, t) => {
646
646
  projection: void 0
647
647
  };
648
648
  }
649
- }, e), i, `subscription.${cr.name}`), P[Z.name] = (t) => U(async (t, n) => {
649
+ }, e), i, `subscription.${cr.name}`), M[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 };
652
- }, t, `action.${Z.name}`), P[lr.name] = (t) => U(async (t, n) => {
651
+ return await ke(e.store, n.subject, { executionId: r.executionId }), await _.cancel(r.workflowName, r.executionId), await Ct(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
652
+ }, t, `action.${Z.name}`), M[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 };
655
- }, t, `action.${lr.name}`), P[mr.name] = (t) => U(async (t, n) => {
654
+ return await ke(e.store, n.subject, { executionId: r.executionId }), await _.resume(r.workflowName, r.executionId), { ok: !0 };
655
+ }, t, `action.${lr.name}`), M[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);
658
- }, t, `action.${mr.name}`), P[hr.name] = (t) => U(async (t, n) => {
657
+ return await ke(e.store, n.subject, { id: r.id }), _.signal({ id: r.id }, r.signalName, r.payload);
658
+ }, t, `action.${mr.name}`), M[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 ke(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 = [
663
- ...N(e.discovered.queries).map((e) => X(e.descriptor)),
664
- ...N(e.discovered.mutations).map((e) => Y(e.descriptor)),
665
- ...N(e.discovered.actions).map((e) => J(e.descriptor)),
662
+ let mt = [
663
+ ...j(e.discovered.queries).map((e) => X(e.descriptor)),
664
+ ...j(e.discovered.mutations).map((e) => Y(e.descriptor)),
665
+ ...j(e.discovered.actions).map((e) => J(e.descriptor)),
666
666
  ...Ye.queries.map((e) => X(e.descriptor)),
667
667
  ...Ye.mutations.map((e) => Y(e.descriptor)),
668
- ...T.queries.map((e) => X(e.descriptor)),
669
- ...T.mutations.map((e) => Y(e.descriptor)),
670
- ...T.actions.map((e) => J(e.descriptor)),
671
- ...N(e.discovered.streams ?? []).map((e) => or(e.descriptor)),
672
- ...O.rpcs,
668
+ ...C.queries.map((e) => X(e.descriptor)),
669
+ ...C.mutations.map((e) => Y(e.descriptor)),
670
+ ...C.actions.map((e) => J(e.descriptor)),
671
+ ...j(e.discovered.streams ?? []).map((e) => or(e.descriptor)),
672
+ ...T.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,34 +683,34 @@ 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
+ ], gt = Gn.make(...mt).middleware(nr).middleware(rr), _t = B.succeed(nr, nr.of(({ headers: t, clientId: n }) => z.promise(() => e.resolveSubject(t, n)))), yt = B.succeed(rr, rr.of(({ headers: e, clientId: t }) => z.sync(() => {
687
687
  let n = on(t) ?? vr(e);
688
688
  return {
689
689
  clientId: t,
690
690
  ...e["idempotency-key"] ? { idempotencyKey: e["idempotency-key"] } : {},
691
691
  ...n === void 0 ? {} : { credentialExpiresAt: n }
692
692
  };
693
- }))), vt = e.dormancyTenantId ?? "default", yt = e.dormancy === "sleep" ? {
693
+ }))), bt = e.dormancyTenantId ?? "default", xt = e.dormancy === "sleep" ? {
694
694
  register: (t, n, r) => Mn(e.store, {
695
- tenantId: r ?? vt,
695
+ tenantId: r ?? bt,
696
696
  kind: "workflow",
697
697
  refId: t,
698
698
  wakeAt: n
699
699
  }),
700
700
  cancel: (t, n) => Qt(e.store, {
701
- tenantId: n ?? vt,
701
+ tenantId: n ?? bt,
702
702
  kind: "workflow",
703
703
  refId: t
704
704
  }).then(() => {})
705
- } : void 0, I = ue ? await import("@voltro/workflow") : void 0, L = I?.makeWorkflowRunRecorder({
705
+ } : void 0, P = ue ? await import("@voltro/workflow") : void 0, F = P?.makeWorkflowRunRecorder({
706
706
  store: e.store,
707
- ...yt === void 0 ? {} : { wakeups: yt }
708
- }), bt = async (t, n) => {
709
- await I.closeWorkflowChildrenForParent({
707
+ ...xt === void 0 ? {} : { wakeups: xt }
708
+ }), St = async (t, n) => {
709
+ await P.closeWorkflowChildrenForParent({
710
710
  store: e.store,
711
711
  parentExecutionId: t,
712
712
  parentStatus: n,
713
- recorder: L,
713
+ recorder: F,
714
714
  log: { warn: (e, t) => {
715
715
  process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
716
716
  } },
@@ -721,7 +721,7 @@ var Ur = (e, t) => {
721
721
  await d.runPromise(r.definition.interrupt(n));
722
722
  }
723
723
  });
724
- }, xt = async (t, n, r) => {
724
+ }, Ct = async (t, n, r) => {
725
725
  let i = (await e.store.query({
726
726
  table: "_voltro_workflow_runs",
727
727
  order: [],
@@ -736,7 +736,7 @@ var Ur = (e, t) => {
736
736
  cancelled: !0,
737
737
  completedAt: /* @__PURE__ */ new Date()
738
738
  }), o = i.subject?.tenantId ?? void 0;
739
- a && await L.recordEvent({
739
+ a && await F.recordEvent({
740
740
  runId: i.id,
741
741
  eventType: "run-cancelled",
742
742
  payload: {
@@ -745,17 +745,17 @@ var Ur = (e, t) => {
745
745
  executionId: n,
746
746
  ...o == null ? {} : { tenantId: o }
747
747
  }
748
- }), a && await bt(n, "cancelled");
749
- }, St = [
748
+ }), a && await St(n, "cancelled");
749
+ }, wt = [
750
750
  ...Dn(e.discovered.workflows ?? [], {
751
- buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? A({
751
+ buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? D({
752
752
  subject: t.subject,
753
753
  traceId: t.traceId
754
754
  }, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
755
755
  resolveStartContext: ae
756
756
  }, (t, n, r) => {
757
- let i = I.getWorkflowVersionMetadata(t.definition);
758
- return I.wrapWorkflowExecuteWithRunRecording({
757
+ let i = P.getWorkflowVersionMetadata(t.definition);
758
+ return P.wrapWorkflowExecuteWithRunRecording({
759
759
  name: t.definition.name,
760
760
  store: e.store,
761
761
  subject: r.subject,
@@ -766,37 +766,37 @@ var Ur = (e, t) => {
766
766
  workflowPatches: i.patches,
767
767
  parentExecutionId: r?.parentExecutionId ?? null,
768
768
  parentClosePolicy: r?.parentClosePolicy ?? null,
769
- onParentClose: ({ executionId: e, status: t }) => bt(e, t),
770
- ...st(t.definition),
769
+ onParentClose: ({ executionId: e, status: t }) => St(e, t),
770
+ ...lt(t.definition),
771
771
  onTerminal: async ({ executionId: e }) => {
772
772
  await u?.gate.release(e);
773
773
  },
774
- recorder: L,
774
+ recorder: F,
775
775
  pluginWorkflowStepLayer: Ge,
776
776
  recordRun: jn
777
777
  }, n);
778
778
  }),
779
779
  ...e.discovered.workflowWorkers ?? [],
780
- ..._e === void 0 ? [] : [_e]
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) {
783
- let t = Ct.pipe(V.provideMerge(e.workflowEngineLayer));
784
- d = Lt.make(e.baseLayer === void 0 ? t : t.pipe(V.provideMerge(e.baseLayer))), await d.runPromise(B.void);
780
+ ...he === void 0 ? [] : [he]
781
+ ], Tt = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...he === void 0 ? [] : ["voltro.deliverWebhook"]], Et = wt.length > 0 ? B.mergeAll(...wt) : B.empty;
782
+ if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || he !== void 0) && e.workflowEngineLayer !== void 0) {
783
+ let t = Et.pipe(B.provideMerge(e.workflowEngineLayer));
784
+ d = Rt.make(e.baseLayer === void 0 ? t : t.pipe(B.provideMerge(e.baseLayer))), await d.runPromise(z.void), (e.log ?? V({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${Tt.length} entity type(s) registered`, { entities: Tt });
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 tt({
787
787
  provider: Fr(e.plugins ?? [])?.broadcast?.provider,
788
788
  crossReplica: Fr(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
789
- namespace: Te,
789
+ namespace: Se,
790
790
  replicaId: crypto.randomUUID(),
791
791
  pollStorage: () => d.runPromise(n.pollWorkflowStorage),
792
- log: (e.log ?? H({ scope: "voltro:serve" })).child("workflow")
793
- }), f = async (t) => {
794
- let n = await Se({
792
+ log: (e.log ?? V({ scope: "voltro:serve" })).child("workflow")
793
+ }), ee = async (t) => {
794
+ let n = await we({
795
795
  store: e.store,
796
796
  workflows: e.discovered.workflows ?? [],
797
797
  runRedrive: r
798
798
  }, t.runId);
799
- return n.statusReset && await L.recordEvent({
799
+ return n.statusReset && await F.recordEvent({
800
800
  runId: t.runId,
801
801
  eventType: "run-redriven",
802
802
  payload: {
@@ -809,12 +809,12 @@ 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
816
816
  }, t.runId, t.step);
817
- return n.statusReset && await L.recordEvent({
817
+ return n.statusReset && await F.recordEvent({
818
818
  runId: t.runId,
819
819
  eventType: "run-redriven",
820
820
  payload: {
@@ -842,26 +842,26 @@ 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 || F === void 0)) return f = g({
848
848
  store: e.store,
849
- log: z,
849
+ log: R,
850
850
  workflows: e.discovered.workflows ?? [],
851
851
  workflowsProxy: s,
852
852
  workflowRuntime: d,
853
- workflowRunRecorder: L,
854
- closeChildrenForParent: bt
855
- }), p;
853
+ workflowRunRecorder: F,
854
+ closeChildrenForParent: St
855
+ }), f;
856
856
  };
857
- c = m, u = qe({
857
+ c = m, u = Ie({
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 Be({
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 = E({
875
875
  store: e.store,
876
876
  enabled: (e.discovered.workflows?.length ?? 0) > 0,
877
- resumeSignal: () => d === void 0 || I === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
878
- await d.runPromise(I.completeSuspendingSignal({
877
+ resumeSignal: () => d === void 0 || P === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
878
+ await d.runPromise(P.completeSuspendingSignal({
879
879
  store: e.store,
880
- target: k(t, n),
880
+ target: Ke(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(),
@@ -897,67 +897,67 @@ var Ur = (e, t) => {
897
897
  },
898
898
  rememberStartContext: ie,
899
899
  signal: async (t, n, r) => {
900
- let i = await I.sendWorkflowSignal({
900
+ let i = await P.sendWorkflowSignal({
901
901
  store: e.store,
902
- recorder: L,
902
+ recorder: F,
903
903
  target: t,
904
904
  signalName: n,
905
905
  payload: r
906
906
  });
907
- return await d.runPromise(I.completeSuspendingSignal({
907
+ return await d.runPromise(P.completeSuspendingSignal({
908
908
  store: e.store,
909
909
  target: t,
910
910
  signalName: n,
911
911
  payload: r
912
912
  })).catch(() => {}), i;
913
913
  },
914
- update: (t, n, r, i) => I.sendWorkflowUpdate({
914
+ update: (t, n, r, i) => P.sendWorkflowUpdate({
915
915
  store: e.store,
916
- recorder: L,
916
+ recorder: F,
917
917
  target: t,
918
918
  updateName: n,
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) => w({
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) => we({
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 Dt = B.mergeAll(gt.toLayer(M), _t, yt), Ot = le(M, e.discovered.queries.map((e) => e.descriptor.name), se), kt = B.mergeAll(gt.toLayer(Ot), _t, yt), I = e.observability, At = await Zt({
936
936
  ...e.appName === void 0 ? {} : { serviceName: e.appName },
937
- ...R && R.spanProcessors.length > 0 ? { extraSpanProcessors: R.spanProcessors } : {},
938
- ...R && R.metricReaders.length > 0 ? { extraMetricReaders: R.metricReaders } : {},
939
- ...R && Object.keys(R.resourceAttributes).length > 0 ? { resourceAttributes: R.resourceAttributes } : {},
940
- ...R && R.sampler !== void 0 ? { sampler: R.sampler } : {}
941
- }), Ot = !1, kt = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: At, shutdown: jt } = zn({
942
- group: mt,
943
- handlersLayer: wt,
944
- httpHandlersLayer: Et,
937
+ ...I && I.spanProcessors.length > 0 ? { extraSpanProcessors: I.spanProcessors } : {},
938
+ ...I && I.metricReaders.length > 0 ? { extraMetricReaders: I.metricReaders } : {},
939
+ ...I && Object.keys(I.resourceAttributes).length > 0 ? { resourceAttributes: I.resourceAttributes } : {},
940
+ ...I && I.sampler !== void 0 ? { sampler: I.sampler } : {}
941
+ }), jt = !1, Mt = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: L, shutdown: Nt } = zn({
942
+ group: gt,
943
+ handlersLayer: Dt,
944
+ httpHandlersLayer: kt,
945
945
  port: e.port ?? 4e3,
946
946
  ...e.host === void 0 ? {} : { host: e.host },
947
947
  path: e.path ?? "/ws",
948
- tracerLayer: Dt.layer,
948
+ tracerLayer: At.layer,
949
949
  healthCheck: {
950
- isReady: () => Ot,
951
- ...kt ? { ping: kt } : {}
950
+ isReady: () => jt,
951
+ ...Mt ? { ping: Mt } : {}
952
952
  },
953
- ...ft.length > 0 ? { httpRoutes: ft } : {},
953
+ ...pt.length > 0 ? { httpRoutes: pt } : {},
954
954
  ...e.getStore === void 0 ? {} : { getStore: e.getStore },
955
955
  ...ve.size > 0 ? { webhookRoutes: ve } : {},
956
956
  ...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
957
957
  });
958
- if (await Yt(At), (e.discovered.schedules?.length ?? 0) > 0) {
958
+ if (await Yt(L), (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",
@@ -965,7 +965,7 @@ var Ur = (e, t) => {
965
965
  armSelf: e.scheduleArmSelf ?? !0,
966
966
  dormancy: e.dormancy ?? "always-on",
967
967
  ...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
968
- buildContext: ({ traceId: t, scheduleName: n, subject: r }) => A({
968
+ buildContext: ({ traceId: t, scheduleName: n, subject: r }) => D({
969
969
  subject: r,
970
970
  traceId: t
971
971
  }, e.store, void 0, `schedule:${n}`),
@@ -983,24 +983,24 @@ 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
- 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) {
990
- let t = z.child("reaction"), n = async (n, r) => {
988
+ let R = e.log ?? V({ scope: "voltro:serve" }), Pt, Ft;
989
+ if ((e.discovered.subscribers?.length ?? 0) > 0 && (Pt = _e(e.discovered.subscribers ?? [], e.store, R.child("subscribe"), e.schemaRegistry, T.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
990
+ let t = R.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 Ce(n.agent, r, {
1004
1004
  findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
1005
1005
  runAction: (e, t, n) => Promise.resolve(Xe(e, t, n)),
1006
1006
  makeSubject: (e) => ir(e),
@@ -1010,78 +1010,78 @@ var Ur = (e, t) => {
1010
1010
  }, r = async (n, r) => {
1011
1011
  try {
1012
1012
  let { requireAiBudget: t } = await import("@voltro/ai");
1013
- return (await B.runPromise(B.either(t(e.store, {
1013
+ return (await z.runPromise(z.either(t(e.store, {
1014
1014
  tenantId: n,
1015
1015
  limitUsd: r
1016
1016
  }))))._tag === "Right";
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 = et(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
1021
+ Ft = ht(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
- let Pt;
1028
- (e.discovered.aggregates?.length ?? 0) > 0 && (Pt = await je({
1027
+ let It;
1028
+ (e.discovered.aggregates?.length ?? 0) > 0 && (It = await N({
1029
1029
  discovered: e.discovered.aggregates ?? [],
1030
1030
  store: e.store,
1031
- log: z.child("aggregate"),
1031
+ log: R.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));
1036
- let Ft;
1037
- (e.discovered.expectations?.length ?? 0) > 0 && (Ft = Kt({
1035
+ }), Le = B.succeed(Bt, It.registry));
1036
+ let Lt;
1037
+ (e.discovered.expectations?.length ?? 0) > 0 && (Lt = Kt({
1038
1038
  discovered: e.discovered.expectations ?? [],
1039
1039
  store: e.store,
1040
- log: z.child("expectation")
1041
- }), Fe = V.succeed(Ht, Ft.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (r = Jt({
1040
+ log: R.child("expectation")
1041
+ }), Re = B.succeed(Ut, Lt.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = Jt({
1042
1042
  discovered: e.discovered.budgets ?? [],
1043
- log: z.child("finops")
1044
- }), Le = V.succeed(Bt, r.registry));
1045
- let It;
1046
- return (e.discovered.experiments?.length ?? 0) > 0 && (It = qt({
1043
+ log: R.child("finops")
1044
+ }), ze = B.succeed(Vt, n.registry));
1045
+ let zt;
1046
+ return (e.discovered.experiments?.length ?? 0) > 0 && (zt = qt({
1047
1047
  discovered: e.discovered.experiments ?? [],
1048
1048
  store: e.store,
1049
- log: z.child("experiment")
1050
- }), Re = V.succeed(Ut, It.registry)), Ot = !0, e.bootTiming?.mark("ready"), {
1049
+ log: R.child("experiment")
1050
+ }), Ve = B.succeed(H, zt.registry)), jt = !0, e.bootTiming?.mark("ready"), {
1051
1051
  dispatcher: i,
1052
- server: At,
1053
- scheduler: p,
1054
- eventsSnapshot: pe(O.bus, O.declared),
1052
+ server: L,
1053
+ scheduler: m,
1054
+ eventsSnapshot: ge(T.bus, T.declared),
1055
1055
  membersSnapshot: () => ({
1056
- members: ke.membership.list(),
1056
+ members: Me.membership.list(),
1057
1057
  capturedAt: Date.now()
1058
1058
  }),
1059
- rpcMetrics: () => Ue,
1060
- webhooksService: () => he,
1059
+ rpcMetrics: () => O,
1060
+ webhooksService: () => me,
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 || F === void 0 ? void 0 : v({
1065
1065
  store: e.store,
1066
- log: z,
1066
+ log: R,
1067
1067
  workflows: e.discovered.workflows ?? [],
1068
1068
  workflowsProxy: s,
1069
1069
  workflowRuntime: d,
1070
- workflowRunRecorder: L,
1071
- closeChildrenForParent: bt
1070
+ workflowRunRecorder: F,
1071
+ closeChildrenForParent: St
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
+ jt = !1, await Ne?.detach(), await Me.detach(), It?.detach(), Lt?.detach(), n?.detach(), zt?.detach(), Ft?.(), Pt?.(), await m?.shutdown(), i.close(), await ne?.detach(), await d?.dispose(), await new Promise((e) => L.close(() => e())), await Nt();
1077
1077
  }
1078
1078
  };
1079
- }, $ = H({ scope: "voltro:serve" }), ci = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", li = Mt, ui = async (e) => {
1080
- let t = jt(process.cwd());
1081
- if (Rt(t)) {
1079
+ }, $ = V({ scope: "voltro:serve" }), ci = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", li = R, ui = async (e) => {
1080
+ let t = L(process.cwd());
1081
+ if (zt(t)) {
1082
1082
  let n;
1083
1083
  try {
1084
- let e = await import(Ft(t).href);
1084
+ let e = await import(It(t).href);
1085
1085
  typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
1086
1086
  } catch (e) {
1087
1087
  $.warn("serve bundle failed to load — using the standard serve path", {}, 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 = Nt();
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 D(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 = Mt(g);
1109
+ if (!c() && zt(fe)) try {
1110
+ let e = await import(It(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[Ft(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 O(g), x = await ut(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
- 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)
1126
+ wt(bt(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 = Xe(x.serverOnlyLeaks, he(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 ge = b.filter((e) => Ze.test(e)), _e = ge.length > 0 ? await Re(ge, $.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
+ }, Ce = Ve(x.events), w = _e.outgoing.length + _e.incoming.length + _e.providers.length + Ce.length === 0 ? void 0 : {
1141
+ ..._e,
1142
+ outgoing: [..._e.outgoing, ...Ce]
1143
+ }, we = Ct({
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
+ }), Te = v?.analytics !== void 0 && v.analytics.kind !== "noop" && y !== "memory" ? (await a(y)).makeSqlLayer(A()) : void 0, De = await be({
1149
1149
  spec: v?.analytics,
1150
- sqlLayer: Se,
1150
+ sqlLayer: Te,
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
+ }), Oe = (() => {
1153
+ let e = new Set(x.tables.map((e) => e.tableName)), t = [...x.tables];
1154
+ for (let n of [...we, ...De.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 Oe) 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(Oe.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 ke = (process.env.NODE_ENV ?? "").toLowerCase();
1169
+ if (ci(ke, y, process.env.VOLTRO_AUTO_MIGRATE)) {
1170
+ let e = (await a(y)).makeSqlLayer(A()), t = await z.runPromise(Kn.SqlClient.pipe(z.flatMap((e) => Cr(e, Oe, {
1171
+ appliedBy: `serve:${ke}`,
1172
1172
  environment: "prod",
1173
1173
  dialectId: y
1174
- })), B.provide(e)));
1174
+ })), z.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 je = Tn(Oe);
1178
+ p.mark("discover");
1179
+ let E = await k(v, void 0), Fe = Wn(E, y);
1180
+ for (let e of $e({
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 = ct(ze({
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,127 +1201,127 @@ 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: Ie, invalidationBus: Be, snapshotCache: We, cache: Ke, semantic: Je, evictSource: Qe, backend: et, stats: tt, dispose: rt } = 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
+ Je !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${et}` + (et === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), E.onChange((e) => {
1209
+ if (z.runFork(Be.publish(e.table)), Qe !== void 0) {
1210
1210
  let t = (e.new ?? e.old)?.id;
1211
- qe({
1211
+ Qe({
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({
1221
- store: k,
1222
- sink: E.sink,
1218
+ let { kv: lt, service: dt } = await mn({ store: E });
1219
+ $.info(Ur(Le(), Wr())), p.mark("store");
1220
+ let ht = Gt({
1221
+ store: E,
1222
+ sink: De.sink,
1223
1223
  log: $
1224
- }), ht = l({
1225
- store: k,
1224
+ }), vt = ve({
1225
+ store: E,
1226
1226
  dialect: y,
1227
1227
  log: { info: (e) => $.info(e) }
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));
1230
- let zt = hn({
1228
+ }), N = v?.plugins ?? [], L = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, R, V;
1229
+ y !== "memory" && (R = Rt.make((await a(y)).makeSqlLayer(A())), V = await R.runPromise(Kn.SqlClient));
1230
+ let Bt = hn({
1231
1231
  coordinator: [
1232
1232
  "postgres",
1233
1233
  "mariadb",
1234
1234
  "mysql",
1235
1235
  "mssql"
1236
- ].includes(y) ? un(k, jt, $) : Rn,
1237
- replicaId: jt,
1236
+ ].includes(y) ? un(E, L, $) : Rn,
1237
+ replicaId: L,
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
+ }), Vt = [], Ht = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, Ut = Fr(v?.plugins ?? [])?.broadcast?.provider, H = ft(v?.plugins, v?.name ?? Pt(g));
1240
1240
  {
1241
- let e = Oe(v?.plugins, v?.name ?? Nt(_));
1241
+ let e = Me(v?.plugins, v?.name ?? Pt(g));
1242
1242
  e !== void 0 && $.warn(e);
1243
1243
  }
1244
- let Kt = Ae(v?.plugins, {
1245
- instanceId: Vt,
1246
- namespace: Ut,
1244
+ let Kt = Pe(v?.plugins, {
1245
+ instanceId: Ht,
1246
+ namespace: H,
1247
1247
  meta: { mode: "serve" },
1248
1248
  logger: $
1249
1249
  }), qt = {
1250
- ...H ? { sql: H } : {},
1251
- instanceId: Vt,
1250
+ ...V ? { sql: V } : {},
1251
+ instanceId: Ht,
1252
1252
  membership: Kt.membership,
1253
- ...Ht === void 0 ? {} : { broadcast: Ht },
1254
- broadcastChannels: { presence: Pr(Ut, "presence") },
1253
+ ...Ut === void 0 ? {} : { broadcast: Ut },
1254
+ broadcastChannels: { presence: Pr(H, "presence") },
1255
1255
  scheduleCoordinated: (e, t, n) => {
1256
- let r = zt(e, t, n);
1257
- return Bt.push(r), r;
1256
+ let r = Bt(e, t, n);
1257
+ return Vt.push(r), r;
1258
1258
  }
1259
1259
  };
1260
- for (let e of F) e.bindDataStore?.(k, qt);
1261
- j({
1262
- store: k,
1263
- ...u(),
1260
+ for (let e of N) e.bindDataStore?.(E, qt);
1261
+ qe({
1262
+ store: E,
1263
+ ...d(),
1264
1264
  log: $
1265
1265
  });
1266
- let Jt = F.filter((e) => typeof e.onChangeEvent == "function");
1266
+ let Jt = N.filter((e) => typeof e.onChangeEvent == "function");
1267
1267
  if (Jt.length > 0) {
1268
- let e = k.changeScope ?? "local";
1269
- k.onChange((t) => {
1270
- let n = fe(t, e);
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) })))));
1268
+ let e = E.changeScope ?? "local";
1269
+ E.onChange((t) => {
1270
+ let n = h(t, e);
1271
+ for (let e of Jt) z.runFork(e.onChangeEvent(n).pipe(z.catchAllCause((t) => z.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Lt.pretty(t) })))));
1272
1272
  });
1273
1273
  }
1274
- let Yt = et({
1275
- plugins: F,
1274
+ let Yt = it({
1275
+ plugins: N,
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
+ N.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 He(E, v, y, H, Xt, (e, t) => {
1287
1287
  W?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
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
+ }), Qt = v?.apiKeys, on = (typeof Qt == "object" ? Qt.prefix : void 0) ?? "voltro_", sn = Qt ? en(E) : 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 ? {
1294
- store: tn(k),
1293
+ }) : void 0, gn = ln ? [an(ln, { prefix: on })] : [], _n = M([...v?.auth?.strategies ?? [], ...gn], Ar(v?.plugins ?? []), v?.auth?.anonymousTenantRequired ?? !1, v?.auth?.resolveScopes, () => Fe), vn = [...v?.restRoutes ?? [], ...ln ? Wt(ln, (typeof Qt == "object" ? Qt.managementPath : void 0) ?? "/v1/api-keys") : []], yn = v?.idempotency, bn = yn ? {
1294
+ store: tn(E),
1295
1295
  header: (typeof yn == "object" ? yn.header : void 0) ?? "Idempotency-Key",
1296
1296
  ttlMs: (typeof yn == "object" ? yn.ttlMs : void 0) ?? 864e5
1297
1297
  } : void 0, xn = vn.length > 0 ? Mr(vn, {
1298
- store: k,
1298
+ store: E,
1299
1299
  resolveSubject: async (e) => (await _n({
1300
1300
  headers: e,
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({
1305
- analyticsLayer: E.layer,
1306
- cacheService: Pe,
1307
- kvService: it,
1308
- ...We === void 0 ? {} : { semanticCache: We },
1304
+ }) : [], Sn = N.map((e) => e.services).filter((e) => e !== void 0), Cn = B.mergeAll(se({
1305
+ analyticsLayer: De.layer,
1306
+ cacheService: Ie,
1307
+ kvService: dt,
1308
+ ...Je === void 0 ? {} : { semanticCache: Je },
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
+ }), j(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 || (w?.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(A()),
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 = _(N, 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) => Ot.test(e)), Gn = Un.length > 0 ? await pe(Un, $) : [], Jn = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), q = Jn.length > 0 ? await _t(Jn, $) : [], Xn = xe();
1344
1344
  if (q.length > 0 && y !== "memory") try {
1345
- Xn = pt((await i(y)).makeSqlLayer(Ze()));
1345
+ Xn = ne((await a(y)).makeSqlLayer(A()));
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(E, `aggregate@${process.pid}`, $), Qn = b.filter((e) => kt.test(e)), $n = Qn.length > 0 ? await T(Qn, $) : [], er = b.filter((e) => Dt.test(e)), tr = er.length > 0 ? await Ue(er, $) : [], nr = b.filter((e) => Et.test(e)), rr = nr.length > 0 ? await pt(nr, $) : [], J = [], ir = [], ar = b.filter((e) => xt.test(e));
1350
1350
  if (ar.length > 0) {
1351
- let e = $.child("agent"), t = x.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 Ce(e)) (t.kind === "action" ? J : ir).push({
1351
+ let e = $.child("agent"), t = b.filter((e) => St.test(e));
1352
+ t.length > 0 && await P(t, e);
1353
+ let n = await F(ar, e);
1354
+ for (let e of n.agents) for (let t of Ee(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,
1368
- store: k,
1366
+ }, X = await Ae({
1367
+ files: b,
1368
+ store: E,
1369
1369
  log: $,
1370
1370
  seedPolicy: "report",
1371
- seedPattern: a,
1372
- loadSeedFiles: r,
1373
- startupPattern: Ct,
1374
- loadStartupFiles: kt,
1375
- runStartups: Ot,
1376
- emailPattern: he,
1377
- loadEmailFiles: c,
1371
+ seedPattern: o,
1372
+ loadSeedFiles: i,
1373
+ startupPattern: Tt,
1374
+ loadStartupFiles: jt,
1375
+ runStartups: At,
1376
+ emailPattern: S,
1377
+ loadEmailFiles: l,
1378
1378
  registerEmailTemplates: Nr
1379
1379
  });
1380
1380
  (X.startupCount > 0 || X.emailCount > 0) && $.info("boot lifecycle", {
@@ -1387,62 +1387,62 @@ var Ur = (e, t) => {
1387
1387
  kind: "api",
1388
1388
  meta: {
1389
1389
  name: v?.name ?? "voltro-api",
1390
- voltroVersion: at,
1391
- port: re,
1390
+ voltroVersion: st,
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: Ge(x, g),
1397
+ workflows: Ne(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({
1405
- store: k,
1404
+ ...w === void 0 ? {} : { webhooks: () => Ye({
1405
+ store: E,
1406
1406
  discoveredWebhooks: w
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 ?? Pt(g), {
1413
1413
  ...v?.env !== void 0 && gr(v.env) ? { contract: v.env } : {},
1414
1414
  plugins: v?.plugins ?? []
1415
1415
  }),
1416
- dataCache: () => ve({
1417
- stats: $e,
1418
- backendKind: Je
1416
+ dataCache: () => C({
1417
+ stats: tt,
1418
+ backendKind: et
1419
1419
  }),
1420
1420
  subscriptions: () => te(() => W),
1421
- inspectTables: () => ce(S.tables),
1422
- inspectRows: _e({
1423
- store: k,
1424
- tables: S.tables,
1421
+ inspectTables: () => ue(x.tables),
1422
+ inspectRows: ye({
1423
+ store: E,
1424
+ tables: x.tables,
1425
1425
  mask: !0
1426
1426
  }),
1427
1427
  metrics: (e) => Z.rpcMetrics().snapshot(e),
1428
- cluster: () => mt({
1429
- store: k,
1428
+ cluster: () => gt({
1429
+ store: E,
1430
1430
  dialect: y,
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),
1440
- ...be(k, {
1441
- controls: A(S.workflows ?? []),
1442
- active: (S.workflows?.length ?? 0) > 0,
1439
+ inspectScheduleRuns: (e) => re(E, e),
1440
+ ...Se(E, {
1441
+ controls: ot(x.workflows ?? []),
1442
+ active: (x.workflows?.length ?? 0) > 0,
1443
1443
  cancellation: () => Z.flowControlHealth()
1444
1444
  }),
1445
- webhookActions: ft(() => Z.webhooksService()),
1445
+ webhookActions: mt(() => Z.webhooksService()),
1446
1446
  inspectStartWorkflow: (e) => Y().inspectStartWorkflow(e),
1447
1447
  inspectCancelWorkflowRun: (e) => Y().inspectCancelWorkflowRun(e),
1448
1448
  inspectSuspendWorkflowRun: (e) => Y().inspectSuspendWorkflowRun(e),
@@ -1451,13 +1451,13 @@ 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({
1455
- store: k,
1456
- active: (S.workflows?.length ?? 0) > 0,
1454
+ inspectInferences: (e) => at({
1455
+ store: E,
1456
+ active: (x.workflows?.length ?? 0) > 0,
1457
1457
  dispatcher: () => Z.inferenceHealth()
1458
1458
  }, e.limit === void 0 ? {} : { limit: e.limit }),
1459
- ...P({
1460
- store: k,
1459
+ ...nt({
1460
+ store: E,
1461
1461
  cancelRun: async (e) => await Z.runCanceller()?.(e) ?? !1,
1462
1462
  retryRun: async (e) => Y().inspectRetryWorkflowRun({ runId: e }),
1463
1463
  redriveRun: async (e) => Z.redriveWorkflowRun({ runId: e }),
@@ -1466,11 +1466,11 @@ 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,
1470
- broadcastNamespace: Ut,
1469
+ bootTiming: p,
1470
+ broadcastNamespace: H,
1471
1471
  membership: {
1472
1472
  ...Kt,
1473
- instanceId: Vt
1473
+ instanceId: Ht
1474
1474
  },
1475
1475
  ...v?.plugins === void 0 ? {} : { plugins: v.plugins },
1476
1476
  ...bn ? { idempotency: {
@@ -1478,18 +1478,18 @@ 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,
@@ -1498,17 +1498,17 @@ var Ur = (e, t) => {
1498
1498
  ...w === void 0 ? {} : { webhooks: w }
1499
1499
  },
1500
1500
  log: $,
1501
- analytics: E.sink,
1501
+ analytics: De.sink,
1502
1502
  aggregateStorage: Xn,
1503
1503
  aggregateCoordinator: Zn,
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),
1504
+ store: E,
1505
+ kv: lt,
1506
+ cache: Ke,
1507
+ snapshotCache: We,
1508
+ schemaRegistry: je,
1509
+ tenantScopedTables: x.tenantScopedTables,
1510
+ softDeleteScopedTables: x.softDeleteScopedTables,
1511
+ dataTransferSnapshot: xr(Oe),
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) => {
@@ -1518,8 +1518,8 @@ var Ur = (e, t) => {
1518
1518
  });
1519
1519
  return kn(t, n.credentialExpiresAt), n.subject;
1520
1520
  },
1521
- httpRoutes: [...F.flatMap((e) => e.httpRoutes ?? []), ...xn],
1522
- getStore: () => je,
1521
+ httpRoutes: [...N.flatMap((e) => e.httpRoutes ?? []), ...xn],
1522
+ getStore: () => Fe,
1523
1523
  ...Cn ? { baseLayer: Cn } : {},
1524
1524
  ...Pn === void 0 ? {} : { workflowEngineLayer: Pn },
1525
1525
  scheduleDefaultTrigger: En,
@@ -1531,10 +1531,10 @@ 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 me(e, or, t, {
1535
1535
  method: n,
1536
1536
  ...r === void 0 ? {} : { body: r }
1537
- }) || (Dt(e, or, t, {
1537
+ }) || (I(e, or, t, {
1538
1538
  method: n,
1539
1539
  ...r === void 0 ? {} : { body: r }
1540
1540
  }) ?? {
@@ -1544,31 +1544,31 @@ 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(yt([
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 () => {
1568
- for (let e of Bt) e.stop();
1569
- st.detach(), ht.stop(), tt(), Mt?.dispose();
1567
+ }), p.finish($), On(async () => {
1568
+ for (let e of Vt) e.stop();
1569
+ ht.detach(), vt.stop(), rt(), R?.dispose();
1570
1570
  try {
1571
- await Yt.deactivate(), await Zt?.close(), await E.dispose(), await Z.close(), await k.close?.();
1571
+ await Yt.deactivate(), await Zt?.close(), await De.dispose(), await Z.close(), await E.close?.();
1572
1572
  } catch (e) {
1573
1573
  console.error("serve: shutdown step failed, exiting anyway:", e);
1574
1574
  }