@voltro/cli 0.22.1 → 0.23.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 (65) hide show
  1. package/CHANGELOG.md +316 -0
  2. package/dist/apiBuild-CD-4JLLA.js +2 -0
  3. package/dist/{apiBuild-DiWxVz-M.js → apiBuild-JQtIhZPy.js} +2 -2
  4. package/dist/bin.js +3 -3
  5. package/dist/{commands-BxRaIOBG.js → commands-Bsu9Buln.js} +1767 -1501
  6. package/dist/dbCommand-CSguuUQn.js +2 -0
  7. package/dist/{dbCommand-DVASmZj2.js → dbCommand-GI7-BVZt.js} +440 -259
  8. package/dist/{dev-Dd3EZzj5.js → dev-DRxF_qOB.js} +1 -1
  9. package/dist/{dev-BRiPgbKw.js → dev-jM07kq_D.js} +1479 -1479
  10. package/dist/index.js +1 -1
  11. package/dist/{inspectMetrics-9ZSuDeqD.js → inspectMetrics-dcC7gnxu.js} +566 -552
  12. package/dist/{serveCommand-DXJOARkO.js → serveCommand-Cl8sicD5.js} +280 -279
  13. package/dist/serveEntry.js +2 -2
  14. package/dist/{start-CsIjcOi-.js → start-C_4VUDT8.js} +327 -325
  15. package/dist/startEntry.js +2 -2
  16. package/package.json +17 -17
  17. package/templates/AGENTS.md +1 -1
  18. package/templates/agent-docs/_index.md +1 -1
  19. package/templates/agent-docs/_manifest.json +1 -1
  20. package/templates/agent-docs/caching.md +21 -5
  21. package/templates/agent-docs/cli.md +44 -0
  22. package/templates/agent-docs/data.md +23 -5
  23. package/templates/agent-docs/database/migrations.md +94 -0
  24. package/templates/agent-docs/plugins.md +42 -0
  25. package/templates/agent-docs/routing.md +23 -1
  26. package/templates/agent-docs/templates/apibackends.md +2 -2
  27. package/templates/agent-docs/whats-new.md +281 -32
  28. package/templates/apps/api-ai/package.json +7 -7
  29. package/templates/apps/api-auth/package.json +8 -8
  30. package/templates/apps/api-backend/package.json +7 -7
  31. package/templates/apps/api-backend-deactivation/package.json +7 -7
  32. package/templates/apps/api-backend-mail/package.json +8 -8
  33. package/templates/apps/api-backend-mariadb/package.json +9 -9
  34. package/templates/apps/api-backend-storage/package.json +8 -8
  35. package/templates/apps/api-data-advanced/package.json +8 -8
  36. package/templates/apps/api-durable/package.json +8 -8
  37. package/templates/apps/api-feature-flags/package.json +9 -9
  38. package/templates/apps/api-governance/package.json +8 -8
  39. package/templates/apps/api-kv/package.json +8 -8
  40. package/templates/apps/api-moderation/package.json +8 -8
  41. package/templates/apps/api-observability/package.json +8 -8
  42. package/templates/apps/api-ratelimit/package.json +8 -8
  43. package/templates/apps/api-rbac/package.json +8 -8
  44. package/templates/apps/api-rest/package.json +7 -7
  45. package/templates/apps/api-saas/package.json +11 -11
  46. package/templates/apps/api-search/package.json +8 -8
  47. package/templates/apps/api-versioning/app.config.ts +6 -4
  48. package/templates/apps/api-versioning/package.json +8 -8
  49. package/templates/apps/api-webhooks/package.json +9 -9
  50. package/templates/apps/changelog/package.json +6 -6
  51. package/templates/apps/edge-functions/package.json +2 -2
  52. package/templates/apps/frontend-admin/package.json +8 -8
  53. package/templates/apps/frontend-app/package.json +8 -8
  54. package/templates/apps/frontend-blank/package.json +7 -7
  55. package/templates/apps/frontend-contact/package.json +7 -7
  56. package/templates/apps/frontend-dashboard/package.json +7 -7
  57. package/templates/apps/frontend-docs/package.json +7 -7
  58. package/templates/apps/frontend-i18n/package.json +6 -6
  59. package/templates/apps/frontend-landing/package.json +7 -7
  60. package/templates/apps/frontend-spa/package.json +7 -7
  61. package/templates/apps/frontend-ssr/package.json +7 -7
  62. package/templates/apps/frontend-ssr-api/package.json +8 -8
  63. package/templates/apps/frontend-static-blog/package.json +6 -6
  64. package/dist/apiBuild-COyPDf3R.js +0 -2
  65. package/dist/dbCommand-CO3eSAZR.js +0 -2
@@ -1,24 +1,24 @@
1
- import { at as e, t } from "./inspectMetrics-9ZSuDeqD.js";
1
+ import { ot as e, t } from "./inspectMetrics-dcC7gnxu.js";
2
2
  import { s as n } from "./seedRunner-D6eu-u5U.js";
3
3
  import { r, t as i } from "./appModuleLoader-C9r9mxZt.js";
4
4
  import { f as a, m as o, n as s, p as c, u as l } from "./frameworkTableAssembly-sg41s14F.js";
5
5
  import { l as u } from "./fileConventions-CBNPZVOV.js";
6
6
  import { p as d } from "./inspect-_ldwsAwH.js";
7
- import { $ as ee, A as f, B as p, C as te, D as m, E as ne, F as re, G as ie, H as ae, I as h, K as oe, L as g, M as _, N as se, O as v, P as y, R as ce, S as le, T as ue, V as de, W as fe, _ as b, at as pe, b as me, c as he, et as ge, h as _e, i as x, it as S, j as ve, k as ye, lt as be, m as C, nt as w, o as T, ot as xe, q as Se, r as Ce, rt as we, st as Te, t as Ee, tt as De, u as Oe, ut as ke, v as Ae, w as je, x as E, y as Me, z as Ne } from "./dev-BRiPgbKw.js";
8
- import { l as D, r as O } from "./apiBuild-DiWxVz-M.js";
9
- import { t as k } from "./bootTiming-BdyP9nYw.js";
10
- import { n as Pe } from "./cliArgs-qdZSElM3.js";
11
- import { join as Fe } from "node:path";
12
- import { pathToFileURL as Ie } from "node:url";
13
- import { Cause as Le, Effect as A, Layer as j, ManagedRuntime as Re } from "effect";
14
- import { createLogger as M } from "@voltro/logger";
15
- import { existsSync as ze } from "node:fs";
16
- import { AggregateRegistry as N, Dispatcher as Be, apiKeyManagementRoutes as Ve, applySoftDeleteScope as He, applyTenantScope as Ue, attachAnalyticsMirror as We, awaitServerListening as Ge, bindMutation as P, bindStream as Ke, bindSubscription as F, buildTracingLayer as qe, cancelWakeup as Je, compileCron as I, dataStoreApiKeyStore as Ye, dataStoreIdempotencyStore as Xe, formatServerOnlyLeaks as Ze, frameworkApiKeyStrategy as Qe, installPolicyGuardResolver as $e, loadResourceTuples as et, makeActionRunner as L, makeAdvisoryLockCoordinator as tt, makeApiKeyService as nt, makeApiKeyUsageBuffer as rt, makeApiKeyUsageFlusher as it, makeAsyncKv as at, makeCoordinatedScheduler as ot, makeEffectStoreLayer as st, makeLazyWorkflowFacade as ct, makeMutationRunner as lt, makeOneShotQueryRunner as ut, makeQueryDescriptorProducer as dt, makeQueryReauthorizer as ft, makeQuerySubscriber as pt, makeSchemaRegistry as mt, makeWorkflowFacade as ht, makeWorkflowFacadeWithCallerContext as gt, makeWorkflowLayers as _t, noopKv as R, onProcessShutdown as vt, recordSubscriptionDelivery as yt, registerWakeup as z, resolveSecretsBackend as bt, runProvidedEffect as B, setSecretsBackend as xt, setSystemStoreHandle as St, setTupleSource as Ct, singleCoordinator as wt, startRpcServer as Tt, startScheduler as Et, workflowToRpc as V, wrapStoreWithBootCodec as Dt } from "@voltro/runtime";
17
- import { RpcGroup as Ot } from "@effect/rpc";
18
- import { SqlClient as kt } from "@effect/sql";
19
- import { and as At, ensureTableRegistered as jt, eq as H, or as Mt } from "@voltro/database";
20
- import { appStorageProvider as U, fromNodeReadable as Nt, getObjectStream as Pt, putObjectStream as Ft, toNodeReadable as W } from "@voltro/plugin-storage";
21
- import { AuthMiddleware as It, ConnectionInfoMiddleware as G, actionToRpc as K, anonymousSubject as Lt, isWireReachable as Rt, mutationToRpc as zt, queryToRpc as q, streamToRpc as Bt, workflowCancelDescriptor as Vt, workflowDomainEventsQueryDescriptor as J, workflowEventDeliveriesQueryDescriptor as Ht, workflowResumeDescriptor as Ut, workflowRunEventsQueryDescriptor as Y, workflowRunQueryDescriptor as X, workflowRunStepsQueryDescriptor as Wt, workflowRunsQueryDescriptor as Z, workflowSignalDescriptor as Gt, workflowUpdateDescriptor as Kt } from "@voltro/protocol";
7
+ import { $ as ee, A as f, B as p, C as te, D as m, E as ne, F as re, G as ie, H as ae, I as h, K as oe, L as g, M as _, N as se, O as v, P as y, R as ce, S as le, T as ue, V as de, W as fe, _ as b, at as pe, b as me, c as he, et as ge, h as _e, i as x, it as S, j as ve, k as ye, lt as be, m as C, nt as w, o as T, ot as xe, q as Se, r as Ce, rt as we, st as E, t as Te, tt as Ee, u as De, ut as Oe, v as ke, w as Ae, x as D, y as je, z as Me } from "./dev-jM07kq_D.js";
8
+ import { l as O, r as k } from "./apiBuild-JQtIhZPy.js";
9
+ import { t as A } from "./bootTiming-BdyP9nYw.js";
10
+ import { n as Ne } from "./cliArgs-qdZSElM3.js";
11
+ import { join as Pe } from "node:path";
12
+ import { pathToFileURL as Fe } from "node:url";
13
+ import { Cause as Ie, Effect as j, Layer as M, ManagedRuntime as Le } from "effect";
14
+ import { createLogger as N } from "@voltro/logger";
15
+ import { existsSync as Re } from "node:fs";
16
+ import { AggregateRegistry as P, Dispatcher as ze, apiKeyManagementRoutes as Be, applySoftDeleteScope as Ve, applyTenantScope as He, attachAnalyticsMirror as Ue, awaitServerListening as We, bindMutation as F, bindStream as Ge, bindSubscription as I, buildTracingLayer as Ke, cancelWakeup as qe, compileCron as L, dataStoreApiKeyStore as Je, dataStoreIdempotencyStore as Ye, formatServerOnlyLeaks as Xe, frameworkApiKeyStrategy as Ze, installPolicyGuardResolver as Qe, loadResourceTuples as $e, makeActionRunner as R, makeAdvisoryLockCoordinator as et, makeApiKeyService as tt, makeApiKeyUsageBuffer as nt, makeApiKeyUsageFlusher as rt, makeAsyncKv as it, makeCoordinatedScheduler as at, makeEffectStoreLayer as ot, makeLazyWorkflowFacade as st, makeMutationRunner as ct, makeOneShotQueryRunner as lt, makeQueryDescriptorProducer as ut, makeQueryReauthorizer as dt, makeQuerySubscriber as ft, makeSchemaRegistry as pt, makeWorkflowFacade as mt, makeWorkflowFacadeWithCallerContext as ht, makeWorkflowLayers as gt, noopKv as z, onProcessShutdown as _t, recordSubscriptionDelivery as vt, registerWakeup as yt, resolveSecretsBackend as bt, runProvidedEffect as xt, setSecretsBackend as St, setSystemStoreHandle as Ct, setTupleSource as wt, singleCoordinator as Tt, startRpcServer as Et, startScheduler as Dt, workflowToRpc as B, wrapStoreWithBootCodec as Ot } from "@voltro/runtime";
17
+ import { RpcGroup as kt } from "@effect/rpc";
18
+ import { SqlClient as At } from "@effect/sql";
19
+ import { and as jt, ensureTableRegistered as Mt, eq as V, or as Nt } from "@voltro/database";
20
+ import { appStorageProvider as H, fromNodeReadable as Pt, getObjectStream as Ft, putObjectStream as It, toNodeReadable as U } from "@voltro/plugin-storage";
21
+ import { AuthMiddleware as Lt, ConnectionInfoMiddleware as W, actionToRpc as G, anonymousSubject as Rt, isWireReachable as zt, mutationToRpc as Bt, queryToRpc as K, streamToRpc as Vt, workflowCancelDescriptor as Ht, workflowDomainEventsQueryDescriptor as q, workflowEventDeliveriesQueryDescriptor as Ut, workflowResumeDescriptor as J, workflowRunEventsQueryDescriptor as Y, workflowRunQueryDescriptor as X, workflowRunStepsQueryDescriptor as Wt, workflowRunsQueryDescriptor as Z, workflowSignalDescriptor as Gt, workflowUpdateDescriptor as Kt } from "@voltro/protocol";
22
22
  import { assertProductionSessionSecret as qt } from "@voltro/protocol/session";
