@voltro/workflow 0.62.3 → 0.64.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.
@@ -1,10 +1,10 @@
1
- import { E as e, F as t, I as n, M as r, N as i, P as a, T as o, w as s } from "./primitives-B-HlFCap.js";
1
+ import { E as e, F as t, I as n, M as r, N as i, P as a, T as o, w as s } from "./primitives-CqHxfASq.js";
2
2
  import { Activity as c, DurableClock as l, DurableDeferred as u, Workflow as d, WorkflowEngine as f } from "@effect/workflow";
3
3
  import { Cause as p, Effect as m, Either as h, Exit as g, FiberRef as _, Layer as v, Schema as y } from "effect";
4
- import { and as b, boolean as ee, eq as x, generateId as S, gt as C, gte as te, id as w, inSet as ne, integer as T, isNull as E, json as D, lt as O, or as re, queryFor as k, reference as A, registerRetention as ie, retentionTtlMsFromEnv as ae, table as j, text as M, timestamp as N } from "@voltro/database";
5
- import { createHash as oe } from "node:crypto";
6
- import { WorkflowInstance as se } from "@effect/workflow/WorkflowEngine";
7
- import { publishServerError as ce } from "@voltro/protocol";
4
+ import { publishServerError as ee } from "@voltro/protocol";
5
+ import { and as b, boolean as te, eq as x, generateId as S, gt as C, gte as ne, id as w, inSet as re, integer as T, isNull as E, json as D, lt as O, or as ie, queryFor as k, reference as A, registerRetention as ae, retentionTtlMsFromEnv as oe, table as j, text as M, timestamp as N } from "@voltro/database";
6
+ import { createHash as se } from "node:crypto";
7
+ import { WorkflowInstance as ce } from "@effect/workflow/WorkflowEngine";
8
8
  //#region src/inMemoryLayer.ts
9
9
  var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
10
10
  id: w({ prefix: "wfrun" }),
@@ -27,7 +27,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
27
27
  source: M().nullable(),
28
28
  errorTag: M().nullable(),
29
29
  errorMessage: M().nullable(),
30
- cancelled: ee().default(!1),
30
+ cancelled: te().default(!1),
31
31
  discardedAt: N().nullable(),
32
32
  discardedBy: M().nullable(),
33
33
  startedAt: N().default("now"),
@@ -271,7 +271,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
271
271
  }, Ce = (e, t, n) => {
272
272
  let r = e.timeouts?.finishMs;
273
273
  return r === void 0 || t.terminal ? !1 : n - t.startedAt >= r;
274
- }, we = (e, t) => e.priority === t.priority ? e.firstSeenAt === t.firstSeenAt ? e.id < t.id ? -1 : +(e.id > t.id) : e.firstSeenAt - t.firstSeenAt : t.priority - e.priority, L = "_voltro_workflow_pending", R = "_voltro_workflow_admissions", Te = "_voltro_workflow_pauses", Ee = 864e5, De = (e, t, n) => `wfp_${oe("sha256").update(`${e}\u0000${t}\u0000${n}`).digest("hex").slice(0, 40)}`, z = (e) => {
274
+ }, we = (e, t) => e.priority === t.priority ? e.firstSeenAt === t.firstSeenAt ? e.id < t.id ? -1 : +(e.id > t.id) : e.firstSeenAt - t.firstSeenAt : t.priority - e.priority, L = "_voltro_workflow_pending", R = "_voltro_workflow_admissions", Te = "_voltro_workflow_pauses", Ee = 864e5, De = (e, t, n) => `wfp_${se("sha256").update(`${e}\u0000${t}\u0000${n}`).digest("hex").slice(0, 40)}`, z = (e) => {
275
275
  if (e instanceof Date) return e.getTime();
276
276
  if (typeof e == "number") return e;
277
277
  let t = Date.parse(String(e));
@@ -530,18 +530,23 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
530
530
  });
531
531
  } catch {}
532
532
  return e.delete(L, t);
533
+ }, He = (e, t = Math.random) => {
534
+ let n = Math.min(1e3 * 2 ** Math.max(0, e - 1), 3e5);
535
+ return Math.round(n / 2 + t() * (n / 2));
533
536
  }, W = async (e, t, n, r) => {
537
+ let i = t.attempts + 1;
534
538
  await e.update(L, t.id, {
535
- attempts: t.attempts + 1,
539
+ attempts: i,
536
540
  lastError: n.slice(0, 500),
541
+ dueAt: new Date(r + He(i)),
537
542
  updatedAt: new Date(r)
538
543
  });
539
- }, He = async (e, t, n, r) => await e.update(L, t.id, {
544
+ }, Ue = async (e, t, n, r) => await e.update(L, t.id, {
540
545
  attempts: t.attempts + 1,
541
546
  lastError: n.slice(0, 500),
542
547
  deadLetteredAt: new Date(r),
543
548
  updatedAt: new Date(r)
544
- }) !== null, Ue = async (e, t, n) => {
549
+ }) !== null, We = async (e, t, n) => {
545
550
  let r = (await e.query(V(L, x("id", t), [], 1)))[0];
546
551
  return r === void 0 || r.deadLetteredAt === null || r.deadLetteredAt === void 0 ? !1 : await e.update(L, t, {
547
552
  attempts: 0,
@@ -550,7 +555,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
550
555
  dueAt: new Date(n),
551
556
  updatedAt: new Date(n)
552
557
  }) !== null;
553
- }, We = async (e) => {
558
+ }, Ge = async (e) => {
554
559
  let t = await Me({
555
560
  store: e.store,
556
561
  control: e.control,
@@ -565,14 +570,14 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
565
570
  now: e.now,
566
571
  reconsidering: e.reconsidering
567
572
  });
568
- }, Ge = async (e, t, n = 1e3) => {
573
+ }, Ke = async (e, t, n = 1e3) => {
569
574
  let r = await e.query(V(R, void 0, [{
570
575
  column: "admittedAt",
571
576
  direction: "asc"
572
577
  }], n)), i = t.getTime(), a = r.filter((e) => e.releasedAt != null && z(e.admittedAt) < i);
573
578
  return await Promise.all(a.map((t) => e.delete(R, String(t.id)))), a.length;
574
- }, Ke = async (e) => {
575
- let { store: t, control: n, now: r } = e, i = F(n, e.payload), a = await We({
579
+ }, qe = async (e) => {
580
+ let { store: t, control: n, now: r } = e, i = F(n, e.payload), a = await Ge({
576
581
  store: t,
577
582
  control: n,
578
583
  keys: i,
@@ -633,7 +638,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
633
638
  };
634
639
  let o = e.payload, s = [], c = 1;
635
640
  if (n.batch !== void 0 && i.batchKey !== void 0) {
636
- let r = await qe(t, n.workflowName, i.batchKey, n.batch.maxSize);
641
+ let r = await Je(t, n.workflowName, i.batchKey, n.batch.maxSize);
637
642
  o = { items: [...r.map((e) => e.payload), e.payload] }, s = r.map((e) => e.id), c = r.length + 1;
638
643
  }
639
644
  return {
@@ -661,7 +666,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
661
666
  runId: a.evict.runId
662
667
  } }
663
668
  };
664
- }, qe = async (e, t, n, r) => (await e.query({
669
+ }, Je = async (e, t, n, r) => (await e.query({
665
670
  table: "_voltro_workflow_pending",
666
671
  predicate: b(x("workflowName", t), x("controlKey", n), x("mode", "batch")),
667
672
  order: [{
@@ -674,22 +679,22 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
674
679
  })).map((e) => ({
675
680
  id: String(e.id),
676
681
  payload: e.payload
677
- })), Je = async (e, t, n, r) => {
682
+ })), Ye = async (e, t, n, r) => {
678
683
  await e.update("_voltro_workflow_admissions", t, {
679
684
  executionId: n,
680
685
  runId: r
681
686
  });
682
- }, Ye = j("_voltro_workflow_watermarks", {
687
+ }, Xe = j("_voltro_workflow_watermarks", {
683
688
  id: w({ prefix: "wfwm" }),
684
689
  positionAt: N(),
685
690
  updatedAt: N().default("now")
686
- }), Xe = (e) => {
691
+ }), Ze = (e) => {
687
692
  let t = e instanceof Error ? e.message : String(e);
688
693
  return t.length > 400 ? `${t.slice(0, 400)}…` : t;
689
- }, Ze = (e) => {
694
+ }, Qe = (e) => {
690
695
  let t = [], n = [], r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = e.payloadSchema === void 0 ? (e) => h.right(e) : (t) => {
691
696
  let n = y.decodeUnknownEither(e.payloadSchema)(t);
692
- return h.isRight(n) ? h.right(n.right) : h.left(Xe(n.left));
697
+ return h.isRight(n) ? h.right(n.right) : h.left(Ze(n.left));
693
698
  }, s = e.runs.map((e) => ({
694
699
  run: e,
695
700
  decoded: o(e.payload)
@@ -706,7 +711,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
706
711
  workflowName: e.workflowName,
707
712
  event: o.event,
708
713
  subject: l.id,
709
- detail: Xe(u.left)
714
+ detail: Ze(u.left)
710
715
  });
711
716
  continue;
712
717
  }
@@ -726,7 +731,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
726
731
  workflowName: e.workflowName,
727
732
  event: o.event,
728
733
  subject: n,
729
- detail: Xe(t)
734
+ detail: Ze(t)
730
735
  }), !1;
731
736
  }
732
737
  };
@@ -749,26 +754,26 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
749
754
  discards: n,
750
755
  problems: r
751
756
  };
