@crewx/workflow 0.3.22-rc.12 → 0.3.22-rc.121
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 +104 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +77 -8
- package/dist/cli.js.map +1 -1
- package/dist/src/engine.d.ts +4 -2
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +26 -1
- package/dist/src/engine.js.map +1 -1
- 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 +49 -0
- package/dist/src/parent-task-sync.d.ts.map +1 -0
- package/dist/src/parent-task-sync.js +125 -0
- package/dist/src/parent-task-sync.js.map +1 -0
- package/dist/src/run-manager.d.ts +15 -1
- package/dist/src/run-manager.d.ts.map +1 -1
- package/dist/src/run-manager.js +423 -95
- package/dist/src/run-manager.js.map +1 -1
- package/dist/src/types.d.ts +18 -2
- package/dist/src/types.d.ts.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/workflow-schema.json +14 -2
- package/package.json +14 -4
- package/workflow-schema.json +14 -2
package/dist/src/mermaid.js
CHANGED
|
@@ -22,6 +22,8 @@ function escapeMermaidLabel(s) {
|
|
|
22
22
|
function buildLabel(nodeId, node) {
|
|
23
23
|
if (node.type === 'end')
|
|
24
24
|
return 'END';
|
|
25
|
+
if (node.type === 'error')
|
|
26
|
+
return 'ERROR';
|
|
25
27
|
let subtitle = '';
|
|
26
28
|
if (node.agent) {
|
|
27
29
|
subtitle = `@${escapeMermaidLabel(node.agent)}`;
|
|
@@ -44,7 +46,7 @@ function buildLabel(nodeId, node) {
|
|
|
44
46
|
}
|
|
45
47
|
function wrapShape(nodeId, label, type) {
|
|
46
48
|
const safe = safeNodeId(nodeId);
|
|
47
|
-
if (type === 'end') {
|
|
49
|
+
if (type === 'end' || type === 'error') {
|
|
48
50
|
return `${safe}(("${label}"))`;
|
|
49
51
|
}
|
|
50
52
|
const q = `"\`${label}\`"`;
|
|
@@ -68,6 +70,7 @@ function wrapShape(nodeId, label, type) {
|
|
|
68
70
|
const NODE_STYLES = {
|
|
69
71
|
approval: 'fill:#e0f2fe,stroke:#93c5fd,color:#1e3a5f',
|
|
70
72
|
expression: 'fill:#fef3c7,stroke:#f59e0b,color:#78350f',
|
|
73
|
+
error: 'fill:#fee2e2,stroke:#f87171,color:#7f1d1d',
|
|
71
74
|
};
|
|
72
75
|
function toMermaid(spec) {
|
|
73
76
|
const lines = ['flowchart TD'];
|
|
@@ -84,7 +87,7 @@ function toMermaid(spec) {
|
|
|
84
87
|
}
|
|
85
88
|
if (node.type === 'branch' && node.branches && !Array.isArray(node.branches)) {
|
|
86
89
|
for (const [condLabel, target] of Object.entries(node.branches)) {
|
|
87
|
-
const edgeLabel = escapeMermaidLabel(condLabel === 'true' ? '
|
|
90
|
+
const edgeLabel = escapeMermaidLabel(condLabel === 'true' ? 'Approve' : condLabel === 'false' ? 'Reject' : condLabel);
|
|
88
91
|
lines.push(` ${src} -->|${edgeLabel}| ${safeNodeId(target)}`);
|
|
89
92
|
}
|
|
90
93
|
}
|
|
@@ -103,10 +106,10 @@ function toMermaid(spec) {
|
|
|
103
106
|
}
|
|
104
107
|
if (node.type === 'approval') {
|
|
105
108
|
if (node.on_approve) {
|
|
106
|
-
lines.push(` ${src} -->|${escapeMermaidLabel('
|
|
109
|
+
lines.push(` ${src} -->|${escapeMermaidLabel('Approve')}| ${safeNodeId(node.on_approve)}`);
|
|
107
110
|
}
|
|
108
111
|
if (node.on_reject) {
|
|
109
|
-
lines.push(` ${src} -->|${escapeMermaidLabel('
|
|
112
|
+
lines.push(` ${src} -->|${escapeMermaidLabel('Reject')}| ${safeNodeId(node.on_reject)}`);
|
|
110
113
|
}
|
|
111
114
|
}
|
|
112
115
|
}
|
package/dist/src/mermaid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/mermaid.ts"],"names":[],"mappings":";;AAeA,gCAEC;AAMD,gDASC;
|
|
1
|
+
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { RunExecution } from './types.js';
|
|
2
|
+
export type WorkflowParentTaskStatus = 'running' | 'success' | 'failed';
|
|
3
|
+
export interface WorkflowParentLifecycle {
|
|
4
|
+
status: WorkflowParentTaskStatus;
|
|
5
|
+
error: string | null;
|
|
6
|
+
completedAt: string | null;
|
|
7
|
+
durationMs: number | null;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkflowParentTaskRow {
|
|
10
|
+
id: string;
|
|
11
|
+
agent_id: string;
|
|
12
|
+
thread_id: string | null;
|
|
13
|
+
workspace_id: string | null;
|
|
14
|
+
platform: string | null;
|
|
15
|
+
status: string;
|
|
16
|
+
error: string | null;
|
|
17
|
+
completed_at: string | null;
|
|
18
|
+
duration_ms: number | null;
|
|
19
|
+
started_at: string;
|
|
20
|
+
metadata: string | null;
|
|
21
|
+
}
|
|
22
|
+
export interface WorkflowParentTaskRepository {
|
|
23
|
+
findRunningWorkflowParentTasks(): WorkflowParentTaskRow[];
|
|
24
|
+
updateTaskLifecycle(opts: {
|
|
25
|
+
id: string;
|
|
26
|
+
status: WorkflowParentTaskStatus;
|
|
27
|
+
error: string | null;
|
|
28
|
+
completedAt: string | null;
|
|
29
|
+
durationMs: number | null;
|
|
30
|
+
workspaceId: string;
|
|
31
|
+
}): void;
|
|
32
|
+
}
|
|
33
|
+
export interface ReconcileWorkflowParentTasksOptions {
|
|
34
|
+
taskRepo: WorkflowParentTaskRepository;
|
|
35
|
+
resolveWorkspacePath: (workspaceId: string) => string | undefined;
|
|
36
|
+
loadRun: (workspacePath: string, workflowRunId: string) => RunExecution | null;
|
|
37
|
+
orphanGraceMs?: number;
|
|
38
|
+
nowMs?: number;
|
|
39
|
+
}
|
|
40
|
+
export interface WorkflowParentReconciliationResult {
|
|
41
|
+
aligned: number;
|
|
42
|
+
orphaned: number;
|
|
43
|
+
skipped: number;
|
|
44
|
+
}
|
|
45
|
+
export declare const WORKFLOW_PARENT_ORPHAN_GRACE_MS: number;
|
|
46
|
+
export declare const WORKFLOW_PARENT_ORPHAN_ERROR = "Workflow run file missing after grace period (orphaned workflow task)";
|
|
47
|
+
export declare function deriveWorkflowParentLifecycle(run: RunExecution): WorkflowParentLifecycle;
|
|
48
|
+
export declare function reconcileWorkflowParentTasks(options: ReconcileWorkflowParentTasksOptions): WorkflowParentReconciliationResult;
|
|
49
|
+
//# sourceMappingURL=parent-task-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parent-task-sync.d.ts","sourceRoot":"","sources":["../../src/parent-task-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,wBAAwB,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,wBAAwB,CAAC;IACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAGD,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,4BAA4B;IAE3C,8BAA8B,IAAI,qBAAqB,EAAE,CAAC;IAC1D,mBAAmB,CAAC,IAAI,EAAE;QACxB,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,wBAAwB,CAAC;QACjC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,WAAW,EAAE,MAAM,CAAC;KACrB,GAAG,IAAI,CAAC;CACV;AAED,MAAM,WAAW,mCAAmC;IAClD,QAAQ,EAAE,4BAA4B,CAAC;IACvC,oBAAoB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC;IAElE,OAAO,EAAE,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,eAAO,MAAM,+BAA+B,QAAiB,CAAC;AAC9D,eAAO,MAAM,4BAA4B,0EACgC,CAAC;AAoB1E,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,YAAY,GAAG,uBAAuB,CAsBxF;AAkCD,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,mCAAmC,GAC3C,kCAAkC,CAoEpC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WORKFLOW_PARENT_ORPHAN_ERROR = exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS = void 0;
|
|
4
|
+
exports.deriveWorkflowParentLifecycle = deriveWorkflowParentLifecycle;
|
|
5
|
+
exports.reconcileWorkflowParentTasks = reconcileWorkflowParentTasks;
|
|
6
|
+
exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS = 10 * 60 * 1000;
|
|
7
|
+
exports.WORKFLOW_PARENT_ORPHAN_ERROR = 'Workflow run file missing after grace period (orphaned workflow task)';
|
|
8
|
+
function latestAuditEndedAt(run) {
|
|
9
|
+
let latest;
|
|
10
|
+
for (const entry of run.audit ?? []) {
|
|
11
|
+
const timestamp = Date.parse(entry.ended_at);
|
|
12
|
+
if (!Number.isFinite(timestamp))
|
|
13
|
+
continue;
|
|
14
|
+
if (!latest || timestamp >= latest.timestamp) {
|
|
15
|
+
latest = { value: entry.ended_at, timestamp };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
return latest?.value ?? null;
|
|
19
|
+
}
|
|
20
|
+
function deriveWorkflowParentLifecycle(run) {
|
|
21
|
+
if (run.status === 'completed' || run.status === 'failed' || run.status === 'cancelled') {
|
|
22
|
+
const completedAt = latestAuditEndedAt(run) ?? run.updated_at;
|
|
23
|
+
const createdAtMs = Date.parse(run.created_at);
|
|
24
|
+
const completedAtMs = Date.parse(completedAt);
|
|
25
|
+
const durationMs = Number.isFinite(createdAtMs) && Number.isFinite(completedAtMs)
|
|
26
|
+
? Math.max(0, completedAtMs - createdAtMs)
|
|
27
|
+
: null;
|
|
28
|
+
if (run.status === 'completed') {
|
|
29
|
+
return { status: 'success', error: null, completedAt, durationMs };
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
status: 'failed',
|
|
33
|
+
error: run.error ?? (run.status === 'cancelled' ? 'Workflow run cancelled' : 'Workflow run failed'),
|
|
34
|
+
completedAt,
|
|
35
|
+
durationMs,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
return { status: 'running', error: null, completedAt: null, durationMs: null };
|
|
39
|
+
}
|
|
40
|
+
function parseWorkflowCardRunId(metadata) {
|
|
41
|
+
if (!metadata)
|
|
42
|
+
return null;
|
|
43
|
+
try {
|
|
44
|
+
const parsed = JSON.parse(metadata);
|
|
45
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
46
|
+
return null;
|
|
47
|
+
const record = parsed;
|
|
48
|
+
return (record.kind === 'workflow_card' || record.kind === 'workflow_ui_instance') && typeof record.workflowRunId === 'string'
|
|
49
|
+
? record.workflowRunId
|
|
50
|
+
: null;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function lifecycleMatches(row, lifecycle) {
|
|
57
|
+
return row.status === lifecycle.status
|
|
58
|
+
&& row.error === lifecycle.error
|
|
59
|
+
&& row.completed_at === lifecycle.completedAt
|
|
60
|
+
&& row.duration_ms === lifecycle.durationMs;
|
|
61
|
+
}
|
|
62
|
+
function isStale(startedAt, nowMs, graceMs) {
|
|
63
|
+
const startedAtMs = Date.parse(startedAt);
|
|
64
|
+
return Number.isFinite(startedAtMs) && nowMs - startedAtMs >= graceMs;
|
|
65
|
+
}
|
|
66
|
+
function reconcileWorkflowParentTasks(options) {
|
|
67
|
+
const graceMs = options.orphanGraceMs ?? exports.WORKFLOW_PARENT_ORPHAN_GRACE_MS;
|
|
68
|
+
const nowMs = options.nowMs ?? Date.now();
|
|
69
|
+
const result = { aligned: 0, orphaned: 0, skipped: 0 };
|
|
70
|
+
for (const row of options.taskRepo.findRunningWorkflowParentTasks()) {
|
|
71
|
+
if (row.platform !== 'workflow' || !parseWorkflowCardRunId(row.metadata)) {
|
|
72
|
+
result.skipped += 1;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
const workspaceId = row.workspace_id;
|
|
76
|
+
if (!workspaceId) {
|
|
77
|
+
result.skipped += 1;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
const workspacePath = options.resolveWorkspacePath(workspaceId);
|
|
81
|
+
if (!workspacePath) {
|
|
82
|
+
result.skipped += 1;
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const workflowRunId = parseWorkflowCardRunId(row.metadata);
|
|
86
|
+
let run = null;
|
|
87
|
+
try {
|
|
88
|
+
run = options.loadRun(workspacePath, workflowRunId);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
}
|
|
92
|
+
if (!run) {
|
|
93
|
+
if (row.status !== 'running' || !isStale(row.started_at, nowMs, graceMs)) {
|
|
94
|
+
result.skipped += 1;
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const completedAt = row.completed_at ?? new Date(nowMs).toISOString();
|
|
98
|
+
const durationMs = row.duration_ms ?? Math.max(0, nowMs - Date.parse(row.started_at));
|
|
99
|
+
options.taskRepo.updateTaskLifecycle({
|
|
100
|
+
id: row.id,
|
|
101
|
+
status: 'failed',
|
|
102
|
+
error: exports.WORKFLOW_PARENT_ORPHAN_ERROR,
|
|
103
|
+
completedAt,
|
|
104
|
+
durationMs: Number.isFinite(durationMs) ? durationMs : null,
|
|
105
|
+
workspaceId,
|
|
106
|
+
});
|
|
107
|
+
result.orphaned += 1;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
const lifecycle = deriveWorkflowParentLifecycle(run);
|
|
111
|
+
if (lifecycleMatches(row, lifecycle))
|
|
112
|
+
continue;
|
|
113
|
+
options.taskRepo.updateTaskLifecycle({
|
|
114
|
+
id: row.id,
|
|
115
|
+
status: lifecycle.status,
|
|
116
|
+
error: lifecycle.error,
|
|
117
|
+
completedAt: lifecycle.completedAt,
|
|
118
|
+
durationMs: lifecycle.durationMs,
|
|
119
|
+
workspaceId,
|
|
120
|
+
});
|
|
121
|
+
result.aligned += 1;
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
//# 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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"}
|
|
@@ -1,11 +1,15 @@
|
|
|
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_RUN_INTERRUPTED_ERROR = "Workflow run interrupted: runner process exited before completion";
|
|
5
|
+
export declare const WORKFLOW_RUN_LEGACY_RECOVERY_GRACE_MS: number;
|
|
3
6
|
export declare function parseSetArgs(args: string[]): Record<string, unknown>;
|
|
4
7
|
export declare function readStdin(): Promise<string>;
|
|
5
8
|
export declare function interpolateTemplate(template: string, state: Record<string, unknown>): string;
|
|
6
9
|
export declare function safeEvaluate(expr: string, state: Record<string, unknown>): unknown;
|
|
7
10
|
export declare function safeEvaluateBranchCondition(expr: string, state: Record<string, unknown>): unknown;
|
|
8
11
|
export declare function validateSafeBranchCondition(expr: string): void;
|
|
12
|
+
export declare function isRetryableFailure(run: RunExecution, spec: WorkflowSpec): boolean;
|
|
9
13
|
export declare class RunManager {
|
|
10
14
|
private runsDir;
|
|
11
15
|
private readonly resolvedDir;
|
|
@@ -13,11 +17,16 @@ export declare class RunManager {
|
|
|
13
17
|
constructor(runsDir?: string, projectRoot?: string);
|
|
14
18
|
ensureRunsDir(): void;
|
|
15
19
|
private validateExecId;
|
|
20
|
+
private readRun;
|
|
21
|
+
private isLegacyRetryStale;
|
|
22
|
+
private hasStaleRunner;
|
|
23
|
+
private recoverStaleRunner;
|
|
16
24
|
loadRun(execId: string): RunExecution | null;
|
|
17
25
|
saveRun(run: RunExecution): void;
|
|
18
26
|
atomicUpdate(execId: string, updater: (run: RunExecution) => void): RunExecution;
|
|
19
27
|
atomicUpdateAsync(execId: string, updater: (run: RunExecution) => void): Promise<RunExecution>;
|
|
20
28
|
private loadWorkflowYaml;
|
|
29
|
+
getNodeType(workflowFile: string, workflowId: string, nodeId: string): string | null;
|
|
21
30
|
start(yamlPath: string, workflowId?: string, overrides?: Record<string, unknown>): RunExecution;
|
|
22
31
|
getState(execId: string): Record<string, unknown>;
|
|
23
32
|
setState(execId: string, updates: Record<string, unknown>): void;
|
|
@@ -26,9 +35,14 @@ export declare class RunManager {
|
|
|
26
35
|
dryRun?: boolean;
|
|
27
36
|
trigger?: 'manual' | 'auto';
|
|
28
37
|
}): Promise<RunExecution>;
|
|
38
|
+
private claimAutoRunLease;
|
|
39
|
+
private releaseAutoRunLease;
|
|
29
40
|
runAuto(execId: string): Promise<AutoRunResult>;
|
|
30
41
|
cancelRun(execId: string, reason?: string): RunExecution;
|
|
31
42
|
reset(execId: string): RunExecution;
|
|
43
|
+
retry(execId: string, options?: {
|
|
44
|
+
autoRun?: boolean;
|
|
45
|
+
}): RunExecution;
|
|
32
46
|
listRuns(opts?: {
|
|
33
47
|
workflowId?: string;
|
|
34
48
|
}): RunExecution[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/run-manager.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"run-manager.d.ts","sourceRoot":"","sources":["../../src/run-manager.ts"],"names":[],"mappings":"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"}
|