@crewx/workflow 0.3.22-rc.15 → 0.3.22-rc.150
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,41 @@
|
|
|
1
|
+
import type { RunExecution, WorkflowFailureCode, WorkflowNodeFailure } from './types';
|
|
2
|
+
export type WorkflowErrorOrigin = 'spawn' | 'post_spawn' | 'stdin' | null;
|
|
3
|
+
export interface ProcessFailureMetadata {
|
|
4
|
+
status: number | null;
|
|
5
|
+
timedOut: boolean;
|
|
6
|
+
signal: NodeJS.Signals | null;
|
|
7
|
+
errorOrigin: WorkflowErrorOrigin;
|
|
8
|
+
}
|
|
9
|
+
export type PersistedWorkflowFailureCode = Exclude<WorkflowFailureCode, 'RATE_LIMITED'>;
|
|
10
|
+
export interface WorkflowFailureClassificationInput {
|
|
11
|
+
errorCode?: unknown;
|
|
12
|
+
process?: ProcessFailureMetadata;
|
|
13
|
+
}
|
|
14
|
+
export declare function getStableCauseMessage(code: PersistedWorkflowFailureCode): string;
|
|
15
|
+
export declare function createWorkflowFailureError(code: PersistedWorkflowFailureCode, message: string): Error & {
|
|
16
|
+
code: PersistedWorkflowFailureCode;
|
|
17
|
+
};
|
|
18
|
+
export declare function getWorkflowFailureCode(error: unknown): PersistedWorkflowFailureCode | undefined;
|
|
19
|
+
export declare function classifyWorkflowFailure(input: WorkflowFailureClassificationInput): PersistedWorkflowFailureCode;
|
|
20
|
+
export interface NodeFailureInput {
|
|
21
|
+
failedNode: string;
|
|
22
|
+
attempt: number;
|
|
23
|
+
causeCode: PersistedWorkflowFailureCode;
|
|
24
|
+
exitCode: number | null;
|
|
25
|
+
signal: NodeJS.Signals | null;
|
|
26
|
+
errorOrigin: WorkflowErrorOrigin;
|
|
27
|
+
timedOut?: boolean;
|
|
28
|
+
occurredAt?: string;
|
|
29
|
+
}
|
|
30
|
+
export declare function buildNodeFailure(input: NodeFailureInput): WorkflowNodeFailure;
|
|
31
|
+
export interface EvidenceInput {
|
|
32
|
+
causeCode: PersistedWorkflowFailureCode;
|
|
33
|
+
exitCode: number | null;
|
|
34
|
+
signal: NodeJS.Signals | null;
|
|
35
|
+
errorOrigin: WorkflowErrorOrigin;
|
|
36
|
+
timedOut: boolean;
|
|
37
|
+
}
|
|
38
|
+
export declare function buildEvidencePreview(input: EvidenceInput): string | null;
|
|
39
|
+
export declare function sanitizeLocalRunError(raw: unknown, fallback: string): string;
|
|
40
|
+
export declare function readNodeAttempt(run: RunExecution, nodeId: string): number;
|
|
41
|
+
//# sourceMappingURL=failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.d.ts","sourceRoot":"","sources":["../../src/failure.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAC;AAGjB,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,YAAY,GAAG,OAAO,GAAG,IAAI,CAAC;AAG1E,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,mBAAmB,CAAC;CAClC;AAGD,MAAM,MAAM,4BAA4B,GAAG,OAAO,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;AAGxF,MAAM,WAAW,kCAAkC;IACjD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAoBD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,4BAA4B,GAAG,MAAM,CAEhF;AAGD,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,4BAA4B,EAClC,OAAO,EAAE,MAAM,GACd,KAAK,GAAG;IAAE,IAAI,EAAE,4BAA4B,CAAA;CAAE,CAIhD;AAGD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,4BAA4B,GAAG,SAAS,CAM/F;AAMD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,kCAAkC,GACxC,4BAA4B,CAqB9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,4BAA4B,CAAC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,GAAG,mBAAmB,CAqB7E;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,4BAA4B,CAAC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;IAC9B,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAKD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAiBxE;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5E;AAGD,wBAAgB,eAAe,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGzE"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getStableCauseMessage = getStableCauseMessage;
|
|
4
|
+
exports.createWorkflowFailureError = createWorkflowFailureError;
|
|
5
|
+
exports.getWorkflowFailureCode = getWorkflowFailureCode;
|
|
6
|
+
exports.classifyWorkflowFailure = classifyWorkflowFailure;
|
|
7
|
+
exports.buildNodeFailure = buildNodeFailure;
|
|
8
|
+
exports.buildEvidencePreview = buildEvidencePreview;
|
|
9
|
+
exports.sanitizeLocalRunError = sanitizeLocalRunError;
|
|
10
|
+
exports.readNodeAttempt = readNodeAttempt;
|
|
11
|
+
const sdk_1 = require("@crewx/sdk");
|
|
12
|
+
const STABLE_CAUSE_MESSAGES = {
|
|
13
|
+
CLI_UNRESOLVABLE: 'CrewX CLI executable could not be resolved.',
|
|
14
|
+
SPAWN_FAILED: 'The node process could not be started.',
|
|
15
|
+
NODE_TIMEOUT: 'The node execution exceeded its timeout.',
|
|
16
|
+
NODE_EXIT_NONZERO: 'The node process exited with a non-zero status.',
|
|
17
|
+
OUTPUT_INVALID: 'The node output did not match the required format.',
|
|
18
|
+
CONFIG_INVALID: 'The workflow node configuration is invalid.',
|
|
19
|
+
INTERRUPTED: 'The node execution was interrupted.',
|
|
20
|
+
CANCELLED: 'The workflow run was cancelled.',
|
|
21
|
+
UNKNOWN: 'The node execution failed.',
|
|
22
|
+
};
|
|
23
|
+
const PERSISTED_FAILURE_CODES = new Set(Object.keys(STABLE_CAUSE_MESSAGES));
|
|
24
|
+
function getStableCauseMessage(code) {
|
|
25
|
+
return STABLE_CAUSE_MESSAGES[code];
|
|
26
|
+
}
|
|
27
|
+
function createWorkflowFailureError(code, message) {
|
|
28
|
+
const error = new Error(message);
|
|
29
|
+
error.code = code;
|
|
30
|
+
return error;
|
|
31
|
+
}
|
|
32
|
+
function getWorkflowFailureCode(error) {
|
|
33
|
+
if (!error || typeof error !== 'object')
|
|
34
|
+
return undefined;
|
|
35
|
+
const code = error.code;
|
|
36
|
+
return typeof code === 'string' && PERSISTED_FAILURE_CODES.has(code)
|
|
37
|
+
? code
|
|
38
|
+
: undefined;
|
|
39
|
+
}
|
|
40
|
+
function classifyWorkflowFailure(input) {
|
|
41
|
+
const typedCode = input.errorCode;
|
|
42
|
+
if (typedCode === 'CLI_UNRESOLVABLE')
|
|
43
|
+
return 'CLI_UNRESOLVABLE';
|
|
44
|
+
if (typedCode === 'CONFIG_INVALID')
|
|
45
|
+
return 'CONFIG_INVALID';
|
|
46
|
+
if (typedCode === 'OUTPUT_INVALID')
|
|
47
|
+
return 'OUTPUT_INVALID';
|
|
48
|
+
if (typedCode === 'CANCELLED')
|
|
49
|
+
return 'CANCELLED';
|
|
50
|
+
if (typedCode === 'INTERRUPTED')
|
|
51
|
+
return 'INTERRUPTED';
|
|
52
|
+
if (typedCode === 'UNKNOWN')
|
|
53
|
+
return 'UNKNOWN';
|
|
54
|
+
const processResult = input.process;
|
|
55
|
+
if (!processResult)
|
|
56
|
+
return 'UNKNOWN';
|
|
57
|
+
if (processResult.errorOrigin === 'spawn')
|
|
58
|
+
return 'SPAWN_FAILED';
|
|
59
|
+
if (processResult.timedOut)
|
|
60
|
+
return 'NODE_TIMEOUT';
|
|
61
|
+
if (processResult.signal !== null)
|
|
62
|
+
return 'INTERRUPTED';
|
|
63
|
+
if (processResult.errorOrigin === 'post_spawn' || processResult.errorOrigin === 'stdin') {
|
|
64
|
+
return 'UNKNOWN';
|
|
65
|
+
}
|
|
66
|
+
if (typeof processResult.status === 'number' && processResult.status !== 0) {
|
|
67
|
+
return 'NODE_EXIT_NONZERO';
|
|
68
|
+
}
|
|
69
|
+
return 'UNKNOWN';
|
|
70
|
+
}
|
|
71
|
+
function buildNodeFailure(input) {
|
|
72
|
+
const exitCode = input.causeCode === 'NODE_EXIT_NONZERO' && typeof input.exitCode === 'number'
|
|
73
|
+
? input.exitCode
|
|
74
|
+
: null;
|
|
75
|
+
const signal = input.causeCode === 'INTERRUPTED' ? input.signal : null;
|
|
76
|
+
return {
|
|
77
|
+
failedNode: input.failedNode,
|
|
78
|
+
attempt: input.attempt,
|
|
79
|
+
causeCode: input.causeCode,
|
|
80
|
+
causeMessage: getStableCauseMessage(input.causeCode),
|
|
81
|
+
exitCode,
|
|
82
|
+
evidencePreview: buildEvidencePreview({
|
|
83
|
+
causeCode: input.causeCode,
|
|
84
|
+
exitCode,
|
|
85
|
+
signal,
|
|
86
|
+
errorOrigin: input.errorOrigin,
|
|
87
|
+
timedOut: input.timedOut ?? false,
|
|
88
|
+
}),
|
|
89
|
+
occurredAt: input.occurredAt ?? new Date().toISOString(),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function buildEvidencePreview(input) {
|
|
93
|
+
switch (input.causeCode) {
|
|
94
|
+
case 'NODE_EXIT_NONZERO':
|
|
95
|
+
return typeof input.exitCode === 'number' ? `exit code: ${input.exitCode}` : null;
|
|
96
|
+
case 'NODE_TIMEOUT':
|
|
97
|
+
return input.timedOut ? 'timeout' : null;
|
|
98
|
+
case 'SPAWN_FAILED':
|
|
99
|
+
return input.errorOrigin === 'spawn' ? 'origin: spawn' : null;
|
|
100
|
+
case 'INTERRUPTED':
|
|
101
|
+
return input.signal === null ? null : `signal: ${input.signal}`;
|
|
102
|
+
case 'UNKNOWN':
|
|
103
|
+
return input.errorOrigin === 'post_spawn' || input.errorOrigin === 'stdin'
|
|
104
|
+
? `origin: ${input.errorOrigin}`
|
|
105
|
+
: null;
|
|
106
|
+
default:
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function sanitizeLocalRunError(raw, fallback) {
|
|
111
|
+
try {
|
|
112
|
+
return (0, sdk_1.redactTechnicalMessage)(raw) ?? fallback;
|
|
113
|
+
}
|
|
114
|
+
catch {
|
|
115
|
+
return fallback;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function readNodeAttempt(run, nodeId) {
|
|
119
|
+
const attempt = run.node_attempts?.[nodeId];
|
|
120
|
+
return typeof attempt === 'number' && Number.isInteger(attempt) && attempt > 0 ? attempt : 1;
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=failure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"failure.js","sourceRoot":"","sources":["../../src/failure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PromptListResolver } from '@crewx/sdk';
|
|
2
|
+
import type { LoadedWorkflow } from './types';
|
|
3
|
+
export declare function loadWorkflowDirectory(dir: string): LoadedWorkflow[] | null;
|
|
4
|
+
export declare function loadWorkflowPaths(paths: string[], cwd: string): LoadedWorkflow[];
|
|
5
|
+
export declare function readWorkflowConfig(configPath: string): {
|
|
6
|
+
paths: string[];
|
|
7
|
+
};
|
|
8
|
+
export declare function readWorkflowList(options: {
|
|
9
|
+
cwd: string;
|
|
10
|
+
env: Record<string, string>;
|
|
11
|
+
configPath?: string;
|
|
12
|
+
}): {
|
|
13
|
+
paths: string[];
|
|
14
|
+
workflows: LoadedWorkflow[];
|
|
15
|
+
};
|
|
16
|
+
export declare function createWorkflowListPromptResolver(configPath?: string): PromptListResolver;
|
|
17
|
+
export declare function formatWorkflowList({ paths, workflows, jsonMode }: {
|
|
18
|
+
paths: string[];
|
|
19
|
+
workflows: LoadedWorkflow[];
|
|
20
|
+
jsonMode: boolean;
|
|
21
|
+
}): string;
|
|
22
|
+
//# sourceMappingURL=list-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-view.d.ts","sourceRoot":"","sources":["../../src/list-view.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,SAAS,CAAC;AAc9E,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,IAAI,CAwB1E;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,EAAE,CAehF;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAU1E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE;;;EAI1G;AAED,wBAAgB,gCAAgC,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,kBAAkB,CAqBxF;AAED,wBAAgB,kBAAkB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,cAAc,EAAE,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAgD9I"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.loadWorkflowDirectory = loadWorkflowDirectory;
|
|
37
|
+
exports.loadWorkflowPaths = loadWorkflowPaths;
|
|
38
|
+
exports.readWorkflowConfig = readWorkflowConfig;
|
|
39
|
+
exports.readWorkflowList = readWorkflowList;
|
|
40
|
+
exports.createWorkflowListPromptResolver = createWorkflowListPromptResolver;
|
|
41
|
+
exports.formatWorkflowList = formatWorkflowList;
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
43
|
+
const path = __importStar(require("path"));
|
|
44
|
+
const yaml = __importStar(require("js-yaml"));
|
|
45
|
+
const knowledge_core_1 = require("@crewx/knowledge-core");
|
|
46
|
+
const GIT_ROOT_ENV_KEYS = new Set([
|
|
47
|
+
'GIT_DIR',
|
|
48
|
+
'GIT_WORK_TREE',
|
|
49
|
+
'GIT_COMMON_DIR',
|
|
50
|
+
'GIT_CEILING_DIRECTORIES',
|
|
51
|
+
'GIT_DISCOVERY_ACROSS_FILESYSTEM',
|
|
52
|
+
]);
|
|
53
|
+
function hasGitRootOverride(env) {
|
|
54
|
+
return Object.keys(env).some(key => GIT_ROOT_ENV_KEYS.has(key));
|
|
55
|
+
}
|
|
56
|
+
function loadWorkflowDirectory(dir) {
|
|
57
|
+
if (!fs.existsSync(dir) || !fs.statSync(dir).isDirectory()) {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
const files = fs.readdirSync(dir).filter(f => f.endsWith('.yaml') || f.endsWith('.yml'));
|
|
61
|
+
const workflows = [];
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
const filePath = path.join(dir, file);
|
|
64
|
+
try {
|
|
65
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
66
|
+
const doc = yaml.load(content);
|
|
67
|
+
if (!doc?.workflows || typeof doc.workflows !== 'object')
|
|
68
|
+
continue;
|
|
69
|
+
for (const [id, spec] of Object.entries(doc.workflows)) {
|
|
70
|
+
workflows.push({ id, filePath, spec });
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return workflows;
|
|
77
|
+
}
|
|
78
|
+
function loadWorkflowPaths(paths, cwd) {
|
|
79
|
+
const all = [];
|
|
80
|
+
const seenIds = new Set();
|
|
81
|
+
for (const dir of paths) {
|
|
82
|
+
const absDir = path.resolve(cwd, dir);
|
|
83
|
+
const workflows = loadWorkflowDirectory(absDir);
|
|
84
|
+
if (!workflows)
|
|
85
|
+
continue;
|
|
86
|
+
for (const wf of workflows) {
|
|
87
|
+
if (!seenIds.has(wf.id)) {
|
|
88
|
+
seenIds.add(wf.id);
|
|
89
|
+
all.push(wf);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return all;
|
|
94
|
+
}
|
|
95
|
+
function readWorkflowConfig(configPath) {
|
|
96
|
+
try {
|
|
97
|
+
const raw = fs.readFileSync(configPath, 'utf8');
|
|
98
|
+
const config = yaml.load(raw);
|
|
99
|
+
const settings = config?.settings;
|
|
100
|
+
const wf = settings?.workflow ?? {};
|
|
101
|
+
return { paths: wf.paths ?? ['workflows'] };
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return { paths: ['workflows'] };
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function readWorkflowList(options) {
|
|
108
|
+
const configPath = path.resolve(options.cwd, options.env.CREWX_CONFIG ?? options.configPath ?? 'crewx.yaml');
|
|
109
|
+
const { paths } = readWorkflowConfig(configPath);
|
|
110
|
+
return { paths, workflows: loadWorkflowPaths(paths, options.cwd) };
|
|
111
|
+
}
|
|
112
|
+
function createWorkflowListPromptResolver(configPath) {
|
|
113
|
+
const hostCwd = process.cwd();
|
|
114
|
+
return (argv, ctx) => {
|
|
115
|
+
if (argv.length !== 3 || argv[0] !== 'crewx' || argv[1] !== 'workflow' || argv[2] !== 'list')
|
|
116
|
+
return undefined;
|
|
117
|
+
const hostPath = ctx.cwd === hostCwd ? configPath : undefined;
|
|
118
|
+
if (ctx.env.CREWX_CONFIG === '')
|
|
119
|
+
return undefined;
|
|
120
|
+
if (!ctx.env.CREWX_CONFIG) {
|
|
121
|
+
if (hostPath && path.resolve(ctx.cwd, hostPath) !== path.resolve(ctx.cwd, 'crewx.yaml'))
|
|
122
|
+
return undefined;
|
|
123
|
+
if (hasGitRootOverride(ctx.env))
|
|
124
|
+
return undefined;
|
|
125
|
+
if (!fs.existsSync(path.join(ctx.cwd, '.git'))) {
|
|
126
|
+
let parent = path.dirname(ctx.cwd);
|
|
127
|
+
while (parent !== path.dirname(parent)) {
|
|
128
|
+
if (fs.existsSync(path.join(parent, '.git')))
|
|
129
|
+
return undefined;
|
|
130
|
+
parent = path.dirname(parent);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (!ctx.env.CREWX_CONFIG && !hostPath && !fs.existsSync(path.resolve(ctx.cwd, 'crewx.yaml')))
|
|
135
|
+
return undefined;
|
|
136
|
+
return formatWorkflowList({ ...readWorkflowList({ ...ctx, configPath: hostPath }), jsonMode: false }) + '\n';
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
function formatWorkflowList({ paths, workflows, jsonMode }) {
|
|
140
|
+
const lines = [];
|
|
141
|
+
if (workflows.length === 0) {
|
|
142
|
+
const msg = `No workflow YAML files found in: ${paths.join(', ')}`;
|
|
143
|
+
if (jsonMode) {
|
|
144
|
+
lines.push(JSON.stringify({ success: true, message: msg, workflows: [] }));
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
lines.push(`\u2139\uFE0F ${msg}`);
|
|
148
|
+
}
|
|
149
|
+
return lines.join('\n');
|
|
150
|
+
}
|
|
151
|
+
if (jsonMode) {
|
|
152
|
+
lines.push(JSON.stringify({
|
|
153
|
+
success: true,
|
|
154
|
+
workflows: workflows.map(wf => {
|
|
155
|
+
const meta = wf.spec.metadata ?? {};
|
|
156
|
+
const nodeCount = wf.spec.nodes ? Object.keys(wf.spec.nodes).length : 0;
|
|
157
|
+
return {
|
|
158
|
+
id: wf.id,
|
|
159
|
+
name: meta.name ?? wf.id,
|
|
160
|
+
description: meta.description ?? '',
|
|
161
|
+
node_count: nodeCount,
|
|
162
|
+
file: wf.filePath,
|
|
163
|
+
};
|
|
164
|
+
}),
|
|
165
|
+
}, null, 2));
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
lines.push('📋 Workflows');
|
|
169
|
+
workflows.forEach((wf, i) => {
|
|
170
|
+
const meta = wf.spec.metadata ?? {};
|
|
171
|
+
const nodeCount = wf.spec.nodes ? Object.keys(wf.spec.nodes).length : 0;
|
|
172
|
+
const descLine = meta.description ? `\n \uD83D\uDCDD ${meta.description.trim().split('\n')[0]}` : '';
|
|
173
|
+
lines.push(` ${i + 1}. ${wf.id} \u2014 ${meta.name ?? wf.id} (${nodeCount} nodes)\n \uD83D\uDCC1 ${wf.filePath}${descLine}`);
|
|
174
|
+
});
|
|
175
|
+
const listCtx = {
|
|
176
|
+
commandId: 'workflow.list',
|
|
177
|
+
params: {},
|
|
178
|
+
resultIds: workflows.slice(0, 3).map(w => w.id),
|
|
179
|
+
resultCount: workflows.length,
|
|
180
|
+
};
|
|
181
|
+
const listActions = (0, knowledge_core_1.generateNextActions)(listCtx);
|
|
182
|
+
const listBlock = (0, knowledge_core_1.formatActions)(listActions);
|
|
183
|
+
if (listBlock)
|
|
184
|
+
lines.push(listBlock);
|
|
185
|
+
}
|
|
186
|
+
return lines.join('\n');
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=list-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-view.js","sourceRoot":"","sources":["../../src/list-view.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/mermaid.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,SAAS,CAAC;AAQpE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAMD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CASpD;
|
|
1
|
+
{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["../../src/mermaid.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAA0B,MAAM,SAAS,CAAC;AAQpE,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD;AAMD,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CASpD;AAoFD,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA0EpD"}
|
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,120 @@
|
|
|
1
|
+
import type { RunExecution } from './types.js';
|
|
2
|
+
export type WorkflowParentTaskStatus = 'pending' | 'running' | 'success' | 'failed';
|
|
3
|
+
export type WorkflowParentTaskKind = 'workflow_card' | 'workflow_ui_instance';
|
|
4
|
+
export interface WorkflowParentTaskLookup {
|
|
5
|
+
workspaceId: string;
|
|
6
|
+
workflowRunId: string;
|
|
7
|
+
kind: WorkflowParentTaskKind;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkflowParentLifecycle {
|
|
10
|
+
status: WorkflowParentTaskStatus;
|
|
11
|
+
error: string | null;
|
|
12
|
+
completedAt: string | null;
|
|
13
|
+
durationMs: number | null;
|
|
14
|
+
}
|
|
15
|
+
export interface WorkflowParentLifecycleSnapshot {
|
|
16
|
+
status: string;
|
|
17
|
+
error: string | null;
|
|
18
|
+
completedAt: string | null;
|
|
19
|
+
durationMs: number | null;
|
|
20
|
+
}
|
|
21
|
+
export interface WorkflowParentLifecycleChange {
|
|
22
|
+
id: string;
|
|
23
|
+
kind: WorkflowParentTaskKind;
|
|
24
|
+
before: WorkflowParentLifecycleSnapshot;
|
|
25
|
+
after: WorkflowParentLifecycle;
|
|
26
|
+
reason: string;
|
|
27
|
+
}
|
|
28
|
+
export interface WorkflowParentTaskRow {
|
|
29
|
+
id: string;
|
|
30
|
+
agent_id: string;
|
|
31
|
+
thread_id: string | null;
|
|
32
|
+
workspace_id: string | null;
|
|
33
|
+
platform: string | null;
|
|
34
|
+
status: string;
|
|
35
|
+
error: string | null;
|
|
36
|
+
completed_at: string | null;
|
|
37
|
+
duration_ms: number | null;
|
|
38
|
+
started_at: string;
|
|
39
|
+
metadata: string | null;
|
|
40
|
+
}
|
|
41
|
+
export interface WorkflowParentTaskRepository {
|
|
42
|
+
findRunningWorkflowParentTasks(): WorkflowParentTaskRow[];
|
|
43
|
+
updateTaskLifecycle(opts: {
|
|
44
|
+
id: string;
|
|
45
|
+
status: WorkflowParentTaskStatus;
|
|
46
|
+
error: string | null;
|
|
47
|
+
completedAt: string | null;
|
|
48
|
+
durationMs: number | null;
|
|
49
|
+
workspaceId: string;
|
|
50
|
+
}): void;
|
|
51
|
+
}
|
|
52
|
+
export interface WorkflowParentPersistTaskRepository {
|
|
53
|
+
findWorkflowParentTask(opts: WorkflowParentTaskLookup): WorkflowParentTaskRow | undefined;
|
|
54
|
+
updateTaskLifecycle: WorkflowParentTaskRepository['updateTaskLifecycle'];
|
|
55
|
+
}
|
|
56
|
+
export interface SyncWorkflowParentTaskLifecycleOptions {
|
|
57
|
+
taskRepo: Pick<WorkflowParentPersistTaskRepository, 'updateTaskLifecycle'>;
|
|
58
|
+
row: WorkflowParentTaskRow;
|
|
59
|
+
run: RunExecution;
|
|
60
|
+
workspaceId: string;
|
|
61
|
+
kind: WorkflowParentTaskKind;
|
|
62
|
+
snapshotUpdatedAt?: string | null;
|
|
63
|
+
}
|
|
64
|
+
export interface WorkflowParentPersistSinkOptions {
|
|
65
|
+
taskRepo: WorkflowParentPersistTaskRepository;
|
|
66
|
+
workspaceId: string;
|
|
67
|
+
parentKinds?: readonly WorkflowParentTaskKind[];
|
|
68
|
+
}
|
|
69
|
+
export interface WorkflowParentPersistResult {
|
|
70
|
+
changedParentTaskIds: string[];
|
|
71
|
+
linkedAuditInstanceIds: string[];
|
|
72
|
+
}
|
|
73
|
+
export interface DeriveWorkflowParentLifecycleChangeOptions {
|
|
74
|
+
row: WorkflowParentTaskRow;
|
|
75
|
+
run: RunExecution;
|
|
76
|
+
workspaceId: string;
|
|
77
|
+
kind: WorkflowParentTaskKind;
|
|
78
|
+
snapshotUpdatedAt?: string | null;
|
|
79
|
+
}
|
|
80
|
+
export type WorkflowParentLifecycleDecisionStatus = 'ineligible' | 'unchanged' | 'stale-suppressed' | 'changed';
|
|
81
|
+
export interface WorkflowParentLifecycleDecision {
|
|
82
|
+
status: WorkflowParentLifecycleDecisionStatus;
|
|
83
|
+
change: WorkflowParentLifecycleChange | null;
|
|
84
|
+
linkedAuditInstanceId: string | null;
|
|
85
|
+
}
|
|
86
|
+
export interface PreviewWorkflowParentRepairOptions {
|
|
87
|
+
taskRepo: Pick<WorkflowParentPersistTaskRepository, 'findWorkflowParentTask'>;
|
|
88
|
+
run: RunExecution;
|
|
89
|
+
workspaceId: string;
|
|
90
|
+
parentKinds?: readonly WorkflowParentTaskKind[];
|
|
91
|
+
}
|
|
92
|
+
export interface WorkflowParentRepairPreview {
|
|
93
|
+
runId: string;
|
|
94
|
+
runStatus: NonNullable<RunExecution['status']>;
|
|
95
|
+
changes: WorkflowParentLifecycleChange[];
|
|
96
|
+
linkedAuditInstanceIds: string[];
|
|
97
|
+
}
|
|
98
|
+
export interface ReconcileWorkflowParentTasksOptions {
|
|
99
|
+
taskRepo: WorkflowParentTaskRepository;
|
|
100
|
+
resolveWorkspacePath: (workspaceId: string) => string | undefined;
|
|
101
|
+
loadRun: (workspacePath: string, workflowRunId: string) => RunExecution | null;
|
|
102
|
+
orphanGraceMs?: number;
|
|
103
|
+
nowMs?: number;
|
|
104
|
+
}
|
|
105
|
+
export interface WorkflowParentReconciliationResult {
|
|
106
|
+
aligned: number;
|
|
107
|
+
orphaned: number;
|
|
108
|
+
skipped: number;
|
|
109
|
+
}
|
|
110
|
+
export declare const WORKFLOW_PARENT_ORPHAN_GRACE_MS: number;
|
|
111
|
+
export declare const WORKFLOW_PARENT_ORPHAN_ERROR = "Workflow run file missing after grace period (orphaned workflow task)";
|
|
112
|
+
export declare const WORKFLOW_PARENT_TASK_KINDS: readonly WorkflowParentTaskKind[];
|
|
113
|
+
export declare function deriveWorkflowParentLifecycle(run: RunExecution): WorkflowParentLifecycle | null;
|
|
114
|
+
export declare function deriveWorkflowParentLifecycleDecision(options: DeriveWorkflowParentLifecycleChangeOptions): WorkflowParentLifecycleDecision;
|
|
115
|
+
export declare function deriveWorkflowParentLifecycleChange(options: DeriveWorkflowParentLifecycleChangeOptions): WorkflowParentLifecycleChange | null;
|
|
116
|
+
export declare function syncWorkflowParentTaskLifecycle(options: SyncWorkflowParentTaskLifecycleOptions): boolean;
|
|
117
|
+
export declare function previewWorkflowParentRepair(options: PreviewWorkflowParentRepairOptions): WorkflowParentRepairPreview;
|
|
118
|
+
export declare function createWorkflowParentPersistSink(options: WorkflowParentPersistSinkOptions): (run: RunExecution) => WorkflowParentPersistResult;
|
|
119
|
+
export declare function reconcileWorkflowParentTasks(options: ReconcileWorkflowParentTasksOptions): WorkflowParentReconciliationResult;
|
|
120
|
+
//# 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":"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"}
|