752
- }, Qe = (e) => {
757
+ }, $e = (e) => {
753
758
  let t;
754
759
  for (let n of e) (t === void 0 || n.occurredAt.getTime() > t.getTime()) && (t = n.occurredAt);
755
760
  return t;
756
- }, $e = "_voltro_workflow_watermarks", et = "_voltro_workflow_events", G = "cancelOn", tt = 36e5, nt = 500, K = (e) => {
761
+ }, et = "_voltro_workflow_watermarks", tt = "_voltro_workflow_events", G = "cancelOn", nt = 36e5, rt = 500, K = (e) => {
757
762
  if (e instanceof Date) return e;
758
763
  if (typeof e == "number") return new Date(e);
759
764
  if (typeof e == "string") {
760
765
  let t = new Date(e);
761
766
  if (!Number.isNaN(t.getTime())) return t;
762
767
  }
763
- }, q = (e) => e instanceof Error ? e.message : String(e), rt = async (e, t) => K((await e.query({
764
- table: $e,
768
+ }, q = (e) => e instanceof Error ? e.message : String(e), it = async (e, t) => K((await e.query({
769
+ table: et,
765
770
  predicate: x("id", t),
766
771
  order: [],
767
772
  take: 1,
768
773
  skip: void 0,
769
774
  projection: void 0
770
- }))[0]?.positionAt), it = async (e, t, n) => {
771
- await e.upsert($e, {
775
+ }))[0]?.positionAt), at = async (e, t, n) => {
776
+ await e.upsert(et, {
772
777
  id: t,
773
778
  positionAt: n,
774
779
  updatedAt: /* @__PURE__ */ new Date()
@@ -785,7 +790,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
785
790
  };
786
791
  }
787
792
  });
788
- }, at = async (e, t, n) => {
793
+ }, ot = async (e, t, n) => {
789
794
  let r = async (r) => e.query({
790
795
  table: "_voltro_workflow_runs",
791
796
  predicate: b(x("tag", t), x("status", r)),
@@ -806,7 +811,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
806
811
  startedAt: n
807
812
  }];
808
813
  });
