@voltro/workflow 0.82.0 → 0.83.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 +286 -0
- package/dist/{cluster-MboOAwcv.js → cluster-NnChVZoK.js} +9 -9
- package/dist/cluster.d.ts +7 -4
- package/dist/cluster.js +1 -1
- package/dist/{clusterDiagnostics-Dc7yBP3b.js → clusterDiagnostics-CGUtnJkX.js} +145 -130
- package/dist/clusterTestSuite.d.ts +1 -1
- package/dist/clusterTestSuite.js +2 -2
- package/dist/index.d.ts +17 -0
- package/dist/index.js +3 -3
- package/dist/{src-BAN5Xovf.js → src--sCbH8Fs.js} +656 -655
- package/package.json +4 -4
|
@@ -1,179 +1,180 @@
|
|
|
1
1
|
import { E as e, F as t, L as n, M as r, N as i, P as a, R as o, T as s, w as c } from "./primitives-Btjhjm8P.js";
|
|
2
2
|
import { S as l, T as u, _ as d, a as f, b as p, g as m, h, i as g, l as _, n as v, u as y, v as ee, x as b } from "./journalEncryption--n5VDdYO.js";
|
|
3
|
-
import { $ as x, A as te, At as ne,
|
|
4
|
-
import { DurableClock as
|
|
5
|
-
import { Cause as
|
|
6
|
-
import { WorkflowQueuedCancellationResultSchema as
|
|
7
|
-
import { and as
|
|
8
|
-
import { createHash as
|
|
9
|
-
import { WorkflowInstance as
|
|
3
|
+
import { $ as x, A as te, At as ne, C as re, Ct as ie, D as ae, Dt as S, E as C, Et as w, F as oe, Ft as se, H as ce, Ht as T, I as E, It as le, J as ue, Kt as D, L as de, Mt as O, N as k, Nt as A, O as fe, Pt as pe, Q as j, Rt as M, S as me, T as he, Tt as N, U as ge, Ut as _e, V as ve, Z as ye, _t as be, bt as xe, ct as Se, ft as P, gt as Ce, h as we, i as Te, it as Ee, jt as De, k as Oe, kt as ke, ot as Ae, pt as je, q as Me, qt as Ne, rt as F, st as Pe, tt as Fe, v as Ie, vt as Le, w as Re, wt as ze, xt as Be, y as Ve, yt as He } from "./clusterDiagnostics-CGUtnJkX.js";
|
|
4
|
+
import { DurableClock as Ue, DurableDeferred as We, Workflow as Ge, WorkflowEngine as Ke } from "@effect/workflow";
|
|
5
|
+
import { Cause as I, Effect as L, Either as R, Exit as qe, Fiber as Je, FiberRef as Ye, Layer as Xe, Schema as z } from "effect";
|
|
6
|
+
import { WorkflowQueuedCancellationResultSchema as Ze, publishServerError as Qe } from "@voltro/protocol";
|
|
7
|
+
import { and as B, boolean as $e, derivedRowId as et, eq as V, generateId as tt, gt as H, gte as nt, id as U, inSet as rt, integer as W, isNotNull as it, isNull as G, json as K, lt as at, or as ot, queryFor as st, real as ct, reference as lt, registerRetention as ut, retentionTtlMsFromEnv as dt, table as q, text as J, timestamp as Y } from "@voltro/database";
|
|
8
|
+
import { createHash as ft, randomUUID as pt } from "node:crypto";
|
|
9
|
+
import { WorkflowInstance as mt } from "@effect/workflow/WorkflowEngine";
|
|
10
10
|
//#region src/inMemoryLayer.ts
|
|
11
|
-
var
|
|
12
|
-
id:
|
|
13
|
-
tag:
|
|
14
|
-
executionId:
|
|
15
|
-
status:
|
|
11
|
+
var ht = Ke.layerMemory, gt = q("_voltro_workflow_runs", {
|
|
12
|
+
id: U({ prefix: "wfrun" }),
|
|
13
|
+
tag: J(),
|
|
14
|
+
executionId: J().unique(),
|
|
15
|
+
status: J().oneOf([
|
|
16
16
|
"running",
|
|
17
17
|
"succeeded",
|
|
18
18
|
"failed",
|
|
19
19
|
"cancelled",
|
|
20
20
|
"suspended"
|
|
21
21
|
]).default("running"),
|
|
22
|
-
payload:
|
|
23
|
-
workflowVersion:
|
|
24
|
-
workflowPatches:
|
|
25
|
-
runnerEnteredAt:
|
|
26
|
-
runnerGeneration:
|
|
27
|
-
engineDelivery:
|
|
28
|
-
reclaimCount:
|
|
29
|
-
output:
|
|
30
|
-
subject:
|
|
31
|
-
source:
|
|
32
|
-
errorTag:
|
|
33
|
-
errorMessage:
|
|
34
|
-
cancelled:
|
|
35
|
-
discardedAt:
|
|
36
|
-
discardedBy:
|
|
37
|
-
startedAt:
|
|
38
|
-
completedAt:
|
|
39
|
-
durationMs:
|
|
40
|
-
traceId:
|
|
41
|
-
parentExecutionId:
|
|
42
|
-
parentGeneration:
|
|
43
|
-
parentClosePolicy:
|
|
22
|
+
payload: K(),
|
|
23
|
+
workflowVersion: J().nullable(),
|
|
24
|
+
workflowPatches: K().nullable(),
|
|
25
|
+
runnerEnteredAt: Y().nullable(),
|
|
26
|
+
runnerGeneration: J().nullable(),
|
|
27
|
+
engineDelivery: K().nullable(),
|
|
28
|
+
reclaimCount: W().default(0),
|
|
29
|
+
output: K().nullable(),
|
|
30
|
+
subject: K().nullable(),
|
|
31
|
+
source: J().nullable(),
|
|
32
|
+
errorTag: J().nullable(),
|
|
33
|
+
errorMessage: J().nullable(),
|
|
34
|
+
cancelled: $e().default(!1),
|
|
35
|
+
discardedAt: Y().nullable(),
|
|
36
|
+
discardedBy: J().nullable(),
|
|
37
|
+
startedAt: Y().default("now"),
|
|
38
|
+
completedAt: Y().nullable(),
|
|
39
|
+
durationMs: W().nullable(),
|
|
40
|
+
traceId: J().nullable(),
|
|
41
|
+
parentExecutionId: J().nullable(),
|
|
42
|
+
parentGeneration: J().nullable(),
|
|
43
|
+
parentClosePolicy: J().oneOf([
|
|
44
44
|
"cancel",
|
|
45
45
|
"terminate",
|
|
46
46
|
"abandon"
|
|
47
47
|
]).nullable()
|
|
48
|
-
}).index(["tag"]).index(["status"]).index(["source"]).index(["startedAt"]).index(["parentExecutionId"]).index(["parentClosePolicy"]),
|
|
49
|
-
id:
|
|
50
|
-
runId:
|
|
48
|
+
}).index(["tag"]).index(["status"]).index(["source"]).index(["startedAt"]).index(["parentExecutionId"]).index(["parentClosePolicy"]), _t = q("_voltro_workflow_run_steps", {
|
|
49
|
+
id: U({ prefix: "wfstep" }),
|
|
50
|
+
runId: lt(() => gt, {
|
|
51
51
|
index: !1,
|
|
52
52
|
onDelete: "cascade"
|
|
53
53
|
}),
|
|
54
|
-
stepName:
|
|
55
|
-
attempt:
|
|
56
|
-
status:
|
|
54
|
+
stepName: J(),
|
|
55
|
+
attempt: W().default(1),
|
|
56
|
+
status: J().oneOf([
|
|
57
57
|
"running",
|
|
58
58
|
"succeeded",
|
|
59
59
|
"failed"
|
|
60
60
|
]).default("running"),
|
|
61
|
-
input:
|
|
62
|
-
retryPolicy:
|
|
63
|
-
output:
|
|
64
|
-
errorTag:
|
|
65
|
-
errorMessage:
|
|
66
|
-
errorCause:
|
|
67
|
-
startedAt:
|
|
68
|
-
completedAt:
|
|
69
|
-
durationMs:
|
|
70
|
-
}).index(["runId", "stepName"]).index(["startedAt"]),
|
|
71
|
-
id:
|
|
72
|
-
runId:
|
|
61
|
+
input: K().nullable(),
|
|
62
|
+
retryPolicy: K().nullable(),
|
|
63
|
+
output: K().nullable(),
|
|
64
|
+
errorTag: J().nullable(),
|
|
65
|
+
errorMessage: J().nullable(),
|
|
66
|
+
errorCause: K().nullable(),
|
|
67
|
+
startedAt: Y().default("now"),
|
|
68
|
+
completedAt: Y().nullable(),
|
|
69
|
+
durationMs: W().nullable()
|
|
70
|
+
}).index(["runId", "stepName"]).index(["startedAt"]), vt = q("_voltro_workflow_run_events", {
|
|
71
|
+
id: U({ prefix: "wfev" }),
|
|
72
|
+
runId: lt(() => gt, {
|
|
73
73
|
index: !1,
|
|
74
74
|
onDelete: "cascade"
|
|
75
75
|
}),
|
|
76
|
-
eventType:
|
|
77
|
-
payload:
|
|
78
|
-
occurredAt:
|
|
79
|
-
stepName:
|
|
80
|
-
attempt:
|
|
81
|
-
}).index(["runId", "occurredAt"]).index(["eventType"]),
|
|
82
|
-
id:
|
|
83
|
-
workflowName:
|
|
84
|
-
executionId:
|
|
85
|
-
subject:
|
|
86
|
-
traceId:
|
|
87
|
-
source:
|
|
88
|
-
parentExecutionId:
|
|
89
|
-
parentGeneration:
|
|
90
|
-
parentClosePolicy:
|
|
76
|
+
eventType: J(),
|
|
77
|
+
payload: K().nullable(),
|
|
78
|
+
occurredAt: Y().default("now"),
|
|
79
|
+
stepName: J().nullable(),
|
|
80
|
+
attempt: W().nullable()
|
|
81
|
+
}).index(["runId", "occurredAt"]).index(["eventType"]), yt = q("_voltro_workflow_start_contexts", {
|
|
82
|
+
id: U({ prefix: "wfctx" }),
|
|
83
|
+
workflowName: J(),
|
|
84
|
+
executionId: J().unique(),
|
|
85
|
+
subject: K().nullable(),
|
|
86
|
+
traceId: J().nullable(),
|
|
87
|
+
source: J().nullable(),
|
|
88
|
+
parentExecutionId: J().nullable(),
|
|
89
|
+
parentGeneration: J().nullable(),
|
|
90
|
+
parentClosePolicy: J().oneOf([
|
|
91
91
|
"cancel",
|
|
92
92
|
"terminate",
|
|
93
93
|
"abandon"
|
|
94
94
|
]).nullable(),
|
|
95
|
-
createdAt:
|
|
96
|
-
}).index(["workflowName"]).index(["executionId"]).index(["parentExecutionId"]),
|
|
97
|
-
id:
|
|
98
|
-
nonce:
|
|
99
|
-
}).nonReactive(),
|
|
100
|
-
id:
|
|
101
|
-
runId:
|
|
102
|
-
workflowName:
|
|
103
|
-
executionId:
|
|
104
|
-
generation:
|
|
105
|
-
parentStatus:
|
|
95
|
+
createdAt: Y().default("now")
|
|
96
|
+
}).index(["workflowName"]).index(["executionId"]).index(["parentExecutionId"]), bt = q("_voltro_workflow_admission_locks", {
|
|
97
|
+
id: U({ prefix: "wfalk" }),
|
|
98
|
+
nonce: J()
|
|
99
|
+
}).nonReactive(), xt = q("_voltro_workflow_parent_closures", {
|
|
100
|
+
id: U({ prefix: "wfpc" }),
|
|
101
|
+
runId: J(),
|
|
102
|
+
workflowName: J(),
|
|
103
|
+
executionId: J(),
|
|
104
|
+
generation: J(),
|
|
105
|
+
parentStatus: J().oneOf([
|
|
106
106
|
"succeeded",
|
|
107
107
|
"failed",
|
|
108
108
|
"cancelled"
|
|
109
109
|
]),
|
|
110
|
-
closedAt:
|
|
111
|
-
afterChildId:
|
|
112
|
-
scanHasOpenChildren:
|
|
113
|
-
completedAt:
|
|
114
|
-
}).index(["executionId"]).index(["completedAt", "id"]).nonReactive(),
|
|
115
|
-
id:
|
|
116
|
-
runId:
|
|
117
|
-
workflowName:
|
|
118
|
-
executionId:
|
|
119
|
-
generation:
|
|
120
|
-
operation:
|
|
110
|
+
closedAt: Y(),
|
|
111
|
+
afterChildId: J().nullable(),
|
|
112
|
+
scanHasOpenChildren: $e().default(!1),
|
|
113
|
+
completedAt: Y().nullable()
|
|
114
|
+
}).index(["executionId"]).index(["completedAt", "id"]).nonReactive(), St = q("_voltro_workflow_control_requests", {
|
|
115
|
+
id: U({ prefix: "wfctl" }),
|
|
116
|
+
runId: J(),
|
|
117
|
+
workflowName: J(),
|
|
118
|
+
executionId: J(),
|
|
119
|
+
generation: J(),
|
|
120
|
+
operation: J().oneOf([
|
|
121
121
|
"cancel",
|
|
122
122
|
"terminate",
|
|
123
123
|
"resume"
|
|
124
124
|
]),
|
|
125
|
-
requestedAt:
|
|
126
|
-
owner:
|
|
127
|
-
cause:
|
|
128
|
-
parentClosureId:
|
|
129
|
-
resumeJournal:
|
|
130
|
-
dispatchAttempts:
|
|
131
|
-
result:
|
|
132
|
-
}).index(["runId"]).index(["parentClosureId", "id"]).nonReactive(),
|
|
133
|
-
id:
|
|
134
|
-
workflowName:
|
|
135
|
-
tenantId:
|
|
136
|
-
sourceId:
|
|
137
|
-
sourceKind:
|
|
125
|
+
requestedAt: Y(),
|
|
126
|
+
owner: K().nullable(),
|
|
127
|
+
cause: K().nullable(),
|
|
128
|
+
parentClosureId: J().nullable(),
|
|
129
|
+
resumeJournal: K().nullable(),
|
|
130
|
+
dispatchAttempts: W().default(0),
|
|
131
|
+
result: K().nullable()
|
|
132
|
+
}).index(["runId"]).index(["parentClosureId", "id"]).nonReactive(), Ct = q("_voltro_workflow_failure_reports", {
|
|
133
|
+
id: U({ prefix: "wffr" }),
|
|
134
|
+
workflowName: J(),
|
|
135
|
+
tenantId: J().nullable(),
|
|
136
|
+
sourceId: J(),
|
|
137
|
+
sourceKind: J().oneOf([
|
|
138
138
|
"submission",
|
|
139
139
|
"intent",
|
|
140
140
|
"run"
|
|
141
141
|
]),
|
|
142
|
-
handler:
|
|
143
|
-
callerContext:
|
|
144
|
-
report:
|
|
145
|
-
handoffReceiptId:
|
|
146
|
-
handoffAttempt:
|
|
147
|
-
acceptedExecutionId:
|
|
148
|
-
}).index(["sourceKind", "sourceId"]).nonReactive(),
|
|
149
|
-
id:
|
|
150
|
-
workflowName:
|
|
151
|
-
tenantId:
|
|
152
|
-
ledgerId:
|
|
153
|
-
executionId:
|
|
154
|
-
runId:
|
|
155
|
-
receiptsBound:
|
|
156
|
-
preparedExecutionId:
|
|
157
|
-
dispatchAttempts:
|
|
158
|
-
failureId:
|
|
159
|
-
retry:
|
|
160
|
-
payload:
|
|
161
|
-
callerContext:
|
|
162
|
-
intentIds:
|
|
163
|
-
eviction:
|
|
164
|
-
}).nonReactive(),
|
|
165
|
-
id:
|
|
166
|
-
workflowName:
|
|
167
|
-
tenantId:
|
|
168
|
-
pendingId:
|
|
169
|
-
submissionId:
|
|
170
|
-
terminal:
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
142
|
+
handler: J().nullable(),
|
|
143
|
+
callerContext: K().nullable(),
|
|
144
|
+
report: K(),
|
|
145
|
+
handoffReceiptId: J().nullable(),
|
|
146
|
+
handoffAttempt: W().default(0),
|
|
147
|
+
acceptedExecutionId: J().nullable()
|
|
148
|
+
}).index(["sourceKind", "sourceId"]).nonReactive(), wt = q("_voltro_workflow_submissions", {
|
|
149
|
+
id: U({ prefix: "wfsub" }),
|
|
150
|
+
workflowName: J(),
|
|
151
|
+
tenantId: J().nullable(),
|
|
152
|
+
ledgerId: J(),
|
|
153
|
+
executionId: J().nullable(),
|
|
154
|
+
runId: J().nullable(),
|
|
155
|
+
receiptsBound: $e().default(!1),
|
|
156
|
+
preparedExecutionId: J().nullable(),
|
|
157
|
+
dispatchAttempts: W().default(0),
|
|
158
|
+
failureId: J().nullable(),
|
|
159
|
+
retry: K(),
|
|
160
|
+
payload: K(),
|
|
161
|
+
callerContext: K().nullable(),
|
|
162
|
+
intentIds: K(),
|
|
163
|
+
eviction: K().nullable()
|
|
164
|
+
}).nonReactive(), Tt = q("_voltro_workflow_start_receipts", {
|
|
165
|
+
id: U({ prefix: "wfrc" }),
|
|
166
|
+
workflowName: J(),
|
|
167
|
+
tenantId: J().nullable(),
|
|
168
|
+
pendingId: J().maxLength(64),
|
|
169
|
+
submissionId: J().maxLength(64).nullable(),
|
|
170
|
+
terminal: K().nullable(),
|
|
171
|
+
requestFingerprint: J().maxLength(64).nullable()
|
|
172
|
+
}).index(["pendingId"]).nonReactive(), Et = q("_voltro_workflow_pending", {
|
|
173
|
+
id: U({ prefix: "wfp" }),
|
|
174
|
+
tenantId: J().nullable(),
|
|
175
|
+
workflowName: J(),
|
|
176
|
+
controlKey: J(),
|
|
177
|
+
mode: J().oneOf([
|
|
177
178
|
"debounce",
|
|
178
179
|
"batch",
|
|
179
180
|
"throttle",
|
|
@@ -181,24 +182,24 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
181
182
|
"paused",
|
|
182
183
|
"delayed"
|
|
183
184
|
]),
|
|
184
|
-
payload:
|
|
185
|
-
callerContext:
|
|
186
|
-
queuedAppVersion:
|
|
187
|
-
queuedSchemaFingerprint:
|
|
188
|
-
priority:
|
|
189
|
-
dueAt:
|
|
190
|
-
deadlineAt:
|
|
191
|
-
collapsed:
|
|
192
|
-
firstSeenAt:
|
|
193
|
-
updatedAt:
|
|
194
|
-
attempts:
|
|
195
|
-
lastError:
|
|
196
|
-
deadLetteredAt:
|
|
197
|
-
}).index(["workflowName", "controlKey"]).index(["dueAt"]).index(["workflowName", "mode"]).index(["tenantId"]),
|
|
198
|
-
id:
|
|
199
|
-
tenantId:
|
|
200
|
-
workflowName:
|
|
201
|
-
outcome:
|
|
185
|
+
payload: K(),
|
|
186
|
+
callerContext: K().nullable(),
|
|
187
|
+
queuedAppVersion: J().nullable(),
|
|
188
|
+
queuedSchemaFingerprint: J().nullable(),
|
|
189
|
+
priority: W().default(0),
|
|
190
|
+
dueAt: Y(),
|
|
191
|
+
deadlineAt: Y().nullable(),
|
|
192
|
+
collapsed: W().default(1),
|
|
193
|
+
firstSeenAt: Y().default("now"),
|
|
194
|
+
updatedAt: Y().default("now"),
|
|
195
|
+
attempts: W().default(0),
|
|
196
|
+
lastError: J().nullable(),
|
|
197
|
+
deadLetteredAt: Y().nullable()
|
|
198
|
+
}).index(["workflowName", "controlKey"]).index(["dueAt"]).index(["workflowName", "mode"]).index(["tenantId"]), Dt = q("_voltro_workflow_admissions", {
|
|
199
|
+
id: U({ prefix: "wfadm" }),
|
|
200
|
+
tenantId: J().nullable(),
|
|
201
|
+
workflowName: J(),
|
|
202
|
+
outcome: J().oneOf([
|
|
202
203
|
"admitted",
|
|
203
204
|
"dropped",
|
|
204
205
|
"skipped",
|
|
@@ -206,34 +207,34 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
206
207
|
"expired",
|
|
207
208
|
"discarded"
|
|
208
209
|
]),
|
|
209
|
-
mode:
|
|
210
|
-
reason:
|
|
211
|
-
collapsed:
|
|
212
|
-
waitedMs:
|
|
213
|
-
executionId:
|
|
214
|
-
runId:
|
|
215
|
-
singletonKey:
|
|
216
|
-
concurrencyKey:
|
|
217
|
-
concurrencyReservation:
|
|
218
|
-
rateKey:
|
|
219
|
-
admittedAt:
|
|
220
|
-
expiresAt:
|
|
221
|
-
releasedAt:
|
|
222
|
-
}).index(["workflowName", "admittedAt"]).index(["concurrencyKey", "releasedAt"]).index(["singletonKey", "releasedAt"]).index(["rateKey", "admittedAt"]).index(["executionId"]).index(["tenantId"]),
|
|
223
|
-
id:
|
|
224
|
-
pausedAt:
|
|
225
|
-
pausedBy:
|
|
226
|
-
reason:
|
|
227
|
-
}),
|
|
210
|
+
mode: J().nullable(),
|
|
211
|
+
reason: J().nullable(),
|
|
212
|
+
collapsed: W().default(1),
|
|
213
|
+
waitedMs: ct().nullable().narrowedFrom("integer"),
|
|
214
|
+
executionId: J().nullable(),
|
|
215
|
+
runId: J().nullable(),
|
|
216
|
+
singletonKey: J().nullable(),
|
|
217
|
+
concurrencyKey: J().nullable(),
|
|
218
|
+
concurrencyReservation: K().nullable(),
|
|
219
|
+
rateKey: J().nullable(),
|
|
220
|
+
admittedAt: Y().default("now"),
|
|
221
|
+
expiresAt: Y().nullable(),
|
|
222
|
+
releasedAt: Y().nullable()
|
|
223
|
+
}).index(["workflowName", "admittedAt"]).index(["concurrencyKey", "releasedAt"]).index(["singletonKey", "releasedAt"]).index(["rateKey", "admittedAt"]).index(["executionId"]).index(["tenantId"]), Ot = q("_voltro_workflow_pauses", {
|
|
224
|
+
id: U({ prefix: "wfpause" }),
|
|
225
|
+
pausedAt: Y().default("now"),
|
|
226
|
+
pausedBy: J().nullable(),
|
|
227
|
+
reason: J().nullable()
|
|
228
|
+
}), kt = async (e, t) => {
|
|
228
229
|
if (!Number.isFinite(t.now) || !Number.isFinite(new Date(t.now).getTime())) throw Error("Queued cancellation requires a valid timestamp");
|
|
229
|
-
let n = await
|
|
230
|
+
let n = await Se(e, t.receiptId);
|
|
230
231
|
if (n === void 0 || n.workflowName !== t.workflowName || n.tenantId !== t.tenantId) throw Error("Queued cancellation receipt is missing or belongs to another workflow or tenant");
|
|
231
232
|
if (n.terminal !== null) return {
|
|
232
233
|
kind: "terminal",
|
|
233
234
|
outcome: n.terminal
|
|
234
235
|
};
|
|
235
236
|
if (n.submissionId !== null) {
|
|
236
|
-
let t = await
|
|
237
|
+
let t = await N(e, n.submissionId);
|
|
237
238
|
if (t === void 0 || !t.receiptsBound || t.workflowName !== n.workflowName || t.tenantId !== n.tenantId || !t.intentIds.includes(n.pendingId)) throw Error("Queued cancellation receipt has no matching submission");
|
|
238
239
|
return {
|
|
239
240
|
kind: "submitted",
|
|
@@ -241,8 +242,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
241
242
|
};
|
|
242
243
|
}
|
|
243
244
|
let [r] = await e.query({
|
|
244
|
-
table:
|
|
245
|
-
predicate:
|
|
245
|
+
table: k,
|
|
246
|
+
predicate: V("id", n.pendingId),
|
|
246
247
|
lock: "update",
|
|
247
248
|
order: [],
|
|
248
249
|
take: 1,
|
|
@@ -250,13 +251,13 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
250
251
|
projection: void 0
|
|
251
252
|
});
|
|
252
253
|
if (r === void 0) throw Error("Queued cancellation has no pending input or submission");
|
|
253
|
-
let i =
|
|
254
|
+
let i = F(r);
|
|
254
255
|
if (i.workflowName !== n.workflowName || i.tenantId !== n.tenantId || i.deadLetteredAt !== void 0) throw Error("Queued cancellation input has contradictory ownership or is dead-lettered");
|
|
255
256
|
let a = {
|
|
256
257
|
kind: "cancelled",
|
|
257
258
|
at: t.now
|
|
258
259
|
};
|
|
259
|
-
if (await
|
|
260
|
+
if (await P(e, {
|
|
260
261
|
pendingId: n.pendingId,
|
|
261
262
|
workflowName: n.workflowName,
|
|
262
263
|
tenantId: n.tenantId,
|
|
@@ -266,31 +267,31 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
266
267
|
kind: "terminal",
|
|
267
268
|
outcome: a
|
|
268
269
|
};
|
|
269
|
-
},
|
|
270
|
-
id:
|
|
271
|
-
runId:
|
|
272
|
-
workflowName:
|
|
273
|
-
executionId:
|
|
274
|
-
generation:
|
|
275
|
-
parentStatus:
|
|
276
|
-
closedAt:
|
|
277
|
-
afterChildId:
|
|
278
|
-
scanHasOpenChildren:
|
|
279
|
-
completedAt:
|
|
280
|
-
}),
|
|
281
|
-
id:
|
|
282
|
-
tag:
|
|
283
|
-
executionId:
|
|
284
|
-
status:
|
|
285
|
-
runnerGeneration:
|
|
286
|
-
parentGeneration:
|
|
287
|
-
parentClosePolicy:
|
|
288
|
-
}),
|
|
270
|
+
}, At = "_voltro_workflow_parent_closures", X = z.NonEmptyString, jt = z.Struct({
|
|
271
|
+
id: X,
|
|
272
|
+
runId: X,
|
|
273
|
+
workflowName: X,
|
|
274
|
+
executionId: X,
|
|
275
|
+
generation: X,
|
|
276
|
+
parentStatus: z.Literal("succeeded", "failed", "cancelled"),
|
|
277
|
+
closedAt: z.DateFromSelf,
|
|
278
|
+
afterChildId: z.NullOr(X),
|
|
279
|
+
scanHasOpenChildren: z.Boolean,
|
|
280
|
+
completedAt: z.NullOr(z.DateFromSelf)
|
|
281
|
+
}), Mt = z.Struct({
|
|
282
|
+
id: X,
|
|
283
|
+
tag: X,
|
|
284
|
+
executionId: X,
|
|
285
|
+
status: z.Literal("running", "suspended", "succeeded", "failed", "cancelled"),
|
|
286
|
+
runnerGeneration: z.optional(z.NullOr(X)),
|
|
287
|
+
parentGeneration: z.optional(z.NullOr(X)),
|
|
288
|
+
parentClosePolicy: z.NullOr(z.Literal("cancel", "terminate", "abandon"))
|
|
289
|
+
}), Nt = async (e, t, n) => {
|
|
289
290
|
if (t.parentClosePolicy !== "cancel" && t.parentClosePolicy !== "terminate") return !1;
|
|
290
291
|
if (typeof t.parentExecutionId != "string" || t.parentExecutionId.length === 0 || typeof t.parentGeneration != "string" || t.parentGeneration.length === 0) throw Error("Child entry requires its original parent execution and generation");
|
|
291
292
|
let r = n ?? (await e.query({
|
|
292
|
-
table:
|
|
293
|
-
predicate:
|
|
293
|
+
table: At,
|
|
294
|
+
predicate: B(V("executionId", t.parentExecutionId), V("generation", t.parentGeneration)),
|
|
294
295
|
lock: "update",
|
|
295
296
|
order: [],
|
|
296
297
|
take: 1,
|
|
@@ -298,19 +299,19 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
298
299
|
projection: void 0
|
|
299
300
|
}))[0];
|
|
300
301
|
if (r === void 0) return !1;
|
|
301
|
-
let i =
|
|
302
|
+
let i = z.decodeUnknownSync(jt)(r);
|
|
302
303
|
if (i.executionId !== t.parentExecutionId || i.generation !== t.parentGeneration) return !1;
|
|
303
|
-
let a =
|
|
304
|
+
let a = z.decodeUnknownSync(Mt)(t), o = et("wfctl", JSON.stringify([
|
|
304
305
|
"parent-close",
|
|
305
306
|
i.id,
|
|
306
307
|
a.id
|
|
307
|
-
])), s = await
|
|
308
|
+
])), s = await ae(e, o);
|
|
308
309
|
if (s !== void 0) {
|
|
309
310
|
if (s.runId !== a.id || s.workflowName !== a.tag || s.executionId !== a.executionId || s.operation === "resume" || s.cause?.reason !== "parent-close" || s.cause.detail?.closureId !== i.id) throw Error("Parent closure receipt belongs to another child");
|
|
310
311
|
} else {
|
|
311
312
|
if (a.status !== "running" && a.status !== "suspended") return !1;
|
|
312
313
|
if (a.runnerGeneration === void 0 || a.runnerGeneration === null) throw Error("Child entry requires its own generation");
|
|
313
|
-
await
|
|
314
|
+
await Ve(e, {
|
|
314
315
|
id: o,
|
|
315
316
|
runId: a.id,
|
|
316
317
|
workflowName: a.tag,
|
|
@@ -332,10 +333,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
332
333
|
});
|
|
333
334
|
}
|
|
334
335
|
return !0;
|
|
335
|
-
},
|
|
336
|
+
}, Pt = async (e, t, n = Date.now()) => {
|
|
336
337
|
let [r] = await e.query({
|
|
337
|
-
table:
|
|
338
|
-
predicate:
|
|
338
|
+
table: At,
|
|
339
|
+
predicate: V("id", t),
|
|
339
340
|
lock: "update",
|
|
340
341
|
order: [],
|
|
341
342
|
take: 1,
|
|
@@ -343,7 +344,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
343
344
|
projection: void 0
|
|
344
345
|
});
|
|
345
346
|
if (r === void 0) throw Error("Parent closure is missing");
|
|
346
|
-
let i =
|
|
347
|
+
let i = z.decodeUnknownSync(jt)(r);
|
|
347
348
|
if (i.completedAt !== null) return {
|
|
348
349
|
scanned: 0,
|
|
349
350
|
controls: 0,
|
|
@@ -352,7 +353,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
352
353
|
if (!Number.isFinite(n)) throw Error("Parent closure requires a finite completion timestamp");
|
|
353
354
|
let a = await e.query({
|
|
354
355
|
table: "_voltro_workflow_runs",
|
|
355
|
-
predicate:
|
|
356
|
+
predicate: B(V("parentExecutionId", i.executionId), ...i.afterChildId === null ? [] : [H("id", i.afterChildId)]),
|
|
356
357
|
lock: "update",
|
|
357
358
|
order: [{
|
|
358
359
|
column: "id",
|
|
@@ -363,10 +364,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
363
364
|
projection: void 0
|
|
364
365
|
}), o = 0, s = i.scanHasOpenChildren, c = null;
|
|
365
366
|
for (let t of a) {
|
|
366
|
-
let r =
|
|
367
|
+
let r = z.decodeUnknownSync(Mt)(t);
|
|
367
368
|
if (c = r.id, r.parentClosePolicy !== null && r.parentClosePolicy !== "abandon") {
|
|
368
369
|
if (r.parentGeneration === void 0 || r.parentGeneration === null) throw Error("Parent closure cannot attribute a child without its parent generation");
|
|
369
|
-
r.parentGeneration === i.generation && ((r.status === "running" || r.status === "suspended") && (s = !0), await
|
|
370
|
+
r.parentGeneration === i.generation && ((r.status === "running" || r.status === "suspended") && (s = !0), await Nt(e, t, i) && (o++, r.status === "suspended" && typeof r.runnerGeneration == "string" && await Vt(e, {
|
|
370
371
|
runId: r.id,
|
|
371
372
|
workflowName: r.tag,
|
|
372
373
|
executionId: r.executionId,
|
|
@@ -374,8 +375,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
374
375
|
}, n)));
|
|
375
376
|
}
|
|
376
377
|
}
|
|
377
|
-
let l = a.length < 100, u = l && !s && !await
|
|
378
|
-
if (await e.update(
|
|
378
|
+
let l = a.length < 100, u = l && !s && !await Re(e, i.id);
|
|
379
|
+
if (await e.update(At, i.id, {
|
|
379
380
|
afterChildId: l ? null : c,
|
|
380
381
|
scanHasOpenChildren: !l && s,
|
|
381
382
|
completedAt: u ? new Date(n) : null
|
|
@@ -385,9 +386,9 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
385
386
|
controls: o,
|
|
386
387
|
wrapped: l
|
|
387
388
|
};
|
|
388
|
-
},
|
|
389
|
-
requestId:
|
|
390
|
-
restartToken:
|
|
389
|
+
}, Ft = "_voltro_workflow_runs", It = z.NullOr(z.Struct({
|
|
390
|
+
requestId: z.NonEmptyString,
|
|
391
|
+
restartToken: z.NullOr(z.NonEmptyString)
|
|
391
392
|
})), Lt = async (e, t, n, r) => {
|
|
392
393
|
if (typeof t.id != "string") throw Error("Child entry has no allocated run identity");
|
|
393
394
|
let i = {
|
|
@@ -395,7 +396,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
395
396
|
workflowName: n.workflowName,
|
|
396
397
|
executionId: n.executionId,
|
|
397
398
|
generation: n.generation
|
|
398
|
-
}, a = await nn(e, i), o = await
|
|
399
|
+
}, a = await nn(e, i), o = await Nt(e, t);
|
|
399
400
|
if (!a && !o) return;
|
|
400
401
|
let s = await Ut(e, {
|
|
401
402
|
owner: i,
|
|
@@ -411,7 +412,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
411
412
|
terminalEvent: s.terminalEvent
|
|
412
413
|
};
|
|
413
414
|
}, Rt = async (e, t) => {
|
|
414
|
-
let n = await
|
|
415
|
+
let n = await Te(e, t);
|
|
415
416
|
return {
|
|
416
417
|
...await Lt(e, n.row, t, n.previous) ?? {
|
|
417
418
|
kind: "entered",
|
|
@@ -427,26 +428,26 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
427
428
|
t.generation
|
|
428
429
|
].some((e) => e.length === 0) || typeof t.initialRow.id != "string" || t.initialRow.id.length === 0 || !Number.isFinite(t.now)) throw Error("Workflow entry requires allocated identities and a finite timestamp");
|
|
429
430
|
let n = (await e.query({
|
|
430
|
-
table:
|
|
431
|
-
predicate:
|
|
431
|
+
table: Ft,
|
|
432
|
+
predicate: V("executionId", t.executionId),
|
|
432
433
|
lock: "update",
|
|
433
434
|
order: [],
|
|
434
435
|
take: 1,
|
|
435
436
|
skip: void 0,
|
|
436
437
|
projection: void 0
|
|
437
|
-
}))[0], r =
|
|
438
|
+
}))[0], r = z.decodeUnknownSync(It)(t.delivery ?? null), i = (r) => Lt(e, r, t, n);
|
|
438
439
|
if (n === void 0) {
|
|
439
440
|
if (r !== null && r.restartToken !== null) throw Error("Workflow restart delivery has no resident authorization");
|
|
440
441
|
if ((await e.query({
|
|
441
442
|
table: "_voltro_workflow_parent_closures",
|
|
442
|
-
predicate:
|
|
443
|
+
predicate: V("executionId", t.executionId),
|
|
443
444
|
lock: "update",
|
|
444
445
|
order: [],
|
|
445
446
|
take: 1,
|
|
446
447
|
skip: void 0,
|
|
447
448
|
projection: ["id"]
|
|
448
449
|
})).length !== 0) throw Error("Workflow execution is already terminal; restore its engine journal instead of re-entering the body");
|
|
449
|
-
let n = await e.insert(
|
|
450
|
+
let n = await e.insert(Ft, {
|
|
450
451
|
...t.initialRow,
|
|
451
452
|
tag: t.workflowName,
|
|
452
453
|
executionId: t.executionId,
|
|
@@ -463,7 +464,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
463
464
|
};
|
|
464
465
|
}
|
|
465
466
|
if (n.tag !== t.workflowName || typeof n.id != "string") throw Error("Workflow entry execution belongs to a different resident run");
|
|
466
|
-
let a =
|
|
467
|
+
let a = z.decodeUnknownSync(It)(n.engineDelivery ?? null);
|
|
467
468
|
if (a?.requestId !== r?.requestId || a?.restartToken !== r?.restartToken) {
|
|
468
469
|
if (n.status === "failed" && r !== null && r.restartToken !== null && a?.requestId === r.requestId) return Rt(e, {
|
|
469
470
|
runId: n.id,
|
|
@@ -488,7 +489,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
488
489
|
executionId: t.executionId,
|
|
489
490
|
generation: n.runnerGeneration
|
|
490
491
|
};
|
|
491
|
-
if (await
|
|
492
|
+
if (await re(e, r)) {
|
|
492
493
|
let i = await Ut(e, {
|
|
493
494
|
owner: r,
|
|
494
495
|
now: t.now,
|
|
@@ -513,7 +514,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
513
514
|
if (typeof s != "number" || !Number.isSafeInteger(s) || s < 0) throw Error("Workflow entry has an invalid resident reclaim counter");
|
|
514
515
|
let c = o ? s + 1 : 0;
|
|
515
516
|
if (!Number.isSafeInteger(c)) throw Error("Workflow reclaim counter exhausted");
|
|
516
|
-
let l = await e.update(
|
|
517
|
+
let l = await e.update(Ft, n.id, {
|
|
517
518
|
runnerGeneration: t.generation,
|
|
518
519
|
runnerEnteredAt: new Date(t.now),
|
|
519
520
|
reclaimCount: c,
|
|
@@ -525,7 +526,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
525
526
|
});
|
|
526
527
|
if (l === null) throw Error("Workflow run disappeared while entering its new generation");
|
|
527
528
|
let u = await i(l);
|
|
528
|
-
return u === void 0 ? (n.status === "suspended" && n.runnerEnteredAt === null && typeof n.runnerGeneration == "string" && await
|
|
529
|
+
return u === void 0 ? (n.status === "suspended" && n.runnerEnteredAt === null && typeof n.runnerGeneration == "string" && await Oe(e, {
|
|
529
530
|
runId: n.id,
|
|
530
531
|
workflowName: t.workflowName,
|
|
531
532
|
executionId: t.executionId,
|
|
@@ -543,8 +544,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
543
544
|
t.generation
|
|
544
545
|
].some((e) => e.length === 0)) throw Error("Workflow runner ownership requires non-empty identities");
|
|
545
546
|
let n = (await e.query({
|
|
546
|
-
table:
|
|
547
|
-
predicate:
|
|
547
|
+
table: Ft,
|
|
548
|
+
predicate: V("id", t.runId),
|
|
548
549
|
lock: "update",
|
|
549
550
|
order: [],
|
|
550
551
|
take: 1,
|
|
@@ -555,7 +556,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
555
556
|
return n;
|
|
556
557
|
}, Vt = async (e, t, n) => {
|
|
557
558
|
let r = await Bt(e, t);
|
|
558
|
-
if (r.runnerGeneration !== t.generation || r.status !== "suspended" || r.runnerEnteredAt !== null || !await
|
|
559
|
+
if (r.runnerGeneration !== t.generation || r.status !== "suspended" || r.runnerEnteredAt !== null || !await re(e, t)) return !1;
|
|
559
560
|
if ((await Ut(e, {
|
|
560
561
|
owner: t,
|
|
561
562
|
now: n,
|
|
@@ -567,7 +568,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
567
568
|
let r = await Bt(e, t);
|
|
568
569
|
if (r.runnerGeneration !== t.generation) return { kind: "superseded" };
|
|
569
570
|
if (r.status !== "running") return { kind: "not-running" };
|
|
570
|
-
let i = await e.update(
|
|
571
|
+
let i = await e.update(Ft, t.runId, {
|
|
571
572
|
status: "suspended",
|
|
572
573
|
runnerEnteredAt: null,
|
|
573
574
|
errorTag: n.errorTag,
|
|
@@ -584,18 +585,18 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
584
585
|
if (r.status !== n) return { kind: "not-running" };
|
|
585
586
|
if (!Number.isFinite(t.now) || !Number.isFinite(t.durationMs) || t.durationMs < 0) throw Error("Workflow completion requires finite time and non-negative duration");
|
|
586
587
|
let i = t.outcome, a = null;
|
|
587
|
-
if (i.status === "failed" && (a = `wffr_${
|
|
588
|
+
if (i.status === "failed" && (a = `wffr_${ft("sha256").update(JSON.stringify([
|
|
588
589
|
"run",
|
|
589
590
|
t.owner.workflowName,
|
|
590
591
|
t.owner.runId,
|
|
591
592
|
t.owner.generation
|
|
592
|
-
])).digest("hex").slice(0, 40)}`, await
|
|
593
|
+
])).digest("hex").slice(0, 40)}`, await M(e, {
|
|
593
594
|
id: a,
|
|
594
595
|
sourceKind: "run",
|
|
595
596
|
sourceId: t.owner.runId,
|
|
596
597
|
workflowName: t.owner.workflowName,
|
|
597
598
|
tenantId: i.tenantId,
|
|
598
|
-
handler: await
|
|
599
|
+
handler: await A(e, t.owner.executionId, t.owner.workflowName, i.tenantId) ? null : i.handler,
|
|
599
600
|
callerContext: i.callerContext,
|
|
600
601
|
report: {
|
|
601
602
|
workflow: t.owner.workflowName,
|
|
@@ -607,28 +608,28 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
607
608
|
reason: "the run failed",
|
|
608
609
|
failedAt: t.now
|
|
609
610
|
}
|
|
610
|
-
}), await
|
|
611
|
-
let n = (await
|
|
611
|
+
}), await O(e, a, t.now)), i.status === "cancelled") {
|
|
612
|
+
let n = (await C((t) => e.query({
|
|
612
613
|
...t,
|
|
613
614
|
lock: "update"
|
|
614
615
|
}), t.owner)).map((e) => ({
|
|
615
616
|
request: e,
|
|
616
|
-
cause:
|
|
617
|
+
cause: me(e)
|
|
617
618
|
})).find((e) => e.cause !== void 0);
|
|
618
619
|
if (n !== void 0 && n.cause !== void 0) {
|
|
619
|
-
let i =
|
|
620
|
-
a = `wffr_${
|
|
620
|
+
let i = z.decodeUnknownOption(z.Struct({ tenantId: z.NullOr(z.String) }))(r.subject), o = n.request.owner?.tenantId ?? (i._tag === "Some" ? i.value.tenantId : null);
|
|
621
|
+
a = `wffr_${ft("sha256").update(JSON.stringify([
|
|
621
622
|
"finish-timeout",
|
|
622
623
|
t.owner.workflowName,
|
|
623
624
|
t.owner.runId,
|
|
624
625
|
t.owner.generation
|
|
625
|
-
])).digest("hex").slice(0, 40)}`, await
|
|
626
|
+
])).digest("hex").slice(0, 40)}`, await M(e, {
|
|
626
627
|
id: a,
|
|
627
628
|
sourceKind: "run",
|
|
628
629
|
sourceId: t.owner.runId,
|
|
629
630
|
workflowName: t.owner.workflowName,
|
|
630
631
|
tenantId: o,
|
|
631
|
-
handler: await
|
|
632
|
+
handler: await A(e, t.owner.executionId, t.owner.workflowName, o) ? null : n.cause.detail.onFailure,
|
|
632
633
|
callerContext: {
|
|
633
634
|
subject: r.subject ?? null,
|
|
634
635
|
traceId: r.traceId ?? null,
|
|
@@ -647,10 +648,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
647
648
|
reason: n.cause.reason,
|
|
648
649
|
failedAt: t.now
|
|
649
650
|
}
|
|
650
|
-
}), await
|
|
651
|
+
}), await O(e, a, t.now);
|
|
651
652
|
}
|
|
652
653
|
}
|
|
653
|
-
let o = await e.update(
|
|
654
|
+
let o = await e.update(Ft, t.owner.runId, {
|
|
654
655
|
status: i.status,
|
|
655
656
|
completedAt: new Date(t.now),
|
|
656
657
|
durationMs: t.durationMs,
|
|
@@ -662,7 +663,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
662
663
|
});
|
|
663
664
|
if (o === null) throw Error("Workflow run disappeared during terminal recording");
|
|
664
665
|
await e.insert("_voltro_workflow_parent_closures", {
|
|
665
|
-
id:
|
|
666
|
+
id: et("wfpc", JSON.stringify([t.owner.runId, t.owner.generation])),
|
|
666
667
|
runId: t.owner.runId,
|
|
667
668
|
workflowName: t.owner.workflowName,
|
|
668
669
|
executionId: t.owner.executionId,
|
|
@@ -674,7 +675,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
674
675
|
completedAt: null
|
|
675
676
|
});
|
|
676
677
|
let s = await e.insert("_voltro_workflow_run_events", {
|
|
677
|
-
id:
|
|
678
|
+
id: et("wfev", JSON.stringify([
|
|
678
679
|
"terminal",
|
|
679
680
|
t.owner.runId,
|
|
680
681
|
t.owner.generation
|
|
@@ -694,11 +695,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
694
695
|
} : {}
|
|
695
696
|
}
|
|
696
697
|
});
|
|
697
|
-
await
|
|
698
|
-
for await (let n of
|
|
698
|
+
await fe(e, t), await x(e, t.owner.executionId, t.now);
|
|
699
|
+
for await (let n of He(e, t.owner.executionId, t.owner.workflowName)) {
|
|
699
700
|
let [r] = await e.query({
|
|
700
701
|
table: te,
|
|
701
|
-
predicate:
|
|
702
|
+
predicate: V("id", n.ledgerId),
|
|
702
703
|
lock: "update",
|
|
703
704
|
order: [],
|
|
704
705
|
take: 1,
|
|
@@ -714,43 +715,43 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
714
715
|
failureId: a,
|
|
715
716
|
terminalEvent: s
|
|
716
717
|
};
|
|
717
|
-
}, Wt = (e, t) => Ut(e, t, "running"), Gt =
|
|
718
|
-
id:
|
|
719
|
-
receiptId:
|
|
720
|
-
workflowName:
|
|
721
|
-
tenantId:
|
|
722
|
-
requestedAt:
|
|
723
|
-
cause:
|
|
724
|
-
target:
|
|
725
|
-
controlBinding:
|
|
726
|
-
}).index(["receiptId"]).index(["workflowName", "id"]).nonReactive(), Kt =
|
|
727
|
-
reason:
|
|
728
|
-
detail:
|
|
729
|
-
key:
|
|
730
|
-
value:
|
|
718
|
+
}, Wt = (e, t) => Ut(e, t, "running"), Gt = q("_voltro_workflow_queued_cancellations", {
|
|
719
|
+
id: U({ prefix: "wfqc" }),
|
|
720
|
+
receiptId: J(),
|
|
721
|
+
workflowName: J(),
|
|
722
|
+
tenantId: J().nullable(),
|
|
723
|
+
requestedAt: Y(),
|
|
724
|
+
cause: K().nullable(),
|
|
725
|
+
target: K(),
|
|
726
|
+
controlBinding: K().nullable()
|
|
727
|
+
}).index(["receiptId"]).index(["workflowName", "id"]).nonReactive(), Kt = z.NullOr(z.Struct({
|
|
728
|
+
reason: z.NonEmptyString,
|
|
729
|
+
detail: z.optional(z.Record({
|
|
730
|
+
key: z.String,
|
|
731
|
+
value: z.Unknown
|
|
731
732
|
}))
|
|
732
|
-
})), qt =
|
|
733
|
-
id:
|
|
734
|
-
receiptId:
|
|
735
|
-
workflowName:
|
|
736
|
-
tenantId:
|
|
737
|
-
requestedAt:
|
|
733
|
+
})), qt = z.Struct({
|
|
734
|
+
id: z.NonEmptyString,
|
|
735
|
+
receiptId: z.NonEmptyString,
|
|
736
|
+
workflowName: z.NonEmptyString,
|
|
737
|
+
tenantId: z.NullOr(z.String),
|
|
738
|
+
requestedAt: z.DateFromSelf,
|
|
738
739
|
cause: Kt,
|
|
739
|
-
controlBinding:
|
|
740
|
-
controlId:
|
|
741
|
-
runId:
|
|
742
|
-
executionId:
|
|
743
|
-
generation:
|
|
740
|
+
controlBinding: z.NullOr(z.Struct({
|
|
741
|
+
controlId: z.NonEmptyString,
|
|
742
|
+
runId: z.NonEmptyString,
|
|
743
|
+
executionId: z.NonEmptyString,
|
|
744
|
+
generation: z.NonEmptyString
|
|
744
745
|
})),
|
|
745
|
-
target:
|
|
746
|
-
kind:
|
|
747
|
-
submissionId:
|
|
748
|
-
}),
|
|
749
|
-
kind:
|
|
750
|
-
receipt:
|
|
746
|
+
target: z.Union(z.Struct({
|
|
747
|
+
kind: z.Literal("submission"),
|
|
748
|
+
submissionId: z.NonEmptyString
|
|
749
|
+
}), z.Struct({
|
|
750
|
+
kind: z.Literal("terminal"),
|
|
751
|
+
receipt: z.Unknown
|
|
751
752
|
}))
|
|
752
753
|
}), Jt = (e) => {
|
|
753
|
-
let t =
|
|
754
|
+
let t = z.decodeUnknownSync(qt)(e);
|
|
754
755
|
if (!Number.isFinite(t.requestedAt.getTime())) throw Error("Queued cancellation request has an invalid timestamp");
|
|
755
756
|
if (t.target.kind === "submission") return {
|
|
756
757
|
...t,
|
|
@@ -769,7 +770,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
769
770
|
}, Yt = async (e, t) => {
|
|
770
771
|
let [n] = await e.query({
|
|
771
772
|
table: Gt.tableName,
|
|
772
|
-
predicate:
|
|
773
|
+
predicate: V("id", t),
|
|
773
774
|
lock: "update",
|
|
774
775
|
order: [],
|
|
775
776
|
take: 1,
|
|
@@ -780,7 +781,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
780
781
|
}, Xt = async (e, t) => {
|
|
781
782
|
let n = t.controlBinding;
|
|
782
783
|
if (n === null) throw Error("Queued cancellation has no control binding");
|
|
783
|
-
let r = await
|
|
784
|
+
let r = await ae(e, n.controlId);
|
|
784
785
|
if (r === void 0 || r.operation !== "cancel" || r.workflowName !== t.workflowName || r.runId !== n.runId || r.executionId !== n.executionId || r.generation !== n.generation || r.owner?.tenantId !== t.tenantId || r.result?.status === "running") throw Error("Queued cancellation lost its original resident control owner");
|
|
785
786
|
return r;
|
|
786
787
|
}, Zt = async (e, t, n) => {
|
|
@@ -789,7 +790,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
789
790
|
if (r.result !== null) return;
|
|
790
791
|
let [i] = await e.query({
|
|
791
792
|
table: "_voltro_workflow_runs",
|
|
792
|
-
predicate:
|
|
793
|
+
predicate: V("id", r.runId),
|
|
793
794
|
lock: "update",
|
|
794
795
|
order: [],
|
|
795
796
|
take: 1,
|
|
@@ -827,7 +828,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
827
828
|
};
|
|
828
829
|
let [r] = await e.query({
|
|
829
830
|
table: "_voltro_workflow_runs",
|
|
830
|
-
predicate:
|
|
831
|
+
predicate: V("id", t.runId),
|
|
831
832
|
lock: "update",
|
|
832
833
|
order: [],
|
|
833
834
|
take: 1,
|
|
@@ -853,7 +854,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
853
854
|
run: r
|
|
854
855
|
};
|
|
855
856
|
}
|
|
856
|
-
let r = await
|
|
857
|
+
let r = await N(e, n.target.submissionId);
|
|
857
858
|
if (r === void 0 || !r.receiptsBound || r.workflowName !== n.workflowName || r.tenantId !== n.tenantId) throw Error("Queued cancellation has no matching submission evidence");
|
|
858
859
|
return r.failureId === null ? r.retry.stoppedAt !== null || r.runId !== null ? {
|
|
859
860
|
kind: "unknown",
|
|
@@ -867,7 +868,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
867
868
|
request: n,
|
|
868
869
|
outcome: {
|
|
869
870
|
kind: "rejected",
|
|
870
|
-
failureId: await
|
|
871
|
+
failureId: await je(e, r)
|
|
871
872
|
}
|
|
872
873
|
};
|
|
873
874
|
}, $t = (e, t) => {
|
|
@@ -879,7 +880,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
879
880
|
receiptId: e.receiptId,
|
|
880
881
|
requestId: n?.id ?? null,
|
|
881
882
|
kind: t.kind
|
|
882
|
-
}, i =
|
|
883
|
+
}, i = z.decodeUnknownSync(Ze);
|
|
883
884
|
if (t.kind === "unknown") return i({
|
|
884
885
|
...r,
|
|
885
886
|
observation: {
|
|
@@ -919,12 +920,12 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
919
920
|
observation: { kind: "pending" }
|
|
920
921
|
});
|
|
921
922
|
}, en = async (e, t) => {
|
|
922
|
-
let n =
|
|
923
|
-
id:
|
|
924
|
-
receiptId:
|
|
925
|
-
workflowName:
|
|
926
|
-
tenantId:
|
|
927
|
-
requestedAt:
|
|
923
|
+
let n = z.decodeUnknownSync(z.Struct({
|
|
924
|
+
id: z.NonEmptyString,
|
|
925
|
+
receiptId: z.NonEmptyString,
|
|
926
|
+
workflowName: z.NonEmptyString,
|
|
927
|
+
tenantId: z.NullOr(z.String),
|
|
928
|
+
requestedAt: z.DateFromSelf,
|
|
928
929
|
cause: Kt
|
|
929
930
|
}))({
|
|
930
931
|
id: t.requestId,
|
|
@@ -940,13 +941,13 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
940
941
|
if (r.receiptId !== n.receiptId || r.workflowName !== n.workflowName || r.tenantId !== n.tenantId) throw Error("Queued cancellation identity belongs to a different start or owner");
|
|
941
942
|
return await Zt(e, r, t.now), r;
|
|
942
943
|
}
|
|
943
|
-
let i = await
|
|
944
|
+
let i = await kt(e, t), a;
|
|
944
945
|
if (i.kind === "submitted") a = {
|
|
945
946
|
kind: "submission",
|
|
946
947
|
submissionId: i.submissionId
|
|
947
948
|
};
|
|
948
949
|
else {
|
|
949
|
-
let n = await
|
|
950
|
+
let n = await Se(e, t.receiptId);
|
|
950
951
|
if (n === void 0) throw Error("Cancelled start receipt disappeared during request acceptance");
|
|
951
952
|
a = {
|
|
952
953
|
kind: "terminal",
|
|
@@ -959,12 +960,12 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
959
960
|
controlBinding: null
|
|
960
961
|
});
|
|
961
962
|
if (await e.insert(Gt.tableName, o), a.kind === "submission") {
|
|
962
|
-
let n = await
|
|
963
|
+
let n = await N(e, a.submissionId);
|
|
963
964
|
if (n === void 0) throw Error("Queued cancellation submission disappeared during acceptance");
|
|
964
965
|
if (n.preparedExecutionId !== null && n.dispatchAttempts > 0) {
|
|
965
966
|
let [r] = await e.query({
|
|
966
967
|
table: "_voltro_workflow_runs",
|
|
967
|
-
predicate:
|
|
968
|
+
predicate: V("executionId", n.preparedExecutionId),
|
|
968
969
|
lock: "update",
|
|
969
970
|
order: [],
|
|
970
971
|
take: 1,
|
|
@@ -972,11 +973,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
972
973
|
projection: void 0
|
|
973
974
|
});
|
|
974
975
|
if (r !== void 0) {
|
|
975
|
-
let n =
|
|
976
|
-
id:
|
|
977
|
-
tag:
|
|
978
|
-
executionId:
|
|
979
|
-
runnerGeneration:
|
|
976
|
+
let n = z.decodeUnknownSync(z.Struct({
|
|
977
|
+
id: z.NonEmptyString,
|
|
978
|
+
tag: z.NonEmptyString,
|
|
979
|
+
executionId: z.NonEmptyString,
|
|
980
|
+
runnerGeneration: z.NonEmptyString
|
|
980
981
|
}))(r), i = {
|
|
981
982
|
runId: n.id,
|
|
982
983
|
workflowName: n.tag,
|
|
@@ -1000,17 +1001,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1000
1001
|
request: r,
|
|
1001
1002
|
control: await Xt(e, r)
|
|
1002
1003
|
};
|
|
1003
|
-
let i = await
|
|
1004
|
+
let i = await N(e, r.target.submissionId);
|
|
1004
1005
|
if (i === void 0 || i.workflowName !== r.workflowName || i.tenantId !== r.tenantId || !i.receiptsBound || i.failureId !== null || i.dispatchAttempts === 0 || i.preparedExecutionId !== n.executionId || i.executionId !== null && i.executionId !== n.executionId || i.runId !== null && i.runId !== n.runId || n.workflowName !== r.workflowName) throw Error("Queued cancellation has no dispatched submission for this resident execution");
|
|
1005
1006
|
let [a] = await e.query({
|
|
1006
1007
|
table: "_voltro_workflow_runs",
|
|
1007
|
-
predicate:
|
|
1008
|
+
predicate: V("id", n.runId),
|
|
1008
1009
|
lock: "update",
|
|
1009
1010
|
order: [],
|
|
1010
1011
|
take: 1,
|
|
1011
1012
|
skip: void 0,
|
|
1012
1013
|
projection: void 0
|
|
1013
|
-
}), o =
|
|
1014
|
+
}), o = z.decodeUnknownOption(z.Struct({ tenantId: z.NullOr(z.String) }))(a?.subject);
|
|
1014
1015
|
if (a === void 0 || a.tag !== n.workflowName || a.executionId !== n.executionId || a.runnerGeneration !== n.generation || o._tag === "None" || o.value.tenantId !== r.tenantId || ![
|
|
1015
1016
|
"running",
|
|
1016
1017
|
"suspended",
|
|
@@ -1019,11 +1020,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1019
1020
|
"cancelled"
|
|
1020
1021
|
].includes(String(a.status))) throw Error("Queued cancellation generation or tenant does not match the resident run");
|
|
1021
1022
|
let s = {
|
|
1022
|
-
controlId:
|
|
1023
|
+
controlId: et("wfctl", JSON.stringify(["queued-cancel", r.id])),
|
|
1023
1024
|
runId: n.runId,
|
|
1024
1025
|
executionId: n.executionId,
|
|
1025
1026
|
generation: n.generation
|
|
1026
|
-
}, c = await
|
|
1027
|
+
}, c = await Ve(e, {
|
|
1027
1028
|
id: s.controlId,
|
|
1028
1029
|
...n,
|
|
1029
1030
|
operation: "cancel",
|
|
@@ -1041,13 +1042,13 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1041
1042
|
};
|
|
1042
1043
|
}, nn = async (e, t) => {
|
|
1043
1044
|
let n = /* @__PURE__ */ new Set();
|
|
1044
|
-
for await (let r of
|
|
1045
|
+
for await (let r of He(e, t.executionId, t.workflowName)) n.add(r.id);
|
|
1045
1046
|
if (n.size === 0) return !1;
|
|
1046
1047
|
let r, i = !1;
|
|
1047
1048
|
for (;;) {
|
|
1048
1049
|
let a = await e.query({
|
|
1049
1050
|
table: Gt.tableName,
|
|
1050
|
-
predicate:
|
|
1051
|
+
predicate: B(V("workflowName", t.workflowName), ...r === void 0 ? [] : [H("id", r)]),
|
|
1051
1052
|
lock: "update",
|
|
1052
1053
|
order: [{
|
|
1053
1054
|
column: "id",
|
|
@@ -1068,32 +1069,32 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1068
1069
|
}
|
|
1069
1070
|
if (a.length < 100) return i;
|
|
1070
1071
|
}
|
|
1071
|
-
}, rn =
|
|
1072
|
-
requestId:
|
|
1073
|
-
receiptId:
|
|
1074
|
-
workflowName:
|
|
1075
|
-
tenantId:
|
|
1072
|
+
}, rn = z.Struct({
|
|
1073
|
+
requestId: z.NonEmptyString,
|
|
1074
|
+
receiptId: z.NonEmptyString,
|
|
1075
|
+
workflowName: z.NonEmptyString,
|
|
1076
|
+
tenantId: z.NullOr(z.String)
|
|
1076
1077
|
}), an = async (e, t) => {
|
|
1077
|
-
let n =
|
|
1078
|
+
let n = z.decodeUnknownSync(rn)(t);
|
|
1078
1079
|
return await en(e, {
|
|
1079
1080
|
...n,
|
|
1080
1081
|
now: t.now,
|
|
1081
1082
|
...t.cause === void 0 ? {} : { cause: t.cause }
|
|
1082
1083
|
}), on(e, n);
|
|
1083
1084
|
}, on = async (e, t) => {
|
|
1084
|
-
let n =
|
|
1085
|
+
let n = z.decodeUnknownSync(rn)(t);
|
|
1085
1086
|
return $t(n, await Qt(e, n));
|
|
1086
1087
|
}, sn = async (e, t) => {
|
|
1087
1088
|
if (new Set(t.intentIds).size !== t.intentIds.length) throw Error("Admitted transfer requires distinct pending identities");
|
|
1088
|
-
let n = await
|
|
1089
|
+
let n = await N(e, t.id);
|
|
1089
1090
|
if (n !== void 0) {
|
|
1090
1091
|
if (n.workflowName !== t.workflowName || n.tenantId !== t.tenantId || n.ledgerId !== t.ledgerId || !n.receiptsBound) throw Error("Admitted transfer contradicts its existing submission");
|
|
1091
1092
|
return n;
|
|
1092
1093
|
}
|
|
1093
1094
|
for (let n of t.intentIds) {
|
|
1094
1095
|
let r = await e.query({
|
|
1095
|
-
table:
|
|
1096
|
-
predicate:
|
|
1096
|
+
table: k,
|
|
1097
|
+
predicate: V("id", n),
|
|
1097
1098
|
order: [],
|
|
1098
1099
|
take: 1,
|
|
1099
1100
|
skip: void 0,
|
|
@@ -1101,19 +1102,19 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1101
1102
|
lock: "update"
|
|
1102
1103
|
});
|
|
1103
1104
|
if (r[0] === void 0) throw Error("Admitted transfer lost a selected input");
|
|
1104
|
-
let i =
|
|
1105
|
+
let i = F(r[0]);
|
|
1105
1106
|
if (i.workflowName !== t.workflowName || i.tenantId !== t.tenantId || i.deadLetteredAt !== void 0) throw Error("Admitted transfer selected a foreign or dead-lettered input");
|
|
1106
1107
|
}
|
|
1107
|
-
let r = await
|
|
1108
|
-
await
|
|
1108
|
+
let r = await ie(e, t);
|
|
1109
|
+
await Ae(e, r.id);
|
|
1109
1110
|
for (let t of r.intentIds) if (!await e.delete("_voltro_workflow_pending", t)) throw Error("Admitted input disappeared during submission transfer");
|
|
1110
1111
|
return {
|
|
1111
1112
|
...r,
|
|
1112
1113
|
receiptsBound: !0
|
|
1113
1114
|
};
|
|
1114
|
-
}, cn = async (e, t) =>
|
|
1115
|
+
}, cn = async (e, t) => Ne(e, (e) => ln(e, t)), ln = async (e, t) => {
|
|
1115
1116
|
if (t.id.length === 0 || t.intentIds.length === 0 || new Set(t.intentIds).size !== t.intentIds.length) throw Error("Queue transfer requires a submission identity and distinct pending identities");
|
|
1116
|
-
let n = await
|
|
1117
|
+
let n = await N(e, t.id);
|
|
1117
1118
|
if (n !== void 0) {
|
|
1118
1119
|
if (n.workflowName !== t.workflowName || n.tenantId !== t.tenantId) throw Error("Admission submission identity belongs to a different workflow or tenant");
|
|
1119
1120
|
if (!n.receiptsBound) throw Error("Submission exists without completed queue transfer");
|
|
@@ -1126,8 +1127,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1126
1127
|
let r = [];
|
|
1127
1128
|
for (let n of t.intentIds) {
|
|
1128
1129
|
let i = await e.query({
|
|
1129
|
-
table:
|
|
1130
|
-
predicate:
|
|
1130
|
+
table: k,
|
|
1131
|
+
predicate: V("id", n),
|
|
1131
1132
|
order: [],
|
|
1132
1133
|
take: 1,
|
|
1133
1134
|
skip: void 0,
|
|
@@ -1135,14 +1136,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1135
1136
|
lock: "update"
|
|
1136
1137
|
});
|
|
1137
1138
|
if (i[0] === void 0) return { kind: "selection-unavailable" };
|
|
1138
|
-
let a =
|
|
1139
|
+
let a = F(i[0]);
|
|
1139
1140
|
if (a.workflowName !== t.workflowName || a.tenantId !== t.tenantId) throw Error("Selected pending start belongs to a different workflow or tenant");
|
|
1140
1141
|
if (a.deadLetteredAt !== void 0 || a.dueAt > t.now) return { kind: "selection-unavailable" };
|
|
1141
1142
|
r.push(a);
|
|
1142
1143
|
}
|
|
1143
1144
|
let i = t.prepare(r);
|
|
1144
1145
|
if (i.control.workflowName !== t.workflowName) throw Error("Prepared submission belongs to a different workflow");
|
|
1145
|
-
let a = await
|
|
1146
|
+
let a = await ke(e, {
|
|
1146
1147
|
...i,
|
|
1147
1148
|
id: t.id,
|
|
1148
1149
|
tenantId: t.tenantId,
|
|
@@ -1150,7 +1151,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1150
1151
|
now: t.now
|
|
1151
1152
|
});
|
|
1152
1153
|
if (a.kind !== "reserved") return a;
|
|
1153
|
-
await
|
|
1154
|
+
await Ae(e, t.id);
|
|
1154
1155
|
for (let t of r) if (!await e.delete("_voltro_workflow_pending", t.id)) throw Error("Pending start disappeared during queue transfer");
|
|
1155
1156
|
return {
|
|
1156
1157
|
...a,
|
|
@@ -1160,7 +1161,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1160
1161
|
}
|
|
1161
1162
|
};
|
|
1162
1163
|
}, un = async (e) => {
|
|
1163
|
-
let { store: t, control: n, now: r } = e, i =
|
|
1164
|
+
let { store: t, control: n, now: r } = e, i = D(n, e.payload), a = await ce({
|
|
1164
1165
|
store: t,
|
|
1165
1166
|
control: n,
|
|
1166
1167
|
keys: i,
|
|
@@ -1205,7 +1206,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1205
1206
|
};
|
|
1206
1207
|
if (a.kind === "defer") return {
|
|
1207
1208
|
kind: "queued",
|
|
1208
|
-
intentId: await
|
|
1209
|
+
intentId: await ue({
|
|
1209
1210
|
store: t,
|
|
1210
1211
|
control: n,
|
|
1211
1212
|
decision: a,
|
|
@@ -1251,7 +1252,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1251
1252
|
};
|
|
1252
1253
|
}, dn = async (e, t, n, r) => (await e.query({
|
|
1253
1254
|
table: "_voltro_workflow_pending",
|
|
1254
|
-
predicate:
|
|
1255
|
+
predicate: B(V("workflowName", t), V("controlKey", n), V("mode", "batch")),
|
|
1255
1256
|
order: [{
|
|
1256
1257
|
column: "firstSeenAt",
|
|
1257
1258
|
direction: "asc"
|
|
@@ -1267,17 +1268,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1267
1268
|
executionId: n,
|
|
1268
1269
|
runId: r
|
|
1269
1270
|
});
|
|
1270
|
-
}, pn =
|
|
1271
|
-
id:
|
|
1272
|
-
positionAt:
|
|
1273
|
-
updatedAt:
|
|
1271
|
+
}, pn = q("_voltro_workflow_watermarks", {
|
|
1272
|
+
id: U({ prefix: "wfwm" }),
|
|
1273
|
+
positionAt: Y(),
|
|
1274
|
+
updatedAt: Y().default("now")
|
|
1274
1275
|
}), mn = (e) => {
|
|
1275
1276
|
let t = e instanceof Error ? e.message : String(e);
|
|
1276
1277
|
return t.length > 400 ? `${t.slice(0, 400)}…` : t;
|
|
1277
1278
|
}, hn = (e) => {
|
|
1278
|
-
let t = [], n = [], r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = e.payloadSchema === void 0 ? (e) =>
|
|
1279
|
-
let n =
|
|
1280
|
-
return
|
|
1279
|
+
let t = [], n = [], r = [], i = /* @__PURE__ */ new Set(), a = /* @__PURE__ */ new Set(), o = e.payloadSchema === void 0 ? (e) => R.right(e) : (t) => {
|
|
1280
|
+
let n = z.decodeUnknownEither(e.payloadSchema)(t);
|
|
1281
|
+
return R.isRight(n) ? R.right(n.right) : R.left(mn(n.left));
|
|
1281
1282
|
}, s = e.runs.map((e) => ({
|
|
1282
1283
|
run: e,
|
|
1283
1284
|
decoded: o(e.payload)
|
|
@@ -1287,8 +1288,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1287
1288
|
}));
|
|
1288
1289
|
for (let o of e.entries) for (let l of e.events) {
|
|
1289
1290
|
if (l.name !== o.event) continue;
|
|
1290
|
-
let u =
|
|
1291
|
-
if (
|
|
1291
|
+
let u = z.decodeUnknownEither(o.schema)(l.payload);
|
|
1292
|
+
if (R.isLeft(u)) {
|
|
1292
1293
|
r.push({
|
|
1293
1294
|
kind: "event-decode",
|
|
1294
1295
|
workflowName: e.workflowName,
|
|
@@ -1299,7 +1300,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1299
1300
|
continue;
|
|
1300
1301
|
}
|
|
1301
1302
|
let d = u.right, f = (e) => e.getTime() > l.occurredAt.getTime() ? !1 : o.withinMs === void 0 || l.occurredAt.getTime() - e.getTime() <= o.withinMs, p = (t, n) => {
|
|
1302
|
-
if (
|
|
1303
|
+
if (R.isLeft(t)) return r.push({
|
|
1303
1304
|
kind: "payload-decode",
|
|
1304
1305
|
workflowName: e.workflowName,
|
|
1305
1306
|
event: o.event,
|
|
@@ -1350,7 +1351,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1350
1351
|
}
|
|
1351
1352
|
}, Cn = (e) => e instanceof Error ? e.message : String(e), wn = async (e, t) => Sn((await e.query({
|
|
1352
1353
|
table: _n,
|
|
1353
|
-
predicate:
|
|
1354
|
+
predicate: V("id", t),
|
|
1354
1355
|
order: [],
|
|
1355
1356
|
take: 1,
|
|
1356
1357
|
skip: void 0,
|
|
@@ -1376,7 +1377,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1376
1377
|
}, En = async (e, t, n) => {
|
|
1377
1378
|
let r = async (r) => e.query({
|
|
1378
1379
|
table: "_voltro_workflow_runs",
|
|
1379
|
-
predicate:
|
|
1380
|
+
predicate: B(V("tag", t), V("status", r)),
|
|
1380
1381
|
order: [{
|
|
1381
1382
|
column: "startedAt",
|
|
1382
1383
|
direction: "asc"
|
|
@@ -1396,7 +1397,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1396
1397
|
});
|
|
1397
1398
|
}, Dn = async (e, t, n) => (await e.query({
|
|
1398
1399
|
table: "_voltro_workflow_pending",
|
|
1399
|
-
predicate:
|
|
1400
|
+
predicate: V("workflowName", t),
|
|
1400
1401
|
order: [{
|
|
1401
1402
|
column: "firstSeenAt",
|
|
1402
1403
|
direction: "asc"
|
|
@@ -1430,7 +1431,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1430
1431
|
s === void 0 && (await Tn(e.store, yn, c), s = c);
|
|
1431
1432
|
let l = await e.store.query({
|
|
1432
1433
|
table: vn,
|
|
1433
|
-
predicate:
|
|
1434
|
+
predicate: nt("occurredAt", c),
|
|
1434
1435
|
order: [{
|
|
1435
1436
|
column: "occurredAt",
|
|
1436
1437
|
direction: "asc"
|
|
@@ -1532,7 +1533,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1532
1533
|
}
|
|
1533
1534
|
}, Nn = (e) => e instanceof Error ? e.message : String(e), Pn = async (e, t, n) => (await e.query({
|
|
1534
1535
|
table: "_voltro_workflow_run_events",
|
|
1535
|
-
predicate:
|
|
1536
|
+
predicate: V("runId", t),
|
|
1536
1537
|
order: [{
|
|
1537
1538
|
column: "occurredAt",
|
|
1538
1539
|
direction: "desc"
|
|
@@ -1550,7 +1551,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1550
1551
|
}), Fn = async (e, t) => {
|
|
1551
1552
|
let n = (await e.query({
|
|
1552
1553
|
table: "_voltro_workflow_run_steps",
|
|
1553
|
-
predicate:
|
|
1554
|
+
predicate: V("runId", t),
|
|
1554
1555
|
order: [{
|
|
1555
1556
|
column: "startedAt",
|
|
1556
1557
|
direction: "desc"
|
|
@@ -1585,7 +1586,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1585
1586
|
if (n !== void 0 && (!(n.startedAt instanceof Date) || !Number.isFinite(n.startedAt.getTime()) || typeof n.runId != "string" || n.runId.length === 0)) throw Error("Invalid staleness run cursor");
|
|
1586
1587
|
d = await e.store.query({
|
|
1587
1588
|
table: "_voltro_workflow_runs",
|
|
1588
|
-
predicate:
|
|
1589
|
+
predicate: B(rt("status", ["running", "suspended"]), at("startedAt", o), ...n === void 0 ? [] : [ot(H("startedAt", n.startedAt), B(V("startedAt", n.startedAt), H("id", n.runId)))]),
|
|
1589
1590
|
order: [{
|
|
1590
1591
|
column: "startedAt",
|
|
1591
1592
|
direction: "asc"
|
|
@@ -1710,7 +1711,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1710
1711
|
...f === void 0 ? {} : { nextRun: f }
|
|
1711
1712
|
};
|
|
1712
1713
|
}, zn = async (e, t, n) => {
|
|
1713
|
-
let r = await e.transaction((e) =>
|
|
1714
|
+
let r = await e.transaction((e) => N(e, t.id));
|
|
1714
1715
|
if (r === void 0 || r.workflowName !== t.workflowName || r.tenantId !== t.tenantId || r.ledgerId !== t.ledgerId) throw Error("Submission dispatch lost its resident owner");
|
|
1715
1716
|
if (!r.receiptsBound || r.failureId !== null) throw Error("Cannot dispatch an incomplete or rejected submission");
|
|
1716
1717
|
if (r.preparedExecutionId !== null) {
|
|
@@ -1718,26 +1719,26 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1718
1719
|
return r.preparedExecutionId;
|
|
1719
1720
|
}
|
|
1720
1721
|
if (r.dispatchAttempts !== 0 || r.executionId !== null) throw Error("Submission has an unbound prior dispatch; reconciliation required");
|
|
1721
|
-
let i = await e.resolveExecutionId(t.workflowName, n), a = await e.transaction((e) =>
|
|
1722
|
+
let i = await e.resolveExecutionId(t.workflowName, n), a = await e.transaction((e) => ze(e, t.id, i));
|
|
1722
1723
|
if (a.preparedExecutionId === null) throw Error("Submission preparation returned no execution identity");
|
|
1723
1724
|
return a.preparedExecutionId;
|
|
1724
1725
|
}, Bn = /* @__PURE__ */ new WeakMap(), Vn = async (e, t, n, r) => {
|
|
1725
|
-
let i = Bn.get(e), a = await
|
|
1726
|
+
let i = Bn.get(e), a = await w(e.store, n, i?.afterId), o = 0, s = 0, c = 0, l = 0, u = i?.nextDueAt, d = (e) => {
|
|
1726
1727
|
u = Math.min(u ?? e, e);
|
|
1727
1728
|
};
|
|
1728
1729
|
for (let n of a) {
|
|
1729
1730
|
let i;
|
|
1730
1731
|
try {
|
|
1731
|
-
i =
|
|
1732
|
+
i = Le(n);
|
|
1732
1733
|
} catch {
|
|
1733
|
-
o++, c++, d(t +
|
|
1734
|
+
o++, c++, d(t + Fe(1)), e.log?.warn?.("workflow submission metadata is invalid", { submissionId: typeof n.id == "string" ? n.id : null });
|
|
1734
1735
|
continue;
|
|
1735
1736
|
}
|
|
1736
1737
|
o++;
|
|
1737
1738
|
let a = i.dispatchAttempts === 0 ? 0 : void 0;
|
|
1738
1739
|
try {
|
|
1739
1740
|
let n = i.preparedExecutionId, r = n === null || i.dispatchAttempts === 0 ? void 0 : await e.transaction(async (e) => {
|
|
1740
|
-
let t = await
|
|
1741
|
+
let t = await ne(e, i.workflowName, n);
|
|
1741
1742
|
return t === void 0 ? void 0 : {
|
|
1742
1743
|
executionId: n,
|
|
1743
1744
|
runId: t.runId
|
|
@@ -1756,7 +1757,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1756
1757
|
continue;
|
|
1757
1758
|
}
|
|
1758
1759
|
let c = r ?? await (async () => {
|
|
1759
|
-
let n = e.controls.get(i.workflowName)?.batch === void 0 ? E(e.store, i.workflowName, i.payload) : { items:
|
|
1760
|
+
let n = e.controls.get(i.workflowName)?.batch === void 0 ? E(e.store, i.workflowName, i.payload) : { items: z.decodeUnknownSync(z.Struct({ items: z.Array(z.Unknown) }))(i.payload).items.map((t) => E(e.store, i.workflowName, t)) }, r = await zn(e, i, n), o = await e.transaction((e) => be(e, i.id, t));
|
|
1760
1761
|
if (o === null) return;
|
|
1761
1762
|
a = o.dispatchAttempts === 1 ? 1 : void 0;
|
|
1762
1763
|
let s = await e.startAdmitted(i.workflowName, n, i.callerContext, r);
|
|
@@ -1772,7 +1773,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1772
1773
|
source: "flow-control",
|
|
1773
1774
|
mode: "singleton"
|
|
1774
1775
|
}
|
|
1775
|
-
}), await x(e.store, i.eviction.executionId, t)), await e.transaction((e) =>
|
|
1776
|
+
}), await x(e.store, i.eviction.executionId, t)), await e.transaction((e) => Ce(e, i.id, {
|
|
1776
1777
|
executionId: c.executionId,
|
|
1777
1778
|
runId: c.runId ?? null
|
|
1778
1779
|
})), s++;
|
|
@@ -1781,7 +1782,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1781
1782
|
let o;
|
|
1782
1783
|
try {
|
|
1783
1784
|
if (a !== void 0 && e.isPermanentStartError?.(n) === !0) {
|
|
1784
|
-
let r = a, o = await e.transaction((a) =>
|
|
1785
|
+
let r = a, o = await e.transaction((a) => S(a, i.id, r, {
|
|
1785
1786
|
handler: e.controls.get(i.workflowName)?.onFailure ?? null,
|
|
1786
1787
|
errorMessage: String(n),
|
|
1787
1788
|
now: t
|
|
@@ -1795,7 +1796,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1795
1796
|
continue;
|
|
1796
1797
|
}
|
|
1797
1798
|
}
|
|
1798
|
-
o = await e.transaction((e) =>
|
|
1799
|
+
o = await e.transaction((e) => Be(e, i.id, String(n), t, r));
|
|
1799
1800
|
} catch (r) {
|
|
1800
1801
|
d(t), e.log?.warn?.("workflow submission retry state could not be recorded", {
|
|
1801
1802
|
workflow: i.workflowName,
|
|
@@ -1835,8 +1836,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1835
1836
|
});
|
|
1836
1837
|
}, Hn = /* @__PURE__ */ new WeakMap(), Un = async (e, t, n) => {
|
|
1837
1838
|
let r = Hn.get(e), i = await e.store.query({
|
|
1838
|
-
table:
|
|
1839
|
-
predicate:
|
|
1839
|
+
table: le,
|
|
1840
|
+
predicate: B(it("handler"), G("acceptedExecutionId"), ...r === void 0 ? [] : [H("id", r.afterId)]),
|
|
1840
1841
|
order: [{
|
|
1841
1842
|
column: "id",
|
|
1842
1843
|
direction: "asc"
|
|
@@ -1845,17 +1846,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1845
1846
|
skip: void 0,
|
|
1846
1847
|
projection: void 0
|
|
1847
1848
|
}), a = 0, o = !1, s = r?.nextDueAt, c = () => {
|
|
1848
|
-
let e = t +
|
|
1849
|
+
let e = t + Fe(1, () => 1);
|
|
1849
1850
|
s = Math.min(s ?? e, e);
|
|
1850
1851
|
};
|
|
1851
1852
|
for (let n of i) try {
|
|
1852
1853
|
if (typeof n.id != "string" || n.id.length === 0) throw Error("Failure report has no identity");
|
|
1853
1854
|
let r = n.id;
|
|
1854
|
-
(await e.transaction((e) =>
|
|
1855
|
+
(await e.transaction((e) => se(e, r, t))).kind === "queued" && (o = !0, c());
|
|
1855
1856
|
} catch (t) {
|
|
1856
1857
|
a++, c(), e.log?.warn?.("workflow failure delivery could not be reconciled", {
|
|
1857
1858
|
failureId: typeof n.id == "string" ? n.id : null,
|
|
1858
|
-
...t instanceof
|
|
1859
|
+
...t instanceof De ? { reason: t.reason } : {}
|
|
1859
1860
|
});
|
|
1860
1861
|
}
|
|
1861
1862
|
let l = i.at(-1);
|
|
@@ -1878,7 +1879,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1878
1879
|
}, Wn = "_voltro_workflow_parent_closures", Gn = /* @__PURE__ */ new WeakMap(), Kn = async (e, t, n) => {
|
|
1879
1880
|
let r = Gn.get(e), i = await e.store.query({
|
|
1880
1881
|
table: Wn,
|
|
1881
|
-
predicate:
|
|
1882
|
+
predicate: B(G("completedAt"), ...r === void 0 ? [] : [H("id", r.afterId)]),
|
|
1882
1883
|
order: [{
|
|
1883
1884
|
column: "id",
|
|
1884
1885
|
direction: "asc"
|
|
@@ -1893,10 +1894,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1893
1894
|
if (typeof n.id != "string" || n.id.length === 0) throw Error("Parent closure has no identity");
|
|
1894
1895
|
let r = n.id;
|
|
1895
1896
|
await e.transaction(async (e) => {
|
|
1896
|
-
await
|
|
1897
|
+
await Pt(e, r, t);
|
|
1897
1898
|
let [n] = await e.query({
|
|
1898
1899
|
table: Wn,
|
|
1899
|
-
predicate:
|
|
1900
|
+
predicate: V("id", r),
|
|
1900
1901
|
order: [],
|
|
1901
1902
|
take: 1,
|
|
1902
1903
|
skip: void 0,
|
|
@@ -1926,21 +1927,21 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1926
1927
|
}, qn = async (e, t) => {
|
|
1927
1928
|
if (t.from === t.to) throw Error("Queue transfer requires distinct source and target");
|
|
1928
1929
|
let n = await e.query({
|
|
1929
|
-
table:
|
|
1930
|
-
predicate:
|
|
1930
|
+
table: k,
|
|
1931
|
+
predicate: V("id", t.to),
|
|
1931
1932
|
order: [],
|
|
1932
1933
|
take: 1,
|
|
1933
1934
|
skip: void 0,
|
|
1934
1935
|
projection: void 0
|
|
1935
|
-
}), r =
|
|
1936
|
-
workflowName:
|
|
1937
|
-
tenantId:
|
|
1936
|
+
}), r = z.decodeUnknownSync(z.Struct({
|
|
1937
|
+
workflowName: z.String,
|
|
1938
|
+
tenantId: z.NullOr(z.String)
|
|
1938
1939
|
}))(n[0]);
|
|
1939
1940
|
if (r.workflowName !== t.workflowName || r.tenantId !== t.tenantId) throw Error("Receipt target belongs to a different workflow or tenant");
|
|
1940
1941
|
for (;;) {
|
|
1941
1942
|
let n = await e.query({
|
|
1942
|
-
table:
|
|
1943
|
-
predicate:
|
|
1943
|
+
table: Ee,
|
|
1944
|
+
predicate: B(V("pendingId", t.from), G("submissionId"), G("terminal")),
|
|
1944
1945
|
order: [{
|
|
1945
1946
|
column: "id",
|
|
1946
1947
|
direction: "asc"
|
|
@@ -1977,11 +1978,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
1977
1978
|
}, Zn = (e) => e instanceof Xn && !e.rejected, Qn = async (e, t = {}) => {
|
|
1978
1979
|
let n = e.now ?? (() => Date.now()), r = e.log, i = t.batchSize ?? 200, a, o, s, c, l, u;
|
|
1979
1980
|
try {
|
|
1980
|
-
c = await Vn(e, n(), i, e.deadLetterAfterAttempts ?? 50), l = await Un(e, n(), i), u = await Kn(e, n(), i), a = await (e.readPauses?.() ??
|
|
1981
|
+
c = await Vn(e, n(), i, e.deadLetterAfterAttempts ?? 50), l = await Un(e, n(), i), u = await Kn(e, n(), i), a = await (e.readPauses?.() ?? ye(e.store));
|
|
1981
1982
|
let r = t.skipPending === !0 && !l.hasPending ? {
|
|
1982
1983
|
due: [],
|
|
1983
1984
|
nextDueAt: void 0
|
|
1984
|
-
} : await
|
|
1985
|
+
} : await Me(e.store, n(), i);
|
|
1985
1986
|
o = r.due, s = c.nextDueAt === void 0 ? r.nextDueAt : Math.min(r.nextDueAt ?? c.nextDueAt, c.nextDueAt), l.nextDueAt !== void 0 && (s = Math.min(s ?? l.nextDueAt, l.nextDueAt)), u.nextDueAt !== void 0 && (s = Math.min(s ?? u.nextDueAt, u.nextDueAt));
|
|
1986
1987
|
} catch (e) {
|
|
1987
1988
|
return r?.warn?.("workflow flow control: could not read the admission queue", { cause: String(e) }), {
|
|
@@ -2047,7 +2048,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2047
2048
|
workflow: t.workflowName,
|
|
2048
2049
|
intent: t.id,
|
|
2049
2050
|
cause: y(t.workflowName, i)
|
|
2050
|
-
}), await
|
|
2051
|
+
}), await ge(e.store, t, String(i), n()).catch(() => {});
|
|
2051
2052
|
}
|
|
2052
2053
|
for (let t of f.values()) try {
|
|
2053
2054
|
await ir(e, t, a, d, n());
|
|
@@ -2087,8 +2088,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2087
2088
|
let n = [];
|
|
2088
2089
|
for (let r of t) {
|
|
2089
2090
|
let t = await e.query({
|
|
2090
|
-
table:
|
|
2091
|
-
predicate:
|
|
2091
|
+
table: k,
|
|
2092
|
+
predicate: V("id", r.id),
|
|
2092
2093
|
order: [],
|
|
2093
2094
|
take: 1,
|
|
2094
2095
|
skip: void 0,
|
|
@@ -2096,11 +2097,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2096
2097
|
lock: "update"
|
|
2097
2098
|
});
|
|
2098
2099
|
if (t[0] === void 0) return;
|
|
2099
|
-
let i =
|
|
2100
|
+
let i = F(t[0]);
|
|
2100
2101
|
if (i.workflowName !== r.workflowName || i.tenantId !== r.tenantId || i.mode !== r.mode || i.firstSeenAt !== r.firstSeenAt || i.dueAt !== r.dueAt || i.deadLetteredAt !== void 0) return;
|
|
2101
2102
|
n.push(i);
|
|
2102
2103
|
}
|
|
2103
|
-
let r = new Date(s +
|
|
2104
|
+
let r = new Date(s + Fe(Math.max(...n.map((e) => e.attempts + 1)), () => c));
|
|
2104
2105
|
for (let t of n) if (await e.update("_voltro_workflow_pending", t.id, {
|
|
2105
2106
|
attempts: t.attempts + 1,
|
|
2106
2107
|
lastError: p(t.workflowName, String(i).slice(0, 500)),
|
|
@@ -2122,14 +2123,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2122
2123
|
}, $n = async (e, t, n) => {
|
|
2123
2124
|
let r = t.map((e) => ({
|
|
2124
2125
|
intent: e,
|
|
2125
|
-
failureId: `wff_${
|
|
2126
|
+
failureId: `wff_${pt()}`
|
|
2126
2127
|
}));
|
|
2127
2128
|
return e.transaction(async (e) => {
|
|
2128
2129
|
let t = 0;
|
|
2129
2130
|
for (let { intent: i, failureId: a } of r) {
|
|
2130
2131
|
let r = (await e.query({
|
|
2131
|
-
table:
|
|
2132
|
-
predicate:
|
|
2132
|
+
table: k,
|
|
2133
|
+
predicate: V("id", i.id),
|
|
2133
2134
|
order: [],
|
|
2134
2135
|
take: 1,
|
|
2135
2136
|
skip: void 0,
|
|
@@ -2137,11 +2138,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2137
2138
|
lock: "update"
|
|
2138
2139
|
}))[0];
|
|
2139
2140
|
if (r === void 0) continue;
|
|
2140
|
-
let o =
|
|
2141
|
+
let o = F(r);
|
|
2141
2142
|
if (o.workflowName !== i.workflowName || o.tenantId !== i.tenantId) throw Error("Abandoned queue selection belongs to another workflow or tenant");
|
|
2142
2143
|
if (o.dueAt > n || o.deadLetteredAt !== void 0) continue;
|
|
2143
2144
|
let s = `workflow '${o.workflowName}' no longer has its queued declaration`;
|
|
2144
|
-
if (await
|
|
2145
|
+
if (await M(e, {
|
|
2145
2146
|
id: a,
|
|
2146
2147
|
sourceKind: "intent",
|
|
2147
2148
|
sourceId: o.id,
|
|
@@ -2159,7 +2160,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2159
2160
|
runId: null,
|
|
2160
2161
|
executionId: null
|
|
2161
2162
|
}
|
|
2162
|
-
}), await
|
|
2163
|
+
}), await P(e, {
|
|
2163
2164
|
pendingId: o.id,
|
|
2164
2165
|
workflowName: o.workflowName,
|
|
2165
2166
|
tenantId: o.tenantId,
|
|
@@ -2174,13 +2175,13 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2174
2175
|
return t;
|
|
2175
2176
|
});
|
|
2176
2177
|
}, er = async (e, t, n, r, i, a) => {
|
|
2177
|
-
let o = `wff_${
|
|
2178
|
+
let o = `wff_${pt()}`;
|
|
2178
2179
|
return e.transaction(async (s) => {
|
|
2179
2180
|
let c = [];
|
|
2180
2181
|
for (let e of t) {
|
|
2181
2182
|
let t = await s.query({
|
|
2182
|
-
table:
|
|
2183
|
-
predicate:
|
|
2183
|
+
table: k,
|
|
2184
|
+
predicate: V("id", e.id),
|
|
2184
2185
|
order: [],
|
|
2185
2186
|
take: 1,
|
|
2186
2187
|
skip: void 0,
|
|
@@ -2188,17 +2189,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2188
2189
|
lock: "update"
|
|
2189
2190
|
});
|
|
2190
2191
|
if (t[0] === void 0) return 0;
|
|
2191
|
-
let n =
|
|
2192
|
+
let n = F(t[0]);
|
|
2192
2193
|
if (n.workflowName !== e.workflowName || n.tenantId !== e.tenantId) throw Error("Dead-letter selection belongs to another workflow or tenant");
|
|
2193
2194
|
if (n.deadLetteredAt !== void 0) return 0;
|
|
2194
2195
|
c.push(n);
|
|
2195
2196
|
}
|
|
2196
2197
|
let l = c[0];
|
|
2197
2198
|
if (l === void 0) return 0;
|
|
2198
|
-
let u = await Promise.all(c.map((e) =>
|
|
2199
|
+
let u = await Promise.all(c.map((e) => pe(s, e.id)));
|
|
2199
2200
|
if (u.some(Boolean) && !u.every(Boolean)) throw Error("Dead-lettered batch mixes failure delivery and ordinary callers; reconciliation required");
|
|
2200
2201
|
let d = e.controls.get(l.workflowName);
|
|
2201
|
-
await
|
|
2202
|
+
await M(s, {
|
|
2202
2203
|
id: o,
|
|
2203
2204
|
sourceKind: "intent",
|
|
2204
2205
|
sourceId: l.id,
|
|
@@ -2217,7 +2218,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2217
2218
|
executionId: null
|
|
2218
2219
|
}
|
|
2219
2220
|
});
|
|
2220
|
-
for (let e of c) if (await
|
|
2221
|
+
for (let e of c) if (await P(s, {
|
|
2221
2222
|
pendingId: e.id,
|
|
2222
2223
|
workflowName: e.workflowName,
|
|
2223
2224
|
tenantId: e.tenantId,
|
|
@@ -2226,17 +2227,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2226
2227
|
at: i,
|
|
2227
2228
|
failureId: o
|
|
2228
2229
|
}
|
|
2229
|
-
}), !await
|
|
2230
|
-
return await
|
|
2230
|
+
}), !await oe(s, e, r, i)) throw Error("Dead-lettered queue row disappeared before marking");
|
|
2231
|
+
return await O(s, o, i), c.length;
|
|
2231
2232
|
});
|
|
2232
2233
|
}, tr = async (e, t, n, r, i) => {
|
|
2233
|
-
let a = `wff_${
|
|
2234
|
+
let a = `wff_${pt()}`;
|
|
2234
2235
|
return e.transaction(async (e) => {
|
|
2235
2236
|
let o = [];
|
|
2236
2237
|
for (let i of t) {
|
|
2237
2238
|
let t = await e.query({
|
|
2238
|
-
table:
|
|
2239
|
-
predicate:
|
|
2239
|
+
table: k,
|
|
2240
|
+
predicate: V("id", i.id),
|
|
2240
2241
|
order: [],
|
|
2241
2242
|
take: 1,
|
|
2242
2243
|
skip: void 0,
|
|
@@ -2244,18 +2245,18 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2244
2245
|
lock: "update"
|
|
2245
2246
|
});
|
|
2246
2247
|
if (t[0] === void 0) return 0;
|
|
2247
|
-
let a =
|
|
2248
|
+
let a = F(t[0]);
|
|
2248
2249
|
if (a.workflowName !== n.workflowName || a.tenantId !== i.tenantId) throw Error("Expired queue selection belongs to another workflow or tenant");
|
|
2249
2250
|
if (a.mode !== i.mode || a.dueAt > r || a.deadLetteredAt !== void 0) return 0;
|
|
2250
2251
|
o.push(a);
|
|
2251
2252
|
}
|
|
2252
2253
|
o.sort((e, t) => e.firstSeenAt - t.firstSeenAt || e.id.localeCompare(t.id));
|
|
2253
2254
|
let s = o[0];
|
|
2254
|
-
if (s === void 0 || !
|
|
2255
|
-
let c = await Promise.all(o.map((t) =>
|
|
2255
|
+
if (s === void 0 || !_e(n, s, r)) return 0;
|
|
2256
|
+
let c = await Promise.all(o.map((t) => pe(e, t.id)));
|
|
2256
2257
|
if (c.some(Boolean) && !c.every(Boolean)) throw Error("Expired batch mixes failure delivery and ordinary callers; reconciliation required");
|
|
2257
2258
|
let l = `timeouts.start (${n.timeouts?.startMs}ms) elapsed while ${o.length} queued input(s) waited`;
|
|
2258
|
-
await
|
|
2259
|
+
await M(e, {
|
|
2259
2260
|
id: a,
|
|
2260
2261
|
sourceKind: "intent",
|
|
2261
2262
|
sourceId: s.id,
|
|
@@ -2276,7 +2277,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2276
2277
|
}), await j({
|
|
2277
2278
|
store: e,
|
|
2278
2279
|
control: n,
|
|
2279
|
-
keys:
|
|
2280
|
+
keys: D(n, E(e, s.workflowName, s.payload)),
|
|
2280
2281
|
outcome: "expired",
|
|
2281
2282
|
mode: s.mode,
|
|
2282
2283
|
reason: l,
|
|
@@ -2287,7 +2288,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2287
2288
|
tenantId: s.tenantId,
|
|
2288
2289
|
now: r
|
|
2289
2290
|
});
|
|
2290
|
-
for (let t of o) if (await
|
|
2291
|
+
for (let t of o) if (await P(e, {
|
|
2291
2292
|
pendingId: t.id,
|
|
2292
2293
|
workflowName: t.workflowName,
|
|
2293
2294
|
tenantId: t.tenantId,
|
|
@@ -2297,7 +2298,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2297
2298
|
failureId: a
|
|
2298
2299
|
}
|
|
2299
2300
|
}), !await e.delete("_voltro_workflow_pending", t.id)) throw Error("Expired queue row disappeared before deletion");
|
|
2300
|
-
return await
|
|
2301
|
+
return await O(e, a, r), o.length;
|
|
2301
2302
|
});
|
|
2302
2303
|
}, nr = async (e, t, n, r, i) => {
|
|
2303
2304
|
if (t = {
|
|
@@ -2309,11 +2310,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2309
2310
|
r.expired += await $n(e, [t], i);
|
|
2310
2311
|
return;
|
|
2311
2312
|
}
|
|
2312
|
-
if (
|
|
2313
|
+
if (_e(a, t, i)) {
|
|
2313
2314
|
r.expired += await tr(e, [t], a, i, !1);
|
|
2314
2315
|
return;
|
|
2315
2316
|
}
|
|
2316
|
-
let o =
|
|
2317
|
+
let o = D(a, t.payload), s = await ce({
|
|
2317
2318
|
store: e.store,
|
|
2318
2319
|
control: a,
|
|
2319
2320
|
keys: o,
|
|
@@ -2336,10 +2337,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2336
2337
|
r.expired += await $n(e, [t], i);
|
|
2337
2338
|
return;
|
|
2338
2339
|
}
|
|
2339
|
-
let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o =
|
|
2340
|
+
let a = e.controls.get(t.workflowName) ?? { workflowName: t.workflowName }, o = xe(), s = await e.transaction(async (e) => {
|
|
2340
2341
|
let r = await e.query({
|
|
2341
|
-
table:
|
|
2342
|
-
predicate:
|
|
2342
|
+
table: k,
|
|
2343
|
+
predicate: V("id", t.id),
|
|
2343
2344
|
lock: "update",
|
|
2344
2345
|
order: [],
|
|
2345
2346
|
take: 1,
|
|
@@ -2347,7 +2348,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2347
2348
|
projection: void 0
|
|
2348
2349
|
});
|
|
2349
2350
|
if (r[0] === void 0) return;
|
|
2350
|
-
let s =
|
|
2351
|
+
let s = F(r[0]);
|
|
2351
2352
|
if (s.workflowName !== t.workflowName || s.tenantId !== t.tenantId) throw Error("Delayed arrival belongs to a different workflow or tenant");
|
|
2352
2353
|
if (s.mode !== "delayed" || s.deadLetteredAt !== void 0 || s.dueAt > i) return;
|
|
2353
2354
|
let c = await un({
|
|
@@ -2365,10 +2366,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2365
2366
|
to: c.intentId,
|
|
2366
2367
|
workflowName: s.workflowName,
|
|
2367
2368
|
tenantId: s.tenantId
|
|
2368
|
-
}), !await
|
|
2369
|
+
}), !await de(e, s.id))) throw Error("Delayed arrival disappeared during queue transfer");
|
|
2369
2370
|
if (c.kind === "start") {
|
|
2370
2371
|
if (c.ledgerId === void 0) throw Error("Delayed arrival has no admission reservation");
|
|
2371
|
-
let t = a.batch === void 0 ? ve(e, s.workflowName, c.payload) : { items:
|
|
2372
|
+
let t = a.batch === void 0 ? ve(e, s.workflowName, c.payload) : { items: z.decodeUnknownSync(z.Struct({ items: z.Array(z.Unknown) }))(c.payload).items.map((t) => ve(e, s.workflowName, t)) };
|
|
2372
2373
|
return {
|
|
2373
2374
|
kind: "submission",
|
|
2374
2375
|
submission: await sn(e, {
|
|
@@ -2384,7 +2385,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2384
2385
|
keys: c.keys
|
|
2385
2386
|
};
|
|
2386
2387
|
}
|
|
2387
|
-
if ((c.kind === "dropped" || c.kind === "skipped") && (await
|
|
2388
|
+
if ((c.kind === "dropped" || c.kind === "skipped") && (await P(e, {
|
|
2388
2389
|
pendingId: s.id,
|
|
2389
2390
|
workflowName: s.workflowName,
|
|
2390
2391
|
tenantId: s.tenantId,
|
|
@@ -2392,7 +2393,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2392
2393
|
...c,
|
|
2393
2394
|
at: i
|
|
2394
2395
|
}
|
|
2395
|
-
}), !await
|
|
2396
|
+
}), !await de(e, s.id))) throw Error("Delayed arrival disappeared while recording its outcome");
|
|
2396
2397
|
return c;
|
|
2397
2398
|
});
|
|
2398
2399
|
if (s !== void 0) {
|
|
@@ -2423,15 +2424,15 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2423
2424
|
return;
|
|
2424
2425
|
}
|
|
2425
2426
|
let s = [...t].sort((e, t) => e.firstSeenAt - t.firstSeenAt), c = s[0];
|
|
2426
|
-
if (
|
|
2427
|
+
if (_e(o, c, i)) {
|
|
2427
2428
|
r.expired += await tr(e, s, o, i, !0);
|
|
2428
2429
|
return;
|
|
2429
2430
|
}
|
|
2430
|
-
let l =
|
|
2431
|
+
let l = D(o, c.payload);
|
|
2431
2432
|
await ar(e, {
|
|
2432
2433
|
control: o,
|
|
2433
2434
|
intent: c,
|
|
2434
|
-
decision: await
|
|
2435
|
+
decision: await ce({
|
|
2435
2436
|
store: e.store,
|
|
2436
2437
|
control: o,
|
|
2437
2438
|
keys: l,
|
|
@@ -2448,7 +2449,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2448
2449
|
}, ar = async (e, t) => {
|
|
2449
2450
|
let { control: n, intent: r, decision: i, keys: a, counters: o, now: s, items: c, paused: l } = t;
|
|
2450
2451
|
if (i.kind === "defer") {
|
|
2451
|
-
await
|
|
2452
|
+
await ue({
|
|
2452
2453
|
store: e.store,
|
|
2453
2454
|
control: n,
|
|
2454
2455
|
decision: i,
|
|
@@ -2465,8 +2466,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2465
2466
|
let t = [];
|
|
2466
2467
|
for (let i of c ?? [r]) {
|
|
2467
2468
|
let a = await e.query({
|
|
2468
|
-
table:
|
|
2469
|
-
predicate:
|
|
2469
|
+
table: k,
|
|
2470
|
+
predicate: V("id", i.id),
|
|
2470
2471
|
lock: "update",
|
|
2471
2472
|
order: [],
|
|
2472
2473
|
take: 1,
|
|
@@ -2474,17 +2475,17 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2474
2475
|
projection: void 0
|
|
2475
2476
|
});
|
|
2476
2477
|
if (a[0] === void 0) return;
|
|
2477
|
-
let o =
|
|
2478
|
+
let o = F(a[0]);
|
|
2478
2479
|
if (o.workflowName !== n.workflowName || o.tenantId !== r.tenantId) throw Error("Terminal queue selection belongs to a different workflow or tenant");
|
|
2479
2480
|
if (o.dueAt > s || o.deadLetteredAt !== void 0 || o.mode !== i.mode) return;
|
|
2480
2481
|
t.push(o);
|
|
2481
2482
|
}
|
|
2482
2483
|
t.sort((e, t) => e.firstSeenAt - t.firstSeenAt);
|
|
2483
|
-
let i = t[0], a =
|
|
2484
|
+
let i = t[0], a = D(n, E(e, n.workflowName, i.payload)), o = await ce({
|
|
2484
2485
|
store: e,
|
|
2485
2486
|
control: n,
|
|
2486
2487
|
keys: a,
|
|
2487
|
-
paused: l.has(n.workflowName) || (await
|
|
2488
|
+
paused: l.has(n.workflowName) || (await ye(e)).has(n.workflowName),
|
|
2488
2489
|
now: s,
|
|
2489
2490
|
reconsidering: !0
|
|
2490
2491
|
});
|
|
@@ -2513,18 +2514,18 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2513
2514
|
tenantId: r.tenantId,
|
|
2514
2515
|
now: s
|
|
2515
2516
|
});
|
|
2516
|
-
for (let n of t) if (await
|
|
2517
|
+
for (let n of t) if (await P(e, {
|
|
2517
2518
|
pendingId: n.id,
|
|
2518
2519
|
workflowName: n.workflowName,
|
|
2519
2520
|
tenantId: n.tenantId,
|
|
2520
2521
|
terminal: u
|
|
2521
|
-
}), !await
|
|
2522
|
+
}), !await de(e, n.id)) throw Error("Queued input disappeared while recording its terminal outcome");
|
|
2522
2523
|
return u.kind;
|
|
2523
2524
|
});
|
|
2524
2525
|
t !== void 0 && o[t]++;
|
|
2525
2526
|
return;
|
|
2526
2527
|
}
|
|
2527
|
-
let u =
|
|
2528
|
+
let u = xe(), d = await e.transaction((t) => ln(t, {
|
|
2528
2529
|
id: u,
|
|
2529
2530
|
workflowName: n.workflowName,
|
|
2530
2531
|
tenantId: r.tenantId,
|
|
@@ -2552,7 +2553,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2552
2553
|
await sr(e, d.submission, n, o, s, c !== void 0, a);
|
|
2553
2554
|
}
|
|
2554
2555
|
}, or = async (e, t, n, r, i) => {
|
|
2555
|
-
let a = await e.transaction((e) =>
|
|
2556
|
+
let a = await e.transaction((e) => N(e, t.id));
|
|
2556
2557
|
if (a === void 0 || !a.receiptsBound || a.workflowName !== n.workflowName || a.workflowName !== t.workflowName || a.tenantId !== t.tenantId || a.ledgerId !== t.ledgerId) throw Error("Admission acceptance callback no longer has its resident submission owner");
|
|
2557
2558
|
if (a.executionId !== null) {
|
|
2558
2559
|
if (a.failureId !== null || a.executionId.length === 0 || a.executionId !== a.preparedExecutionId) throw Error("Admission acceptance has contradictory resident execution evidence");
|
|
@@ -2566,7 +2567,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2566
2567
|
expired: 0,
|
|
2567
2568
|
evicted: 0
|
|
2568
2569
|
}, i, n.batch !== void 0, r);
|
|
2569
|
-
let o = await e.transaction((e) =>
|
|
2570
|
+
let o = await e.transaction((e) => N(e, t.id));
|
|
2570
2571
|
if (o?.executionId == null || o.executionId !== o.preparedExecutionId) throw Error("Admission submission has no confirmed engine acceptance");
|
|
2571
2572
|
return o.executionId;
|
|
2572
2573
|
}, sr = async (e, t, n, r, i, a, o) => {
|
|
@@ -2576,7 +2577,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2576
2577
|
r.deferred++;
|
|
2577
2578
|
return;
|
|
2578
2579
|
}
|
|
2579
|
-
let c = a ? { items:
|
|
2580
|
+
let c = a ? { items: z.decodeUnknownSync(z.Struct({ items: z.Array(z.Unknown) }))(t.payload).items.map((t) => E(e.store, n.workflowName, t)) } : E(e.store, n.workflowName, t.payload), l = await zn(e, t, c), u = await e.transaction((e) => be(e, t.id, i));
|
|
2580
2581
|
if (u === null) return;
|
|
2581
2582
|
s = u.dispatchAttempts === 1 ? 1 : void 0;
|
|
2582
2583
|
let d = await e.startAdmitted(n.workflowName, c, t.callerContext, l);
|
|
@@ -2603,7 +2604,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2603
2604
|
runId: t.eviction.runId || null,
|
|
2604
2605
|
tenantId: t.tenantId,
|
|
2605
2606
|
now: i
|
|
2606
|
-
}), r.evicted++), await e.transaction((e) =>
|
|
2607
|
+
}), r.evicted++), await e.transaction((e) => Ce(e, t.id, {
|
|
2607
2608
|
executionId: d.executionId,
|
|
2608
2609
|
runId: d.runId ?? null
|
|
2609
2610
|
})), r.admitted++;
|
|
@@ -2612,14 +2613,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2612
2613
|
try {
|
|
2613
2614
|
if (s !== void 0 && e.isPermanentStartError?.(r) === !0) {
|
|
2614
2615
|
let o = s;
|
|
2615
|
-
a = await e.transaction((e) =>
|
|
2616
|
+
a = await e.transaction((e) => S(e, t.id, o, {
|
|
2616
2617
|
handler: n.onFailure ?? null,
|
|
2617
2618
|
errorMessage: String(r),
|
|
2618
2619
|
now: i
|
|
2619
2620
|
})) !== void 0;
|
|
2620
2621
|
}
|
|
2621
2622
|
if (!a) {
|
|
2622
|
-
let n = await e.transaction((n) =>
|
|
2623
|
+
let n = await e.transaction((n) => Be(n, t.id, String(r), i, e.deadLetterAfterAttempts ?? 50));
|
|
2623
2624
|
n.retry.stoppedAt !== null && e.log?.warn?.("workflow submission automatic retry stopped; engine acceptance unknown", {
|
|
2624
2625
|
submissionId: t.id,
|
|
2625
2626
|
workflow: t.workflowName,
|
|
@@ -2638,7 +2639,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2638
2639
|
if (i.timeouts?.finishMs === void 0) continue;
|
|
2639
2640
|
let a = await e.listRunningRuns(i.workflowName);
|
|
2640
2641
|
for (let o of a) {
|
|
2641
|
-
if (!
|
|
2642
|
+
if (!T(i, {
|
|
2642
2643
|
startedAt: o.startedAt,
|
|
2643
2644
|
terminal: !1
|
|
2644
2645
|
}, t)) {
|
|
@@ -2653,7 +2654,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2653
2654
|
executionId: o.executionId,
|
|
2654
2655
|
reason: a,
|
|
2655
2656
|
detail: {
|
|
2656
|
-
...
|
|
2657
|
+
...Ie,
|
|
2657
2658
|
onFailure: i.onFailure ?? null
|
|
2658
2659
|
}
|
|
2659
2660
|
}) && (await x(e.store, o.executionId, t), n++);
|
|
@@ -2687,8 +2688,8 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2687
2688
|
await e.recordEvent(t);
|
|
2688
2689
|
} catch {}
|
|
2689
2690
|
}, _r = (e, n) => {
|
|
2690
|
-
let r =
|
|
2691
|
-
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = yield*
|
|
2691
|
+
let r = L.gen(function* () {
|
|
2692
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = yield* L.serviceOption(mt), c;
|
|
2692
2693
|
hr({
|
|
2693
2694
|
workflowName: s._tag === "Some" ? s.value.workflow.name : void 0,
|
|
2694
2695
|
signalName: n.name,
|
|
@@ -2696,11 +2697,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2696
2697
|
warn: (e) => {
|
|
2697
2698
|
c = e;
|
|
2698
2699
|
}
|
|
2699
|
-
}), c !== void 0 && (yield*
|
|
2700
|
-
let l = yield* t, u = yield*
|
|
2701
|
-
if (l === void 0) return yield*
|
|
2700
|
+
}), c !== void 0 && (yield* L.logWarning(c));
|
|
2701
|
+
let l = yield* t, u = yield* L.serviceOption(o), d = u._tag === "Some" ? u.value : void 0;
|
|
2702
|
+
if (l === void 0) return yield* L.die(/* @__PURE__ */ Error("awaitSignal: no active workflow run id in scope"));
|
|
2702
2703
|
let f = l;
|
|
2703
|
-
yield*
|
|
2704
|
+
yield* L.promise(() => gr(d, {
|
|
2704
2705
|
runId: f,
|
|
2705
2706
|
eventType: "signal-awaited",
|
|
2706
2707
|
payload: { signalName: n.name }
|
|
@@ -2708,24 +2709,24 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2708
2709
|
let p = Date.now(), m = r;
|
|
2709
2710
|
for (;;) {
|
|
2710
2711
|
let t = Date.now() - p;
|
|
2711
|
-
if (t > a) return yield*
|
|
2712
|
+
if (t > a) return yield* L.die(/* @__PURE__ */ Error(`awaitSignal('${n.name}') timed out after ${t}ms`));
|
|
2712
2713
|
let r = {
|
|
2713
2714
|
table: "_voltro_workflow_run_events",
|
|
2714
2715
|
order: [{
|
|
2715
2716
|
column: "occurredAt",
|
|
2716
2717
|
direction: "asc"
|
|
2717
2718
|
}],
|
|
2718
|
-
predicate:
|
|
2719
|
+
predicate: B(V("runId", f), V("eventType", "signal-sent")),
|
|
2719
2720
|
projection: void 0,
|
|
2720
2721
|
skip: void 0,
|
|
2721
2722
|
take: 1e3
|
|
2722
|
-
}, o = (yield*
|
|
2723
|
+
}, o = (yield* L.tryPromise({
|
|
2723
2724
|
try: () => e.store.query(r),
|
|
2724
2725
|
catch: (e) => e
|
|
2725
2726
|
})).find((e) => e.payload?.signalName === n.name);
|
|
2726
2727
|
if (o !== void 0) {
|
|
2727
|
-
let e = h(o.payload)?.value, t = yield*
|
|
2728
|
-
return yield*
|
|
2728
|
+
let e = h(o.payload)?.value, t = yield* z.decodeUnknown(n.schema)(e);
|
|
2729
|
+
return yield* L.promise(() => gr(d, {
|
|
2729
2730
|
runId: f,
|
|
2730
2731
|
eventType: "signal-received",
|
|
2731
2732
|
payload: {
|
|
@@ -2734,7 +2735,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2734
2735
|
}
|
|
2735
2736
|
})), t;
|
|
2736
2737
|
}
|
|
2737
|
-
yield*
|
|
2738
|
+
yield* L.sleep(`${m} millis`), m = Math.min(m * 2, i);
|
|
2738
2739
|
}
|
|
2739
2740
|
});
|
|
2740
2741
|
return f({
|
|
@@ -2747,11 +2748,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2747
2748
|
await e.recordEvent(t);
|
|
2748
2749
|
} catch {}
|
|
2749
2750
|
}, yr = (e, n) => {
|
|
2750
|
-
let r =
|
|
2751
|
-
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = n.take ?? 500, c = yield* t, l = yield*
|
|
2752
|
-
if (c === void 0) return yield*
|
|
2753
|
-
let d = c, f = yield* n.since === "run-start" ? br(e, d) :
|
|
2754
|
-
yield*
|
|
2751
|
+
let r = L.gen(function* () {
|
|
2752
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 864e5, s = n.take ?? 500, c = yield* t, l = yield* L.serviceOption(o), u = l._tag === "Some" ? l.value : void 0;
|
|
2753
|
+
if (c === void 0) return yield* L.die(/* @__PURE__ */ Error("awaitEvent: no active workflow run id in scope"));
|
|
2754
|
+
let d = c, f = yield* n.since === "run-start" ? br(e, d) : L.succeed(/* @__PURE__ */ new Date());
|
|
2755
|
+
yield* L.promise(() => vr(u, {
|
|
2755
2756
|
runId: d,
|
|
2756
2757
|
eventType: "event-awaited",
|
|
2757
2758
|
payload: {
|
|
@@ -2763,10 +2764,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2763
2764
|
let p = Date.now(), m = r, h = 0;
|
|
2764
2765
|
for (;;) {
|
|
2765
2766
|
let t = Date.now() - p;
|
|
2766
|
-
if (t > a) return yield*
|
|
2767
|
+
if (t > a) return yield* L.die(/* @__PURE__ */ Error(`awaitEvent('${n.event}') timed out after ${t}ms having examined ${h} candidate event(s). ${h === 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."}`));
|
|
2767
2768
|
let r = {
|
|
2768
2769
|
table: "_voltro_workflow_events",
|
|
2769
|
-
predicate:
|
|
2770
|
+
predicate: B(V("name", n.event), nt("occurredAt", f)),
|
|
2770
2771
|
order: [{
|
|
2771
2772
|
column: "occurredAt",
|
|
2772
2773
|
direction: "asc"
|
|
@@ -2774,14 +2775,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2774
2775
|
take: s,
|
|
2775
2776
|
skip: void 0,
|
|
2776
2777
|
projection: void 0
|
|
2777
|
-
}, o = yield*
|
|
2778
|
+
}, o = yield* L.tryPromise({
|
|
2778
2779
|
try: () => e.store.query(r),
|
|
2779
2780
|
catch: (e) => e
|
|
2780
2781
|
});
|
|
2781
2782
|
h = o.length;
|
|
2782
2783
|
for (let e of o) {
|
|
2783
|
-
let t = yield*
|
|
2784
|
-
if (n.match(t)) return yield*
|
|
2784
|
+
let t = yield* z.decodeUnknown(n.schema)(e.payload);
|
|
2785
|
+
if (n.match(t)) return yield* L.promise(() => vr(u, {
|
|
2785
2786
|
runId: d,
|
|
2786
2787
|
eventType: "event-received",
|
|
2787
2788
|
payload: {
|
|
@@ -2790,7 +2791,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2790
2791
|
}
|
|
2791
2792
|
})), t;
|
|
2792
2793
|
}
|
|
2793
|
-
yield*
|
|
2794
|
+
yield* L.sleep(`${m} millis`), m = Math.min(m * 2, i);
|
|
2794
2795
|
}
|
|
2795
2796
|
});
|
|
2796
2797
|
return f({
|
|
@@ -2798,11 +2799,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2798
2799
|
success: n.schema,
|
|
2799
2800
|
execute: r
|
|
2800
2801
|
});
|
|
2801
|
-
}, br = (e, t) =>
|
|
2802
|
-
let n = (yield*
|
|
2802
|
+
}, br = (e, t) => L.gen(function* () {
|
|
2803
|
+
let n = (yield* L.tryPromise({
|
|
2803
2804
|
try: () => e.store.query({
|
|
2804
2805
|
table: "_voltro_workflow_runs",
|
|
2805
|
-
predicate:
|
|
2806
|
+
predicate: V("id", t),
|
|
2806
2807
|
order: [],
|
|
2807
2808
|
take: 1,
|
|
2808
2809
|
skip: void 0,
|
|
@@ -2825,7 +2826,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2825
2826
|
let r = await e.query({
|
|
2826
2827
|
table: "_voltro_workflow_runs",
|
|
2827
2828
|
order: [],
|
|
2828
|
-
predicate:
|
|
2829
|
+
predicate: V("id", n),
|
|
2829
2830
|
projection: void 0,
|
|
2830
2831
|
skip: void 0,
|
|
2831
2832
|
take: 1
|
|
@@ -2834,7 +2835,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2834
2835
|
let i = (await e.query({
|
|
2835
2836
|
table: "_voltro_workflow_runs",
|
|
2836
2837
|
order: [],
|
|
2837
|
-
predicate:
|
|
2838
|
+
predicate: V("executionId", n),
|
|
2838
2839
|
projection: void 0,
|
|
2839
2840
|
skip: void 0,
|
|
2840
2841
|
take: 1
|
|
@@ -2879,7 +2880,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2879
2880
|
column: "occurredAt",
|
|
2880
2881
|
direction: "asc"
|
|
2881
2882
|
}],
|
|
2882
|
-
predicate:
|
|
2883
|
+
predicate: V("runId", t.id),
|
|
2883
2884
|
projection: void 0,
|
|
2884
2885
|
skip: void 0,
|
|
2885
2886
|
take: 1e3
|
|
@@ -2902,23 +2903,23 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2902
2903
|
if (Date.now() - i >= a) throw Error(`Timed out waiting for workflow update '${e.updateName}' (${n})`);
|
|
2903
2904
|
await xr(o);
|
|
2904
2905
|
}
|
|
2905
|
-
}, Or = 864e5, kr = "voltro/suspending-signal", Ar = (e, t) => `${kr}/${e}/${t}`, jr = (e, t) =>
|
|
2906
|
+
}, Or = 864e5, kr = "voltro/suspending-signal", Ar = (e, t) => `${kr}/${e}/${t}`, jr = (e, t) => We.make(e, { success: _(t) ? u(z.Unknown, `signal '${e}' value`) : z.Unknown }), Mr = async (e, t) => {
|
|
2906
2907
|
if (e) try {
|
|
2907
2908
|
await e.recordEvent(t);
|
|
2908
2909
|
} catch {}
|
|
2909
|
-
}, Nr = (e, n) =>
|
|
2910
|
-
let e = n.timeoutMs ?? Or, r = yield*
|
|
2911
|
-
a !== void 0 && (yield*
|
|
2910
|
+
}, Nr = (e, n) => L.gen(function* () {
|
|
2911
|
+
let e = n.timeoutMs ?? Or, r = yield* Ke.WorkflowInstance, i = jr(Ar(r.workflow.name, n.name), r.workflow.name), a = yield* t, s = yield* L.serviceOption(o), c = s._tag === "Some" ? s.value : void 0;
|
|
2912
|
+
a !== void 0 && (yield* L.promise(() => Mr(c, {
|
|
2912
2913
|
runId: a,
|
|
2913
2914
|
eventType: "signal-awaited",
|
|
2914
2915
|
payload: { signalName: n.name }
|
|
2915
2916
|
})));
|
|
2916
|
-
let l =
|
|
2917
|
+
let l = We.await(i), u = Number.isFinite(e) ? yield* L.race(l, Ue.sleep({
|
|
2917
2918
|
name: `await-signal-timeout/${n.name}`,
|
|
2918
2919
|
inMemoryThreshold: "0 millis",
|
|
2919
2920
|
duration: `${e} millis`
|
|
2920
|
-
}).pipe(
|
|
2921
|
-
return a !== void 0 && (yield*
|
|
2921
|
+
}).pipe(L.andThen(L.die(/* @__PURE__ */ Error(`awaitSignalSuspending('${n.name}') timed out after ${e}ms`))))).pipe(L.catchAllCause((e) => r.suspended ? I.isInterruptedOnly(e) ? Ge.suspend(r) : L.failCause(I.filter(e, (e) => !I.isInterruptType(e))) : L.failCause(e))) : yield* l, d = yield* z.decodeUnknown(n.schema)(u);
|
|
2922
|
+
return a !== void 0 && (yield* L.promise(() => Mr(c, {
|
|
2922
2923
|
runId: a,
|
|
2923
2924
|
eventType: "signal-received",
|
|
2924
2925
|
payload: {
|
|
@@ -2926,51 +2927,51 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2926
2927
|
value: d
|
|
2927
2928
|
}
|
|
2928
2929
|
}))), d;
|
|
2929
|
-
}), Pr = (e) =>
|
|
2930
|
+
}), Pr = (e) => L.gen(function* () {
|
|
2930
2931
|
let t = e.target.executionId, n = e.target.workflowName;
|
|
2931
2932
|
if (t === void 0 || n === void 0) {
|
|
2932
2933
|
let r = e.store;
|
|
2933
|
-
if (r === void 0) return yield*
|
|
2934
|
-
let i = yield*
|
|
2934
|
+
if (r === void 0) return yield* L.die(/* @__PURE__ */ Error("completeSuspendingSignal: provide a store, or target.executionId AND target.workflowName"));
|
|
2935
|
+
let i = yield* L.tryPromise({
|
|
2935
2936
|
try: () => wr(r, e.target),
|
|
2936
2937
|
catch: (e) => e
|
|
2937
2938
|
});
|
|
2938
2939
|
t ??= i.executionId, n ??= i.tag;
|
|
2939
2940
|
}
|
|
2940
2941
|
if (t === void 0 || n === void 0) return { completed: !1 };
|
|
2941
|
-
let r = Ar(n, e.signalName), i = jr(r, n), a = new
|
|
2942
|
+
let r = Ar(n, e.signalName), i = jr(r, n), a = new We.TokenParsed({
|
|
2942
2943
|
workflowName: n,
|
|
2943
2944
|
executionId: t,
|
|
2944
2945
|
deferredName: r
|
|
2945
2946
|
}).asToken;
|
|
2946
|
-
return yield*
|
|
2947
|
+
return yield* We.done(i, {
|
|
2947
2948
|
token: a,
|
|
2948
|
-
exit:
|
|
2949
|
+
exit: qe.succeed(e.payload)
|
|
2949
2950
|
}), { completed: !0 };
|
|
2950
2951
|
}), Z = "_voltro_budget_holds", Fr = "budget-hold", Ir = (e) => `${Fr}:${e}`, Lr = (e) => `${e.executionId}/${e.stepName}/${e.budget}#${e.generation}`, Rr = async (e, t) => (await e.query({
|
|
2951
2952
|
table: Z,
|
|
2952
|
-
predicate:
|
|
2953
|
+
predicate: B(V("executionId", t.executionId), V("stepName", t.stepName), V("budget", t.budget)),
|
|
2953
2954
|
order: []
|
|
2954
|
-
})).length, zr =
|
|
2955
|
-
id:
|
|
2956
|
-
holdKey:
|
|
2957
|
-
budget:
|
|
2958
|
-
tenantId:
|
|
2959
|
-
executionId:
|
|
2960
|
-
workflowName:
|
|
2961
|
-
signalName:
|
|
2962
|
-
stepName:
|
|
2963
|
-
spentMicroUsd:
|
|
2964
|
-
limitMicroUsd:
|
|
2965
|
-
heldAt:
|
|
2966
|
-
releasedAt:
|
|
2967
|
-
outcome:
|
|
2955
|
+
})).length, zr = q(Z, {
|
|
2956
|
+
id: U({ prefix: "bhd" }),
|
|
2957
|
+
holdKey: J().maxLength(191).unique(),
|
|
2958
|
+
budget: J(),
|
|
2959
|
+
tenantId: J().nullable(),
|
|
2960
|
+
executionId: J(),
|
|
2961
|
+
workflowName: J(),
|
|
2962
|
+
signalName: J(),
|
|
2963
|
+
stepName: J(),
|
|
2964
|
+
spentMicroUsd: J().nullable(),
|
|
2965
|
+
limitMicroUsd: J().nullable(),
|
|
2966
|
+
heldAt: Y().default("now"),
|
|
2967
|
+
releasedAt: Y().nullable(),
|
|
2968
|
+
outcome: J().nullable()
|
|
2968
2969
|
}).index(["budget", "releasedAt"]), Br = () => {
|
|
2969
|
-
|
|
2970
|
+
ut({
|
|
2970
2971
|
source: "framework",
|
|
2971
2972
|
table: Z,
|
|
2972
2973
|
timeColumn: "releasedAt",
|
|
2973
|
-
ttlMs:
|
|
2974
|
+
ttlMs: dt(process.env.VOLTRO_BUDGET_HOLDS_TTL_HOURS, 720)
|
|
2974
2975
|
});
|
|
2975
2976
|
}, Vr = class extends Error {
|
|
2976
2977
|
budget;
|
|
@@ -2978,7 +2979,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2978
2979
|
constructor(e, t, n) {
|
|
2979
2980
|
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;
|
|
2980
2981
|
}
|
|
2981
|
-
}, Hr = 6048e5, Ur = (e) =>
|
|
2982
|
+
}, Hr = 6048e5, Ur = (e) => L.gen(function* () {
|
|
2982
2983
|
Br();
|
|
2983
2984
|
let t = e.timeoutMs ?? 6048e5, n = e.recheckEveryMs ?? 9e5, r = {
|
|
2984
2985
|
executionId: e.executionId,
|
|
@@ -2986,14 +2987,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
2986
2987
|
budget: e.budget
|
|
2987
2988
|
};
|
|
2988
2989
|
for (let i = 0;; i++) {
|
|
2989
|
-
let a = yield*
|
|
2990
|
+
let a = yield* L.promise(() => Gr(e.store, r)), o = a.length === 0 ? Date.now() : Wr(a[0]?.heldAt), s = Number.isFinite(t) ? t - (Date.now() - o) : Infinity, c = Lr({
|
|
2990
2991
|
...r,
|
|
2991
2992
|
generation: i
|
|
2992
2993
|
});
|
|
2993
|
-
if (s <= 0) return yield*
|
|
2994
|
+
if (s <= 0) return yield* L.promise(() => Kr(e.store, r, "expired")), yield* L.fail(new Vr(e.budget, c, t));
|
|
2994
2995
|
let l = Ir(c);
|
|
2995
|
-
yield*
|
|
2996
|
-
id:
|
|
2996
|
+
yield* L.promise(() => e.store.insertIgnore(Z, {
|
|
2997
|
+
id: tt({
|
|
2997
2998
|
kind: "typeid",
|
|
2998
2999
|
prefix: "bhd"
|
|
2999
3000
|
}, Z),
|
|
@@ -3013,32 +3014,32 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3013
3014
|
let u = Math.min(n, s);
|
|
3014
3015
|
if (yield* Nr({ store: e.store }, {
|
|
3015
3016
|
name: l,
|
|
3016
|
-
schema:
|
|
3017
|
+
schema: z.Unknown,
|
|
3017
3018
|
timeoutMs: u
|
|
3018
|
-
}).pipe(
|
|
3019
|
+
}).pipe(L.catchAllCause((e) => I.isInterruptedOnly(e) ? L.failCause(e) : L.void)), yield* L.promise(() => e.store.updateMany(Z, {
|
|
3019
3020
|
releasedAt: /* @__PURE__ */ new Date(),
|
|
3020
3021
|
outcome: "recheck"
|
|
3021
|
-
}, { where:
|
|
3022
|
+
}, { where: B(V("holdKey", c), G("releasedAt")) })), yield* e.hasHeadroom) return;
|
|
3022
3023
|
}
|
|
3023
3024
|
}), Wr = (e) => e instanceof Date ? e.getTime() : typeof e == "string" ? Date.parse(e) : Date.now(), Gr = async (e, t) => [...await e.query({
|
|
3024
3025
|
table: Z,
|
|
3025
|
-
predicate:
|
|
3026
|
+
predicate: B(V("executionId", t.executionId), V("stepName", t.stepName), V("budget", t.budget)),
|
|
3026
3027
|
order: []
|
|
3027
3028
|
})].sort((e, t) => String(e.id).localeCompare(String(t.id))), Kr = async (e, t, n) => {
|
|
3028
3029
|
await e.updateMany(Z, {
|
|
3029
3030
|
releasedAt: /* @__PURE__ */ new Date(),
|
|
3030
3031
|
outcome: n
|
|
3031
|
-
}, { where:
|
|
3032
|
-
}, qr = (e) =>
|
|
3033
|
-
let t = e.tenantId === void 0 ?
|
|
3032
|
+
}, { where: B(V("executionId", t.executionId), V("stepName", t.stepName), V("budget", t.budget), G("releasedAt")) });
|
|
3033
|
+
}, qr = (e) => L.gen(function* () {
|
|
3034
|
+
let t = e.tenantId === void 0 ? B(V("budget", e.budget), G("releasedAt")) : B(V("budget", e.budget), V("tenantId", e.tenantId), G("releasedAt")), n = yield* L.promise(() => e.store.query({
|
|
3034
3035
|
table: Z,
|
|
3035
3036
|
predicate: t,
|
|
3036
3037
|
order: []
|
|
3037
3038
|
})), r = 0;
|
|
3038
|
-
for (let t of n) (yield*
|
|
3039
|
+
for (let t of n) (yield* L.promise(() => e.store.updateMany("_voltro_budget_holds", {
|
|
3039
3040
|
releasedAt: /* @__PURE__ */ new Date(),
|
|
3040
3041
|
outcome: e.outcome ?? "released"
|
|
3041
|
-
}, { where:
|
|
3042
|
+
}, { where: B(V("id", String(t.id)), G("releasedAt")) }))) === 1 && (yield* Pr({
|
|
3042
3043
|
target: {
|
|
3043
3044
|
executionId: String(t.executionId),
|
|
3044
3045
|
workflowName: String(t.workflowName)
|
|
@@ -3048,10 +3049,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3048
3049
|
released: !0,
|
|
3049
3050
|
budget: e.budget
|
|
3050
3051
|
}
|
|
3051
|
-
}).pipe(
|
|
3052
|
+
}).pipe(L.catchAll(() => L.succeed({ completed: !1 }))), r += 1);
|
|
3052
3053
|
return { released: r };
|
|
3053
3054
|
}), Jr = async (e, t) => {
|
|
3054
|
-
let n = t?.budget === void 0 ?
|
|
3055
|
+
let n = t?.budget === void 0 ? G("releasedAt") : B(V("budget", t.budget), G("releasedAt"));
|
|
3055
3056
|
return (await e.query({
|
|
3056
3057
|
table: Z,
|
|
3057
3058
|
predicate: n,
|
|
@@ -3081,36 +3082,36 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3081
3082
|
await e.recordEvent(t);
|
|
3082
3083
|
} catch {}
|
|
3083
3084
|
}, Zr = (e) => {
|
|
3084
|
-
let t =
|
|
3085
|
+
let t = I.failureOption(e), n = Array.from(I.defects(e)), r = t._tag === "Some" ? t.value : n[0] ?? I.squash(e);
|
|
3085
3086
|
return {
|
|
3086
3087
|
errorTag: r && typeof r == "object" && "_tag" in r ? String(r._tag) : null,
|
|
3087
3088
|
errorMessage: r?.message ?? String(r)
|
|
3088
3089
|
};
|
|
3089
3090
|
}, Qr = (e, n) => {
|
|
3090
|
-
let r =
|
|
3091
|
-
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 3e4, s = yield* t, c = yield*
|
|
3092
|
-
if (s === void 0) return yield*
|
|
3091
|
+
let r = L.gen(function* () {
|
|
3092
|
+
let r = n.pollIntervalMs ?? 200, i = n.maxPollIntervalMs ?? 5e3, a = n.timeoutMs ?? 3e4, s = yield* t, c = yield* L.serviceOption(o), l = c._tag === "Some" ? c.value : void 0;
|
|
3093
|
+
if (s === void 0) return yield* L.die(/* @__PURE__ */ Error("awaitUpdate: no active workflow run id in scope"));
|
|
3093
3094
|
let u = s, d = Date.now(), f = r;
|
|
3094
3095
|
for (;;) {
|
|
3095
3096
|
let t = Date.now() - d;
|
|
3096
|
-
if (t > a) return yield*
|
|
3097
|
+
if (t > a) return yield* L.die(/* @__PURE__ */ Error(`awaitUpdate('${n.name}') timed out after ${t}ms`));
|
|
3097
3098
|
let r = {
|
|
3098
3099
|
table: "_voltro_workflow_run_events",
|
|
3099
3100
|
order: [{
|
|
3100
3101
|
column: "occurredAt",
|
|
3101
3102
|
direction: "asc"
|
|
3102
3103
|
}],
|
|
3103
|
-
predicate:
|
|
3104
|
+
predicate: V("runId", u),
|
|
3104
3105
|
projection: void 0,
|
|
3105
3106
|
skip: void 0,
|
|
3106
3107
|
take: 1e3
|
|
3107
|
-
}, o = yield*
|
|
3108
|
+
}, o = yield* L.tryPromise({
|
|
3108
3109
|
try: () => e.store.query(r),
|
|
3109
3110
|
catch: (e) => e
|
|
3110
3111
|
}), s = new Set(o.filter((e) => e.eventType === "update-completed" || e.eventType === "update-failed").map((e) => e.payload?.updateId).filter((e) => typeof e == "string" && e.length > 0)), c = o.find((e) => e.eventType === "update-requested" && e.payload?.updateName === n.name && typeof e.payload.updateId == "string" && !s.has(e.payload.updateId));
|
|
3111
3112
|
if (c !== void 0) {
|
|
3112
3113
|
let e = c.payload.updateId;
|
|
3113
|
-
yield*
|
|
3114
|
+
yield* L.promise(() => Xr(l, {
|
|
3114
3115
|
runId: u,
|
|
3115
3116
|
eventType: "update-received",
|
|
3116
3117
|
payload: {
|
|
@@ -3118,7 +3119,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3118
3119
|
updateName: n.name
|
|
3119
3120
|
}
|
|
3120
3121
|
}));
|
|
3121
|
-
let t = yield*
|
|
3122
|
+
let t = yield* z.decodeUnknown(n.schema)(h(c.payload)?.value).pipe(L.tapErrorCause((t) => L.promise(() => Xr(l, {
|
|
3122
3123
|
runId: u,
|
|
3123
3124
|
eventType: "update-failed",
|
|
3124
3125
|
payload: {
|
|
@@ -3126,7 +3127,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3126
3127
|
updateName: n.name,
|
|
3127
3128
|
...Zr(t)
|
|
3128
3129
|
}
|
|
3129
|
-
})))), r = yield* (n.handle ? n.handle(t) :
|
|
3130
|
+
})))), r = yield* (n.handle ? n.handle(t) : L.succeed(t)).pipe(L.flatMap((e) => n.success ? z.decodeUnknown(n.success)(e) : L.succeed(e))).pipe(L.tapErrorCause((t) => L.promise(() => Xr(l, {
|
|
3130
3131
|
runId: u,
|
|
3131
3132
|
eventType: "update-failed",
|
|
3132
3133
|
payload: {
|
|
@@ -3135,7 +3136,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3135
3136
|
...Zr(t)
|
|
3136
3137
|
}
|
|
3137
3138
|
}))));
|
|
3138
|
-
return yield*
|
|
3139
|
+
return yield* L.promise(() => Xr(l, {
|
|
3139
3140
|
runId: u,
|
|
3140
3141
|
eventType: "update-completed",
|
|
3141
3142
|
payload: {
|
|
@@ -3145,7 +3146,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3145
3146
|
}
|
|
3146
3147
|
})), r;
|
|
3147
3148
|
}
|
|
3148
|
-
yield*
|
|
3149
|
+
yield* L.sleep(`${f} millis`), f = Math.min(f * 2, i);
|
|
3149
3150
|
}
|
|
3150
3151
|
});
|
|
3151
3152
|
return f({
|
|
@@ -3198,9 +3199,9 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3198
3199
|
}
|
|
3199
3200
|
return typeof e == "object" ? e : null;
|
|
3200
3201
|
}, ri = async (e, t) => {
|
|
3201
|
-
let n =
|
|
3202
|
+
let n = st(gt), r = (await t.query(n.where(ot(V("id", e), V("executionId", e))).limit(1).descriptor))[0];
|
|
3202
3203
|
if (r === void 0) return null;
|
|
3203
|
-
let i = String(r.id), a =
|
|
3204
|
+
let i = String(r.id), a = st(_t), o = await t.query(a.where(V("runId", i)).descriptor);
|
|
3204
3205
|
return {
|
|
3205
3206
|
id: i,
|
|
3206
3207
|
executionId: Q(r.executionId) ?? "",
|
|
@@ -3220,7 +3221,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3220
3221
|
}, ii = () => {
|
|
3221
3222
|
let e = [], t = [], n = 0, r = 0;
|
|
3222
3223
|
return {
|
|
3223
|
-
layer:
|
|
3224
|
+
layer: Xe.succeed(o, {
|
|
3224
3225
|
startStep: async ({ runId: t, stepName: r, attempt: i, stepInput: a, retryPolicy: o }) => {
|
|
3225
3226
|
let s = `wfstep_mem_${++n}`;
|
|
3226
3227
|
return e.push({
|
|
@@ -3267,11 +3268,11 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3267
3268
|
readSteps: () => e,
|
|
3268
3269
|
readEvents: () => t
|
|
3269
3270
|
};
|
|
3270
|
-
}, ai = (e, t, n) =>
|
|
3271
|
-
let r = yield*
|
|
3271
|
+
}, ai = (e, t, n) => L.gen(function* () {
|
|
3272
|
+
let r = yield* mt;
|
|
3272
3273
|
for (;;) {
|
|
3273
|
-
if (yield*
|
|
3274
|
-
yield*
|
|
3274
|
+
if (yield* L.tryPromise(() => he(t, e)).pipe(L.catchAll(() => L.sync(() => (n(), !1))))) return r.interrupted = !0, yield* L.interrupt;
|
|
3275
|
+
yield* L.sleep(1e3);
|
|
3275
3276
|
}
|
|
3276
3277
|
}), oi = 8192, si = 3, ci = 2e3, li = () => {
|
|
3277
3278
|
let e = (e) => {
|
|
@@ -3311,7 +3312,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3311
3312
|
if (n === null || !g() || !("value" in n || "result" in n || "errorMessage" in n) || e.query === void 0) return n;
|
|
3312
3313
|
let [r] = await e.query({
|
|
3313
3314
|
table: "_voltro_workflow_runs",
|
|
3314
|
-
predicate:
|
|
3315
|
+
predicate: V("id", t),
|
|
3315
3316
|
order: [],
|
|
3316
3317
|
take: 1,
|
|
3317
3318
|
skip: void 0,
|
|
@@ -3429,16 +3430,16 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3429
3430
|
};
|
|
3430
3431
|
}
|
|
3431
3432
|
};
|
|
3432
|
-
}, gi = (e, t, n) =>
|
|
3433
|
+
}, gi = (e, t, n) => L.gen(function* () {
|
|
3433
3434
|
let r = e.store.query;
|
|
3434
3435
|
if (r === void 0) return;
|
|
3435
|
-
let i = e.replayShapeLimit ?? 2e3, a = yield*
|
|
3436
|
+
let i = e.replayShapeLimit ?? 2e3, a = yield* L.promise(() => r.call(e.store, {
|
|
3436
3437
|
table: "_voltro_workflow_run_steps",
|
|
3437
3438
|
order: [{
|
|
3438
3439
|
column: "startedAt",
|
|
3439
3440
|
direction: "asc"
|
|
3440
3441
|
}],
|
|
3441
|
-
predicate:
|
|
3442
|
+
predicate: V("runId", t),
|
|
3442
3443
|
projection: ["stepName"],
|
|
3443
3444
|
skip: void 0,
|
|
3444
3445
|
take: i + 1
|
|
@@ -3460,19 +3461,19 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3460
3461
|
});
|
|
3461
3462
|
return o.length === 0 ? void 0 : s(o);
|
|
3462
3463
|
}), _i = (s, l) => {
|
|
3463
|
-
let u = s.truncateBytes ?? oi, d = s.makeId ?? fi, f = s.recorder ?? hi(s), p = (e, t) => s.log?.warn(e, t), m = s.emit, h = (e) =>
|
|
3464
|
-
yield*
|
|
3464
|
+
let u = s.truncateBytes ?? oi, d = s.makeId ?? fi, f = s.recorder ?? hi(s), p = (e, t) => s.log?.warn(e, t), m = s.emit, h = (e) => L.gen(function* () {
|
|
3465
|
+
yield* L.sync(() => m?.("workflowEvents", {
|
|
3465
3466
|
op: "insert",
|
|
3466
3467
|
row: $(e)
|
|
3467
3468
|
}));
|
|
3468
3469
|
let t = s.wakeups, n = e.runId;
|
|
3469
3470
|
if (t !== void 0 && typeof n == "string") {
|
|
3470
3471
|
let e = s.subject?.tenantId;
|
|
3471
|
-
yield*
|
|
3472
|
+
yield* L.promise(() => t.cancel(n, typeof e == "string" ? e : void 0).catch(() => {
|
|
3472
3473
|
p("failed to clear terminal workflow wakeup", { runId: n });
|
|
3473
3474
|
}));
|
|
3474
3475
|
}
|
|
3475
|
-
}), g = (e, t, n) =>
|
|
3476
|
+
}), g = (e, t, n) => L.promise(async () => {
|
|
3476
3477
|
if (s.onParentClose) try {
|
|
3477
3478
|
await s.onParentClose({
|
|
3478
3479
|
workflowName: s.name,
|
|
@@ -3488,7 +3489,7 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3488
3489
|
reason: n?.message ?? String(n)
|
|
3489
3490
|
});
|
|
3490
3491
|
}
|
|
3491
|
-
}), v = (e, t, n, r) =>
|
|
3492
|
+
}), v = (e, t, n, r) => L.promise(async () => {
|
|
3492
3493
|
if (s.onTerminal) try {
|
|
3493
3494
|
await s.onTerminal({
|
|
3494
3495
|
workflowName: s.name,
|
|
@@ -3506,23 +3507,23 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3506
3507
|
});
|
|
3507
3508
|
}
|
|
3508
3509
|
});
|
|
3509
|
-
return (ee, b) =>
|
|
3510
|
-
let x = Date.now(), te = yield*
|
|
3511
|
-
let n =
|
|
3510
|
+
return (ee, b) => L.gen(function* () {
|
|
3511
|
+
let x = Date.now(), te = yield* Ye.get(r), ne = yield* Ye.get(i), re = s.parentExecutionId ?? te ?? null, ie = s.parentGeneration ?? (s.parentExecutionId == null ? ne : void 0) ?? null, ae = s.parentClosePolicy ?? null, S, C = (e, t) => t.pipe(L.catchAllCause((t) => I.isInterrupted(t) ? L.failCause(t) : L.sync(() => {
|
|
3512
|
+
let n = I.squash(t);
|
|
3512
3513
|
p(e, {
|
|
3513
3514
|
tag: s.name,
|
|
3514
3515
|
executionId: b,
|
|
3515
3516
|
reason: n?.message ?? String(n)
|
|
3516
3517
|
});
|
|
3517
|
-
}))),
|
|
3518
|
+
}))), w = `wfrg_${di()}`, oe = yield* L.serviceOption(we), se = d("wr"), ce = yield* L.sync(() => s.encodePayload === void 0 ? ee : s.encodePayload(ee)), T = yield* L.promise(() => s.transaction((e) => zt(e, {
|
|
3518
3519
|
workflowName: s.name,
|
|
3519
3520
|
executionId: b,
|
|
3520
|
-
generation:
|
|
3521
|
+
generation: w,
|
|
3521
3522
|
now: x,
|
|
3522
|
-
delivery:
|
|
3523
|
+
delivery: oe._tag === "Some" ? oe.value : null,
|
|
3523
3524
|
initialRow: {
|
|
3524
|
-
id:
|
|
3525
|
-
payload:
|
|
3525
|
+
id: se,
|
|
3526
|
+
payload: ce,
|
|
3526
3527
|
workflowVersion: s.workflowVersion ?? null,
|
|
3527
3528
|
workflowPatches: s.workflowPatches ?? null,
|
|
3528
3529
|
output: null,
|
|
@@ -3537,45 +3538,45 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3537
3538
|
traceId: s.traceId ?? null,
|
|
3538
3539
|
parentExecutionId: re,
|
|
3539
3540
|
parentGeneration: ie,
|
|
3540
|
-
parentClosePolicy:
|
|
3541
|
+
parentClosePolicy: ae
|
|
3541
3542
|
}
|
|
3542
3543
|
})));
|
|
3543
|
-
if (typeof
|
|
3544
|
-
if (
|
|
3545
|
-
let e =
|
|
3546
|
-
yield*
|
|
3544
|
+
if (typeof T.row.id != "string") return yield* L.die(/* @__PURE__ */ Error("Recorded workflow entry has no run identity"));
|
|
3545
|
+
if (S = T.row.id, T.restartEvent !== void 0) {
|
|
3546
|
+
let e = T.restartEvent;
|
|
3547
|
+
yield* C("failed to observe recorded workflow restart", L.sync(() => {
|
|
3547
3548
|
m?.("workflowEvents", {
|
|
3548
3549
|
op: "insert",
|
|
3549
3550
|
row: $(e)
|
|
3550
3551
|
});
|
|
3551
3552
|
}));
|
|
3552
3553
|
}
|
|
3553
|
-
if (
|
|
3554
|
-
let e = yield*
|
|
3555
|
-
return e.interrupted = !0,
|
|
3554
|
+
if (T.kind === "cancelled" || T.kind === "already-cancelled") {
|
|
3555
|
+
let e = yield* mt;
|
|
3556
|
+
return e.interrupted = !0, T.kind === "cancelled" && (yield* C("failed to observe suspended workflow cancellation", L.gen(function* () {
|
|
3556
3557
|
if (m?.("workflowRuns", {
|
|
3557
3558
|
op: "update",
|
|
3558
|
-
row: $(
|
|
3559
|
-
}),
|
|
3560
|
-
yield* h(
|
|
3561
|
-
})), yield* v(b, "cancelled",
|
|
3559
|
+
row: $(T.row)
|
|
3560
|
+
}), T.terminalEvent === void 0) return yield* L.die(/* @__PURE__ */ Error("Cancelled entry has no terminal event"));
|
|
3561
|
+
yield* h(T.terminalEvent), yield* g(b, "cancelled", S);
|
|
3562
|
+
})), yield* v(b, "cancelled", S), yield* L.sync(() => s.recordRun?.({
|
|
3562
3563
|
name: s.name,
|
|
3563
3564
|
status: "cancelled",
|
|
3564
3565
|
durationMs: 0
|
|
3565
|
-
}))), yield*
|
|
3566
|
+
}))), yield* L.interrupt;
|
|
3566
3567
|
}
|
|
3567
|
-
let
|
|
3568
|
-
if (
|
|
3569
|
-
let e = `Workflow '${s.name}' run '${b}' was started on version ${
|
|
3568
|
+
let E = T.previous, le = E?.workflowVersion ?? null;
|
|
3569
|
+
if (E?.id !== void 0 && le !== null && s.workflowCompatibleVersions !== void 0 && s.workflowCompatibleVersions !== null && !s.workflowCompatibleVersions.includes(le)) {
|
|
3570
|
+
let e = `Workflow '${s.name}' run '${b}' was started on version ${le}, but current code is compatible with ${s.workflowCompatibleVersions.join(", ")}`, t = s.failureContext ?? {
|
|
3570
3571
|
handler: null,
|
|
3571
3572
|
callerContext: null,
|
|
3572
3573
|
tenantId: null
|
|
3573
|
-
}, n = yield*
|
|
3574
|
+
}, n = yield* L.promise(() => s.transaction((n) => Wt(n, {
|
|
3574
3575
|
owner: {
|
|
3575
|
-
runId:
|
|
3576
|
+
runId: S,
|
|
3576
3577
|
workflowName: s.name,
|
|
3577
3578
|
executionId: b,
|
|
3578
|
-
generation:
|
|
3579
|
+
generation: w
|
|
3579
3580
|
},
|
|
3580
3581
|
now: Date.now(),
|
|
3581
3582
|
durationMs: 0,
|
|
@@ -3586,49 +3587,49 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3586
3587
|
...t
|
|
3587
3588
|
}
|
|
3588
3589
|
})));
|
|
3589
|
-
return n.kind === "committed" && (yield*
|
|
3590
|
+
return n.kind === "committed" && (yield* C("failed to observe workflow version rejection", L.gen(function* () {
|
|
3590
3591
|
m?.("workflowRuns", {
|
|
3591
3592
|
op: "update",
|
|
3592
3593
|
row: $(n.row)
|
|
3593
|
-
}), yield* h(n.terminalEvent), yield* g(b, "failed",
|
|
3594
|
-
})), yield* v(b, "failed",
|
|
3595
|
-
payload:
|
|
3594
|
+
}), yield* h(n.terminalEvent), yield* g(b, "failed", S);
|
|
3595
|
+
})), yield* v(b, "failed", S, {
|
|
3596
|
+
payload: T.row.payload,
|
|
3596
3597
|
errorTag: "WorkflowVersionIncompatible",
|
|
3597
3598
|
errorMessage: e
|
|
3598
|
-
}), yield*
|
|
3599
|
+
}), yield* L.sync(() => s.recordRun?.({
|
|
3599
3600
|
name: s.name,
|
|
3600
3601
|
status: "failed",
|
|
3601
3602
|
durationMs: 0
|
|
3602
3603
|
})), p("workflow run failed", {
|
|
3603
3604
|
workflow: s.name,
|
|
3604
3605
|
executionId: b,
|
|
3605
|
-
runId:
|
|
3606
|
+
runId: S,
|
|
3606
3607
|
errorTag: "WorkflowVersionIncompatible",
|
|
3607
3608
|
cause: e
|
|
3608
|
-
})), yield*
|
|
3609
|
+
})), yield* L.fail(Error(e));
|
|
3609
3610
|
}
|
|
3610
|
-
let
|
|
3611
|
-
if (
|
|
3612
|
-
|
|
3613
|
-
let e =
|
|
3614
|
-
if (typeof e != "number" || !Number.isSafeInteger(e) || e < 0) return yield*
|
|
3611
|
+
let ue = s.workflowPatches ?? [], D;
|
|
3612
|
+
if (E?.id !== void 0) {
|
|
3613
|
+
S = E.id, ue = ui(E.workflowPatches) ?? ue;
|
|
3614
|
+
let e = T.row.reclaimCount;
|
|
3615
|
+
if (typeof e != "number" || !Number.isSafeInteger(e) || e < 0) return yield* L.die(/* @__PURE__ */ Error("Recorded workflow entry has an invalid reclaim counter"));
|
|
3615
3616
|
let t = e > 0, n = s.maxRunReclaims ?? 3;
|
|
3616
3617
|
if (t && e >= n) {
|
|
3617
|
-
let t = `Workflow '${s.name}' run '${b}' killed its runner ${e} times in a row; parked instead of reclaimed again (maxRunReclaims=${n}).`, r = yield*
|
|
3618
|
-
runId:
|
|
3618
|
+
let t = `Workflow '${s.name}' run '${b}' killed its runner ${e} times in a row; parked instead of reclaimed again (maxRunReclaims=${n}).`, r = yield* L.promise(() => s.transaction((e) => Ht(e, {
|
|
3619
|
+
runId: S,
|
|
3619
3620
|
workflowName: s.name,
|
|
3620
3621
|
executionId: b,
|
|
3621
|
-
generation:
|
|
3622
|
+
generation: w
|
|
3622
3623
|
}, {
|
|
3623
3624
|
errorTag: "WorkflowCrashLooped",
|
|
3624
3625
|
errorMessage: t
|
|
3625
3626
|
})));
|
|
3626
|
-
r.kind === "committed" && (yield*
|
|
3627
|
+
r.kind === "committed" && (yield* C("failed to observe workflow crash-loop park", L.gen(function* () {
|
|
3627
3628
|
m?.("workflowRuns", {
|
|
3628
3629
|
op: "update",
|
|
3629
3630
|
row: $(r.row)
|
|
3630
|
-
}), yield*
|
|
3631
|
-
runId:
|
|
3631
|
+
}), yield* L.promise(() => f.recordEvent({
|
|
3632
|
+
runId: S,
|
|
3632
3633
|
eventType: "run-crashlooped",
|
|
3633
3634
|
payload: {
|
|
3634
3635
|
reclaimCount: e,
|
|
@@ -3640,19 +3641,19 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3640
3641
|
})), p("workflow run parked after repeated runner deaths", {
|
|
3641
3642
|
tag: s.name,
|
|
3642
3643
|
executionId: b,
|
|
3643
|
-
runId:
|
|
3644
|
+
runId: S,
|
|
3644
3645
|
reclaimCount: e,
|
|
3645
3646
|
maxRunReclaims: n
|
|
3646
3647
|
}));
|
|
3647
|
-
let i = yield*
|
|
3648
|
-
return yield*
|
|
3648
|
+
let i = yield* mt;
|
|
3649
|
+
return yield* Ge.suspend(i);
|
|
3649
3650
|
}
|
|
3650
|
-
|
|
3651
|
+
D = yield* gi(s, S, p), yield* C("failed to record workflow re-entry", L.gen(function* () {
|
|
3651
3652
|
m?.("workflowRuns", {
|
|
3652
3653
|
op: "update",
|
|
3653
|
-
row: $(
|
|
3654
|
-
}), t && (yield*
|
|
3655
|
-
runId:
|
|
3654
|
+
row: $(T.row)
|
|
3655
|
+
}), t && (yield* L.promise(() => f.recordEvent({
|
|
3656
|
+
runId: S,
|
|
3656
3657
|
eventType: "run-resumed",
|
|
3657
3658
|
payload: {
|
|
3658
3659
|
reason: "runner-reclaim",
|
|
@@ -3661,13 +3662,13 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3661
3662
|
}
|
|
3662
3663
|
})));
|
|
3663
3664
|
}));
|
|
3664
|
-
} else yield*
|
|
3665
|
+
} else yield* C("failed to emit recorded workflow start", L.gen(function* () {
|
|
3665
3666
|
if (m?.("workflowRuns", {
|
|
3666
3667
|
op: "insert",
|
|
3667
|
-
row: $(
|
|
3668
|
-
}),
|
|
3669
|
-
let e =
|
|
3670
|
-
yield*
|
|
3668
|
+
row: $(T.row)
|
|
3669
|
+
}), S) {
|
|
3670
|
+
let e = S;
|
|
3671
|
+
yield* L.promise(() => f.recordEvent({
|
|
3671
3672
|
runId: e,
|
|
3672
3673
|
eventType: "run-started",
|
|
3673
3674
|
payload: {
|
|
@@ -3677,34 +3678,34 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3677
3678
|
workflowVersion: s.workflowVersion ?? null,
|
|
3678
3679
|
workflowPatches: s.workflowPatches ?? null,
|
|
3679
3680
|
parentExecutionId: re,
|
|
3680
|
-
parentClosePolicy:
|
|
3681
|
+
parentClosePolicy: ae
|
|
3681
3682
|
}
|
|
3682
3683
|
}));
|
|
3683
3684
|
}
|
|
3684
3685
|
}));
|
|
3685
|
-
let
|
|
3686
|
-
runId:
|
|
3686
|
+
let de = s.subject?.tenantId, O = L.suspend(() => l(ee, b, w)).pipe(L.locally(t, S), L.locally(r, b), L.locally(i, w), L.locally(n, typeof de == "string" ? de : void 0), L.locally(a, ue), L.locally(c, D), L.provideService(o, f)), k = s.pluginWorkflowStepLayer ? O.pipe(L.provide(s.pluginWorkflowStepLayer)) : O, A = yield* Ge.intoResult(L.raceWith(k, ai({
|
|
3687
|
+
runId: S,
|
|
3687
3688
|
workflowName: s.name,
|
|
3688
3689
|
executionId: b,
|
|
3689
|
-
generation:
|
|
3690
|
+
generation: w
|
|
3690
3691
|
}, async (e) => s.store.query(e), () => p("workflow control read failed; retrying without claiming cancellation", {
|
|
3691
3692
|
executionId: b,
|
|
3692
|
-
runId:
|
|
3693
|
-
})).pipe(
|
|
3694
|
-
onSelfDone: (e, t) =>
|
|
3695
|
-
onOtherDone: (e, t) =>
|
|
3693
|
+
runId: S
|
|
3694
|
+
})).pipe(L.interruptible), {
|
|
3695
|
+
onSelfDone: (e, t) => Je.interrupt(t).pipe(L.zipRight(e)),
|
|
3696
|
+
onOtherDone: (e, t) => Je.interrupt(t).pipe(L.zipRight(e))
|
|
3696
3697
|
}));
|
|
3697
|
-
if (
|
|
3698
|
-
let e =
|
|
3699
|
-
runId:
|
|
3698
|
+
if (Ge.isResult(A) && A._tag === "Suspended") {
|
|
3699
|
+
let e = A.cause, t = e !== void 0 && !I.isEmpty(e), n = t ? I.squash(e) : void 0, r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = t ? n?.message ?? String(n) : null, a = yield* L.promise(() => s.transaction((e) => Ht(e, {
|
|
3700
|
+
runId: S,
|
|
3700
3701
|
workflowName: s.name,
|
|
3701
3702
|
executionId: b,
|
|
3702
|
-
generation:
|
|
3703
|
+
generation: w
|
|
3703
3704
|
}, {
|
|
3704
3705
|
errorTag: r,
|
|
3705
3706
|
errorMessage: i
|
|
3706
3707
|
})));
|
|
3707
|
-
a.kind === "committed" && t && (yield*
|
|
3708
|
+
a.kind === "committed" && t && (yield* L.sync(() => Qe({
|
|
3708
3709
|
error: n,
|
|
3709
3710
|
source: "workflow",
|
|
3710
3711
|
name: s.name,
|
|
@@ -3714,14 +3715,14 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3714
3715
|
executionId: b,
|
|
3715
3716
|
suspendedOnFailure: !0,
|
|
3716
3717
|
...r ? { errorTag: r } : {},
|
|
3717
|
-
...
|
|
3718
|
+
...S ? { runId: S } : {}
|
|
3718
3719
|
}
|
|
3719
|
-
}))), a.kind === "committed" && (yield*
|
|
3720
|
+
}))), a.kind === "committed" && (yield* C("failed to observe workflow suspend", L.gen(function* () {
|
|
3720
3721
|
m?.("workflowRuns", {
|
|
3721
3722
|
op: "update",
|
|
3722
3723
|
row: $(a.row)
|
|
3723
|
-
}), yield*
|
|
3724
|
-
runId:
|
|
3724
|
+
}), yield* L.promise(() => f.recordEvent({
|
|
3725
|
+
runId: S,
|
|
3725
3726
|
eventType: "run-suspended",
|
|
3726
3727
|
payload: t ? {
|
|
3727
3728
|
reason: "suspend-on-failure",
|
|
@@ -3730,20 +3731,20 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3730
3731
|
} : { reason: "workflow-suspend" }
|
|
3731
3732
|
}));
|
|
3732
3733
|
})));
|
|
3733
|
-
let o = yield*
|
|
3734
|
-
return yield*
|
|
3734
|
+
let o = yield* mt;
|
|
3735
|
+
return yield* Ge.suspend(o);
|
|
3735
3736
|
}
|
|
3736
|
-
let fe =
|
|
3737
|
-
if (
|
|
3738
|
-
let t =
|
|
3737
|
+
let fe = A;
|
|
3738
|
+
if (D !== void 0 && S !== void 0) {
|
|
3739
|
+
let t = D.settle();
|
|
3739
3740
|
if (t.length > 0) {
|
|
3740
|
-
let n =
|
|
3741
|
+
let n = S;
|
|
3741
3742
|
p("workflow replay reached a different step shape than this run recorded", {
|
|
3742
3743
|
tag: s.name,
|
|
3743
3744
|
executionId: b,
|
|
3744
3745
|
runId: n,
|
|
3745
3746
|
findings: t.map((e) => `${e.kind}:${e.stepName}`)
|
|
3746
|
-
}), yield*
|
|
3747
|
+
}), yield* C("failed to record nondeterminism findings", L.promise(async () => {
|
|
3747
3748
|
for (let r of t) await f.recordEvent({
|
|
3748
3749
|
runId: n,
|
|
3749
3750
|
eventType: "nondeterminism-suspected",
|
|
@@ -3752,41 +3753,41 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3752
3753
|
}));
|
|
3753
3754
|
}
|
|
3754
3755
|
}
|
|
3755
|
-
if (
|
|
3756
|
+
if (qe.isFailure(fe.exit)) {
|
|
3756
3757
|
let e = fe.exit.cause;
|
|
3757
|
-
if ((yield*
|
|
3758
|
-
let t = Date.now(), n = yield*
|
|
3758
|
+
if ((yield* mt).interrupted && I.isInterruptedOnly(e)) {
|
|
3759
|
+
let t = Date.now(), n = yield* L.promise(() => s.transaction((e) => Wt(e, {
|
|
3759
3760
|
owner: {
|
|
3760
|
-
runId:
|
|
3761
|
+
runId: S,
|
|
3761
3762
|
workflowName: s.name,
|
|
3762
3763
|
executionId: b,
|
|
3763
|
-
generation:
|
|
3764
|
+
generation: w
|
|
3764
3765
|
},
|
|
3765
3766
|
now: t,
|
|
3766
3767
|
durationMs: t - x,
|
|
3767
3768
|
outcome: { status: "cancelled" }
|
|
3768
3769
|
})));
|
|
3769
|
-
return n.kind === "committed" && (yield*
|
|
3770
|
+
return n.kind === "committed" && (yield* C("failed to observe workflow cancellation", L.gen(function* () {
|
|
3770
3771
|
m?.("workflowRuns", {
|
|
3771
3772
|
op: "update",
|
|
3772
3773
|
row: $(n.row)
|
|
3773
|
-
}), yield* h(n.terminalEvent), yield* g(b, "cancelled",
|
|
3774
|
-
})), yield* v(b, "cancelled",
|
|
3774
|
+
}), yield* h(n.terminalEvent), yield* g(b, "cancelled", S);
|
|
3775
|
+
})), yield* v(b, "cancelled", S), yield* L.sync(() => s.recordRun?.({
|
|
3775
3776
|
name: s.name,
|
|
3776
3777
|
status: "cancelled",
|
|
3777
3778
|
durationMs: t - x
|
|
3778
|
-
}))), yield*
|
|
3779
|
+
}))), yield* L.failCause(e);
|
|
3779
3780
|
}
|
|
3780
|
-
let t =
|
|
3781
|
+
let t = I.failureOption(e), n = t._tag === "Some" ? t.value : I.squash(e), r = n && typeof n == "object" && "_tag" in n ? String(n._tag) : null, i = n?.message ?? String(n), a = Date.now(), o = s.failureContext ?? {
|
|
3781
3782
|
handler: null,
|
|
3782
3783
|
callerContext: null,
|
|
3783
3784
|
tenantId: null
|
|
3784
|
-
}, c = yield*
|
|
3785
|
+
}, c = yield* L.promise(() => s.transaction((e) => Wt(e, {
|
|
3785
3786
|
owner: {
|
|
3786
|
-
runId:
|
|
3787
|
+
runId: S,
|
|
3787
3788
|
workflowName: s.name,
|
|
3788
3789
|
executionId: b,
|
|
3789
|
-
generation:
|
|
3790
|
+
generation: w
|
|
3790
3791
|
},
|
|
3791
3792
|
now: a,
|
|
3792
3793
|
durationMs: a - x,
|
|
@@ -3800,10 +3801,10 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3800
3801
|
return c.kind === "committed" ? (p("workflow run failed", {
|
|
3801
3802
|
workflow: s.name,
|
|
3802
3803
|
executionId: b,
|
|
3803
|
-
runId:
|
|
3804
|
+
runId: S,
|
|
3804
3805
|
...r ? { errorTag: r } : {},
|
|
3805
3806
|
cause: y(s.name, n)
|
|
3806
|
-
}), yield*
|
|
3807
|
+
}), yield* L.sync(() => Qe({
|
|
3807
3808
|
error: n,
|
|
3808
3809
|
source: "workflow",
|
|
3809
3810
|
name: s.name,
|
|
@@ -3812,49 +3813,49 @@ var gt = Je.layerMemory, _t = G("_voltro_workflow_runs", {
|
|
|
3812
3813
|
fields: {
|
|
3813
3814
|
executionId: b,
|
|
3814
3815
|
...r ? { errorTag: r } : {},
|
|
3815
|
-
...
|
|
3816
|
+
...S ? { runId: S } : {}
|
|
3816
3817
|
}
|
|
3817
|
-
})),
|
|
3818
|
+
})), S && (yield* C("failed to record workflow failure", L.gen(function* () {
|
|
3818
3819
|
m?.("workflowRuns", {
|
|
3819
3820
|
op: "update",
|
|
3820
3821
|
row: $(c.row)
|
|
3821
|
-
}), yield* h(c.terminalEvent), yield* g(b, "failed",
|
|
3822
|
-
}))), yield* v(b, "failed",
|
|
3822
|
+
}), yield* h(c.terminalEvent), yield* g(b, "failed", S);
|
|
3823
|
+
}))), yield* v(b, "failed", S, {
|
|
3823
3824
|
payload: ee,
|
|
3824
3825
|
errorTag: r,
|
|
3825
3826
|
errorMessage: i
|
|
3826
|
-
}), yield*
|
|
3827
|
+
}), yield* L.sync(() => s.recordRun?.({
|
|
3827
3828
|
name: s.name,
|
|
3828
3829
|
status: "failed",
|
|
3829
3830
|
durationMs: Date.now() - x
|
|
3830
|
-
})), yield*
|
|
3831
|
+
})), yield* L.failCause(e)) : yield* L.failCause(e);
|
|
3831
3832
|
}
|
|
3832
|
-
let
|
|
3833
|
+
let pe = fe.exit.value, j = Date.now(), M = yield* L.promise(() => s.transaction((e) => Wt(e, {
|
|
3833
3834
|
owner: {
|
|
3834
|
-
runId:
|
|
3835
|
+
runId: S,
|
|
3835
3836
|
workflowName: s.name,
|
|
3836
3837
|
executionId: b,
|
|
3837
|
-
generation:
|
|
3838
|
+
generation: w
|
|
3838
3839
|
},
|
|
3839
|
-
now:
|
|
3840
|
-
durationMs:
|
|
3840
|
+
now: j,
|
|
3841
|
+
durationMs: j - x,
|
|
3841
3842
|
outcome: {
|
|
3842
3843
|
status: "succeeded",
|
|
3843
|
-
output: pi(
|
|
3844
|
+
output: pi(pe, u)
|
|
3844
3845
|
}
|
|
3845
3846
|
})));
|
|
3846
|
-
return
|
|
3847
|
+
return M.kind === "committed" ? (S && (yield* C("failed to record workflow success", L.gen(function* () {
|
|
3847
3848
|
m?.("workflowRuns", {
|
|
3848
3849
|
op: "update",
|
|
3849
|
-
row: $(
|
|
3850
|
-
}), yield* h(
|
|
3851
|
-
}))), yield* v(b, "succeeded",
|
|
3850
|
+
row: $(M.row)
|
|
3851
|
+
}), yield* h(M.terminalEvent), yield* g(b, "succeeded", S);
|
|
3852
|
+
}))), yield* v(b, "succeeded", S), yield* L.sync(() => s.recordRun?.({
|
|
3852
3853
|
name: s.name,
|
|
3853
3854
|
status: "succeeded",
|
|
3854
3855
|
durationMs: Date.now() - x,
|
|
3855
3856
|
completedAtSec: Date.now() / 1e3
|
|
3856
|
-
})),
|
|
3857
|
+
})), pe) : pe;
|
|
3857
3858
|
});
|
|
3858
3859
|
};
|
|
3859
3860
|
//#endregion
|
|
3860
|
-
export { gn as $, yr as A, Zn as B, Nr as C,
|
|
3861
|
+
export { gn as $, yr as A, Zn as B, Nr as C, vt as Ct, wr as D, Cr as E, ht as Et, fr as F, yn as G, jn as H, dr as I, vn as J, bn as K, Yn as L, lr as M, hr as N, Er as O, mr as P, Tn as Q, or as R, Ur as S, yt as St, Ar as T, gt as Tt, An as U, kn as V, Rn as W, wn as X, _n as Y, On as Z, Lr as _, xt as _t, li as a, cn as at, Jr as b, Tt as bt, _i as c, Gt as ct, Qr as d, zt as dt, hn as et, Z as f, Pt as ft, Rr as g, Ct as gt, zr as h, St as ht, ui as i, sn as it, _r as j, Dr as k, ii as l, Vt as lt, Hr as m, Dt as mt, ci as n, un as nt, $ as o, an as ot, Vr as p, bt as pt, xn as q, hi as r, fn as rt, pi as s, on as st, si as t, pn as tt, ri as u, Wt as ut, Ir as v, Ot as vt, Pr as w, _t as wt, qr as x, wt as xt, Yr as y, Et as yt, Qn as z };
|