@crewx/workflow 0.3.22-rc.15 → 0.3.22-rc.151
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/SKILL.md +40 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +268 -86
- package/dist/cli.js.map +1 -1
- package/dist/src/card-state.d.ts +20 -0
- package/dist/src/card-state.d.ts.map +1 -0
- package/dist/src/card-state.js +121 -0
- package/dist/src/card-state.js.map +1 -0
- package/dist/src/engine.d.ts +9 -2
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +70 -22
- package/dist/src/engine.js.map +1 -1
- package/dist/src/failure.d.ts +41 -0
- package/dist/src/failure.d.ts.map +1 -0
- package/dist/src/failure.js +122 -0
- package/dist/src/failure.js.map +1 -0
- package/dist/src/list-view.d.ts +22 -0
- package/dist/src/list-view.d.ts.map +1 -0
- package/dist/src/list-view.js +188 -0
- package/dist/src/list-view.js.map +1 -0
- package/dist/src/mermaid.d.ts.map +1 -1
- package/dist/src/mermaid.js +7 -4
- package/dist/src/mermaid.js.map +1 -1
- package/dist/src/parent-task-sync.d.ts +120 -0
- package/dist/src/parent-task-sync.d.ts.map +1 -0
- package/dist/src/parent-task-sync.js +307 -0
- package/dist/src/parent-task-sync.js.map +1 -0
- package/dist/src/retry-policy.d.ts +38 -0
- package/dist/src/retry-policy.d.ts.map +1 -0
- package/dist/src/retry-policy.js +140 -0
- package/dist/src/retry-policy.js.map +1 -0
- package/dist/src/run-manager.d.ts +35 -2
- package/dist/src/run-manager.d.ts.map +1 -1
- package/dist/src/run-manager.js +1189 -235
- package/dist/src/run-manager.js.map +1 -1
- package/dist/src/types.d.ts +39 -4
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -1
- package/dist/src/utils/output-format.d.ts +12 -0
- package/dist/src/utils/output-format.d.ts.map +1 -1
- package/dist/src/utils/output-format.js +103 -5
- package/dist/src/utils/output-format.js.map +1 -1
- package/dist/src/workflow-persistence.d.ts +48 -0
- package/dist/src/workflow-persistence.d.ts.map +1 -0
- package/dist/src/workflow-persistence.js +224 -0
- package/dist/src/workflow-persistence.js.map +1 -0
- package/dist/workflow-schema.json +34 -5
- package/package.json +23 -4
- package/workflow-schema.json +34 -5
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WORKFLOW_PARENT_TASK_KINDS = exports.WORKFLOW_PARENT_ORPHAN_ERROR = exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS = void 0;
|
|
4
|
+
exports.deriveWorkflowParentLifecycle = deriveWorkflowParentLifecycle;
|
|
5
|
+
exports.deriveWorkflowParentLifecycleDecision = deriveWorkflowParentLifecycleDecision;
|
|
6
|
+
exports.deriveWorkflowParentLifecycleChange = deriveWorkflowParentLifecycleChange;
|
|
7
|
+
exports.syncWorkflowParentTaskLifecycle = syncWorkflowParentTaskLifecycle;
|
|
8
|
+
exports.previewWorkflowParentRepair = previewWorkflowParentRepair;
|
|
9
|
+
exports.createWorkflowParentPersistSink = createWorkflowParentPersistSink;
|
|
10
|
+
exports.reconcileWorkflowParentTasks = reconcileWorkflowParentTasks;
|
|
11
|
+
exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS = 10 * 60 * 1000;
|
|
12
|
+
exports.WORKFLOW_PARENT_ORPHAN_ERROR = 'Workflow run file missing after grace period (orphaned workflow task)';
|
|
13
|
+
exports.WORKFLOW_PARENT_TASK_KINDS = [
|
|
14
|
+
'workflow_card',
|
|
15
|
+
'workflow_ui_instance',
|
|
16
|
+
];
|
|
17
|
+
function latestAuditEndedAt(run) {
|
|
18
|
+
let latest;
|
|
19
|
+
for (const entry of run.audit ?? []) {
|
|
20
|
+
const timestamp = Date.parse(entry.ended_at);
|
|
21
|
+
if (!Number.isFinite(timestamp))
|
|
22
|
+
continue;
|
|
23
|
+
if (!latest || timestamp >= latest.timestamp) {
|
|
24
|
+
latest = { value: entry.ended_at, timestamp };
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return latest?.value ?? null;
|
|
28
|
+
}
|
|
29
|
+
function deriveWorkflowParentLifecycle(run) {
|
|
30
|
+
if (run.status === 'completed' || run.status === 'failed' || run.status === 'cancelled') {
|
|
31
|
+
const completedAt = latestAuditEndedAt(run) ?? run.updated_at;
|
|
32
|
+
const createdAtMs = Date.parse(run.created_at);
|
|
33
|
+
const completedAtMs = Date.parse(completedAt);
|
|
34
|
+
const durationMs = Number.isFinite(createdAtMs) && Number.isFinite(completedAtMs)
|
|
35
|
+
? Math.max(0, completedAtMs - createdAtMs)
|
|
36
|
+
: null;
|
|
37
|
+
if (run.status === 'completed') {
|
|
38
|
+
return { status: 'success', error: null, completedAt, durationMs };
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
status: 'failed',
|
|
42
|
+
error: run.error ?? (run.status === 'cancelled' ? 'Workflow run cancelled' : 'Workflow run failed'),
|
|
43
|
+
completedAt,
|
|
44
|
+
durationMs,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
if (run.status === 'running' || run.status === 'retrying') {
|
|
48
|
+
return { status: 'running', error: null, completedAt: null, durationMs: null };
|
|
49
|
+
}
|
|
50
|
+
if (run.status === 'pending' || run.status === undefined) {
|
|
51
|
+
return { status: 'pending', error: null, completedAt: null, durationMs: null };
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function parseWorkflowParentMarker(metadata) {
|
|
56
|
+
if (!metadata)
|
|
57
|
+
return null;
|
|
58
|
+
try {
|
|
59
|
+
const parsed = JSON.parse(metadata);
|
|
60
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
61
|
+
return null;
|
|
62
|
+
const record = parsed;
|
|
63
|
+
return (record.kind === 'workflow_card' || record.kind === 'workflow_ui_instance') && typeof record.workflowRunId === 'string'
|
|
64
|
+
? {
|
|
65
|
+
kind: record.kind,
|
|
66
|
+
workflowRunId: record.workflowRunId,
|
|
67
|
+
...(typeof record.uiInstanceId === 'string' && record.uiInstanceId.trim()
|
|
68
|
+
? { uiInstanceId: record.uiInstanceId.trim() }
|
|
69
|
+
: {}),
|
|
70
|
+
}
|
|
71
|
+
: null;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
function lifecycleMatches(row, lifecycle) {
|
|
78
|
+
return row.status === lifecycle.status
|
|
79
|
+
&& row.error === lifecycle.error
|
|
80
|
+
&& row.completed_at === lifecycle.completedAt
|
|
81
|
+
&& row.duration_ms === lifecycle.durationMs;
|
|
82
|
+
}
|
|
83
|
+
function isTerminalParentStatus(status) {
|
|
84
|
+
return status === 'success'
|
|
85
|
+
|| status === 'completed'
|
|
86
|
+
|| status === 'failed'
|
|
87
|
+
|| status === 'cancelled'
|
|
88
|
+
|| status === 'error';
|
|
89
|
+
}
|
|
90
|
+
function protectsNewerTerminalParent(row, run, snapshotUpdatedAt) {
|
|
91
|
+
if (!isTerminalParentStatus(row.status))
|
|
92
|
+
return false;
|
|
93
|
+
if (!row.completed_at)
|
|
94
|
+
return false;
|
|
95
|
+
const taskCompletedAt = Date.parse(row.completed_at);
|
|
96
|
+
const runUpdatedAt = Date.parse(snapshotUpdatedAt ?? run.updated_at);
|
|
97
|
+
if (!Number.isFinite(taskCompletedAt) || !Number.isFinite(runUpdatedAt))
|
|
98
|
+
return true;
|
|
99
|
+
return taskCompletedAt >= runUpdatedAt;
|
|
100
|
+
}
|
|
101
|
+
function deriveWorkflowParentLifecycleDecision(options) {
|
|
102
|
+
const ineligible = () => ({
|
|
103
|
+
status: 'ineligible',
|
|
104
|
+
change: null,
|
|
105
|
+
linkedAuditInstanceId: null,
|
|
106
|
+
});
|
|
107
|
+
if (options.row.platform !== 'workflow' || options.row.workspace_id !== options.workspaceId) {
|
|
108
|
+
return ineligible();
|
|
109
|
+
}
|
|
110
|
+
const marker = parseWorkflowParentMarker(options.row.metadata);
|
|
111
|
+
if (!marker || marker.kind !== options.kind || marker.workflowRunId !== options.run.id) {
|
|
112
|
+
return ineligible();
|
|
113
|
+
}
|
|
114
|
+
const lifecycle = deriveWorkflowParentLifecycle(options.run);
|
|
115
|
+
if (!lifecycle)
|
|
116
|
+
return ineligible();
|
|
117
|
+
const linkedAuditInstanceId = marker.kind === 'workflow_ui_instance'
|
|
118
|
+
? marker.uiInstanceId ?? null
|
|
119
|
+
: null;
|
|
120
|
+
if (lifecycleMatches(options.row, lifecycle)) {
|
|
121
|
+
return { status: 'unchanged', change: null, linkedAuditInstanceId };
|
|
122
|
+
}
|
|
123
|
+
if ((lifecycle.status === 'running' || lifecycle.status === 'pending')
|
|
124
|
+
&& protectsNewerTerminalParent(options.row, options.run, options.snapshotUpdatedAt)) {
|
|
125
|
+
return { status: 'stale-suppressed', change: null, linkedAuditInstanceId: null };
|
|
126
|
+
}
|
|
127
|
+
const runStatus = options.run.status ?? 'pending';
|
|
128
|
+
const reason = runStatus === 'pending'
|
|
129
|
+
? 'Persisted run is pending (or legacy statusless); no execution outcome is inferred.'
|
|
130
|
+
: `Persisted run status "${runStatus}" is projected to the parent lifecycle.`;
|
|
131
|
+
return {
|
|
132
|
+
status: 'changed',
|
|
133
|
+
linkedAuditInstanceId,
|
|
134
|
+
change: {
|
|
135
|
+
id: options.row.id,
|
|
136
|
+
kind: options.kind,
|
|
137
|
+
before: {
|
|
138
|
+
status: options.row.status,
|
|
139
|
+
error: options.row.error,
|
|
140
|
+
completedAt: options.row.completed_at,
|
|
141
|
+
durationMs: options.row.duration_ms,
|
|
142
|
+
},
|
|
143
|
+
after: lifecycle,
|
|
144
|
+
reason,
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
function deriveWorkflowParentLifecycleChange(options) {
|
|
149
|
+
return deriveWorkflowParentLifecycleDecision(options).change;
|
|
150
|
+
}
|
|
151
|
+
function applyWorkflowParentLifecycleChange(options, change) {
|
|
152
|
+
options.taskRepo.updateTaskLifecycle({
|
|
153
|
+
id: options.row.id,
|
|
154
|
+
status: change.after.status,
|
|
155
|
+
error: change.after.error,
|
|
156
|
+
completedAt: change.after.completedAt,
|
|
157
|
+
durationMs: change.after.durationMs,
|
|
158
|
+
workspaceId: options.workspaceId,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
function syncWorkflowParentTaskLifecycle(options) {
|
|
162
|
+
const change = deriveWorkflowParentLifecycleDecision(options).change;
|
|
163
|
+
if (!change)
|
|
164
|
+
return false;
|
|
165
|
+
applyWorkflowParentLifecycleChange(options, change);
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
function previewWorkflowParentRepair(options) {
|
|
169
|
+
const parentKinds = options.parentKinds ?? exports.WORKFLOW_PARENT_TASK_KINDS;
|
|
170
|
+
const changes = [];
|
|
171
|
+
const linkedAuditInstanceIds = new Set();
|
|
172
|
+
for (const kind of parentKinds) {
|
|
173
|
+
const row = options.taskRepo.findWorkflowParentTask({
|
|
174
|
+
workspaceId: options.workspaceId,
|
|
175
|
+
workflowRunId: options.run.id,
|
|
176
|
+
kind,
|
|
177
|
+
});
|
|
178
|
+
if (!row)
|
|
179
|
+
continue;
|
|
180
|
+
const decision = deriveWorkflowParentLifecycleDecision({
|
|
181
|
+
row,
|
|
182
|
+
run: options.run,
|
|
183
|
+
workspaceId: options.workspaceId,
|
|
184
|
+
kind,
|
|
185
|
+
snapshotUpdatedAt: latestAuditEndedAt(options.run),
|
|
186
|
+
});
|
|
187
|
+
if (decision.linkedAuditInstanceId) {
|
|
188
|
+
linkedAuditInstanceIds.add(decision.linkedAuditInstanceId);
|
|
189
|
+
}
|
|
190
|
+
if (decision.change)
|
|
191
|
+
changes.push(decision.change);
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
runId: options.run.id,
|
|
195
|
+
runStatus: options.run.status ?? 'pending',
|
|
196
|
+
changes,
|
|
197
|
+
linkedAuditInstanceIds: [...linkedAuditInstanceIds],
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
function createWorkflowParentPersistSink(options) {
|
|
201
|
+
const parentKinds = options.parentKinds ?? exports.WORKFLOW_PARENT_TASK_KINDS;
|
|
202
|
+
return (run) => {
|
|
203
|
+
const changedParentTaskIds = [];
|
|
204
|
+
const linkedAuditInstanceIds = new Set();
|
|
205
|
+
if (!deriveWorkflowParentLifecycle(run)) {
|
|
206
|
+
return { changedParentTaskIds, linkedAuditInstanceIds: [] };
|
|
207
|
+
}
|
|
208
|
+
for (const kind of parentKinds) {
|
|
209
|
+
const row = options.taskRepo.findWorkflowParentTask({
|
|
210
|
+
workspaceId: options.workspaceId,
|
|
211
|
+
workflowRunId: run.id,
|
|
212
|
+
kind,
|
|
213
|
+
});
|
|
214
|
+
if (!row)
|
|
215
|
+
continue;
|
|
216
|
+
const lifecycleOptions = {
|
|
217
|
+
taskRepo: options.taskRepo,
|
|
218
|
+
row,
|
|
219
|
+
run,
|
|
220
|
+
workspaceId: options.workspaceId,
|
|
221
|
+
kind,
|
|
222
|
+
snapshotUpdatedAt: latestAuditEndedAt(run),
|
|
223
|
+
};
|
|
224
|
+
const decision = deriveWorkflowParentLifecycleDecision(lifecycleOptions);
|
|
225
|
+
if (decision.linkedAuditInstanceId) {
|
|
226
|
+
linkedAuditInstanceIds.add(decision.linkedAuditInstanceId);
|
|
227
|
+
}
|
|
228
|
+
if (decision.change) {
|
|
229
|
+
applyWorkflowParentLifecycleChange(lifecycleOptions, decision.change);
|
|
230
|
+
changedParentTaskIds.push(row.id);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return { changedParentTaskIds, linkedAuditInstanceIds: [...linkedAuditInstanceIds] };
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
function isStale(startedAt, nowMs, graceMs) {
|
|
237
|
+
const startedAtMs = Date.parse(startedAt);
|
|
238
|
+
return Number.isFinite(startedAtMs) && nowMs - startedAtMs >= graceMs;
|
|
239
|
+
}
|
|
240
|
+
function reconcileWorkflowParentTasks(options) {
|
|
241
|
+
const graceMs = options.orphanGraceMs ?? exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS;
|
|
242
|
+
const nowMs = options.nowMs ?? Date.now();
|
|
243
|
+
const result = { aligned: 0, orphaned: 0, skipped: 0 };
|
|
244
|
+
for (const row of options.taskRepo.findRunningWorkflowParentTasks()) {
|
|
245
|
+
const marker = parseWorkflowParentMarker(row.metadata);
|
|
246
|
+
if (row.platform !== 'workflow' || !marker) {
|
|
247
|
+
result.skipped += 1;
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const workspaceId = row.workspace_id;
|
|
251
|
+
if (!workspaceId) {
|
|
252
|
+
result.skipped += 1;
|
|
253
|
+
continue;
|
|
254
|
+
}
|
|
255
|
+
const workspacePath = options.resolveWorkspacePath(workspaceId);
|
|
256
|
+
if (!workspacePath) {
|
|
257
|
+
result.skipped += 1;
|
|
258
|
+
continue;
|
|
259
|
+
}
|
|
260
|
+
const workflowRunId = marker.workflowRunId;
|
|
261
|
+
let run = null;
|
|
262
|
+
try {
|
|
263
|
+
run = options.loadRun(workspacePath, workflowRunId);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
}
|
|
267
|
+
if (!run) {
|
|
268
|
+
if (row.status !== 'running' || !isStale(row.started_at, nowMs, graceMs)) {
|
|
269
|
+
result.skipped += 1;
|
|
270
|
+
continue;
|
|
271
|
+
}
|
|
272
|
+
const completedAt = row.completed_at ?? new Date(nowMs).toISOString();
|
|
273
|
+
const durationMs = row.duration_ms ?? Math.max(0, nowMs - Date.parse(row.started_at));
|
|
274
|
+
options.taskRepo.updateTaskLifecycle({
|
|
275
|
+
id: row.id,
|
|
276
|
+
status: 'failed',
|
|
277
|
+
error: exports.WORKFLOW_PARENT_ORPHAN_ERROR,
|
|
278
|
+
completedAt,
|
|
279
|
+
durationMs: Number.isFinite(durationMs) ? durationMs : null,
|
|
280
|
+
workspaceId,
|
|
281
|
+
});
|
|
282
|
+
result.orphaned += 1;
|
|
283
|
+
continue;
|
|
284
|
+
}
|
|
285
|
+
const lifecycle = deriveWorkflowParentLifecycle(run);
|
|
286
|
+
if (!lifecycle) {
|
|
287
|
+
result.skipped += 1;
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
if (lifecycleMatches(row, lifecycle))
|
|
291
|
+
continue;
|
|
292
|
+
if (syncWorkflowParentTaskLifecycle({
|
|
293
|
+
taskRepo: options.taskRepo,
|
|
294
|
+
row,
|
|
295
|
+
run,
|
|
296
|
+
workspaceId,
|
|
297
|
+
kind: marker.kind,
|
|
298
|
+
})) {
|
|
299
|
+
result.aligned += 1;
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
result.skipped += 1;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return result;
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=parent-task-sync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-task-sync.js","sourceRoot":"","sources":["../../src/parent-task-sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { RetryPolicy } from './types';
|
|
2
|
+
export declare const RETRY_BASE_DELAY_MS = 1000;
|
|
3
|
+
export declare const RETRY_DEFAULT_MAX_DELAY_MS = 30000;
|
|
4
|
+
export declare const RETRY_HARD_MAX_DELAY_MS = 60000;
|
|
5
|
+
export declare const RETRY_MAX_ATTEMPTS_CEILING = 10;
|
|
6
|
+
export declare const DEFAULT_RETRYABLE_CODES: readonly ["NODE_EXIT_NONZERO", "NODE_TIMEOUT", "SPAWN_FAILED"];
|
|
7
|
+
export declare const RETRYABLE_NODE_TYPES: readonly ["agent_task", "skill_task", "shell_task"];
|
|
8
|
+
export type RetryPolicyParseResult = {
|
|
9
|
+
ok: true;
|
|
10
|
+
policy: RetryPolicy | undefined;
|
|
11
|
+
} | {
|
|
12
|
+
ok: false;
|
|
13
|
+
path: string;
|
|
14
|
+
reason: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function parseRetryPolicy(node: unknown): RetryPolicyParseResult;
|
|
17
|
+
export interface RetryDecisionRun {
|
|
18
|
+
status?: 'pending' | 'running' | 'retrying' | 'completed' | 'failed' | 'cancelled';
|
|
19
|
+
last_failure?: {
|
|
20
|
+
failedNode?: unknown;
|
|
21
|
+
attempt?: unknown;
|
|
22
|
+
causeCode?: unknown;
|
|
23
|
+
};
|
|
24
|
+
node_attempts?: Record<string, unknown>;
|
|
25
|
+
}
|
|
26
|
+
export interface RetryDecisionInput {
|
|
27
|
+
policy?: RetryPolicy;
|
|
28
|
+
run: RetryDecisionRun;
|
|
29
|
+
nodeId: string;
|
|
30
|
+
}
|
|
31
|
+
export interface RetryDecision {
|
|
32
|
+
retry: boolean;
|
|
33
|
+
reason: string;
|
|
34
|
+
attempt?: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function decideRetry(input: RetryDecisionInput): RetryDecision;
|
|
37
|
+
export declare function computeRetryDelayMs(policy: RetryPolicy, attempt: number): number;
|
|
38
|
+
//# sourceMappingURL=retry-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-policy.d.ts","sourceRoot":"","sources":["../../src/retry-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EAEZ,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,mBAAmB,OAAQ,CAAC;AACzC,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAC9C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAE7C,eAAO,MAAM,uBAAuB,gEAIe,CAAC;AAEpD,eAAO,MAAM,oBAAoB,qDAIvB,CAAC;AAmBX,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAWhD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,sBAAsB,CA4DtE;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;IACnF,YAAY,CAAC,EAAE;QACb,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,gBAAgB,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAOD,wBAAgB,WAAW,CAAC,KAAK,EAAE,kBAAkB,GAAG,aAAa,CA8BpE;AAGD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAShF"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RETRYABLE_NODE_TYPES = exports.DEFAULT_RETRYABLE_CODES = exports.RETRY_MAX_ATTEMPTS_CEILING = exports.RETRY_HARD_MAX_DELAY_MS = exports.RETRY_DEFAULT_MAX_DELAY_MS = exports.RETRY_BASE_DELAY_MS = void 0;
|
|
4
|
+
exports.parseRetryPolicy = parseRetryPolicy;
|
|
5
|
+
exports.decideRetry = decideRetry;
|
|
6
|
+
exports.computeRetryDelayMs = computeRetryDelayMs;
|
|
7
|
+
const types_1 = require("./types");
|
|
8
|
+
exports.RETRY_BASE_DELAY_MS = 1000;
|
|
9
|
+
exports.RETRY_DEFAULT_MAX_DELAY_MS = 30000;
|
|
10
|
+
exports.RETRY_HARD_MAX_DELAY_MS = 60000;
|
|
11
|
+
exports.RETRY_MAX_ATTEMPTS_CEILING = 10;
|
|
12
|
+
exports.DEFAULT_RETRYABLE_CODES = [
|
|
13
|
+
'NODE_EXIT_NONZERO',
|
|
14
|
+
'NODE_TIMEOUT',
|
|
15
|
+
'SPAWN_FAILED',
|
|
16
|
+
];
|
|
17
|
+
exports.RETRYABLE_NODE_TYPES = [
|
|
18
|
+
'agent_task',
|
|
19
|
+
'skill_task',
|
|
20
|
+
'shell_task',
|
|
21
|
+
];
|
|
22
|
+
const FAILURE_CODES = new Set([
|
|
23
|
+
'CLI_UNRESOLVABLE',
|
|
24
|
+
'SPAWN_FAILED',
|
|
25
|
+
'NODE_TIMEOUT',
|
|
26
|
+
'NODE_EXIT_NONZERO',
|
|
27
|
+
'OUTPUT_INVALID',
|
|
28
|
+
'RATE_LIMITED',
|
|
29
|
+
'CONFIG_INVALID',
|
|
30
|
+
'INTERRUPTED',
|
|
31
|
+
'CANCELLED',
|
|
32
|
+
'UNKNOWN',
|
|
33
|
+
]);
|
|
34
|
+
function isRecord(value) {
|
|
35
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
36
|
+
}
|
|
37
|
+
function invalid(path, reason) {
|
|
38
|
+
return { ok: false, path, reason };
|
|
39
|
+
}
|
|
40
|
+
function parseRetryPolicy(node) {
|
|
41
|
+
if (!isRecord(node))
|
|
42
|
+
return invalid('retry', 'node must be an object');
|
|
43
|
+
const rawRetry = node.retry;
|
|
44
|
+
if (rawRetry === undefined)
|
|
45
|
+
return { ok: true, policy: undefined };
|
|
46
|
+
if (!isRecord(rawRetry))
|
|
47
|
+
return invalid('retry', 'retry must be an object');
|
|
48
|
+
const nodeType = node.type;
|
|
49
|
+
if (typeof nodeType !== 'string'
|
|
50
|
+
|| !exports.RETRYABLE_NODE_TYPES.includes(nodeType)) {
|
|
51
|
+
return invalid('retry', 'retry is only supported on agent_task, skill_task, and shell_task nodes');
|
|
52
|
+
}
|
|
53
|
+
const max = rawRetry.max;
|
|
54
|
+
if (typeof max !== 'number' || !Number.isFinite(max)) {
|
|
55
|
+
return invalid('retry.max', 'retry.max must be a finite number');
|
|
56
|
+
}
|
|
57
|
+
if (!Number.isInteger(max))
|
|
58
|
+
return invalid('retry.max', 'retry.max must be an integer');
|
|
59
|
+
if (max < 0 || max > exports.RETRY_MAX_ATTEMPTS_CEILING) {
|
|
60
|
+
return invalid('retry.max', `retry.max must be between 0 and ${exports.RETRY_MAX_ATTEMPTS_CEILING}`);
|
|
61
|
+
}
|
|
62
|
+
const delay = rawRetry.delay;
|
|
63
|
+
if (delay !== 'fixed' && delay !== 'exponential') {
|
|
64
|
+
return invalid('retry.delay', 'retry.delay must be "fixed" or "exponential"');
|
|
65
|
+
}
|
|
66
|
+
let maxDelay = exports.RETRY_DEFAULT_MAX_DELAY_MS;
|
|
67
|
+
if (rawRetry.max_delay !== undefined) {
|
|
68
|
+
if (typeof rawRetry.max_delay !== 'number' || !Number.isFinite(rawRetry.max_delay)) {
|
|
69
|
+
return invalid('retry.max_delay', 'retry.max_delay must be a finite number');
|
|
70
|
+
}
|
|
71
|
+
if (!Number.isInteger(rawRetry.max_delay) || rawRetry.max_delay < 0) {
|
|
72
|
+
return invalid('retry.max_delay', 'retry.max_delay must be a non-negative integer');
|
|
73
|
+
}
|
|
74
|
+
maxDelay = rawRetry.max_delay;
|
|
75
|
+
}
|
|
76
|
+
let on = [...exports.DEFAULT_RETRYABLE_CODES];
|
|
77
|
+
if (rawRetry.on !== undefined) {
|
|
78
|
+
if (!Array.isArray(rawRetry.on))
|
|
79
|
+
return invalid('retry.on', 'retry.on must be an array');
|
|
80
|
+
on = [];
|
|
81
|
+
for (const [index, candidate] of rawRetry.on.entries()) {
|
|
82
|
+
if (typeof candidate !== 'string' || !FAILURE_CODES.has(candidate)) {
|
|
83
|
+
return invalid(`retry.on[${index}]`, `retry.on[${index}] is not a supported workflow failure code`);
|
|
84
|
+
}
|
|
85
|
+
const code = candidate;
|
|
86
|
+
if (types_1.NEVER_RETRYABLE.includes(code)) {
|
|
87
|
+
return invalid(`retry.on[${index}]`, `${code} cannot be retried`);
|
|
88
|
+
}
|
|
89
|
+
on.push(code);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return {
|
|
93
|
+
ok: true,
|
|
94
|
+
policy: { max, delay, max_delay: maxDelay, on },
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function declined(reason) {
|
|
98
|
+
return { retry: false, reason };
|
|
99
|
+
}
|
|
100
|
+
function decideRetry(input) {
|
|
101
|
+
const { policy, run, nodeId } = input;
|
|
102
|
+
if (!policy)
|
|
103
|
+
return declined('retry policy is not configured');
|
|
104
|
+
if (run.status !== 'failed')
|
|
105
|
+
return declined('run is not failed');
|
|
106
|
+
const failure = run.last_failure;
|
|
107
|
+
if (!failure || failure.failedNode !== nodeId)
|
|
108
|
+
return declined('latest failure is not for this node');
|
|
109
|
+
const attempt = failure.attempt;
|
|
110
|
+
const storedAttempt = run.node_attempts?.[nodeId];
|
|
111
|
+
if (typeof attempt !== 'number'
|
|
112
|
+
|| !Number.isInteger(attempt)
|
|
113
|
+
|| attempt <= 0
|
|
114
|
+
|| storedAttempt !== attempt) {
|
|
115
|
+
return declined('latest attempt is stale');
|
|
116
|
+
}
|
|
117
|
+
const causeCode = failure.causeCode;
|
|
118
|
+
if (typeof causeCode !== 'string')
|
|
119
|
+
return declined('latest failure has no supported cause');
|
|
120
|
+
if (types_1.NEVER_RETRYABLE.includes(causeCode)) {
|
|
121
|
+
return declined('latest failure is never retryable');
|
|
122
|
+
}
|
|
123
|
+
if (!policy.on.includes(causeCode)) {
|
|
124
|
+
return declined('latest failure is outside the retry policy');
|
|
125
|
+
}
|
|
126
|
+
if (attempt >= policy.max + 1)
|
|
127
|
+
return declined('retry budget is exhausted');
|
|
128
|
+
return { retry: true, reason: 'retry policy matched', attempt };
|
|
129
|
+
}
|
|
130
|
+
function computeRetryDelayMs(policy, attempt) {
|
|
131
|
+
const safeAttempt = Number.isInteger(attempt) && attempt > 0 ? attempt : 1;
|
|
132
|
+
const base = policy.delay === 'exponential'
|
|
133
|
+
? exports.RETRY_BASE_DELAY_MS * (2 ** (safeAttempt - 1))
|
|
134
|
+
: exports.RETRY_BASE_DELAY_MS;
|
|
135
|
+
const configuredCap = typeof policy.max_delay === 'number' && Number.isFinite(policy.max_delay)
|
|
136
|
+
? Math.max(0, policy.max_delay)
|
|
137
|
+
: exports.RETRY_DEFAULT_MAX_DELAY_MS;
|
|
138
|
+
return Math.min(base, configuredCap, exports.RETRY_HARD_MAX_DELAY_MS);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=retry-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry-policy.js","sourceRoot":"","sources":["../../src/retry-policy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,47 @@
|
|
|
1
|
-
import type { RunExecution, AutoRunResult } from './types';
|
|
1
|
+
import type { RunExecution, WorkflowSpec, AutoRunResult } from './types';
|
|
2
|
+
export { FileLock } from './file-lock';
|
|
2
3
|
export declare const SKILL_TASK_DEFAULT_TIMEOUT = 600000;
|
|
4
|
+
export declare const WORKFLOW_CANCEL_GRACE_MS = 2000;
|
|
5
|
+
export declare const WORKFLOW_RUN_INTERRUPTED_ERROR = "Workflow run interrupted: runner process exited before completion";
|
|
6
|
+
export declare const WORKFLOW_RUN_LEGACY_RECOVERY_GRACE_MS: number;
|
|
7
|
+
export type RunPersistedSink = (run: RunExecution) => void;
|
|
8
|
+
export interface RunManagerDependencies {
|
|
9
|
+
sleep?: (ms: number) => Promise<void>;
|
|
10
|
+
onRunPersisted?: RunPersistedSink;
|
|
11
|
+
}
|
|
3
12
|
export declare function parseSetArgs(args: string[]): Record<string, unknown>;
|
|
4
13
|
export declare function readStdin(): Promise<string>;
|
|
5
14
|
export declare function interpolateTemplate(template: string, state: Record<string, unknown>): string;
|
|
6
15
|
export declare function safeEvaluate(expr: string, state: Record<string, unknown>): unknown;
|
|
7
16
|
export declare function safeEvaluateBranchCondition(expr: string, state: Record<string, unknown>): unknown;
|
|
8
17
|
export declare function validateSafeBranchCondition(expr: string): void;
|
|
18
|
+
export declare function normalizeRunStatus(run: RunExecution, nowMs?: number): RunExecution;
|
|
19
|
+
export declare function isRetryableFailure(run: RunExecution, spec: WorkflowSpec): boolean;
|
|
9
20
|
export declare class RunManager {
|
|
10
21
|
private runsDir;
|
|
11
22
|
private readonly resolvedDir;
|
|
12
23
|
private readonly projectRoot;
|
|
13
|
-
|
|
24
|
+
private readonly sleep;
|
|
25
|
+
private readonly onRunPersisted?;
|
|
26
|
+
constructor(runsDir?: string, projectRoot?: string, deps?: RunManagerDependencies);
|
|
14
27
|
ensureRunsDir(): void;
|
|
15
28
|
private validateExecId;
|
|
29
|
+
private isRunCancelled;
|
|
30
|
+
private processCancellation;
|
|
31
|
+
private readRunRaw;
|
|
32
|
+
readRun(execId: string): RunExecution | null;
|
|
33
|
+
private isLegacyStatuslessStale;
|
|
34
|
+
withRunLock<T>(execId: string, callback: (run: RunExecution) => T): T;
|
|
35
|
+
private hasStaleRunner;
|
|
36
|
+
private recoverStaleRunner;
|
|
16
37
|
loadRun(execId: string): RunExecution | null;
|
|
17
38
|
saveRun(run: RunExecution): void;
|
|
18
39
|
atomicUpdate(execId: string, updater: (run: RunExecution) => void): RunExecution;
|
|
19
40
|
atomicUpdateAsync(execId: string, updater: (run: RunExecution) => void): Promise<RunExecution>;
|
|
41
|
+
private reserveNodeAttempt;
|
|
42
|
+
private clearNodeAttempt;
|
|
20
43
|
private loadWorkflowYaml;
|
|
44
|
+
getNodeType(workflowFile: string, workflowId: string, nodeId: string): string | null;
|
|
21
45
|
start(yamlPath: string, workflowId?: string, overrides?: Record<string, unknown>): RunExecution;
|
|
22
46
|
getState(execId: string): Record<string, unknown>;
|
|
23
47
|
setState(execId: string, updates: Record<string, unknown>): void;
|
|
@@ -26,9 +50,18 @@ export declare class RunManager {
|
|
|
26
50
|
dryRun?: boolean;
|
|
27
51
|
trigger?: 'manual' | 'auto';
|
|
28
52
|
}): Promise<RunExecution>;
|
|
53
|
+
private claimAutoRunLease;
|
|
54
|
+
private releaseAutoRunLease;
|
|
55
|
+
private failAutoConfiguration;
|
|
56
|
+
private reserveAutoRetry;
|
|
57
|
+
private waitForRetry;
|
|
58
|
+
private runNodeWithRetry;
|
|
29
59
|
runAuto(execId: string): Promise<AutoRunResult>;
|
|
30
60
|
cancelRun(execId: string, reason?: string): RunExecution;
|
|
31
61
|
reset(execId: string): RunExecution;
|
|
62
|
+
retry(execId: string, options?: {
|
|
63
|
+
autoRun?: boolean;
|
|
64
|
+
}): RunExecution;
|
|
32
65
|
listRuns(opts?: {
|
|
33
66
|
workflowId?: string;
|
|
34
67
|
}): RunExecution[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/run-manager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/run-manager.ts"],"names":[],"mappings":"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"}
|