@voltro/workflow 0.63.0 → 0.65.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.
- package/CHANGELOG.md +157 -0
- package/dist/clusterTestSuite.js +2 -2
- package/dist/index.d.ts +11 -1
- package/dist/index.js +2 -2
- package/dist/{primitives-B-HlFCap.js → primitives-CqHxfASq.js} +92 -91
- package/dist/primitives.d.ts +2 -1
- package/dist/primitives.js +1 -1
- package/dist/{src-CJ56XxpW.js → src-Dj8r1Kcn.js} +228 -217
- package/package.json +4 -4
|
@@ -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-
|
|
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 {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
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:
|
|
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_${
|
|
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:
|
|
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
|
-
},
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
575
|
-
let { store: t, control: n, now: r } = e, i = F(n, e.payload), a = await
|
|
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
|
|
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
|
-
},
|
|
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
|
-
})),
|
|
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
|
-
},
|
|
687
|
+
}, Xe = j("_voltro_workflow_watermarks", {
|
|
683
688
|
id: w({ prefix: "wfwm" }),
|
|
684
689
|
positionAt: N(),
|
|
685
690
|
updatedAt: N().default("now")
|
|
686
|
-
}),
|
|
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
|
-
},
|
|
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(
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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),
|
|
764
|
-
table:
|
|
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),
|
|
771
|
-
await e.upsert(
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
|
842
|
-
table:
|
|
843
|
-
predicate:
|
|
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
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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(
|
|
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:
|
|
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
|
|
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:
|
|
1044
|
+
detail: ft(e)
|
|
1040
1045
|
});
|
|
1041
1046
|
continue;
|
|
1042
1047
|
}
|
|
1043
|
-
if (
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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) }),
|
|
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
|
|
1156
|
+
await xt(e, t, a, c, n());
|
|
1148
1157
|
} catch (i) {
|
|
1149
|
-
|
|
1150
|
-
|
|
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:
|
|
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,
|
|
1174
|
+
await W(e.store, t, s, o).catch(() => {});
|
|
1164
1175
|
continue;
|
|
1165
1176
|
}
|
|
1166
|
-
if (await
|
|
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:
|
|
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
|
|
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 &&
|
|
1187
|
-
let
|
|
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:
|
|
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,
|
|
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) =>
|
|
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:
|
|
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
|
|
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
|
-
},
|
|
1226
|
-
if (t.mode === "delayed") return
|
|
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
|
|
1271
|
+
await wt(e, {
|
|
1261
1272
|
control: a,
|
|
1262
1273
|
intent: t,
|
|
1263
|
-
decision: await
|
|
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
|
-
},
|
|
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
|
|
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
|
|
1321
|
-
},
|
|
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
|
|
1354
|
+
await wt(e, {
|
|
1344
1355
|
control: o,
|
|
1345
1356
|
intent: c,
|
|
1346
|
-
decision: await
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
1485
|
-
|
|
1486
|
-
},
|
|
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
|
|
1493
|
-
},
|
|
1494
|
-
|
|
1495
|
-
},
|
|
1496
|
-
let t =
|
|
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 (
|
|
1500
|
-
|
|
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
|
-
},
|
|
1514
|
+
}, Nt = async (e, t) => {
|
|
1504
1515
|
if (e) try {
|
|
1505
1516
|
await e.recordEvent(t);
|
|
1506
1517
|
} catch {}
|
|
1507
|
-
},
|
|
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(
|
|
1510
|
-
|
|
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(() =>
|
|
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(() =>
|
|
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
|
-
},
|
|
1574
|
+
}, Ft = async (e, t) => {
|
|
1564
1575
|
if (e !== void 0) try {
|
|
1565
1576
|
await e.recordEvent(t);
|
|
1566
1577
|
} catch {}
|
|
1567
|
-
},
|
|
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" ?
|
|
1572
|
-
yield* m.promise(() =>
|
|
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),
|
|
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(() =>
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
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
|
-
},
|
|
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
|
-
},
|
|
1663
|
-
let t = await
|
|
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
|
-
},
|
|
1673
|
-
let t = await
|
|
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
|
|
1721
|
+
await Rt(o);
|
|
1711
1722
|
}
|
|
1712
|
-
},
|
|
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
|
-
},
|
|
1717
|
-
let e = t.timeoutMs ??
|
|
1718
|
-
i !== void 0 && (yield* m.promise(() =>
|
|
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(() =>
|
|
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
|
-
}),
|
|
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: () =>
|
|
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 =
|
|
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
|
-
}),
|
|
1757
|
-
table:
|
|
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,
|
|
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"]),
|
|
1775
|
-
|
|
1785
|
+
}).index(["budget", "releasedAt"]), nn = () => {
|
|
1786
|
+
ae({
|
|
1776
1787
|
source: "framework",
|
|
1777
|
-
table:
|
|
1788
|
+
table: Y,
|
|
1778
1789
|
timeColumn: "releasedAt",
|
|
1779
|
-
ttlMs:
|
|
1790
|
+
ttlMs: oe(process.env.VOLTRO_BUDGET_HOLDS_TTL_HOURS, 720)
|
|
1780
1791
|
});
|
|
1781
|
-
},
|
|
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
|
-
},
|
|
1788
|
-
|
|
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(() =>
|
|
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(() =>
|
|
1800
|
-
let l =
|
|
1801
|
-
yield* m.promise(() => e.store.insertIgnore(
|
|
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
|
-
},
|
|
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*
|
|
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(
|
|
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
|
-
}),
|
|
1830
|
-
table:
|
|
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))),
|
|
1834
|
-
await e.updateMany(
|
|
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
|
-
},
|
|
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:
|
|
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*
|
|
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
|
-
}),
|
|
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:
|
|
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
|
-
},
|
|
1876
|
-
let t = await
|
|
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
|
-
},
|
|
1896
|
+
}, pn = async (e, t) => {
|
|
1886
1897
|
if (e) try {
|
|
1887
1898
|
await e.recordEvent(t);
|
|
1888
1899
|
} catch {}
|
|
1889
|
-
},
|
|
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
|
-
},
|
|
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(() =>
|
|
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(() =>
|
|
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
|
-
...
|
|
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(() =>
|
|
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
|
-
...
|
|
1952
|
+
...mn(n)
|
|
1942
1953
|
}
|
|
1943
1954
|
}))));
|
|
1944
|
-
return yield* m.promise(() =>
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
2001
|
-
let t = e.truncateBytes ??
|
|
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(
|
|
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:
|
|
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(
|
|
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:
|
|
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(
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
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
|
-
}),
|
|
2135
|
-
let l = o.truncateBytes ??
|
|
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 (
|
|
2169
|
-
let C = Date.now(),
|
|
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:
|
|
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
|
|
2222
|
+
let ie = o.workflowPatches ?? [], k;
|
|
2212
2223
|
if (D?.id !== void 0) {
|
|
2213
|
-
T = D.id,
|
|
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:
|
|
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*
|
|
2256
|
+
let t = yield* ce;
|
|
2246
2257
|
return yield* d.suspend(t);
|
|
2247
2258
|
}
|
|
2248
|
-
k = yield*
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
2320
|
+
parentClosePolicy: re
|
|
2310
2321
|
}
|
|
2311
2322
|
}));
|
|
2312
2323
|
}
|
|
2313
2324
|
}));
|
|
2314
|
-
let A = o.subject?.tenantId,
|
|
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(() =>
|
|
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:
|
|
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*
|
|
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(() =>
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
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 (!
|
|
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 (!
|
|
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:
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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) => (
|
|
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:
|
|
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:
|
|
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 (
|
|
2562
|
+
return (kn(r?.startedAt)?.getTime() ?? 0) - (kn(i?.startedAt)?.getTime() ?? 0);
|
|
2552
2563
|
}), n;
|
|
2553
|
-
},
|
|
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
|
-
},
|
|
2562
|
-
let n = k(ue), r = (await t.query(n.where(
|
|
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:
|
|
2583
|
+
subject: jn(r.subject),
|
|
2573
2584
|
source: $(r.source),
|
|
2574
|
-
steps:
|
|
2575
|
-
startedAt:
|
|
2576
|
-
finishedAt:
|
|
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
|
-
},
|
|
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 {
|
|
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 };
|