23
23
  import { createHash as Jt, timingSafeEqual as Yt } from "node:crypto";
24
24
  import { declaredSnapshot as Xt, describeOutcome as Zt, runPlannedMigrations as Qt } from "@voltro/database/sql";
@@ -42,7 +42,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
42
42
  if (!t || t.length < 16) return Q(503, { error: "data transfer misconfigured (no/weak secret)" });
43
43
  let n = yn(e.headers);
44
44
  return !n || !bn(n, t) ? Q(401, { error: "unauthorized" }) : null;
45
- }, Sn = M({ scope: "voltro:admin-import" }), Cn = "VBUNDLE2", wn = async function* (e) {
45
+ }, Sn = N({ scope: "voltro:admin-import" }), Cn = "VBUNDLE2", wn = async function* (e) {
46
46
  yield e;
47
47
  }, Tn = (e) => async (t) => {
48
48
  let n = xn(t, e.secret);
@@ -66,7 +66,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
66
66
  dir: f,
67
67
  blobs: e.assetSink
68
68
  }) : await mn(c, f);
69
- let t = await A.runPromiseExit(un({
69
+ let t = await j.runPromiseExit(un({
70
70
  store: e.store,
71
71
  bundleDir: f,
72
72
  ...r ? { mode: r } : {},
@@ -121,7 +121,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
121
121
  force: !0
122
122
  });
123
123
  }
124
- }, En = M({ scope: "voltro:admin-export" }), Dn = async (e) => {
124
+ }, En = N({ scope: "voltro:admin-export" }), Dn = async (e) => {
125
125
  let t = [];
126
126
  for await (let n of e) t.push(Buffer.from(n));
127
127
  return new Uint8Array(Buffer.concat(t));
@@ -154,7 +154,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
154
154
  }
155
155
  let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? On(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-"));
156
156
  try {
157
- let t = await A.runPromise(ln({
157
+ let t = await j.runPromise(ln({
158
158
  store: e.store,
159
159
  snapshot: e.snapshot,
160
160
  dialect: e.dialect,
@@ -230,7 +230,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
230
230
  if (!o) throw Error(`data profile '${i}' has no default export`);
231
231
  return o;
232
232
  }, jn = (e, t, n = {}) => (async function* () {
233
- let r = await W((await A.runPromise(Pt(e, t).pipe(A.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
233
+ let r = await U((await j.runPromise(Ft(e, t).pipe(j.timeout(n.openTimeout ?? "30 seconds")))).stream), i = n.stallMs ?? 12e4, a, o = () => {
234
234
  a && clearTimeout(a), a = setTimeout(() => r.destroy(/* @__PURE__ */ Error(`storage read stalled for ${i}ms reading '${t}'`)), i);
235
235
  };
236
236
  try {
@@ -249,20 +249,20 @@ var hn = "VoltroBootRefusal", gn = (e) => {
249
249
  invalidateTag: async () => 0,
250
250
  wrap: async (e, t, n) => n()
251
251
  }, Nn = async (e) => {
252
- St({
252
+ Ct({
253
253
  dataStore: e.store,
254
254
  schemaRegistry: e.schemaRegistry
255
255
  });
256
- let t = new Be({
256
+ let t = new ze({
257
257
  store: e.store,
258
258
  ...e.snapshotCache ? { cache: e.snapshotCache } : {},
259
- recordDelivery: (e) => yt({
259
+ recordDelivery: (e) => vt({
260
260
  label: e.label,
261
261
  kind: e.kind,
262
262
  durationMs: e.durationMs,
263
263
  rowCount: e.rowCount
264
264
  })
265
- }), n = e.cache ?? Mn, r = e.kv ?? R, i, a, o, s = /* @__PURE__ */ new Map(), c = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, l = async (t, n, r) => {
265
+ }), n = e.cache ?? Mn, r = e.kv ?? z, i, a, o, s = /* @__PURE__ */ new Map(), c = () => `wfctx_${globalThis.crypto?.randomUUID?.() ?? `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`, l = async (t, n, r) => {
266
266
  let i = {
267
267
  ...r,
268
268
  source: r.source ?? `workflow:${t}`
@@ -272,7 +272,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
272
272
  let r = await e.store.query({
273
273
  table: "_voltro_workflow_start_contexts",
274
274
  order: [],
275
- predicate: H("executionId", n),
275
+ predicate: V("executionId", n),
276
276
  projection: ["id"],
277
277
  skip: void 0,
278
278
  take: 1
@@ -300,7 +300,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
300
300
  let t = (await e.store.query({
301
301
  table: "_voltro_workflow_start_contexts",
302
302
  order: [],
303
- predicate: H("executionId", n),
303
+ predicate: V("executionId", n),
304
304
  projection: void 0,
305
305
  skip: void 0,
306
306
  take: 1
@@ -318,7 +318,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
318
318
  process.stderr.write(`[workflow] failed to load start context for ${n}: ${e?.message ?? String(e)}\n`);
319
319
  return;
320
320
  }
321
- }, d = (e.discovered.workflows?.length ?? 0) > 0 ? ct(() => i) : void 0, f = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, te = f || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", re = e.tenantIsolation === "namespace", ie = (e.log ?? M({ scope: "voltro:serve" })).child("webhooks"), ae, h = e.discovered.webhooks;
321
+ }, d = (e.discovered.workflows?.length ?? 0) > 0 ? st(() => i) : void 0, f = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, te = f || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", re = e.tenantIsolation === "namespace", ie = (e.log ?? N({ scope: "voltro:serve" })).child("webhooks"), ae, h = e.discovered.webhooks;
322
322
  if (h && h.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
323
323
  let t = e.workflowEngineLayer, i = S({
324
324
  store: e.store,
@@ -327,8 +327,8 @@ var hn = "VoltroBootRefusal", gn = (e) => {
327
327
  kv: r
328
328
  }), a = h.outgoing.map((e) => e.descriptor);
329
329
  ae = rn(i, async (e) => {
330
- let n = on.execute(e).pipe(A.provide(on.toLayer(nn(i, { events: a })).pipe(j.provideMerge(t))));
331
- A.runPromise(n).catch((t) => {
330
+ let n = on.execute(e).pipe(j.provide(on.toLayer(nn(i, { events: a })).pipe(M.provideMerge(t))));
331
+ j.runPromise(n).catch((t) => {
332
332
  ie.error("deliverWebhook workflow crashed", {
333
333
  deliveryId: e.deliveryId,
334
334
  targetId: e.targetId
@@ -340,7 +340,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
340
340
  if (h) for (let e of h.incoming) {
341
341
  let t = e.descriptor.path ?? an(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = sn(e.descriptor, {
342
342
  resolveSecret: async () => process.env[n] ?? null,
343
- resolveWorkflows: () => d === void 0 ? void 0 : gt(d, {
343
+ resolveWorkflows: () => d === void 0 ? void 0 : ht(d, {
344
344
  traceId: `incoming:${e.descriptor.id}`,
345
345
  source: `incoming:${e.descriptor.id}`
346
346
  }),
@@ -357,16 +357,16 @@ var hn = "VoltroBootRefusal", gn = (e) => {
357
357
  });
358
358
  oe.set(t, { handle: r });
359
359
  }
360
- $e(), Ct((t) => et(e.store, t.subjectId, t.resourceType, t.resourceId));
360
+ Qe(), wt((t) => $e(e.store, t.subjectId, t.resourceType, t.resourceId));
361
361
  let se = (e.discovered.outboxHandlers?.length ?? 0) > 0 ? p({
362
362
  handlers: e.discovered.outboxHandlers ?? [],
363
363
  store: e.store,
364
- log: (e.log ?? M({ scope: "voltro:serve" })).child("outbox")
364
+ log: (e.log ?? N({ scope: "voltro:serve" })).child("outbox")
365
365
  }) : void 0, v = ce({
366
366
  definitions: (e.discovered.connections ?? []).map((e) => e.definition),
367
367
  store: e.store,
368
368
  publicUrl: g(e.port ?? 4e3),
369
- log: (e.log ?? M({ scope: "voltro:serve" })).child("connections")
369
+ log: (e.log ?? N({ scope: "voltro:serve" })).child("connections")
370
370
  }), y = we({
371
371
  store: e.store,
372
372
  schemaRegistry: e.schemaRegistry,
@@ -378,118 +378,118 @@ var hn = "VoltroBootRefusal", gn = (e) => {
378
378
  namespaceIsolationOn: re,
379
379
  ...se === void 0 ? {} : { outbox: { nudge: se.nudge } },
380
380
  ...v.active ? { connections: { registry: v.registry } } : {}
381
- }), ue = j.succeed(N, m), fe = (t, n) => {
382
- let r = t.pipe(A.provide(st(n)));
383
- return (e.baseLayer ? r.pipe(A.provide(e.baseLayer)) : r).pipe(A.provide(ue));
384
- }, pe = (e, t) => B(fe(e, t)), me = lt({
381
+ }), ue = M.succeed(P, m), fe = (t, n) => {
382
+ let r = t.pipe(j.provide(ot(n)));
383
+ return (e.baseLayer ? r.pipe(j.provide(e.baseLayer)) : r).pipe(j.provide(ue));
384
+ }, pe = (e, t) => xt(fe(e, t)), me = ct({
385
385
  store: e.store,
386
386
  buildContext: (e, t, n) => y(e, t, n),
387
387
  runEffect: pe,
388
388
  undoCapture: le()
389
- }), he = E(), ge = L({
389
+ }), he = D(), ge = R({
390
390
  buildContext: (e) => y(e),
391
391
  runEffect: pe
392
392
  }), _e = {
393
393
  buildContext: (e) => y(e),
394
- finalize: (t, n) => He(Ue(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
394
+ finalize: (t, n) => Ve(He(t, e.tenantScopedTables, n.subject.tenantId), e.softDeleteScopedTables),
395
395
  provideEffect: fe
396
- }, x = dt(_e), ye = ut({
396
+ }, x = ut(_e), ye = lt({
397
397
  ..._e,
398
398
  queryRows: (t) => e.store.query(t)
399
- }), be = pt({
399
+ }), be = ft({
400
400
  ..._e,
401
401
  subscribeDescriptor: (e, n, r) => t.subscribe(e, n, r),
402
402
  subscribeComputed: (e, n, r) => t.subscribeComputed(e, n, r)
403
- }), C = {};
403
+ }), C = (e) => e.filter((e) => zt(e.descriptor)), T = {};
404
404
  for (let n of [
405
- ...e.discovered.queries,
405
+ ...C(e.discovered.queries),
406
406
  ...he.queries,
407
407
  ...v.queries
408
- ]) C[n.descriptor.name] = (e) => F(x(n, e), t, `subscription.${n.descriptor.name}`, void 0, void 0, ft(n, e));
408
+ ]) T[n.descriptor.name] = (e) => I(x(n, e), t, `subscription.${n.descriptor.name}`, void 0, void 0, dt(n, e));
409
409
  for (let t of [
410
- ...e.discovered.mutations,
410
+ ...C(e.discovered.mutations),
411
411
  ...he.mutations,
412
412
  ...v.mutations
413
- ]) C[t.descriptor.name] = (e) => P(async (e, n) => me(t, e, n), e, `mutation.${t.descriptor.name}`);
414
- for (let t of [...e.discovered.actions, ...v.actions]) C[t.descriptor.name] = (e) => P(async (e, n) => ge(t, e, n), e, `action.${t.descriptor.name}`);
415
- let T = () => `public-${Math.random().toString(36).slice(2, 10)}`, xe = [
413
+ ]) T[t.descriptor.name] = (e) => F(async (e, n) => me(t, e, n), e, `mutation.${t.descriptor.name}`);
414
+ for (let t of [...C(e.discovered.actions), ...v.actions]) T[t.descriptor.name] = (e) => F(async (e, n) => ge(t, e, n), e, `action.${t.descriptor.name}`);
415
+ let xe = () => `public-${Math.random().toString(36).slice(2, 10)}`, Se = [
416
416
  ...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
417
417
  descriptor: e.descriptor,
418
418
  invoke: (t, n) => ye(e, t, {
419
419
  subject: n.subject,
420
- traceId: T()
420
+ traceId: xe()
421
421
  }),
422
422
  subscribe: (t, n, r) => be(e, t, {
423
423
  subject: n.subject,
424
- traceId: T()
424
+ traceId: xe()
425
425
  }, r)
426
426
  })),
427
427
  ...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
428
428
  descriptor: e.descriptor,
429
429
  invoke: (t, n) => me(e, t, {
430
430
  subject: n.subject,
431
- traceId: T()
431
+ traceId: xe()
432
432
  })
433
433
  })),
434
434
  ...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
435
435
  descriptor: e.descriptor,
436
436
  invoke: (t, n) => ge(e, t, {
437
437
  subject: n.subject,
438
- traceId: T()
438
+ traceId: xe()
439
439
  })
440
440
  }))
441
- ], Se = xe.length > 0 ? tn(en(xe), {
441
+ ], Ce = Se.length > 0 ? tn(en(Se), {
442
442
  store: e.store,
443
443
  resolveSubject: (t) => e.resolveSubject(t, -1)
444
- }) : [], Ce = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Te = Ce && Ce.length >= 16 ? [{
444
+ }) : [], E = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Te = E && E.length >= 16 ? [{
445
445
  method: "POST",
446
446
  path: _n,
447
447
  handle: Tn({
448
- secret: Ce,
448
+ secret: E,
449
449
  store: e.store,
450
450
  ...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
451
- assetSink: dn(U()),
452
- openArchive: (e) => jn(U(), e)
451
+ assetSink: dn(H()),
452
+ openArchive: (e) => jn(H(), e)
453
453
  })
454
454
  }, {
455
455
  method: "POST",
456
456
  path: vn,
457
457
  handle: kn({
458
- secret: Ce,
458
+ secret: E,
459
459
  store: e.store,
460
460
  snapshot: e.dataTransferSnapshot ?? { tables: [] },
461
461
  dialect: e.dataTransferDialect ?? "memory",
462
462
  tenantTables: [...e.tenantScopedTables],
463
463
  loadProfile: An,
464
- assetSource: fn(U(), e.store),
464
+ assetSource: fn(H(), e.store),
465
465
  putArchive: async (e, t) => {
466
- let { Readable: n } = await import("node:stream"), r = U(), i = Nt("storage", () => n.from(t()));
467
- await A.runPromise(Ft(r, e, i, { contentType: "application/octet-stream" }));
466
+ let { Readable: n } = await import("node:stream"), r = H(), i = Pt("storage", () => n.from(t()));
467
+ await j.runPromise(It(r, e, i, { contentType: "application/octet-stream" }));
468
468
  }
469
469
  })
470
470
  }] : [], Ee = [
471
471
  ...e.httpRoutes ?? [],
472
- ...Se,
472
+ ...Ce,
473
473
  ...Te,
474
474
  ...v.httpRoutes
475
475
  ];
476
- for (let t of e.discovered.streams ?? []) C[t.descriptor.name] = (n) => Ke((r) => {
476
+ for (let t of C(e.discovered.streams ?? [])) T[t.descriptor.name] = (n) => Ge((r) => {
477
477
  let i = y(r), a = t.executor(n, i);
478
- if (A.isEffect(a)) {
479
- let t = a.pipe(A.provide(st(i.store)));
480
- return (e.baseLayer ? t.pipe(A.provide(e.baseLayer)) : t).pipe(A.provide(ue));
478
+ if (j.isEffect(a)) {
479
+ let t = a.pipe(j.provide(ot(i.store)));
480
+ return (e.baseLayer ? t.pipe(j.provide(e.baseLayer)) : t).pipe(j.provide(ue));
481
481
  }
482
- return typeof a == "object" && a && typeof a.then == "function" ? A.promise(() => a) : a;
482
+ return typeof a == "object" && a && typeof a.then == "function" ? j.promise(() => a) : a;
483
483
  }, `stream.${t.descriptor.name}`);
484
- for (let t of e.discovered.workflows ?? []) C[t.definition.name] = (e) => P(async (e, n) => {
484
+ for (let t of e.discovered.workflows ?? []) T[t.definition.name] = (e) => F(async (e, n) => {
485
485
  let r = n;
486
- return gt(d, {
486
+ return ht(d, {
487
487
  subject: r.subject,
488
488
  traceId: r.traceId,
489
489
  source: "workflow-rpc"
490
490
  }).start(t.definition.name, e);
491
491
  }, e, `workflow.${t.definition.name}`);
492
- f && (C[X.name] = (e) => F(x({
492
+ f && (T[X.name] = (e) => I(x({
493
493
  descriptor: X,
494
494
  executor: (e) => {
495
495
  let t = e.id;
@@ -499,29 +499,29 @@ var hn = "VoltroBootRefusal", gn = (e) => {
499
499
  column: "startedAt",
500
500
  direction: "desc"
501
501
  }],
502
- predicate: Mt(H("id", t), H("executionId", t)),
502
+ predicate: Nt(V("id", t), V("executionId", t)),
503
503
  take: 1,
504
504
  skip: void 0,
505
505
  projection: void 0
506
506
  };
507
507
  }
508
- }, e), t, `subscription.${X.name}`), C[Z.name] = (e) => F(x({
508
+ }, e), t, `subscription.${X.name}`), T[Z.name] = (e) => I(x({
509
509
  descriptor: Z,
510
510
  executor: (e) => {
511
- let t = e, n = [...t.tag === void 0 ? [] : [H("tag", t.tag)], ...t.status === void 0 ? [] : [H("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
511
+ let t = e, n = [...t.tag === void 0 ? [] : [V("tag", t.tag)], ...t.status === void 0 ? [] : [V("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
512
512
  return {
513
513
  table: "_voltro_workflow_runs",
514
514
  order: [{
515
515
  column: "startedAt",
516
516
  direction: "desc"
517
517
  }],
518
- predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : At(...n),
518
+ predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : jt(...n),
519
519
  take: r,
520
520
  skip: void 0,
521
521
  projection: void 0
522
522
  };
523
523
  }
524
- }, e), t, `subscription.${Z.name}`), C[Wt.name] = (e) => F(x({
524
+ }, e), t, `subscription.${Z.name}`), T[Wt.name] = (e) => I(x({
525
525
  descriptor: Wt,
526
526
  executor: (e) => {
527
527
  let t = e.runId;
@@ -531,13 +531,13 @@ var hn = "VoltroBootRefusal", gn = (e) => {
531
531
  column: "startedAt",
532
532
  direction: "asc"
533
533
  }],
534
- predicate: H("runId", t),
534
+ predicate: V("runId", t),
535
535
  take: 1e3,
536
536
  skip: void 0,
537
537
  projection: void 0
538
538
  };
539
539
  }
540
- }, e), t, `subscription.${Wt.name}`), C[Y.name] = (e) => F(x({
540
+ }, e), t, `subscription.${Wt.name}`), T[Y.name] = (e) => I(x({
541
541
  descriptor: Y,
542
542
  executor: (e) => {
543
543
  let t = e.runId;
@@ -547,14 +547,14 @@ var hn = "VoltroBootRefusal", gn = (e) => {
547
547
  column: "occurredAt",
548
548
  direction: "asc"
549
549
  }],
550
- predicate: H("runId", t),
550
+ predicate: V("runId", t),
551
551
  take: 1e3,
552
552
  skip: void 0,
553
553
  projection: void 0
554
554
  };
555
555
  }
556
- }, e), t, `subscription.${Y.name}`), C[J.name] = (e) => F(x({
557
- descriptor: J,
556
+ }, e), t, `subscription.${Y.name}`), T[q.name] = (e) => I(x({
557
+ descriptor: q,
558
558
  executor: (e) => {
559
559
  let t = e;
560
560
  return {
@@ -563,14 +563,14 @@ var hn = "VoltroBootRefusal", gn = (e) => {
563
563
  column: "occurredAt",
564
564
  direction: "desc"
565
565
  }],
566
- predicate: t.name === void 0 ? void 0 : H("name", t.name),
566
+ predicate: t.name === void 0 ? void 0 : V("name", t.name),
567
567
  take: Math.max(1, Math.min(500, t.limit ?? 100)),
568
568
  skip: void 0,
569
569
  projection: void 0
570
570
  };
571
571
  }
572
- }, e), t, `subscription.${J.name}`), C[Ht.name] = (e) => F(x({
573
- descriptor: Ht,
572
+ }, e), t, `subscription.${q.name}`), T[Ut.name] = (e) => I(x({
573
+ descriptor: Ut,
574
574
  executor: (e) => {
575
575
  let t = e.eventId;
576
576
  return {
@@ -579,69 +579,69 @@ var hn = "VoltroBootRefusal", gn = (e) => {
579
579
  column: "createdAt",
580
580
  direction: "asc"
581
581
  }],
582
- predicate: H("eventId", t),
582
+ predicate: V("eventId", t),
583
583
  take: 500,
584
584
  skip: void 0,
585
585
  projection: void 0
586
586
  };
587
587
  }
588
- }, e), t, `subscription.${Ht.name}`), C[Vt.name] = (t) => P(async (t, n) => {
588
+ }, e), t, `subscription.${Ut.name}`), T[Ht.name] = (t) => F(async (t, n) => {
589
589
  let r = t;
590
- return await w(e.store, n.subject, { executionId: r.executionId }), await d.cancel(r.workflowName, r.executionId), await Fe(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
591
- }, t, `action.${Vt.name}`), C[Ut.name] = (t) => P(async (t, n) => {
590
+ return await w(e.store, n.subject, { executionId: r.executionId }), await d.cancel(r.workflowName, r.executionId), await Pe(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
591
+ }, t, `action.${Ht.name}`), T[J.name] = (t) => F(async (t, n) => {
592
592
  let r = t;
593
593
  return await w(e.store, n.subject, { executionId: r.executionId }), await d.resume(r.workflowName, r.executionId), { ok: !0 };
594
- }, t, `action.${Ut.name}`), C[Gt.name] = (t) => P(async (t, n) => {
594
+ }, t, `action.${J.name}`), T[Gt.name] = (t) => F(async (t, n) => {
595
595
  let r = t;
596
596
  return await w(e.store, n.subject, { id: r.id }), d.signal({ id: r.id }, r.signalName, r.payload);
597
- }, t, `action.${Gt.name}`), C[Kt.name] = (t) => P(async (t, n) => {
597
+ }, t, `action.${Gt.name}`), T[Kt.name] = (t) => F(async (t, n) => {
598
598
  let r = t;
599
599
  return await w(e.store, n.subject, { id: r.id }), d.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
600
600
  }, t, `action.${Kt.name}`));
601
- let De = (e) => e.filter((e) => Rt(e.descriptor)), Oe = [
602
- ...De(e.discovered.queries).map((e) => q(e.descriptor)),
603
- ...De(e.discovered.mutations).map((e) => zt(e.descriptor)),
604
- ...De(e.discovered.actions).map((e) => K(e.descriptor)),
605
- ...he.queries.map((e) => q(e.descriptor)),
606
- ...he.mutations.map((e) => zt(e.descriptor)),
607
- ...v.queries.map((e) => q(e.descriptor)),
608
- ...v.mutations.map((e) => zt(e.descriptor)),
609
- ...v.actions.map((e) => K(e.descriptor)),
610
- ...(e.discovered.streams ?? []).map((e) => Bt(e.descriptor)),
611
- ...(e.discovered.workflows ?? []).map((e) => V(e.definition)),
601
+ let De = [
602
+ ...C(e.discovered.queries).map((e) => K(e.descriptor)),
603
+ ...C(e.discovered.mutations).map((e) => Bt(e.descriptor)),
604
+ ...C(e.discovered.actions).map((e) => G(e.descriptor)),
605
+ ...he.queries.map((e) => K(e.descriptor)),
606
+ ...he.mutations.map((e) => Bt(e.descriptor)),
607
+ ...v.queries.map((e) => K(e.descriptor)),
608
+ ...v.mutations.map((e) => Bt(e.descriptor)),
609
+ ...v.actions.map((e) => G(e.descriptor)),
610
+ ...C(e.discovered.streams ?? []).map((e) => Vt(e.descriptor)),
611
+ ...(e.discovered.workflows ?? []).map((e) => B(e.definition)),
612
612
  ...f ? [
613
- q(X),
614
- q(Z),
615
- q(Wt),
616
- q(Y),
617
- q(J),
618
- q(Ht),
619
- K(Vt),
613
+ K(X),
614
+ K(Z),
615
+ K(Wt),
616
+ K(Y),
617
+ K(q),
620
618
  K(Ut),
621
- K(Gt),
622
- K(Kt)
619
+ G(Ht),
620
+ G(J),
621
+ G(Gt),
622
+ G(Kt)
623
623
  ] : []
624
- ], ke = Ot.make(...Oe).middleware(It).middleware(G), je = j.succeed(It, It.of(({ headers: t, clientId: n }) => A.promise(() => e.resolveSubject(t, n)))), Me = j.succeed(G, G.of(({ clientId: e }) => A.succeed({ clientId: e }))), Ne = e.dormancyTenantId ?? "default", D = e.dormancy === "sleep" ? {
625
- register: (t, n, r) => z(e.store, {
626
- tenantId: r ?? Ne,
624
+ ], Oe = kt.make(...De).middleware(Lt).middleware(W), Ae = M.succeed(Lt, Lt.of(({ headers: t, clientId: n }) => j.promise(() => e.resolveSubject(t, n)))), je = M.succeed(W, W.of(({ clientId: e }) => j.succeed({ clientId: e }))), Me = e.dormancyTenantId ?? "default", O = e.dormancy === "sleep" ? {
625
+ register: (t, n, r) => yt(e.store, {
626
+ tenantId: r ?? Me,
627
627
  kind: "workflow",
628
628
  refId: t,
629
629
  wakeAt: n
630
630
  }),
631
- cancel: (t, n) => Je(e.store, {
632
- tenantId: n ?? Ne,
631
+ cancel: (t, n) => qe(e.store, {
632
+ tenantId: n ?? Me,
633
633
  kind: "workflow",
634
634
  refId: t
635
635
  }).then(() => {})
636
- } : void 0, O = te ? await import("@voltro/workflow") : void 0, k = O?.makeWorkflowRunRecorder({
636
+ } : void 0, k = te ? await import("@voltro/workflow") : void 0, A = k?.makeWorkflowRunRecorder({
637
637
  store: e.store,
638
- ...D === void 0 ? {} : { wakeups: D }
639
- }), Pe = async (t, n) => {
640
- await O.closeWorkflowChildrenForParent({
638
+ ...O === void 0 ? {} : { wakeups: O }
639
+ }), Ne = async (t, n) => {
640
+ await k.closeWorkflowChildrenForParent({
641
641
  store: e.store,
642
642
  parentExecutionId: t,
643
643
  parentStatus: n,
644
- recorder: k,
644
+ recorder: A,
645
645
  log: { warn: (e, t) => {
646
646
  process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
647
647
  } },
@@ -652,11 +652,11 @@ var hn = "VoltroBootRefusal", gn = (e) => {
652
652
  await a.runPromise(r.definition.interrupt(n));
653
653
  }
654
654
  });
655
- }, Fe = async (t, n, r) => {
655
+ }, Pe = async (t, n, r) => {
656
656
  let i = (await e.store.query({
657
657
  table: "_voltro_workflow_runs",
658
658
  order: [],
659
- predicate: H("executionId", n),
659
+ predicate: V("executionId", n),
660
660
  projection: void 0,
661
661
  skip: void 0,
662
662
  take: 1
@@ -667,7 +667,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
667
667
  cancelled: !0,
668
668
  completedAt: /* @__PURE__ */ new Date()
669
669
  }), o = i.subject?.tenantId ?? void 0;
670
- a && await k.recordEvent({
670
+ a && await A.recordEvent({
671
671
  runId: i.id,
672
672
  eventType: "run-cancelled",
673
673
  payload: {
@@ -676,16 +676,16 @@ var hn = "VoltroBootRefusal", gn = (e) => {
676
676
  executionId: n,
677
677
  ...o == null ? {} : { tenantId: o }
678
678
  }
679
- }), a && await Pe(n, "cancelled");
680
- }, Ie = [..._t(e.discovered.workflows ?? [], {
679
+ }), a && await Ne(n, "cancelled");
680
+ }, Fe = [...gt(e.discovered.workflows ?? [], {
681
681
  buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? y({
682
682
  subject: t.subject,
683
683
  traceId: t.traceId
684
684
  }, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
685
685
  resolveStartContext: u
686
686
  }, (t, n, r) => {
687
- let i = O.getWorkflowVersionMetadata(t.definition);
688
- return O.wrapWorkflowExecuteWithRunRecording({
687
+ let i = k.getWorkflowVersionMetadata(t.definition);
688
+ return k.wrapWorkflowExecuteWithRunRecording({
689
689
  name: t.definition.name,
690
690
  store: e.store,
691
691
  subject: r.subject,
@@ -696,71 +696,72 @@ var hn = "VoltroBootRefusal", gn = (e) => {
696
696
  workflowPatches: i.patches,
697
697
  parentExecutionId: r?.parentExecutionId ?? null,
698
698
  parentClosePolicy: r?.parentClosePolicy ?? null,
699
- onParentClose: ({ executionId: e, status: t }) => Pe(e, t),
700
- recorder: k
699
+ onParentClose: ({ executionId: e, status: t }) => Ne(e, t),
700
+ recorder: A
701
701
  }, n);
702
- }), ...e.discovered.workflowWorkers ?? []], Le = Ie.length > 0 ? j.mergeAll(...Ie) : j.empty;
702
+ }), ...e.discovered.workflowWorkers ?? []], Ie = Fe.length > 0 ? M.mergeAll(...Fe) : M.empty;
703
703
  if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster") && e.workflowEngineLayer !== void 0) {
704
- let t = Le.pipe(j.provideMerge(e.workflowEngineLayer));
705
- a = Re.make(e.baseLayer === void 0 ? t : t.pipe(j.provideMerge(e.baseLayer))), await a.runPromise(A.void), i = (e.discovered.workflows?.length ?? 0) > 0 ? ht({
704
+ let t = Ie.pipe(M.provideMerge(e.workflowEngineLayer));
705
+ a = Le.make(e.baseLayer === void 0 ? t : t.pipe(M.provideMerge(e.baseLayer))), await a.runPromise(j.void), i = (e.discovered.workflows?.length ?? 0) > 0 ? mt({
706
706
  workflows: e.discovered.workflows ?? [],
707
707
  runEffect: (e) => a.runPromise(e),
708
708
  rememberStartContext: l,
709
709
  signal: async (t, n, r) => {
710
- let i = await O.sendWorkflowSignal({
710
+ let i = await k.sendWorkflowSignal({
711
711
  store: e.store,
712
- recorder: k,
712
+ recorder: A,
713
713
  target: t,
714
714
  signalName: n,
715
715
  payload: r
716
716
  });
717
- return await a.runPromise(O.completeSuspendingSignal({
717
+ return await a.runPromise(k.completeSuspendingSignal({
718
718
  store: e.store,
719
719
  target: t,
720
720
  signalName: n,
721
721
  payload: r
722
722
  })).catch(() => {}), i;
723
723
  },
724
- update: (t, n, r, i) => O.sendWorkflowUpdate({
724
+ update: (t, n, r, i) => k.sendWorkflowUpdate({
725
725
  store: e.store,
726
- recorder: k,
726
+ recorder: A,
727
727
  target: t,
728
728
  updateName: n,
729
729
  payload: r,
730
730
  ...i === void 0 ? {} : { options: i }
731
731
  }),
732
732
  listRuns: (t) => b(e.store, t),
733
- retry: (t, n) => Ae({
733
+ retry: (t, n) => ke({
734
734
  store: e.store,
735
735
  workflows: e.discovered.workflows ?? [],
736
736
  runPromise: (e) => a.runPromise(e)
737
737
  }, t, n)
738
738
  }) : void 0;
739
739
  }
740
- let ze = j.mergeAll(ke.toLayer(C), je, Me), Ve = ee(C, e.discovered.queries.map((e) => e.descriptor.name), f), We = j.mergeAll(ke.toLayer(Ve), je, Me), I = e.observability, Ye = await qe({
741
- ...I && I.spanProcessors.length > 0 ? { extraSpanProcessors: I.spanProcessors } : {},
742
- ...I && I.metricReaders.length > 0 ? { extraMetricReaders: I.metricReaders } : {},
743
- ...I && Object.keys(I.resourceAttributes).length > 0 ? { resourceAttributes: I.resourceAttributes } : {},
744
- ...I && I.sampler !== void 0 ? { sampler: I.sampler } : {}
745
- }), Xe = !1, Ze = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Qe, shutdown: nt } = Tt({
746
- group: ke,
747
- handlersLayer: ze,
748
- httpHandlersLayer: We,
740
+ let Re = M.mergeAll(Oe.toLayer(T), Ae, je), Be = ee(T, e.discovered.queries.map((e) => e.descriptor.name), f), Ue = M.mergeAll(Oe.toLayer(Be), Ae, je), L = e.observability, Je = await Ke({
741
+ ...L && L.spanProcessors.length > 0 ? { extraSpanProcessors: L.spanProcessors } : {},
742
+ ...L && L.metricReaders.length > 0 ? { extraMetricReaders: L.metricReaders } : {},
743
+ ...L && Object.keys(L.resourceAttributes).length > 0 ? { resourceAttributes: L.resourceAttributes } : {},
744
+ ...L && L.sampler !== void 0 ? { sampler: L.sampler } : {}
745
+ }), Ye = !1, Xe = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: Ze, shutdown: tt } = Et({
746
+ group: Oe,
747
+ handlersLayer: Re,
748
+ httpHandlersLayer: Ue,
749
749
  port: e.port ?? 4e3,
750
+ ...e.host === void 0 ? {} : { host: e.host },
750
751
  path: e.path ?? "/ws",
751
- tracerLayer: Ye.layer,
752
+ tracerLayer: Je.layer,
752
753
  healthCheck: {
753
- isReady: () => Xe,
754
- ...Ze ? { ping: Ze } : {}
754
+ isReady: () => Ye,
755
+ ...Xe ? { ping: Xe } : {}
755
756
  },
756
757
  ...Ee.length > 0 ? { httpRoutes: Ee } : {},
757
758
  ...e.getStore === void 0 ? {} : { getStore: e.getStore },
758
759
  ...oe.size > 0 ? { webhookRoutes: oe } : {},
759
760
  ...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
760
761
  });
761
- if (await Ge(Qe), (e.discovered.schedules?.length ?? 0) > 0) {
762
- let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? tt(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : wt;
763
- o = await Et(e.discovered.schedules ?? [], {
762
+ if (await We(Ze), (e.discovered.schedules?.length ?? 0) > 0) {
763
+ let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? et(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : Tt;
764
+ o = await Dt(e.discovered.schedules ?? [], {
764
765
  store: e.store,
765
766
  coordinator: t,
766
767
  defaultTrigger: e.scheduleDefaultTrigger ?? "self",
@@ -788,10 +789,10 @@ var hn = "VoltroBootRefusal", gn = (e) => {
788
789
  ...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
789
790
  }), e.onSchedulerReady?.(o);
790
791
  }
791
- let rt = e.log ?? M({ scope: "voltro:serve" }), it, at;
792
- if ((e.discovered.subscribers?.length ?? 0) > 0 && (it = de(e.discovered.subscribers ?? [], e.store, rt.child("subscribe"), e.schemaRegistry)), (e.discovered.reactions?.length ?? 0) > 0) {
793
- let t = rt.child("reaction");
794
- at = ve(e.discovered.reactions ?? [], e.store, {
792
+ let nt = e.log ?? N({ scope: "voltro:serve" }), rt, it;
793
+ if ((e.discovered.subscribers?.length ?? 0) > 0 && (rt = de(e.discovered.subscribers ?? [], e.store, nt.child("subscribe"), e.schemaRegistry)), (e.discovered.reactions?.length ?? 0) > 0) {
794
+ let t = nt.child("reaction");
795
+ it = ve(e.discovered.reactions ?? [], e.store, {
795
796
  runAct: async (n, r) => {
796
797
  if (n.kind === "workflow") {
797
798
  if (d === void 0) {
@@ -799,7 +800,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
799
800
  return;
800
801
  }
801
802
  let e = r.new ?? r.old ?? {};
802
- await gt(d, {
803
+ await ht(d, {
803
804
  traceId: `reaction:${n.workflow}`,
804
805
  source: `reaction:${n.workflow}`
805
806
  }).start(n.workflow, e);
@@ -808,7 +809,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
808
809
  await _(n.agent, r, {
809
810
  findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
810
811
  runAction: (e, t, n) => Promise.resolve(ge(e, t, n)),
811
- makeSubject: (e) => Lt(e),
812
+ makeSubject: (e) => Rt(e),
812
813
  now: () => Date.now(),
813
814
  log: t
814
815
  });
@@ -816,7 +817,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
816
817
  checkBudget: async (n, r) => {
817
818
  try {
818
819
  let { requireAiBudget: t } = await import("@voltro/ai");
819
- return (await A.runPromise(A.either(t(e.store, {
820
+ return (await j.runPromise(j.either(t(e.store, {
820
821
  tenantId: n,
821
822
  limitUsd: r
822
823
  }))))._tag === "Right";
@@ -826,28 +827,28 @@ var hn = "VoltroBootRefusal", gn = (e) => {
826
827
  }
827
828
  }, t);
828
829
  }
829
- let ot;
830
- return (e.discovered.aggregates?.length ?? 0) > 0 && (ot = await ne({
830
+ let at;
831
+ return (e.discovered.aggregates?.length ?? 0) > 0 && (at = await ne({
831
832
  discovered: e.discovered.aggregates ?? [],
832
833
  store: e.store,
833
- log: rt.child("aggregate"),
834
+ log: nt.child("aggregate"),
834
835
  ...e.analytics === void 0 ? {} : { analytics: e.analytics },
835
836
  ...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
836
837
  ...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
837
- }), ue = j.succeed(N, ot.registry)), Xe = !0, e.bootTiming?.mark("ready"), {
838
+ }), ue = M.succeed(P, at.registry)), Ye = !0, e.bootTiming?.mark("ready"), {
838
839
  dispatcher: t,
839
- server: Qe,
840
+ server: Ze,
840
841
  scheduler: o,
841
842
  close: async () => {
842
- Xe = !1, ot?.detach(), at?.(), it?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Qe.close(() => e())), await nt();
843
+ Ye = !1, at?.detach(), it?.(), rt?.(), await o?.shutdown(), t.close(), await a?.dispose(), await new Promise((e) => Ze.close(() => e())), await tt();
843
844
  }
844
845
  };
845
- }, $ = M({ scope: "voltro:serve" }), Pn = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Fn = Pe, In = async (e) => {
846
- let t = D(process.cwd());
847
- if (ze(t)) {
846
+ }, $ = N({ scope: "voltro:serve" }), Pn = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", Fn = Ne, In = async (e) => {
847
+ let t = O(process.cwd());
848
+ if (Re(t)) {
848
849
  let n;
849
850
  try {
850
- let e = await import(Ie(t).href);
851
+ let e = await import(Fe(t).href);
851
852
  typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
852
853
  } catch (e) {
853
854
  $.warn("serve bundle failed to load — using the standard serve path", {}, e);
@@ -856,7 +857,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
856
857
  }
857
858
  return Ln(e);
858
859
  }, Ln = async (ee) => {
859
- let p = k();
860
+ let p = A();
860
861
  process.env.NODE_ENV || (process.env.NODE_ENV = "production");
861
862
  try {
862
863
  qt();
@@ -864,58 +865,58 @@ var hn = "VoltroBootRefusal", gn = (e) => {
864
865
  throw gn(e instanceof Error ? e.message : String(e));
865
866
  }
866
867
  let m = process.cwd(), ne = Number(process.env.PORT ?? Fn(ee, "--port") ?? 4e3), g = await he(m);
867
- xt(bt(g?.secrets)), await e({
868
+ St(bt(g?.secrets)), await e({
868
869
  rawEnv: g?.env,
869
870
  appType: "api",
870
871
  root: m,
871
872
  log: $,
872
873
  generateTypes: !1
873
874
  }), p.mark("config");
874
- let _ = (process.env.DB_DIALECT ?? g?.store ?? "memory").toLowerCase(), ce = (_ === "mariadb" || _ === "postgres" || _ === "mssql") && (process.env.CDC ?? "1") !== "0", le = _ === "mariadb" ? "mariadb" : _ === "mssql" ? "mssql" : void 0, de = O(m);
875
- if (!i() && ze(de)) try {
876
- let e = await import(Ie(de).href);
875
+ let _ = (process.env.DB_DIALECT ?? g?.store ?? "memory").toLowerCase(), ce = (_ === "mariadb" || _ === "postgres" || _ === "mssql") && (process.env.CDC ?? "1") !== "0", le = _ === "mariadb" ? "mariadb" : _ === "mssql" ? "mssql" : void 0, de = k(m);
876
+ if (!i() && Re(de)) try {
877
+ let e = await import(Fe(de).href);
877
878
  if (e.modules) {
878
879
  let t = {};
879
- for (let [n, r] of Object.entries(e.modules)) t[Fe(m, n)] = r;
880
+ for (let [n, r] of Object.entries(e.modules)) t[Pe(m, n)] = r;
880
881
  r(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
881
882
  }
882
883
  } catch (e) {
883
884
  $.warn("precompiled api bundle failed to load — falling back to source", {}, e);
884
885
  }
885
- let b = await C(m), S = await Oe(b, { cdc: ce && le !== void 0 });
886
+ let b = await C(m), S = await De(b, { cdc: ce && le !== void 0 });
886
887
  {
887
- let e = h(S.serverOnlyLeaks, re(process.env, "strict"), Ze, "`voltro serve`");
888
+ let e = h(S.serverOnlyLeaks, re(process.env, "strict"), Xe, "`voltro serve`");
888
889
  if (e.action === "fail") throw gn(e.message ?? "");
889
890
  e.action === "warn" && $.warn(e.message ?? "");
890
891
  }
891
- let ve = b.filter((e) => je.test(e)), w = ve.length > 0 ? await ue(ve, $.child("webhooks")) : void 0, we = s({
892
+ let ve = b.filter((e) => Ae.test(e)), w = ve.length > 0 ? await ue(ve, $.child("webhooks")) : void 0, we = s({
892
893
  mix: S.featureMix,
893
894
  plugins: g?.plugins ?? [],
894
895
  cdc: ce && le !== void 0,
895
896
  ...le ? { cdcDialect: le } : {}
896
- }), Ae = g?.analytics !== void 0 && g.analytics.kind !== "noop" && _ !== "memory" ? (await n(_)).makeSqlLayer(T()) : void 0, E = await ie({
897
+ }), ke = g?.analytics !== void 0 && g.analytics.kind !== "noop" && _ !== "memory" ? (await n(_)).makeSqlLayer(T()) : void 0, D = await ie({
897
898
  spec: g?.analytics,
898
- sqlLayer: Ae,
899
+ sqlLayer: ke,
899
900
  log: $
900
- }), D = (() => {
901
+ }), O = (() => {
901
902
  let e = new Set(S.tables.map((e) => e.tableName)), t = [...S.tables];
902
- for (let n of [...we, ...E.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
903
+ for (let n of [...we, ...D.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
903
904
  return t;
904
905
  })();
905
- for (let e of D) jt(e);
906
- let Pe = (process.env.NODE_ENV ?? "").toLowerCase();
907
- if (Pn(Pe, _, process.env.VOLTRO_AUTO_MIGRATE)) {
908
- let e = (await n(_)).makeSqlLayer(T()), t = await A.runPromise(kt.SqlClient.pipe(A.flatMap((e) => Qt(e, D, {
909
- appliedBy: `serve:${Pe}`,
906
+ for (let e of O) Mt(e);
907
+ let Ne = (process.env.NODE_ENV ?? "").toLowerCase();
908
+ if (Pn(Ne, _, process.env.VOLTRO_AUTO_MIGRATE)) {
909
+ let e = (await n(_)).makeSqlLayer(T()), t = await j.runPromise(At.SqlClient.pipe(j.flatMap((e) => Qt(e, O, {
910
+ appliedBy: `serve:${Ne}`,
910
911
  environment: "prod",
911
912
  dialectId: _
912
- })), A.provide(e)));
913
+ })), j.provide(e)));
913
914
  t.kind === "prod-mismatch" && ($.error(Zt(t, _)), $.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(Zt(t, _));
914
915
  }
915
- let M = mt(D);
916
+ let N = pt(O);
916
917
  p.mark("discover");
917
- let N = await x(g, void 0), Be = Dt(N, _);
918
- for (let e of Te({
918
+ let P = await x(g, void 0), ze = Ot(P, _);
919
+ for (let e of E({
919
920
  dialect: String(g?.store ?? process.env.DB_DIALECT ?? "postgres"),
920
921
  changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
921
922
  dbUrl: process.env.DB_URL,
@@ -929,101 +930,101 @@ var hn = "VoltroBootRefusal", gn = (e) => {
929
930
  })
930
931
  })) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
931
932
  g?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = g.cache), g?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = g.cacheRedisUrl), g?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = g.cacheRedisDriver), g?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = g.cacheKeyPrefix);
932
- let { service: He, invalidationBus: Ue, snapshotCache: Ge, cache: P, backend: Ke, dispose: F } = await xe({ env: process.env });
933
- $.info(`cache backend resolved: ${Ke}` + (Ke === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), N.onChange((e) => {
934
- A.runFork(Ue.publish(e.table));
933
+ let { service: Ve, invalidationBus: He, snapshotCache: We, cache: F, backend: Ge, dispose: I } = await xe({ env: process.env });
934
+ $.info(`cache backend resolved: ${Ge}` + (Ge === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), P.onChange((e) => {
935
+ j.runFork(He.publish(e.table));
935
936
  }), g?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = g.kv), g?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = g.kvRedisUrl), g?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = g.kvKeyPrefix);
936
- let { kv: qe, service: Je } = await at({ store: N });
937
+ let { kv: Ke, service: qe } = await it({ store: P });
937
938
  p.mark("store");
938
- let $e = We({
939
- store: N,
940
- sink: E.sink,
939
+ let Qe = Ue({
940
+ store: P,
941
+ sink: D.sink,
941
942
  log: $
942
- }), et = pe({
943
- store: N,
943
+ }), $e = pe({
944
+ store: P,
944
945
  dialect: _
945
- }), L = g?.plugins ?? [], st = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, ct, lt;
946
- _ !== "memory" && (ct = Re.make((await n(_)).makeSqlLayer(T())), lt = await ct.runPromise(kt.SqlClient));
947
- let ut = ot({
946
+ }), R = g?.plugins ?? [], ot = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, st, ct;
947
+ _ !== "memory" && (st = Le.make((await n(_)).makeSqlLayer(T())), ct = await st.runPromise(At.SqlClient));
948
+ let lt = at({
948
949
  coordinator: [
949
950
  "postgres",
950
951
  "mariadb",
951
952
  "mysql",
952
953
  "mssql"
953
- ].includes(_) ? tt(N, st, $) : wt,
954
- replicaId: st,
954
+ ].includes(_) ? et(P, ot, $) : Tt,
955
+ replicaId: ot,
955
956
  log: $
956
- }), dt = [], ft = {
957
- ...lt ? { sql: lt } : {},
957
+ }), ut = [], dt = {
958
+ ...ct ? { sql: ct } : {},
958
959
  scheduleCoordinated: (e, t, n) => {
959
- let r = ut(e, t, n);
960
- return dt.push(r), r;
960
+ let r = lt(e, t, n);
961
+ return ut.push(r), r;
961
962
  }
962
963
  };
963
- for (let e of L) e.bindDataStore?.(N, ft);
964
- let pt = L.filter((e) => typeof e.onChangeEvent == "function");
965
- if (pt.length > 0) {
966
- let e = N.changeScope ?? "local";
967
- N.onChange((t) => {
964
+ for (let e of R) e.bindDataStore?.(P, dt);
965
+ let ft = R.filter((e) => typeof e.onChangeEvent == "function");
966
+ if (ft.length > 0) {
967
+ let e = P.changeScope ?? "local";
968
+ P.onChange((t) => {
968
969
  let n = y(t, e);
969
- for (let e of pt) A.runFork(e.onChangeEvent(n).pipe(A.catchAllCause((t) => A.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Le.pretty(t) })))));
970
+ for (let e of ft) j.runFork(e.onChangeEvent(n).pipe(j.catchAllCause((t) => j.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: Ie.pretty(t) })))));
970
971
  });
971
972
  }
972
- let ht = me({
973
- plugins: L,
973
+ let mt = me({
974
+ plugins: R,
974
975
  appName: g?.name ?? "voltro-api",
975
976
  appType: "api",
976
977
  voltroVersion: process.env.npm_package_version ?? "0.0.0",
977
978
  log: $
978
979
  });
979
- L.length && await ht.activate(), p.mark("plugins");
980
- let gt = await ht.gatherObservability(), _t = await _e(N, g, _, {
980
+ R.length && await mt.activate(), p.mark("plugins");
981
+ let ht = await mt.gatherObservability(), gt = await _e(P, g, _, {
981
982
  info: (e, t) => process.stdout.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
982
983
  warn: (e, t) => process.stderr.write(`[broadcast] ${e} ${t ? JSON.stringify(t) : ""}\n`),
983
984
  debug: () => {}
984
- }), R = g?.apiKeys, yt = (typeof R == "object" ? R.prefix : void 0) ?? "voltro_", z = R ? Ye(N) : void 0, B = z ? rt({ flush: it(z) }) : void 0;
985
- B && vt(() => B.shutdown());
986
- let St = z ? nt(z, {
987
- prefix: yt,
988
- ...B ? { usage: B } : {}
989
- }) : void 0, Ct = St ? [Qe(St, { prefix: yt })] : [], Tt = Ce([...g?.auth?.strategies ?? [], ...Ct], $t(g?.plugins ?? []), g?.auth?.anonymousTenantRequired ?? !1, g?.auth?.resolveScopes, () => Be), Et = [...g?.restRoutes ?? [], ...St ? Ve(St, (typeof R == "object" ? R.managementPath : void 0) ?? "/v1/api-keys") : []], V = g?.idempotency, Ot = V ? {
990
- store: Xe(N),
991
- header: (typeof V == "object" ? V.header : void 0) ?? "Idempotency-Key",
992
- ttlMs: (typeof V == "object" ? V.ttlMs : void 0) ?? 864e5
993
- } : void 0, At = Et.length > 0 ? tn(Et, {
994
- store: N,
995
- resolveSubject: (e) => Tt({
985
+ }), z = g?.apiKeys, vt = (typeof z == "object" ? z.prefix : void 0) ?? "voltro_", yt = z ? Je(P) : void 0, xt = yt ? nt({ flush: rt(yt) }) : void 0;
986
+ xt && _t(() => xt.shutdown());
987
+ let Ct = yt ? tt(yt, {
988
+ prefix: vt,
989
+ ...xt ? { usage: xt } : {}
990
+ }) : void 0, wt = Ct ? [Ze(Ct, { prefix: vt })] : [], Et = Ce([...g?.auth?.strategies ?? [], ...wt], $t(g?.plugins ?? []), g?.auth?.anonymousTenantRequired ?? !1, g?.auth?.resolveScopes, () => ze), Dt = [...g?.restRoutes ?? [], ...Ct ? Be(Ct, (typeof z == "object" ? z.managementPath : void 0) ?? "/v1/api-keys") : []], B = g?.idempotency, kt = B ? {
991
+ store: Ye(P),
992
+ header: (typeof B == "object" ? B.header : void 0) ?? "Idempotency-Key",
993
+ ttlMs: (typeof B == "object" ? B.ttlMs : void 0) ?? 864e5
994
+ } : void 0, jt = Dt.length > 0 ? tn(Dt, {
995
+ store: P,
996
+ resolveSubject: (e) => Et({
996
997
  headers: e,
997
998
  clientId: -1
998
999
  }),
999
- ...Ot ? { idempotency: Ot } : {}
1000
- }) : [], H = L.map((e) => e.services).filter((e) => e !== void 0), Mt = j.mergeAll(De({
1001
- analyticsLayer: E.layer,
1002
- cacheService: He,
1003
- kvService: Je,
1004
- pluginServices: H,
1000
+ ...kt ? { idempotency: kt } : {}
1001
+ }) : [], V = R.map((e) => e.services).filter((e) => e !== void 0), Nt = M.mergeAll(Ee({
1002
+ analyticsLayer: D.layer,
1003
+ cacheService: Ve,
1004
+ kvService: qe,
1005
+ pluginServices: V,
1005
1006
  userLayers: g?.layers ?? []
1006
- }), ge(g?.http ?? {})), U = g?.scheduling ?? {}, Nt = U.trigger ?? "self", Pt = /* @__PURE__ */ new Set([
1007
+ }), ge(g?.http ?? {})), H = g?.scheduling ?? {}, Pt = H.trigger ?? "self", Ft = /* @__PURE__ */ new Set([
1007
1008
  "postgres",
1008
1009
  "mysql",
1009
1010
  "mariadb",
1010
1011
  "mssql"
1011
- ]), Ft = U.coordination ?? (Pt.has(_) ? "advisoryLock" : "single"), W = Ft === "cluster" && Pt.has(_), It = W ? "cluster" : Ft === "advisoryLock" && Pt.has(_) ? "advisoryLock" : "single";
1012
- Ft === "cluster" && !W && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), Ft === "advisoryLock" && !Pt.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
1013
- let G, K = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (w?.outgoing.length ?? 0) > 0 || W, Lt;
1014
- if (K) {
1012
+ ]), It = H.coordination ?? (Ft.has(_) ? "advisoryLock" : "single"), U = It === "cluster" && Ft.has(_), Lt = U ? "cluster" : It === "advisoryLock" && Ft.has(_) ? "advisoryLock" : "single";
1013
+ It === "cluster" && !U && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), It === "advisoryLock" && !Ft.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
1014
+ let W, G = S.workflows.length > 0 || S.workflowWorkers.length > 0 || S.eventTriggers.length > 0 || (w?.outgoing.length ?? 0) > 0 || U, Rt;
1015
+ if (G) {
1015
1016
  if (_ === "mssql") {
1016
1017
  let e = await fe(process.cwd());
1017
1018
  e && $.warn(e);
1018
1019
  }
1019
- let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: r, resolveRunnerStorage: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = W ? S.schedules.filter((e) => (e.trigger ?? Nt) === "self").map((e) => t({
1020
+ let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: r, resolveRunnerStorage: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = U ? S.schedules.filter((e) => (e.trigger ?? Pt) === "self").map((e) => t({
1020
1021
  name: e.name,
1021
- cron: I(e),
1022
+ cron: L(e),
1022
1023
  execute: async () => {
1023
- await G?.fireFromCluster(e.name);
1024
+ await W?.fireFromCluster(e.name);
1024
1025
  }
1025
1026
  })) : [];
1026
- Lt = _ === "memory" ? e.layerMemory : await (async () => {
1027
+ Rt = _ === "memory" ? e.layerMemory : await (async () => {
1027
1028
  let e = await n(_), t = i({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
1028
1029
  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)" : "") : "")), r({
1029
1030
  sqlClientLayer: e.makeSqlLayer(T()),
@@ -1034,13 +1035,13 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1034
1035
  });
1035
1036
  })();
1036
1037
  }
1037
- let Rt = Me(L, t()), zt = b.filter((e) => /\.subscribe\.tsx?$/.test(e)), q = zt.length > 0 ? await ae(zt, $) : [], Bt = b.filter((e) => /\.reaction\.tsx?$/.test(e)), Vt = Bt.length > 0 ? await se(Bt, $) : [], J = b.filter((e) => u.test(e)), Ht = J.length > 0 ? await Ne(J, $) : [], Ut = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), Y = Ut.length > 0 ? await v(Ut, $) : [], X = ye();
1038
+ let zt = je(R, t()), Bt = b.filter((e) => /\.subscribe\.tsx?$/.test(e)), K = Bt.length > 0 ? await ae(Bt, $) : [], Vt = b.filter((e) => /\.reaction\.tsx?$/.test(e)), Ht = Vt.length > 0 ? await se(Vt, $) : [], q = b.filter((e) => u.test(e)), Ut = q.length > 0 ? await Me(q, $) : [], J = b.filter((e) => /\.aggregate\.tsx?$/.test(e)), Y = J.length > 0 ? await v(J, $) : [], X = ye();
1038
1039
  if (Y.length > 0 && _ !== "memory") try {
1039
1040
  X = f((await n(_)).makeSqlLayer(T()));
1040
1041
  } catch (e) {
1041
1042
  $.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
1042
1043
  }
1043
- let Wt = _ === "memory" ? wt : tt(N, `aggregate@${process.pid}`, $), Z = [], Gt = [], Kt = b.filter((e) => l.test(e));
1044
+ let Wt = _ === "memory" ? Tt : et(P, `aggregate@${process.pid}`, $), Z = [], Gt = [], Kt = b.filter((e) => l.test(e));
1044
1045
  if (Kt.length > 0) {
1045
1046
  let e = $.child("agent"), t = b.filter((e) => a.test(e));
1046
1047
  t.length > 0 && await o(t, e);
@@ -1064,59 +1065,59 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1064
1065
  workflowWorkers: S.workflowWorkers,
1065
1066
  eventTriggers: S.eventTriggers,
1066
1067
  schedules: S.schedules,
1067
- subscribers: q,
1068
- outboxHandlers: Ht,
1068
+ subscribers: K,
1069
+ outboxHandlers: Ut,
1069
1070
  connections: S.connections,
1070
- reactions: Vt,
1071
+ reactions: Ht,
1071
1072
  aggregates: Y,
1072
1073
  ...w === void 0 ? {} : { webhooks: w }
1073
1074
  },
1074
1075
  log: $,
1075
- analytics: E.sink,
1076
+ analytics: D.sink,
1076
1077
  aggregateStorage: X,
1077
1078
  aggregateCoordinator: Wt,
1078
- store: N,
1079
- kv: qe,
1080
- cache: P,
1081
- snapshotCache: Ge,
1082
- schemaRegistry: M,
1079
+ store: P,
1080
+ kv: Ke,
1081
+ cache: F,
1082
+ snapshotCache: We,
1083
+ schemaRegistry: N,
1083
1084
  tenantScopedTables: S.tenantScopedTables,
1084
1085
  softDeleteScopedTables: S.softDeleteScopedTables,
1085
- dataTransferSnapshot: Xt(D),
1086
+ dataTransferSnapshot: Xt(O),
1086
1087
  dataTransferDialect: _,
1087
1088
  tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? g?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
1088
- resolveSubject: (e, t) => Tt({
1089
+ resolveSubject: (e, t) => Et({
1089
1090
  headers: e,
1090
1091
  clientId: t
1091
1092
  }),
1092
- httpRoutes: [...L.flatMap((e) => e.httpRoutes ?? []), ...At],
1093
- getStore: () => Be,
1094
- ...Mt ? { baseLayer: Mt } : {},
1095
- ...Lt === void 0 ? {} : { workflowEngineLayer: Lt },
1096
- scheduleDefaultTrigger: Nt,
1097
- scheduleCoordination: It,
1098
- scheduleArmSelf: !W,
1093
+ httpRoutes: [...R.flatMap((e) => e.httpRoutes ?? []), ...jt],
1094
+ getStore: () => ze,
1095
+ ...Nt ? { baseLayer: Nt } : {},
1096
+ ...Rt === void 0 ? {} : { workflowEngineLayer: Rt },
1097
+ scheduleDefaultTrigger: Pt,
1098
+ scheduleCoordination: Lt,
1099
+ scheduleArmSelf: !U,
1099
1100
  dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : g?.dormancy ?? "always-on",
1100
1101
  scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
1101
- ...Rt === void 0 ? {} : { scheduleFireInterceptor: Rt },
1102
+ ...zt === void 0 ? {} : { scheduleFireInterceptor: zt },
1102
1103
  onSchedulerReady: (e) => {
1103
- G = e;
1104
+ W = e;
1104
1105
  },
1105
1106
  inspectRoute: { handle: (e, t, n, r) => d(e, {
1106
1107
  kind: "api",
1107
1108
  meta: {
1108
1109
  name: g?.name ?? "voltro-api",
1109
- voltroVersion: Ee,
1110
+ voltroVersion: Te,
1110
1111
  port: ne,
1111
1112
  mode: "start",
1112
1113
  store: _,
1113
1114
  cdc: ce ? "on" : "off"
1114
1115
  },
1115
1116
  rpc: be(S, m),
1116
- workflows: ke(S, m),
1117
+ workflows: Oe(S, m),
1117
1118
  inspectFireSchedule: async ({ name: e, trigger: t }) => {
1118
- if (!G) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
1119
- return { runId: await G.fireNow(e, t) ?? null };
1119
+ if (!W) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
1120
+ return { runId: await W.fireNow(e, t) ?? null };
1120
1121
  }
1121
1122
  }, t, {
1122
1123
  method: n,
@@ -1126,7 +1127,7 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1126
1127
  contentType: "application/json",
1127
1128
  body: JSON.stringify({ error: "not an inspect route" })
1128
1129
  } },
1129
- observability: gt,
1130
+ observability: ht,
1130
1131
  port: ne,
1131
1132
  ...g?.transport?.wsPath ? { path: g.transport.wsPath } : {}
1132
1133
  });
@@ -1146,12 +1147,12 @@ var hn = "VoltroBootRefusal", gn = (e) => {
1146
1147
  workflows: S.workflows.length,
1147
1148
  workflowWorkers: S.workflowWorkers.length,
1148
1149
  schedules: S.schedules.length,
1149
- scheduleCoordination: It
1150
- }), p.finish($), vt(async () => {
1151
- for (let e of dt) e.stop();
1152
- $e.detach(), et.stop(), F(), ct?.dispose();
1150
+ scheduleCoordination: Lt
1151
+ }), p.finish($), _t(async () => {
1152
+ for (let e of ut) e.stop();
1153
+ Qe.detach(), $e.stop(), I(), st?.dispose();
1153
1154
  try {
1154
- await ht.deactivate(), await _t?.close(), await E.dispose(), await Jt.close(), await N.close?.();
1155
+ await mt.deactivate(), await gt?.close(), await D.dispose(), await Jt.close(), await P.close?.();
1155
1156
  } catch (e) {
1156
1157
  console.error("serve: shutdown step failed, exiting anyway:", e);
1157
1158
  }