809
- }, ot = async (e, t, n) => (await e.query({
814
+ }, st = async (e, t, n) => (await e.query({
810
815
  table: "_voltro_workflow_pending",
811
816
  predicate: x("workflowName", t),
812
817
  order: [{
@@ -823,7 +828,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
823
828
  payload: t.payload,
824
829
  firstSeenAt: n
825
830
  }];
826
- }), st = async (e, t) => {
831
+ }), ct = async (e, t) => {
827
832
  let n = t.workflows.filter((e) => e.entries.length > 0);
828
833
  if (n.length === 0) return {
829
834
  examined: !1,
@@ -838,9 +843,9 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
838
843
  };
839
844
  let r = e.now?.() ?? Date.now(), i = t.batch ?? 500, a = t.coldLookbackMs ?? 36e5, o = /* @__PURE__ */ new Set();
840
845
  for (let e of n) for (let t of e.entries) o.add(t.event);
841
- let s = await rt(e.store, G), c = s ?? new Date(r - a), l = await e.store.query({
842
- table: et,
843
- predicate: te("occurredAt", c),
846
+ let s = await it(e.store, G), c = s ?? new Date(r - a), l = await e.store.query({
847
+ table: tt,
848
+ predicate: ne("occurredAt", c),
844
849
  order: [{
845
850
  column: "occurredAt",
846
851
  direction: "asc"
@@ -864,7 +869,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
864
869
  if (n.length === 0) continue;
865
870
  let r = [], i = [];
866
871
  try {
867
- r = await at(e.store, t.workflowName, _), i = await ot(e.store, t.workflowName, _), (r.length >= _ || i.length >= _) && (h = !0);
872
+ r = await ot(e.store, t.workflowName, _), i = await st(e.store, t.workflowName, _), (r.length >= _ || i.length >= _) && (h = !0);
868
873
  } catch (e) {
869
874
  f.push({
870
875
  subject: t.workflowName,
@@ -872,7 +877,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
872
877
  }), g = !0;
873
878
  continue;
874
879
  }
875
- let a = Ze({
880
+ let a = Qe({
876
881
  workflowName: t.workflowName,
877
882
  entries: t.entries,
878
883
  payloadSchema: t.payloadSchema,
@@ -914,10 +919,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
914
919
  });
915
920
  }
916
921
  }
917
- let v = Qe(u), y = s;
922
+ let v = $e(u), y = s;
918
923
  if (g) e.log?.warn("workflow.cancelOn: holding the watermark — some workflows could not be evaluated", { failures: f.length });
919
924
  else if (v !== void 0) try {
920
- await it(e.store, G, v), y = v;
925
+ await at(e.store, G, v), y = v;
921
926
  } catch (e) {
922
927
  f.push({
923
928
  subject: G,
@@ -925,7 +930,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
925
930
  });
926
931
  }
927
932
  else if (s === void 0) try {
928
- await it(e.store, G, c), y = c;
933
+ await at(e.store, G, c), y = c;
929
934
  } catch (e) {
930
935
  f.push({
931
936
  subject: G,
@@ -946,14 +951,14 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
946
951
  failures: f,
947
952
  watermark: y
948
953
  };
949
- }, ct = 18e5, lt = 200, ut = 20, J = (e) => {
954
+ }, lt = 18e5, ut = 200, dt = 20, J = (e) => {
950
955
  if (e instanceof Date) return e;
951
956
  if (typeof e == "number") return new Date(e);
952
957
  if (typeof e == "string") {
953
958
  let t = new Date(e);
954
959
  if (!Number.isNaN(t.getTime())) return t;
955
960
  }
956
- }, dt = (e) => e instanceof Error ? e.message : String(e), ft = async (e, t, n) => (await e.query({
961
+ }, ft = (e) => e instanceof Error ? e.message : String(e), pt = async (e, t, n) => (await e.query({
957
962
  table: "_voltro_workflow_run_events",
958
963
  predicate: x("runId", t),
959
964
  order: [{
@@ -970,7 +975,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
970
975
  occurredAt: n,
971
976
  payload: t.payload
972
977
  }];
973
- }), pt = async (e, t) => {
978
+ }), mt = async (e, t) => {
974
979
  let n = (await e.query({
975
980
  table: "_voltro_workflow_run_steps",
976
981
  predicate: x("runId", t),
@@ -985,7 +990,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
985
990
  if (n === void 0) return;
986
991
  let r = J(n.startedAt), i = J(n.completedAt);
987
992
  return r === void 0 ? i : i === void 0 ? r : i.getTime() > r.getTime() ? i : r;
988
- }, mt = (e, t) => {
993
+ }, ht = (e, t) => {
989
994
  for (let n of e) {
990
995
  if (n.eventType === "timer-fired") return !1;
991
996
  if (n.eventType !== "timer-set") continue;
@@ -993,19 +998,19 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
993
998
  return e !== void 0 && e.getTime() > t;
994
999
  }
995
1000
  return !1;
996
- }, ht = (e, t) => {
1001
+ }, gt = (e, t) => {
997
1002
  if (e !== "suspended") return "no-progress";
998
1003
  for (let e of t) {
999
1004
  if (e.eventType === "signal-received" || e.eventType === "signal-sent") return "suspended";
1000
1005
  if (e.eventType === "signal-awaited") return "awaiting-signal";
1001
1006
  }
1002
1007
  return "suspended";
1003
- }, gt = async (e, t = {}) => {
1008
+ }, _t = async (e, t = {}) => {
1004
1009
  let n = e.now?.() ?? Date.now(), r = t.stallAfterMs ?? 18e5, i = t.runPage ?? 200, a = t.eventLookback ?? 20, o = new Date(n - r), s = [], c = [], l = 0, u = 0, d;
1005
1010
  try {
1006
1011
  d = await e.store.query({
1007
1012
  table: "_voltro_workflow_runs",
1008
- predicate: b(ne("status", ["running", "suspended"]), O("startedAt", o)),
1013
+ predicate: b(re("status", ["running", "suspended"]), O("startedAt", o)),
1009
1014
  order: [{
1010
1015
  column: "startedAt",
1011
1016
  direction: "asc"
@@ -1023,7 +1028,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1023
1028
  sawFullRunPage: !1,
1024
1029
  failures: [{
1025
1030
  subject: "_voltro_workflow_runs",
1026
- detail: dt(e)
1031
+ detail: ft(e)
1027
1032
  }]
1028
1033
  };
1029
1034
  }
@@ -1032,15 +1037,15 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1032
1037
  if (typeof i.id != "string" || typeof i.tag != "string" || typeof i.executionId != "string" || typeof i.status != "string" || o === void 0) continue;
1033
1038
  let d, f;
1034
1039
  try {
1035
- d = await ft(e.store, i.id, a), f = await pt(e.store, i.id);
1040
+ d = await pt(e.store, i.id, a), f = await mt(e.store, i.id);
1036
1041
  } catch (e) {
1037
1042
  s.push({
1038
1043
  subject: i.id,
1039
- detail: dt(e)
1044
+ detail: ft(e)
1040
1045
  });
1041
1046
  continue;
1042
1047
  }
1043
- if (mt(d, n)) {
1048
+ if (ht(d, n)) {
1044
1049
  u += 1;
1045
1050
  continue;
1046
1051
  }
@@ -1059,7 +1064,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1059
1064
  status: i.status,
1060
1065
  lastProgressAt: m,
1061
1066
  idleMs: h,
1062
- reason: ht(i.status, d)
1067
+ reason: gt(i.status, d)
1063
1068
  };
1064
1069
  if (c.push(g), e.log?.warn("workflow.staleness: run has made no progress", {
1065
1070
  workflow: g.tag,
@@ -1082,7 +1087,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1082
1087
  } catch (e) {
1083
1088
  s.push({
1084
1089
  subject: g.runId,
1085
- detail: dt(e)
1090
+ detail: ft(e)
1086
1091
  });
1087
1092
  }
1088
1093
  if (e.onStalled !== void 0) try {
@@ -1090,7 +1095,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1090
1095
  } catch (e) {
1091
1096
  s.push({
1092
1097
  subject: `${g.runId}:onStalled`,
1093
- detail: dt(e)
1098
+ detail: ft(e)
1094
1099
  });
1095
1100
  }
1096
1101
  }
@@ -1102,7 +1107,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1102
1107
  sawFullRunPage: d.length >= i,
1103
1108
  failures: s
1104
1109
  };
1105
- }, _t = {
1110
+ }, vt = {
1106
1111
  scanned: 0,
1107
1112
  admitted: 0,
1108
1113
  deferred: 0,
@@ -1114,14 +1119,14 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1114
1119
  deadLettered: 0,
1115
1120
  timedOut: 0,
1116
1121
  examined: !1
1117
- }, vt = 200, yt = async (e, t = {}) => {
1122
+ }, yt = 200, bt = async (e, t = {}) => {
1118
1123
  let n = e.now ?? (() => Date.now()), r = e.log, i = t.batchSize ?? 200, a, o, s;
1119
1124
  try {
1120
1125
  a = await ke(e.store);
1121
1126
  let t = await ze(e.store, n(), i);
1122
1127
  o = t.due, s = t.nextDueAt;
1123
1128
  } catch (e) {
1124
- return r?.warn?.("workflow flow control: could not read the admission queue", { cause: String(e) }), _t;
1129
+ return r?.warn?.("workflow flow control: could not read the admission queue", { cause: String(e) }), vt;
1125
1130
  }
1126
1131
  let c = {
1127
1132
  scanned: o.length,
@@ -1143,16 +1148,22 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1143
1148
  }
1144
1149
  u.push(e);
1145
1150
  }
1151
+ let d = e.deadLetterAfterAttempts === void 0 ? 50 : e.deadLetterAfterAttempts, f = (t, n, r) => {
1152
+ if (e.isPermanentStartError?.(n) === !0) return `pending ${r} was dead-lettered after a permanent start failure: ${String(n)}`;
1153
+ if (d !== !1 && t.attempts + 1 >= d) return `pending ${r} was dead-lettered after ${t.attempts + 1} failed attempts: ${String(n)}`;
1154
+ };
1146
1155
  for (let t of u) try {
1147
- await bt(e, t, a, c, n());
1156
+ await xt(e, t, a, c, n());
1148
1157
  } catch (i) {
1149
- if (c.failed++, e.isPermanentStartError?.(i) === !0) {
1150
- let a = n(), o = String(i), s = `pending intent was dead-lettered after a permanent start failure: ${o}`;
1158
+ c.failed++;
1159
+ let a = f(t, i, "intent");
1160
+ if (a !== void 0) {
1161
+ let o = n(), s = String(i);
1151
1162
  if (!await e.onAbandoned({
1152
1163
  workflowName: t.workflowName,
1153
1164
  payload: t.payload,
1154
1165
  callerContext: t.callerContext,
1155
- reason: s,
1166
+ reason: a,
1156
1167
  runId: null,
1157
1168
  executionId: null
1158
1169
  }).then(() => !0, (e) => (r?.warn?.("workflow flow control: permanent failure could not signal onFailure", {
@@ -1160,14 +1171,14 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1160
1171
  intent: t.id,
1161
1172
  cause: String(e)
1162
1173
  }), !1))) {
1163
- await W(e.store, t, o, a).catch(() => {});
1174
+ await W(e.store, t, s, o).catch(() => {});
1164
1175
  continue;
1165
1176
  }
1166
- if (await He(e.store, t, o, a).catch(() => !1)) {
1177
+ if (await Ue(e.store, t, s, o).catch(() => !1)) {
1167
1178
  c.deadLettered++, r?.warn?.("workflow flow control: intent dead-lettered", {
1168
1179
  workflow: t.workflowName,
1169
1180
  intent: t.id,
1170
- cause: o
1181
+ cause: s
1171
1182
  });
1172
1183
  continue;
1173
1184
  }
@@ -1179,17 +1190,17 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1179
1190
  }), await W(e.store, t, String(i), n()).catch(() => {});
1180
1191
  }
1181
1192
  for (let t of l.values()) try {
1182
- await St(e, t, a, c, n());
1193
+ await Ct(e, t, a, c, n());
1183
1194
  } catch (i) {
1184
1195
  c.failed++;
1185
- let a = t[0];
1186
- if (a !== void 0 && e.isPermanentStartError?.(i) === !0) {
1187
- let o = n(), s = String(i), l = `pending batch was dead-lettered after a permanent start failure: ${s}`;
1196
+ let a = t[0], o = a === void 0 ? void 0 : f(a, i, "batch");
1197
+ if (a !== void 0 && o !== void 0) {
1198
+ let s = n(), l = String(i);
1188
1199
  if (!await e.onAbandoned({
1189
1200
  workflowName: a.workflowName,
1190
1201
  payload: { items: t.map((e) => e.payload) },
1191
1202
  callerContext: a.callerContext,
1192
- reason: l,
1203
+ reason: o,
1193
1204
  runId: null,
1194
1205
  executionId: null
1195
1206
  }).then(() => !0, (e) => (r?.warn?.("workflow flow control: permanent batch failure could not signal onFailure", {
@@ -1198,15 +1209,15 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1198
1209
  size: t.length,
1199
1210
  cause: String(e)
1200
1211
  }), !1))) {
1201
- await Promise.all(t.map((t) => W(e.store, t, s, o).catch(() => {})));
1212
+ await Promise.all(t.map((t) => W(e.store, t, l, s).catch(() => {})));
1202
1213
  continue;
1203
1214
  }
1204
- if ((await Promise.all(t.map((t) => He(e.store, t, s, o).catch(() => !1)))).every(Boolean)) {
1215
+ if ((await Promise.all(t.map((t) => Ue(e.store, t, l, s).catch(() => !1)))).every(Boolean)) {
1205
1216
  c.deadLettered += t.length, r?.warn?.("workflow flow control: batch dead-lettered", {
1206
1217
  workflow: a.workflowName,
1207
1218
  intents: t.map((e) => e.id),
1208
1219
  size: t.length,
1209
- cause: s
1220
+ cause: l
1210
1221
  });
1211
1222
  continue;
1212
1223
  }
@@ -1217,13 +1228,13 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1217
1228
  cause: String(i)
1218
1229
  }), a !== void 0 && await W(e.store, a, String(i), n()).catch(() => {});
1219
1230
  }
1220
- return c.timedOut = await wt(e, n()).catch(() => 0), {
1231
+ return c.timedOut = await Tt(e, n()).catch(() => 0), {
1221
1232
  ...c,
1222
1233
  examined: !0,
1223
1234
  ...s === void 0 ? {} : { nextDueAt: s }
1224
1235
  };
1225
- }, bt = async (e, t, n, r, i) => {
1226
- if (t.mode === "delayed") return xt(e, t, n, r, i);
1236
+ }, xt = async (e, t, n, r, i) => {
1237
+ if (t.mode === "delayed") return St(e, t, n, r, i);
1227
1238
  let a = e.controls.get(t.workflowName);
1228
1239
  if (a === void 0) {
1229
1240
  await e.onAbandoned({
@@ -1257,10 +1268,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1257
1268
  return;
1258
1269
  }
1259
1270
  let o = F(a, t.payload);
1260
- await Ct(e, {
1271
+ await wt(e, {
1261
1272
  control: a,
1262
1273
  intent: t,
1263
- decision: await We({
1274
+ decision: await Ge({
1264
1275
  store: e.store,
1265
1276
  control: a,
1266
1277
  keys: o,
@@ -1273,7 +1284,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1273
1284
  now: i,
1274
1285
  items: void 0
1275
1286
  });
1276
- }, xt = async (e, t, n, r, i) => {
1287
+ }, St = async (e, t, n, r, i) => {
1277
1288
  if (e.registeredWorkflows !== void 0 && !e.registeredWorkflows.has(t.workflowName)) {
1278
1289
  await e.onAbandoned({
1279
1290
  workflowName: t.workflowName,
@@ -1283,7 +1294,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1283
1294
  }), await U(e.store, t.id), r.expired++;
1284
1295
  return;
1285
1296
  }
1286
- let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o = await Ke({
1297
+ let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o = await qe({
1287
1298
  store: e.store,
1288
1299
  control: a,
1289
1300
  payload: t.payload,
@@ -1317,8 +1328,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1317
1328
  }
1318
1329
  }).catch(() => !1), await Le(e.store, o.evict.executionId, i).catch(() => {}), r.evicted++);
1319
1330
  for (let t of o.consume) await U(e.store, t).catch(() => {});
1320
- o.ledgerId !== void 0 && await Je(e.store, o.ledgerId, s.executionId, s.runId ?? null).catch(() => {}), await U(e.store, t.id), r.admitted++;
1321
- }, St = async (e, t, n, r, i) => {
1331
+ o.ledgerId !== void 0 && await Ye(e.store, o.ledgerId, s.executionId, s.runId ?? null).catch(() => {}), await U(e.store, t.id), r.admitted++;
1332
+ }, Ct = async (e, t, n, r, i) => {
1322
1333
  let a = t[0];
1323
1334
  if (a === void 0) return;
1324
1335
  let o = e.controls.get(a.workflowName);
@@ -1340,10 +1351,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1340
1351
  return;
1341
1352
  }
1342
1353
  let l = F(o, c.payload);
1343
- await Ct(e, {
1354
+ await wt(e, {
1344
1355
  control: o,
1345
1356
  intent: c,
1346
- decision: await We({
1357
+ decision: await Ge({
1347
1358
  store: e.store,
1348
1359
  control: o,
1349
1360
  keys: l,
@@ -1356,7 +1367,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1356
1367
  now: i,
1357
1368
  items: s
1358
1369
  });
1359
- }, Ct = async (e, t) => {
1370
+ }, wt = async (e, t) => {
1360
1371
  let { control: n, intent: r, decision: i, keys: a, counters: o, now: s, items: c } = t;
1361
1372
  if (i.kind === "defer") {
1362
1373
  await Pe({
@@ -1449,7 +1460,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1449
1460
  });
1450
1461
  for (let t of c ?? [r]) await U(e.store, t.id);
1451
1462
  o.admitted++;
1452
- }, wt = async (e, t) => {
1463
+ }, Tt = async (e, t) => {
1453
1464
  if (e.listRunningRuns === void 0) return 0;
1454
1465
  let n = 0;
1455
1466
  for (let r of e.controls.values()) {
@@ -1481,33 +1492,33 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1481
1492
  }
1482
1493
  }
1483
1494
  return n;
1484
- }, Tt = 3e5, Et, Dt = (e) => {
1485
- Et = e !== void 0 && Number.isFinite(e) && e > 0 ? e : void 0;
1486
- }, Ot = () => {
1495
+ }, Et = 3e5, Dt, Ot = (e) => {
1496
+ Dt = e !== void 0 && Number.isFinite(e) && e > 0 ? e : void 0;
1497
+ }, kt = () => {
1487
1498
  let e = process.env.VOLTRO_WORKFLOW_SUSPEND_HINT_MS;
1488
1499
  if (e !== void 0) {
1489
1500
  let t = Number(e);
1490
1501
  if (Number.isFinite(t) && t > 0) return t;
1491
1502
  }
1492
- return Et ?? 3e5;
1493
- }, kt = /* @__PURE__ */ new Set(), At = () => {
1494
- kt.clear();
1495
- }, jt = (e) => {
1496
- let t = Ot();
1503
+ return Dt ?? 3e5;
1504
+ }, At = /* @__PURE__ */ new Set(), jt = () => {
1505
+ At.clear();
1506
+ }, Mt = (e) => {
1507
+ let t = kt();
1497
1508
  if (!(e.timeoutMs > t)) return !1;
1498
1509
  let n = `${e.workflowName ?? ""}\u0000${e.signalName}`;
1499
- if (kt.has(n)) return !1;
1500
- kt.add(n);
1510
+ if (At.has(n)) return !1;
1511
+ At.add(n);
1501
1512
  let r = e.workflowName === void 0 ? "" : ` in workflow '${e.workflowName}'`;
1502
1513
  return (e.warn ?? ((e) => console.warn(e)))(`awaitSignal('${e.signalName}')${r} declares a ${Math.round(e.timeoutMs / 1e3)}s timeout — a wait that long holds a worker fiber for its whole duration. For human-approval-length waits, awaitSignalSuspending (same call shape, from @voltro/workflow) SUSPENDS the run and frees the slot until the signal arrives. This is a hint, not a behaviour change; it is logged once per workflow. Threshold: workflows.suspendSignalHintMs in app.config.ts, or VOLTRO_WORKFLOW_SUSPEND_HINT_MS.`), !0;
1503
- }, Mt = async (e, t) => {
1514
+ }, Nt = async (e, t) => {
1504
1515
  if (e) try {
1505
1516
  await e.recordEvent(t);
1506
1517
  } catch {}
1507
- }, Nt = (e, t) => {
1518
+ }, Pt = (e, t) => {
1508
1519
  let r = m.gen(function* () {
1509
- let r = t.pollIntervalMs ?? 200, i = t.maxPollIntervalMs ?? 5e3, o = t.timeoutMs ?? 864e5, s = yield* m.serviceOption(se), c;
1510
- jt({
1520
+ let r = t.pollIntervalMs ?? 200, i = t.maxPollIntervalMs ?? 5e3, o = t.timeoutMs ?? 864e5, s = yield* m.serviceOption(ce), c;
1521
+ Mt({
1511
1522
  workflowName: s._tag === "Some" ? s.value.workflow.name : void 0,
1512
1523
  signalName: t.name,
1513
1524
  timeoutMs: o,
@@ -1518,7 +1529,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1518
1529
  let l = yield* a, u = yield* m.serviceOption(n), d = u._tag === "Some" ? u.value : void 0;
1519
1530
  if (l === void 0) return yield* m.die(/* @__PURE__ */ Error("awaitSignal: no active workflow run id in scope"));
1520
1531
  let f = l;
1521
- yield* m.promise(() => Mt(d, {
1532
+ yield* m.promise(() => Nt(d, {
1522
1533
  runId: f,
1523
1534
  eventType: "signal-awaited",
1524
1535
  payload: { signalName: t.name }
@@ -1543,7 +1554,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1543
1554
  })).find((e) => e.payload?.signalName === t.name);
1544
1555
  if (a !== void 0) {
1545
1556
  let e = yield* y.decodeUnknown(t.schema)(a.payload?.value);
1546
- return yield* m.promise(() => Mt(d, {
1557
+ return yield* m.promise(() => Nt(d, {
1547
1558
  runId: f,
1548
1559
  eventType: "signal-received",
1549
1560
  payload: {
@@ -1560,16 +1571,16 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1560
1571
  success: t.schema,
1561
1572
  execute: r
1562
1573
  });
1563
- }, Pt = async (e, t) => {
1574
+ }, Ft = async (e, t) => {
1564
1575
  if (e !== void 0) try {
1565
1576
  await e.recordEvent(t);
1566
1577
  } catch {}
1567
- }, Ft = (e, t) => {
1578
+ }, It = (e, t) => {
1568
1579
  let r = m.gen(function* () {
1569
1580
  let r = t.pollIntervalMs ?? 200, i = t.maxPollIntervalMs ?? 5e3, o = t.timeoutMs ?? 864e5, s = t.take ?? 500, c = yield* a, l = yield* m.serviceOption(n), u = l._tag === "Some" ? l.value : void 0;
1570
1581
  if (c === void 0) return yield* m.die(/* @__PURE__ */ Error("awaitEvent: no active workflow run id in scope"));
1571
- let d = c, f = yield* t.since === "run-start" ? It(e, d) : m.succeed(/* @__PURE__ */ new Date());
1572
- yield* m.promise(() => Pt(u, {
1582
+ let d = c, f = yield* t.since === "run-start" ? Lt(e, d) : m.succeed(/* @__PURE__ */ new Date());
1583
+ yield* m.promise(() => Ft(u, {
1573
1584
  runId: d,
1574
1585
  eventType: "event-awaited",
1575
1586
  payload: {
@@ -1584,7 +1595,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1584
1595
  if (n > o) return yield* m.die(/* @__PURE__ */ Error(`awaitEvent('${t.event}') timed out after ${n}ms having examined ${g} candidate event(s). ${g === 0 ? "NONE were published under that name in the window — check the spelling against ctx.events.publish, and consider since: 'run-start' if the event may have arrived before this step began." : "The predicate rejected all of them — log one payload and compare it with what `match` expects."}`));
1585
1596
  let r = {
1586
1597
  table: "_voltro_workflow_events",
1587
- predicate: b(x("name", t.event), te("occurredAt", f)),
1598
+ predicate: b(x("name", t.event), ne("occurredAt", f)),
1588
1599
  order: [{
1589
1600
  column: "occurredAt",
1590
1601
  direction: "asc"
@@ -1599,7 +1610,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1599
1610
  g = a.length;
1600
1611
  for (let e of a) {
1601
1612
  let n = yield* y.decodeUnknown(t.schema)(e.payload);
1602
- if (t.match(n)) return yield* m.promise(() => Pt(u, {
1613
+ if (t.match(n)) return yield* m.promise(() => Ft(u, {
1603
1614
  runId: d,
1604
1615
  eventType: "event-received",
1605
1616
  payload: {
@@ -1616,7 +1627,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1616
1627
  success: t.schema,
1617
1628
  execute: r
1618
1629
  });
1619
- }, It = (e, t) => m.gen(function* () {
1630
+ }, Lt = (e, t) => m.gen(function* () {
1620
1631
  let n = (yield* m.tryPromise({
1621
1632
  try: () => e.store.query({
1622
1633
  table: "_voltro_workflow_runs",
@@ -1634,10 +1645,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1634
1645
  if (!Number.isNaN(e.getTime())) return e;
1635
1646
  }
1636
1647
  return /* @__PURE__ */ new Date(0);
1637
- }), Lt = (e) => new Promise((t) => setTimeout(t, e)), Rt = () => {
1648
+ }), Rt = (e) => new Promise((t) => setTimeout(t, e)), zt = () => {
1638
1649
  let e = globalThis.crypto;
1639
1650
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
1640
- }, zt = () => `wfu_${Rt()}`, Y = async (e, t) => {
1651
+ }, Bt = () => `wfu_${zt()}`, Vt = async (e, t) => {
1641
1652
  let n = t.id ?? t.executionId;
1642
1653
  if (!n) throw Error("workflow message target requires target.id or target.executionId");
1643
1654
  let r = await e.query({
@@ -1659,8 +1670,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1659
1670
  }))[0];
1660
1671
  if (!i) throw Error(`workflow message target not found: ${n}`);
1661
1672
  return i;
1662
- }, Bt = async (e) => {
1663
- let t = await Y(e.store, e.target);
1673
+ }, Ht = async (e) => {
1674
+ let t = await Vt(e.store, e.target);
1664
1675
  return { eventId: (await e.recorder.recordEvent({
1665
1676
  runId: t.id,
1666
1677
  eventType: "signal-sent",
@@ -1669,8 +1680,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1669
1680
  value: e.payload
1670
1681
  }
1671
1682
  })).id };
1672
- }, Vt = async (e) => {
1673
- let t = await Y(e.store, e.target), n = zt(), r = await e.recorder.recordEvent({
1683
+ }, Ut = async (e) => {
1684
+ let t = await Vt(e.store, e.target), n = Bt(), r = await e.recorder.recordEvent({
1674
1685
  runId: t.id,
1675
1686
  eventType: "update-requested",
1676
1687
  payload: {
@@ -1707,15 +1718,15 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1707
1718
  }), t;
1708
1719
  }
1709
1720
  if (Date.now() - i >= a) throw Error(`Timed out waiting for workflow update '${e.updateName}' (${n})`);
1710
- await Lt(o);
1721
+ await Rt(o);
1711
1722
  }
1712
- }, Ht = 864e5, Ut = "voltro/suspending-signal", Wt = (e, t) => `${Ut}/${e}/${t}`, Gt = (e) => u.make(e, { success: y.Unknown }), Kt = async (e, t) => {
1723
+ }, Wt = 864e5, Gt = "voltro/suspending-signal", Kt = (e, t) => `${Gt}/${e}/${t}`, qt = (e) => u.make(e, { success: y.Unknown }), Jt = async (e, t) => {
1713
1724
  if (e) try {
1714
1725
  await e.recordEvent(t);
1715
1726
  } catch {}
1716
- }, qt = (e, t) => m.gen(function* () {
1717
- let e = t.timeoutMs ?? Ht, r = Gt(Wt((yield* f.WorkflowInstance).workflow.name, t.name)), i = yield* a, o = yield* m.serviceOption(n), s = o._tag === "Some" ? o.value : void 0;
1718
- i !== void 0 && (yield* m.promise(() => Kt(s, {
1727
+ }, Yt = (e, t) => m.gen(function* () {
1728
+ let e = t.timeoutMs ?? Wt, r = qt(Kt((yield* f.WorkflowInstance).workflow.name, t.name)), i = yield* a, o = yield* m.serviceOption(n), s = o._tag === "Some" ? o.value : void 0;
1729
+ i !== void 0 && (yield* m.promise(() => Jt(s, {
1719
1730
  runId: i,
1720
1731
  eventType: "signal-awaited",
1721
1732
  payload: { signalName: t.name }
@@ -1724,7 +1735,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1724
1735
  name: `await-signal-timeout/${t.name}`,
1725
1736
  duration: `${e} millis`
1726
1737
  }).pipe(m.andThen(m.die(/* @__PURE__ */ Error(`awaitSignalSuspending('${t.name}') timed out after ${e}ms`))))) : yield* c, p = yield* y.decodeUnknown(t.schema)(d);
1727
- return i !== void 0 && (yield* m.promise(() => Kt(s, {
1738
+ return i !== void 0 && (yield* m.promise(() => Jt(s, {
1728
1739
  runId: i,
1729
1740
  eventType: "signal-received",
1730
1741
  payload: {
@@ -1732,19 +1743,19 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1732
1743
  value: p
1733
1744
  }
1734
1745
  }))), p;
1735
- }), Jt = (e) => m.gen(function* () {
1746
+ }), Xt = (e) => m.gen(function* () {
1736
1747
  let t = e.target.executionId, n = e.target.workflowName;
1737
1748
  if (t === void 0 || n === void 0) {
1738
1749
  let r = e.store;
1739
1750
  if (r === void 0) return yield* m.die(/* @__PURE__ */ Error("completeSuspendingSignal: provide a store, or target.executionId AND target.workflowName"));
1740
1751
  let i = yield* m.tryPromise({
1741
- try: () => Y(r, e.target),
1752
+ try: () => Vt(r, e.target),
1742
1753
  catch: (e) => e
1743
1754
  });
1744
1755
  t ??= i.executionId, n ??= i.tag;
1745
1756
  }
1746
1757
  if (t === void 0 || n === void 0) return { completed: !1 };
1747
- let r = Wt(n, e.signalName), i = Gt(r), a = new u.TokenParsed({
1758
+ let r = Kt(n, e.signalName), i = qt(r), a = new u.TokenParsed({
1748
1759
  workflowName: n,
1749
1760
  executionId: t,
1750
1761
  deferredName: r
@@ -1753,11 +1764,11 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1753
1764
  token: a,
1754
1765
  exit: g.succeed(e.payload)
1755
1766
  }), { completed: !0 };
1756
- }), X = "_voltro_budget_holds", Yt = "budget-hold", Xt = (e) => `${Yt}:${e}`, Zt = (e) => `${e.executionId}/${e.stepName}/${e.budget}#${e.generation}`, Qt = async (e, t) => (await e.query({
1757
- table: X,
1767
+ }), Y = "_voltro_budget_holds", Zt = "budget-hold", Qt = (e) => `${Zt}:${e}`, $t = (e) => `${e.executionId}/${e.stepName}/${e.budget}#${e.generation}`, en = async (e, t) => (await e.query({
1768
+ table: Y,
1758
1769
  predicate: b(x("executionId", t.executionId), x("stepName", t.stepName), x("budget", t.budget)),
1759
1770
  order: []
1760
- })).length, $t = j(X, {
1771
+ })).length, tn = j(Y, {
1761
1772
  id: w({ prefix: "bhd" }),
1762
1773
  holdKey: M().maxLength(191),
1763
1774
  budget: M(),
@@ -1771,38 +1782,38 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1771
1782
  heldAt: N().default("now"),
1772
1783
  releasedAt: N().nullable(),
1773
1784
  outcome: M().nullable()
1774
- }).index(["budget", "releasedAt"]), en = () => {
1775
- ie({
1785
+ }).index(["budget", "releasedAt"]), nn = () => {
1786
+ ae({
1776
1787
  source: "framework",
1777
- table: X,
1788
+ table: Y,
1778
1789
  timeColumn: "releasedAt",
1779
- ttlMs: ae(process.env.VOLTRO_BUDGET_HOLDS_TTL_HOURS, 720)
1790
+ ttlMs: oe(process.env.VOLTRO_BUDGET_HOLDS_TTL_HOURS, 720)
1780
1791
  });
1781
- }, tn = class extends Error {
1792
+ }, rn = class extends Error {
1782
1793
  budget;
1783
1794
  holdKey;
1784
1795
  constructor(e, t, n) {
1785
1796
  super(`budget '${e}': the run was suspended waiting for headroom and gave up after ${n}ms (hold ${t}). Nothing was spent. Raise the budget, reset its window, or lift the hold, then re-drive the run.`), this.name = "BudgetHoldExpired", this.budget = e, this.holdKey = t;
1786
1797
  }
1787
- }, nn = 6048e5, rn = (e) => m.gen(function* () {
1788
- en();
1798
+ }, an = 6048e5, on = (e) => m.gen(function* () {
1799
+ nn();
1789
1800
  let t = e.timeoutMs ?? 6048e5, n = e.recheckEveryMs ?? 9e5, r = {
1790
1801
  executionId: e.executionId,
1791
1802
  stepName: e.stepName,
1792
1803
  budget: e.budget
1793
1804
  };
1794
1805
  for (;;) {
1795
- let i = yield* m.promise(() => on(e.store, r)), a = i.length, o = i.length === 0 ? Date.now() : an(i[0]?.heldAt), s = Number.isFinite(t) ? t - (Date.now() - o) : Infinity, c = Zt({
1806
+ let i = yield* m.promise(() => cn(e.store, r)), a = i.length, o = i.length === 0 ? Date.now() : sn(i[0]?.heldAt), s = Number.isFinite(t) ? t - (Date.now() - o) : Infinity, c = $t({
1796
1807
  ...r,
1797
1808
  generation: a
1798
1809
  });
1799
- if (s <= 0) return yield* m.promise(() => sn(e.store, r, "expired")), yield* m.fail(new tn(e.budget, c, t));
1800
- let l = Xt(c);
1801
- yield* m.promise(() => e.store.insertIgnore(X, {
1810
+ if (s <= 0) return yield* m.promise(() => ln(e.store, r, "expired")), yield* m.fail(new rn(e.budget, c, t));
1811
+ let l = Qt(c);
1812
+ yield* m.promise(() => e.store.insertIgnore(Y, {
1802
1813
  id: S({
1803
1814
  kind: "typeid",
1804
1815
  prefix: "bhd"
1805
- }, X),
1816
+ }, Y),
1806
1817
  holdKey: c,
1807
1818
  budget: e.budget,
1808
1819
  tenantId: e.tenantId,
@@ -1817,34 +1828,34 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1817
1828
  outcome: null
1818
1829
  }, { conflictColumns: ["holdKey"] }));
1819
1830
  let u = Math.min(n, s);
1820
- if (yield* qt({ store: e.store }, {
1831
+ if (yield* Yt({ store: e.store }, {
1821
1832
  name: l,
1822
1833
  schema: y.Unknown,
1823
1834
  timeoutMs: u
1824
- }).pipe(m.catchAllCause((e) => p.isInterruptedOnly(e) ? m.failCause(e) : m.void)), yield* m.promise(() => e.store.updateMany(X, {
1835
+ }).pipe(m.catchAllCause((e) => p.isInterruptedOnly(e) ? m.failCause(e) : m.void)), yield* m.promise(() => e.store.updateMany(Y, {
1825
1836
  releasedAt: /* @__PURE__ */ new Date(),
1826
1837
  outcome: "recheck"
1827
1838
  }, { where: b(x("holdKey", c), E("releasedAt")) })), yield* e.hasHeadroom) return;
1828
1839
  }
1829
- }), an = (e) => e instanceof Date ? e.getTime() : typeof e == "string" ? Date.parse(e) : Date.now(), on = async (e, t) => [...await e.query({
1830
- table: X,
1840
+ }), sn = (e) => e instanceof Date ? e.getTime() : typeof e == "string" ? Date.parse(e) : Date.now(), cn = async (e, t) => [...await e.query({
1841
+ table: Y,
1831
1842
  predicate: b(x("executionId", t.executionId), x("stepName", t.stepName), x("budget", t.budget)),
1832
1843
  order: []
1833
- })].sort((e, t) => String(e.id).localeCompare(String(t.id))), sn = async (e, t, n) => {
1834
- await e.updateMany(X, {
1844
+ })].sort((e, t) => String(e.id).localeCompare(String(t.id))), ln = async (e, t, n) => {
1845
+ await e.updateMany(Y, {
1835
1846
  releasedAt: /* @__PURE__ */ new Date(),
1836
1847
  outcome: n
1837
1848
  }, { where: b(x("executionId", t.executionId), x("stepName", t.stepName), x("budget", t.budget), E("releasedAt")) });
1838
- }, cn = (e) => m.gen(function* () {
1849
+ }, un = (e) => m.gen(function* () {
1839
1850
  let t = e.tenantId === void 0 ? b(x("budget", e.budget), E("releasedAt")) : b(x("budget", e.budget), x("tenantId", e.tenantId), E("releasedAt")), n = yield* m.promise(() => e.store.query({
1840
- table: X,
1851
+ table: Y,
1841
1852
  predicate: t,
1842
1853
  order: []
1843
1854
  })), r = 0;
1844
1855
  for (let t of n) (yield* m.promise(() => e.store.updateMany("_voltro_budget_holds", {
1845
1856
  releasedAt: /* @__PURE__ */ new Date(),
1846
1857
  outcome: e.outcome ?? "released"
1847
- }, { where: b(x("id", String(t.id)), E("releasedAt")) }))) === 1 && (yield* Jt({
1858
+ }, { where: b(x("id", String(t.id)), E("releasedAt")) }))) === 1 && (yield* Xt({
1848
1859
  target: {
1849
1860
  executionId: String(t.executionId),
1850
1861
  workflowName: String(t.workflowName)
@@ -1856,10 +1867,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1856
1867
  }
1857
1868
  }).pipe(m.catchAll(() => m.succeed({ completed: !1 }))), r += 1);
1858
1869
  return { released: r };
1859
- }), ln = async (e, t) => {
1870
+ }), dn = async (e, t) => {
1860
1871
  let n = t?.budget === void 0 ? E("releasedAt") : b(x("budget", t.budget), E("releasedAt"));
1861
1872
  return (await e.query({
1862
- table: X,
1873
+ table: Y,
1863
1874
  predicate: n,
1864
1875
  order: []
1865
1876
  })).map((e) => ({
@@ -1872,8 +1883,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1872
1883
  stepName: String(e.stepName),
1873
1884
  heldAt: e.heldAt instanceof Date ? e.heldAt.toISOString() : String(e.heldAt ?? "")
1874
1885
  }));
1875
- }, un = async (e) => {
1876
- let t = await ln(e), n = /* @__PURE__ */ new Map();
1886
+ }, fn = async (e) => {
1887
+ let t = await dn(e), n = /* @__PURE__ */ new Map();
1877
1888
  for (let e of t) {
1878
1889
  let t = `${e.budget}\u0000${e.tenantId ?? ""}`;
1879
1890
  n.has(t) || n.set(t, {
@@ -1882,17 +1893,17 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1882
1893
  });
1883
1894
  }
1884
1895
  return [...n.values()];
1885
- }, dn = async (e, t) => {
1896
+ }, pn = async (e, t) => {
1886
1897
  if (e) try {
1887
1898
  await e.recordEvent(t);
1888
1899
  } catch {}
1889
- }, fn = (e) => {
1900
+ }, mn = (e) => {
1890
1901
  let t = p.failureOption(e), n = Array.from(p.defects(e)), r = t._tag === "Some" ? t.value : n[0] ?? p.squash(e);
1891
1902
  return {
1892
1903
  errorTag: r && typeof r == "object" && "_tag" in r ? String(r._tag) : null,
1893
1904
  errorMessage: r?.message ?? String(r)
1894
1905
  };
1895
- }, pn = (e, t) => {
1906
+ }, hn = (e, t) => {
1896
1907
  let r = m.gen(function* () {
1897
1908
  let r = t.pollIntervalMs ?? 200, i = t.maxPollIntervalMs ?? 5e3, o = t.timeoutMs ?? 3e4, s = yield* a, c = yield* m.serviceOption(n), l = c._tag === "Some" ? c.value : void 0;
1898
1909
  if (s === void 0) return yield* m.die(/* @__PURE__ */ Error("awaitUpdate: no active workflow run id in scope"));
@@ -1916,7 +1927,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1916
1927
  }), s = new Set(a.filter((e) => e.eventType === "update-completed" || e.eventType === "update-failed").map((e) => e.payload?.updateId).filter((e) => typeof e == "string" && e.length > 0)), c = a.find((e) => e.eventType === "update-requested" && e.payload?.updateName === t.name && typeof e.payload.updateId == "string" && !s.has(e.payload.updateId));
1917
1928
  if (c !== void 0) {
1918
1929
  let e = c.payload.updateId;
1919
- yield* m.promise(() => dn(l, {
1930
+ yield* m.promise(() => pn(l, {
1920
1931
  runId: u,
1921
1932
  eventType: "update-received",
1922
1933
  payload: {
@@ -1924,24 +1935,24 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1924
1935
  updateName: t.name
1925
1936
  }
1926
1937
  }));
1927
- let n = yield* y.decodeUnknown(t.schema)(c.payload?.value).pipe(m.tapErrorCause((n) => m.promise(() => dn(l, {
1938
+ let n = yield* y.decodeUnknown(t.schema)(c.payload?.value).pipe(m.tapErrorCause((n) => m.promise(() => pn(l, {
1928
1939
  runId: u,
1929
1940
  eventType: "update-failed",
1930
1941
  payload: {
1931
1942
  updateId: e,
1932
1943
  updateName: t.name,
1933
- ...fn(n)
1944
+ ...mn(n)
1934
1945
  }
1935
- })))), r = yield* (t.handle ? t.handle(n) : m.succeed(n)).pipe(m.flatMap((e) => t.success ? y.decodeUnknown(t.success)(e) : m.succeed(e))).pipe(m.tapErrorCause((n) => m.promise(() => dn(l, {
1946
+ })))), r = yield* (t.handle ? t.handle(n) : m.succeed(n)).pipe(m.flatMap((e) => t.success ? y.decodeUnknown(t.success)(e) : m.succeed(e))).pipe(m.tapErrorCause((n) => m.promise(() => pn(l, {
1936
1947
  runId: u,
1937
1948
  eventType: "update-failed",
1938
1949
  payload: {
1939
1950
  updateId: e,
1940
1951
  updateName: t.name,
1941
- ...fn(n)
1952
+ ...mn(n)
1942
1953
  }
1943
1954
  }))));
1944
- return yield* m.promise(() => dn(l, {
1955
+ return yield* m.promise(() => pn(l, {
1945
1956
  runId: u,
1946
1957
  eventType: "update-completed",
1947
1958
  payload: {
@@ -1959,7 +1970,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1959
1970
  success: t.success ?? t.schema,
1960
1971
  execute: r
1961
1972
  });
1962
- }, mn = 8192, hn = 3, gn = 2e3, _n = () => {
1973
+ }, gn = 8192, _n = 3, vn = 2e3, yn = () => {
1963
1974
  let e = (e) => {
1964
1975
  if (e === void 0) return;
1965
1976
  let t = Number(e);
@@ -1969,7 +1980,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1969
1980
  ...t === void 0 ? {} : { maxRunReclaims: t },
1970
1981
  ...n === void 0 ? {} : { replayShapeLimit: n }
1971
1982
  };
1972
- }, vn = (e) => {
1983
+ }, bn = (e) => {
1973
1984
  let t = typeof e == "string" ? (() => {
1974
1985
  try {
1975
1986
  return JSON.parse(e);
@@ -1978,10 +1989,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1978
1989
  }
1979
1990
  })() : e;
1980
1991
  if (Array.isArray(t)) return t.filter((e) => typeof e == "string");
1981
- }, yn = () => {
1992
+ }, xn = () => {
1982
1993
  let e = globalThis.crypto;
1983
1994
  return typeof e?.randomUUID == "function" ? e.randomUUID() : `${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`;
1984
- }, bn = (e) => `${e}_${yn()}`, Z = (e, t = mn) => {
1995
+ }, Sn = (e) => `${e}_${xn()}`, X = (e, t = gn) => {
1985
1996
  if (e == null) return e;
1986
1997
  try {
1987
1998
  let n = JSON.stringify(e);
@@ -1993,12 +2004,12 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
1993
2004
  } catch {
1994
2005
  return { __unserialisable: String(e) };
1995
2006
  }
1996
- }, Q = (e) => {
2007
+ }, Z = (e) => {
1997
2008
  let t = {};
1998
2009
  for (let [n, r] of Object.entries(e)) t[n] = r instanceof Date ? r.toISOString() : r;
1999
2010
  return t;
2000
- }, xn = (e) => {
2001
- let t = e.truncateBytes ?? mn, n = e.makeId ?? bn, r = (t, n) => e.log?.warn(t, n), i = e.encryptStepPayload ?? ((e) => e), a = e.emit, o = e.recording === "coarse";
2011
+ }, Cn = (e) => {
2012
+ let t = e.truncateBytes ?? gn, n = e.makeId ?? Sn, r = (t, n) => e.log?.warn(t, n), i = e.encryptStepPayload ?? ((e) => e), a = e.emit, o = e.recording === "coarse";
2002
2013
  return {
2003
2014
  startStep: async ({ runId: s, stepName: c, attempt: l, stepInput: u, retryPolicy: d }) => {
2004
2015
  if (!o) try {
@@ -2008,7 +2019,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2008
2019
  stepName: c,
2009
2020
  attempt: l,
2010
2021
  status: "running",
2011
- input: u === void 0 ? null : i(Z(u, t)),
2022
+ input: u === void 0 ? null : i(X(u, t)),
2012
2023
  retryPolicy: d ?? null,
2013
2024
  output: null,
2014
2025
  errorTag: null,
@@ -2019,7 +2030,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2019
2030
  });
2020
2031
  return a?.("workflowSteps", {
2021
2032
  op: "insert",
2022
- row: Q(r)
2033
+ row: Z(r)
2023
2034
  }), r.id;
2024
2035
  } catch (e) {
2025
2036
  r("failed to record step start (continuing)", {
@@ -2035,13 +2046,13 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2035
2046
  if (!o) try {
2036
2047
  let r = await e.store.update("_voltro_workflow_run_steps", n, {
2037
2048
  status: "succeeded",
2038
- output: i(Z(s, t)),
2049
+ output: i(X(s, t)),
2039
2050
  completedAt: /* @__PURE__ */ new Date(),
2040
2051
  durationMs: c
2041
2052
  });
2042
2053
  r && a?.("workflowSteps", {
2043
2054
  op: "update",
2044
- row: Q(r)
2055
+ row: Z(r)
2045
2056
  });
2046
2057
  } catch (e) {
2047
2058
  r("failed to record step success", {
@@ -2056,13 +2067,13 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2056
2067
  status: "failed",
2057
2068
  errorTag: s,
2058
2069
  errorMessage: c,
2059
- errorCause: l === void 0 ? null : i(Z(l, t)),
2070
+ errorCause: l === void 0 ? null : i(X(l, t)),
2060
2071
  completedAt: /* @__PURE__ */ new Date(),
2061
2072
  durationMs: u
2062
2073
  });
2063
2074
  r && a?.("workflowSteps", {
2064
2075
  op: "update",
2065
- row: Q(r)
2076
+ row: Z(r)
2066
2077
  });
2067
2078
  } catch (e) {
2068
2079
  r("failed to record step failure", {
@@ -2085,7 +2096,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2085
2096
  });
2086
2097
  a?.("workflowEvents", {
2087
2098
  op: "insert",
2088
- row: Q(n)
2099
+ row: Z(n)
2089
2100
  });
2090
2101
  } catch (e) {
2091
2102
  r("failed to record workflow event (continuing)", {
@@ -2101,7 +2112,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2101
2112
  return { id: l };
2102
2113
  }
2103
2114
  };
2104
- }, Sn = (e, t, n) => m.gen(function* () {
2115
+ }, wn = (e, t, n) => m.gen(function* () {
2105
2116
  let r = e.store.query;
2106
2117
  if (r === void 0) return;
2107
2118
  let i = e.replayShapeLimit ?? 2e3, a = yield* m.promise(() => r({
@@ -2131,8 +2142,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2131
2142
  return typeof t == "string" ? [{ stepName: t }] : [];
2132
2143
  });
2133
2144
  return s.length === 0 ? void 0 : o(s);
2134
- }), Cn = (o, c) => {
2135
- let l = o.truncateBytes ?? mn, u = o.makeId ?? bn, f = o.recorder ?? xn(o), h = (e, t) => o.log?.warn(e, t), v = o.emit, y = (e, t, n) => m.promise(async () => {
2145
+ }), Tn = (o, c) => {
2146
+ let l = o.truncateBytes ?? gn, u = o.makeId ?? Sn, f = o.recorder ?? Cn(o), h = (e, t) => o.log?.warn(e, t), v = o.emit, y = (e, t, n) => m.promise(async () => {
2136
2147
  if (o.onParentClose) try {
2137
2148
  await o.onParentClose({
2138
2149
  workflowName: o.name,
@@ -2165,8 +2176,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2165
2176
  });
2166
2177
  }
2167
2178
  });
2168
- return (ee, S) => m.gen(function* () {
2169
- let C = Date.now(), te = yield* _.get(r), w = o.parentExecutionId ?? te ?? null, ne = o.parentClosePolicy ?? null, T, E = (e, t) => t.pipe(m.catchAllCause((t) => p.isInterrupted(t) ? m.failCause(t) : m.sync(() => {
2179
+ return (te, S) => m.gen(function* () {
2180
+ let C = Date.now(), ne = yield* _.get(r), w = o.parentExecutionId ?? ne ?? null, re = o.parentClosePolicy ?? null, T, E = (e, t) => t.pipe(m.catchAllCause((t) => p.isInterrupted(t) ? m.failCause(t) : m.sync(() => {
2170
2181
  let n = p.squash(t);
2171
2182
  h(e, {
2172
2183
  tag: o.name,
@@ -2191,7 +2202,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2191
2202
  }));
2192
2203
  return t && v?.("workflowRuns", {
2193
2204
  op: "update",
2194
- row: Q(t)
2205
+ row: Z(t)
2195
2206
  }), yield* m.promise(() => f.recordEvent({
2196
2207
  runId: D.id,
2197
2208
  eventType: "run-failed",
@@ -2208,9 +2219,9 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2208
2219
  durationMs: 0
2209
2220
  })), yield* m.fail(Error(e));
2210
2221
  }
2211
- let re = o.workflowPatches ?? [], k;
2222
+ let ie = o.workflowPatches ?? [], k;
2212
2223
  if (D?.id !== void 0) {
2213
- T = D.id, re = vn(D.workflowPatches) ?? re;
2224
+ T = D.id, ie = bn(D.workflowPatches) ?? ie;
2214
2225
  let e = D.runnerEnteredAt !== null && D.runnerEnteredAt !== void 0, t = typeof D.reclaimCount == "number" ? D.reclaimCount : Number(D.reclaimCount ?? 0), n = e ? (Number.isFinite(t) ? t : 0) + 1 : 0, r = o.maxRunReclaims ?? 3;
2215
2226
  if (e && n >= r) {
2216
2227
  let e = `Workflow '${o.name}' run '${S}' killed its runner ${n} times in a row; parked instead of reclaimed again (maxRunReclaims=${r}).`;
@@ -2224,7 +2235,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2224
2235
  }));
2225
2236
  t && v?.("workflowRuns", {
2226
2237
  op: "update",
2227
- row: Q(t)
2238
+ row: Z(t)
2228
2239
  }), yield* m.promise(() => f.recordEvent({
2229
2240
  runId: T,
2230
2241
  eventType: "run-crashlooped",
@@ -2242,10 +2253,10 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2242
2253
  reclaimCount: n,
2243
2254
  maxRunReclaims: r
2244
2255
  });
2245
- let t = yield* se;
2256
+ let t = yield* ce;
2246
2257
  return yield* d.suspend(t);
2247
2258
  }
2248
- k = yield* Sn(o, T, h), yield* E("failed to record workflow re-entry", m.gen(function* () {
2259
+ k = yield* wn(o, T, h), yield* E("failed to record workflow re-entry", m.gen(function* () {
2249
2260
  let t = yield* m.promise(() => o.store.update("_voltro_workflow_runs", T, {
2250
2261
  status: "running",
2251
2262
  errorTag: null,
@@ -2256,7 +2267,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2256
2267
  }));
2257
2268
  t && v?.("workflowRuns", {
2258
2269
  op: "update",
2259
- row: Q(t)
2270
+ row: Z(t)
2260
2271
  }), e && (yield* m.promise(() => f.recordEvent({
2261
2272
  runId: T,
2262
2273
  eventType: "run-resumed",
@@ -2273,7 +2284,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2273
2284
  tag: o.name,
2274
2285
  executionId: S,
2275
2286
  status: "running",
2276
- payload: ee,
2287
+ payload: te,
2277
2288
  workflowVersion: o.workflowVersion ?? null,
2278
2289
  workflowPatches: o.workflowPatches ?? null,
2279
2290
  output: null,
@@ -2287,13 +2298,13 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2287
2298
  durationMs: null,
2288
2299
  traceId: o.traceId ?? null,
2289
2300
  parentExecutionId: w,
2290
- parentClosePolicy: ne,
2301
+ parentClosePolicy: re,
2291
2302
  runnerEnteredAt: /* @__PURE__ */ new Date(),
2292
2303
  reclaimCount: 0
2293
2304
  }));
2294
2305
  if (T = e.id, v?.("workflowRuns", {
2295
2306
  op: "insert",
2296
- row: Q(e)
2307
+ row: Z(e)
2297
2308
  }), T) {
2298
2309
  let e = T;
2299
2310
  yield* m.promise(() => f.recordEvent({
@@ -2306,15 +2317,15 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2306
2317
  workflowVersion: o.workflowVersion ?? null,
2307
2318
  workflowPatches: o.workflowPatches ?? null,
2308
2319
  parentExecutionId: w,
2309
- parentClosePolicy: ne
2320
+ parentClosePolicy: re
2310
2321
  }
2311
2322
  }));
2312
2323
  }
2313
2324
  }));
2314
- let A = o.subject?.tenantId, ie = c(ee, S).pipe(m.locally(a, T), m.locally(r, S), m.locally(t, typeof A == "string" ? A : void 0), m.locally(i, re), m.locally(s, k), m.provideService(n, f)), ae = o.pluginWorkflowStepLayer ? ie.pipe(m.provide(o.pluginWorkflowStepLayer)) : ie, j = yield* d.intoResult(ae);
2325
+ let A = o.subject?.tenantId, ae = c(te, S).pipe(m.locally(a, T), m.locally(r, S), m.locally(t, typeof A == "string" ? A : void 0), m.locally(i, ie), m.locally(s, k), m.provideService(n, f)), oe = o.pluginWorkflowStepLayer ? ae.pipe(m.provide(o.pluginWorkflowStepLayer)) : ae, j = yield* d.intoResult(oe);
2315
2326
  if (d.isResult(j) && j._tag === "Suspended") {
2316
2327
  let e = j.cause, t = e !== void 0 && !p.isEmpty(e), n = t ? p.squash(e) : void 0, r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = t ? n?.message ?? String(n) : null;
2317
- t && (yield* m.sync(() => ce({
2328
+ t && (yield* m.sync(() => ee({
2318
2329
  error: n,
2319
2330
  source: "workflow",
2320
2331
  name: o.name,
@@ -2336,7 +2347,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2336
2347
  }));
2337
2348
  e && v?.("workflowRuns", {
2338
2349
  op: "update",
2339
- row: Q(e)
2350
+ row: Z(e)
2340
2351
  }), yield* m.promise(() => f.recordEvent({
2341
2352
  runId: T,
2342
2353
  eventType: "run-suspended",
@@ -2347,7 +2358,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2347
2358
  } : { reason: "workflow-suspend" }
2348
2359
  }));
2349
2360
  })));
2350
- let a = yield* se;
2361
+ let a = yield* ce;
2351
2362
  return yield* d.suspend(a);
2352
2363
  }
2353
2364
  let M = j;
@@ -2371,7 +2382,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2371
2382
  }
2372
2383
  if (g.isFailure(M.exit)) {
2373
2384
  let e = M.exit.cause, t = p.failureOption(e), n = t._tag === "Some" ? t.value : p.squash(e), r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = n?.message ?? String(n);
2374
- return yield* m.sync(() => ce({
2385
+ return yield* m.sync(() => ee({
2375
2386
  error: n,
2376
2387
  source: "workflow",
2377
2388
  name: o.name,
@@ -2392,7 +2403,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2392
2403
  }));
2393
2404
  e && v?.("workflowRuns", {
2394
2405
  op: "update",
2395
- row: Q(e)
2406
+ row: Z(e)
2396
2407
  }), yield* m.promise(() => f.recordEvent({
2397
2408
  runId: T,
2398
2409
  eventType: "run-failed",
@@ -2412,14 +2423,14 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2412
2423
  return T && (yield* E("failed to record workflow success", m.gen(function* () {
2413
2424
  let e = yield* m.promise(() => o.store.update("_voltro_workflow_runs", T, {
2414
2425
  status: "succeeded",
2415
- output: Z(N, l),
2426
+ output: X(N, l),
2416
2427
  completedAt: /* @__PURE__ */ new Date(),
2417
2428
  durationMs: Date.now() - C,
2418
2429
  runnerEnteredAt: null
2419
2430
  }));
2420
2431
  e && v?.("workflowRuns", {
2421
2432
  op: "update",
2422
- row: Q(e)
2433
+ row: Z(e)
2423
2434
  }), yield* m.promise(() => f.recordEvent({
2424
2435
  runId: T,
2425
2436
  eventType: "run-succeeded",
@@ -2432,7 +2443,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2432
2443
  completedAtSec: Date.now() / 1e3
2433
2444
  })), N;
2434
2445
  });
2435
- }, wn = (e) => e === "cancel" || e === "terminate", Tn = (e) => e === "running" || e === "suspended", En = async (e) => {
2446
+ }, En = (e) => e === "cancel" || e === "terminate", Dn = (e) => e === "running" || e === "suspended", On = async (e) => {
2436
2447
  let t = await e.store.query({
2437
2448
  table: "_voltro_workflow_runs",
2438
2449
  order: [{
@@ -2458,7 +2469,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2458
2469
  });
2459
2470
  continue;
2460
2471
  }
2461
- if (!wn(r.parentClosePolicy)) {
2472
+ if (!En(r.parentClosePolicy)) {
2462
2473
  n.push({
2463
2474
  ...t,
2464
2475
  action: "skipped",
@@ -2466,7 +2477,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2466
2477
  });
2467
2478
  continue;
2468
2479
  }
2469
- if (!Tn(r.status)) {
2480
+ if (!Dn(r.status)) {
2470
2481
  n.push({
2471
2482
  ...t,
2472
2483
  action: "skipped",
@@ -2483,7 +2494,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2483
2494
  });
2484
2495
  i && e.emit?.("workflowRuns", {
2485
2496
  op: "update",
2486
- row: Q(i)
2497
+ row: Z(i)
2487
2498
  }), await e.recorder?.recordEvent({
2488
2499
  runId: r.id,
2489
2500
  eventType: "run-cancelled",
@@ -2514,7 +2525,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2514
2525
  }
2515
2526
  }
2516
2527
  return n;
2517
- }, Dn = (e) => {
2528
+ }, kn = (e) => {
2518
2529
  if (e == null) return null;
2519
2530
  if (e instanceof Date) return e;
2520
2531
  if (typeof e == "string" || typeof e == "number") {
@@ -2522,7 +2533,7 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2522
2533
  return Number.isNaN(t.getTime()) ? null : t;
2523
2534
  }
2524
2535
  return null;
2525
- }, On = (e) => typeof e == "number" ? e : e == null ? null : Number(e), $ = (e) => e == null ? null : String(e), kn = (e) => {
2536
+ }, Q = (e) => typeof e == "number" ? e : e == null ? null : Number(e), $ = (e) => e == null ? null : String(e), An = (e) => {
2526
2537
  let t = /* @__PURE__ */ new Map();
2527
2538
  for (let n of e) {
2528
2539
  let e = String(n.stepName), r = t.get(e);
@@ -2530,27 +2541,27 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2530
2541
  }
2531
2542
  let n = [];
2532
2543
  for (let [e, r] of t) {
2533
- r.sort((e, t) => (On(e.attempt) ?? 0) - (On(t.attempt) ?? 0));
2544
+ r.sort((e, t) => (Q(e.attempt) ?? 0) - (Q(t.attempt) ?? 0));
2534
2545
  let t = r[r.length - 1], i = $(t.errorTag), a = $(t.errorMessage), o = i !== null || a !== null ? {
2535
2546
  tag: i,
2536
2547
  message: a ?? ""
2537
2548
  } : null;
2538
2549
  n.push({
2539
2550
  name: e,
2540
- attempt: On(t.attempt) ?? r.length,
2551
+ attempt: Q(t.attempt) ?? r.length,
2541
2552
  attempts: r.length,
2542
2553
  status: t.status ?? "running",
2543
2554
  input: t.input ?? null,
2544
2555
  output: t.output ?? null,
2545
2556
  error: o,
2546
- durationMs: On(t.durationMs)
2557
+ durationMs: Q(t.durationMs)
2547
2558
  });
2548
2559
  }
2549
2560
  return n.sort((t, n) => {
2550
2561
  let r = e.find((e) => String(e.stepName) === t.name), i = e.find((e) => String(e.stepName) === n.name);
2551
- return (Dn(r?.startedAt)?.getTime() ?? 0) - (Dn(i?.startedAt)?.getTime() ?? 0);
2562
+ return (kn(r?.startedAt)?.getTime() ?? 0) - (kn(i?.startedAt)?.getTime() ?? 0);
2552
2563
  }), n;
2553
- }, An = (e) => {
2564
+ }, jn = (e) => {
2554
2565
  if (e == null) return null;
2555
2566
  if (typeof e == "string") try {
2556
2567
  return JSON.parse(e);
@@ -2558,8 +2569,8 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2558
2569
  return null;
2559
2570
  }
2560
2571
  return typeof e == "object" ? e : null;
2561
- }, jn = async (e, t) => {
2562
- let n = k(ue), r = (await t.query(n.where(re(x("id", e), x("executionId", e))).limit(1).descriptor))[0];
2572
+ }, Mn = async (e, t) => {
2573
+ let n = k(ue), r = (await t.query(n.where(ie(x("id", e), x("executionId", e))).limit(1).descriptor))[0];
2563
2574
  if (r === void 0) return null;
2564
2575
  let i = String(r.id), a = k(de), o = await t.query(a.where(x("runId", i)).descriptor);
2565
2576
  return {
@@ -2569,16 +2580,16 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2569
2580
  status: r.status ?? "running",
2570
2581
  input: r.payload ?? null,
2571
2582
  output: r.output ?? null,
2572
- subject: An(r.subject),
2583
+ subject: jn(r.subject),
2573
2584
  source: $(r.source),
2574
- steps: kn(o),
2575
- startedAt: Dn(r.startedAt) ?? /* @__PURE__ */ new Date(0),
2576
- finishedAt: Dn(r.completedAt),
2585
+ steps: An(o),
2586
+ startedAt: kn(r.startedAt) ?? /* @__PURE__ */ new Date(0),
2587
+ finishedAt: kn(r.completedAt),
2577
2588
  traceId: $(r.traceId),
2578
2589
  parentExecutionId: $(r.parentExecutionId),
2579
2590
  parentClosePolicy: $(r.parentClosePolicy)
2580
2591
  };
2581
- }, Mn = () => {
2592
+ }, Nn = () => {
2582
2593
  let e = [], t = [], r = 0, i = 0;
2583
2594
  return {
2584
2595
  layer: v.succeed(n, {
@@ -2627,4 +2638,4 @@ var le = f.layerMemory, ue = j("_voltro_workflow_runs", {
2627
2638
  };
2628
2639
  };
2629
2640
  //#endregion
2630
- export { Ze as $, Vt as A, Se as At, ct as B, ue as Bt, rn as C, Le as Ct, zt as D, we as Dt, Wt as E, _e as Et, At as F, ge as Ft, tt as G, lt as H, Ot as I, me as It, $e as J, nt as K, Dt as L, pe as Lt, Nt as M, ve as Mt, Tt as N, F as Nt, Y as O, be as Ot, jt as P, he as Pt, Qe as Q, vt as R, fe as Rt, cn as S, H as St, Jt as T, Ue as Tt, gt as U, ut as V, le as Vt, G as W, st as X, rt as Y, it as Z, Qt as _, ze as _t, gn as a, Te as at, un as b, Me as bt, _n as c, He as ct, Cn as d, Re as dt, Ye as et, pn as f, We as ft, $t as g, De as gt, nn as h, Ae as ht, hn as i, Ee as it, Ft as j, ye as jt, Bt as k, Ce as kt, Q as l, U as lt, tn as m, Fe as mt, jn as n, Je as nt, xn as o, L as ot, X as p, W as pt, et as q, En as r, R as rt, vn as s, Be as st, Mn as t, Ke as tt, Z as u, Ve as ut, Zt as v, Pe as vt, qt as w, je as wt, ln as x, ke as xt, Xt as y, Ge as yt, yt as z, de as zt };
2641
+ export { Qe as $, Ut as A, Se as At, lt as B, ue as Bt, on as C, Le as Ct, Bt as D, we as Dt, Kt as E, _e as Et, jt as F, ge as Ft, nt as G, ut as H, kt as I, me as It, et as J, rt as K, Ot as L, pe as Lt, Pt as M, ve as Mt, Et as N, F as Nt, Vt as O, be as Ot, Mt as P, he as Pt, $e as Q, yt as R, fe as Rt, un as S, H as St, Xt as T, We as Tt, _t as U, dt as V, le as Vt, G as W, ct as X, it as Y, at as Z, en as _, ze as _t, vn as a, Te as at, fn as b, Me as bt, yn as c, Ue as ct, Tn as d, Re as dt, Xe as et, hn as f, Ge as ft, tn as g, De as gt, an as h, Ae as ht, _n as i, Ee as it, It as j, ye as jt, Ht as k, Ce as kt, Z as l, U as lt, rn as m, Fe as mt, Mn as n, Ye as nt, Cn as o, L as ot, Y as p, W as pt, tt as q, On as r, R as rt, bn as s, Be as st, Nn as t, qe as tt, X as u, Ve as ut, $t as v, Pe as vt, Yt as w, je as wt, dn as x, ke as xt, Qt as y, Ke as yt, bt as z, de as zt };