@crewx/workflow 0.3.22-rc.18 → 0.3.22-rc.181
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.js +3 -3
- package/dist/src/mermaid.js.map +1 -1
- package/dist/src/parent-task-sync.d.ts +139 -0
- package/dist/src/parent-task-sync.d.ts.map +1 -0
- package/dist/src/parent-task-sync.js +445 -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 +36 -2
- package/dist/src/run-manager.d.ts.map +1 -1
- package/dist/src/run-manager.js +1195 -234
- package/dist/src/run-manager.js.map +1 -1
- package/dist/src/types.d.ts +37 -3
- 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 +29 -4
- package/package.json +23 -4
- package/workflow-schema.json +29 -4
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { JsonObject, UiAuditSnapshotInput, UiInstance } from '@crewx/sdk';
|
|
2
|
+
import { type WorkflowApprovalState } from './card-state.js';
|
|
3
|
+
import { type WorkflowParentLifecycleChange, type WorkflowParentPersistTaskRepository, type WorkflowParentTaskKind } from './parent-task-sync.js';
|
|
4
|
+
import type { RunExecution, WorkflowSpec } from './types.js';
|
|
5
|
+
export interface WorkflowAuditSnapshotStore {
|
|
6
|
+
get(instanceId: string): UiInstance | null;
|
|
7
|
+
updateAuditSnapshot(input: UiAuditSnapshotInput): UiInstance | null;
|
|
8
|
+
}
|
|
9
|
+
export interface WorkflowPersistenceProjectionResult {
|
|
10
|
+
runId: string;
|
|
11
|
+
changedParentTaskIds: string[];
|
|
12
|
+
projectedAuditInstanceIds: string[];
|
|
13
|
+
errors: string[];
|
|
14
|
+
}
|
|
15
|
+
export interface WorkflowAuditSnapshotChange {
|
|
16
|
+
instanceId: string;
|
|
17
|
+
before: JsonObject;
|
|
18
|
+
after: WorkflowApprovalState;
|
|
19
|
+
}
|
|
20
|
+
export interface WorkflowPersistenceProjectionPreview {
|
|
21
|
+
runId: string;
|
|
22
|
+
runStatus: NonNullable<RunExecution['status']>;
|
|
23
|
+
parentChanges: WorkflowParentLifecycleChange[];
|
|
24
|
+
auditSnapshotChanges: WorkflowAuditSnapshotChange[];
|
|
25
|
+
errors: string[];
|
|
26
|
+
}
|
|
27
|
+
export interface WorkflowPersistenceProjectionPreviewOptions {
|
|
28
|
+
taskRepo: Pick<WorkflowParentPersistTaskRepository, 'findWorkflowParentTask'>;
|
|
29
|
+
workspaceId: string;
|
|
30
|
+
resolveWorkflowSpec: (run: RunExecution) => WorkflowSpec | null | undefined;
|
|
31
|
+
uiInstanceStore?: Pick<WorkflowAuditSnapshotStore, 'get'>;
|
|
32
|
+
getUiInstanceStore?: () => Pick<WorkflowAuditSnapshotStore, 'get'>;
|
|
33
|
+
parentKinds?: readonly WorkflowParentTaskKind[];
|
|
34
|
+
}
|
|
35
|
+
export interface WorkflowPersistenceProjectionOptions {
|
|
36
|
+
taskRepo: WorkflowParentPersistTaskRepository;
|
|
37
|
+
workspaceId: string;
|
|
38
|
+
resolveWorkflowSpec: (run: RunExecution) => WorkflowSpec | null | undefined;
|
|
39
|
+
uiInstanceStore?: WorkflowAuditSnapshotStore;
|
|
40
|
+
getUiInstanceStore?: () => WorkflowAuditSnapshotStore;
|
|
41
|
+
parentKinds?: readonly WorkflowParentTaskKind[];
|
|
42
|
+
onChanged?: (result: WorkflowPersistenceProjectionResult) => void;
|
|
43
|
+
warn?: (message: string) => void;
|
|
44
|
+
}
|
|
45
|
+
export type WorkflowPersistenceProjection = (run: RunExecution) => WorkflowPersistenceProjectionResult;
|
|
46
|
+
export declare function createWorkflowPersistenceProjection(options: WorkflowPersistenceProjectionOptions): WorkflowPersistenceProjection;
|
|
47
|
+
export declare function previewWorkflowPersistenceProjection(options: WorkflowPersistenceProjectionPreviewOptions, run: RunExecution): WorkflowPersistenceProjectionPreview;
|
|
48
|
+
//# sourceMappingURL=workflow-persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-persistence.d.ts","sourceRoot":"","sources":["../../src/workflow-persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,UAAU,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAA8B,KAAK,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAGL,KAAK,6BAA6B,EAGlC,KAAK,mCAAmC,EACxC,KAAK,sBAAsB,EAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG7D,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAC3C,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,UAAU,GAAG,IAAI,CAAC;CACrE;AAED,MAAM,WAAW,mCAAmC;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,yBAAyB,EAAE,MAAM,EAAE,CAAC;IACpC,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,UAAU,CAAC;IACnB,KAAK,EAAE,qBAAqB,CAAC;CAC9B;AAED,MAAM,WAAW,oCAAoC;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC/C,aAAa,EAAE,6BAA6B,EAAE,CAAC;IAC/C,oBAAoB,EAAE,2BAA2B,EAAE,CAAC;IACpD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,EAAE,IAAI,CAAC,mCAAmC,EAAE,wBAAwB,CAAC,CAAC;IAC9E,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IAE5E,eAAe,CAAC,EAAE,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IAE1D,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;IACnE,WAAW,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,oCAAoC;IACnD,QAAQ,EAAE,mCAAmC,CAAC;IAC9C,WAAW,EAAE,MAAM,CAAC;IAEpB,mBAAmB,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,YAAY,GAAG,IAAI,GAAG,SAAS,CAAC;IAE5E,eAAe,CAAC,EAAE,0BAA0B,CAAC;IAE7C,kBAAkB,CAAC,EAAE,MAAM,0BAA0B,CAAC;IACtD,WAAW,CAAC,EAAE,SAAS,sBAAsB,EAAE,CAAC;IAEhD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,mCAAmC,KAAK,IAAI,CAAC;IAElE,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,MAAM,6BAA6B,GACvC,CAAC,GAAG,EAAE,YAAY,KAAK,mCAAmC,CAAC;AA2D7D,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,oCAAoC,GAC5C,6BAA6B,CA4G/B;AAOD,wBAAgB,oCAAoC,CAClD,OAAO,EAAE,2CAA2C,EACpD,GAAG,EAAE,YAAY,GAChB,oCAAoC,CA+EtC"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createWorkflowPersistenceProjection = createWorkflowPersistenceProjection;
|
|
4
|
+
exports.previewWorkflowPersistenceProjection = previewWorkflowPersistenceProjection;
|
|
5
|
+
const card_state_js_1 = require("./card-state.js");
|
|
6
|
+
const parent_task_sync_js_1 = require("./parent-task-sync.js");
|
|
7
|
+
function errorMessage(error) {
|
|
8
|
+
return error instanceof Error ? error.message : String(error);
|
|
9
|
+
}
|
|
10
|
+
function asJsonObject(state) {
|
|
11
|
+
return state;
|
|
12
|
+
}
|
|
13
|
+
function canonicalJson(value) {
|
|
14
|
+
if (Array.isArray(value))
|
|
15
|
+
return `[${value.map((item) => canonicalJson(item)).join(',')}]`;
|
|
16
|
+
if (value !== null && typeof value === 'object') {
|
|
17
|
+
const record = value;
|
|
18
|
+
return `{${Object.keys(record).sort().map((key) => `${JSON.stringify(key)}:${canonicalJson(record[key])}`).join(',')}}`;
|
|
19
|
+
}
|
|
20
|
+
return JSON.stringify(value) ?? 'null';
|
|
21
|
+
}
|
|
22
|
+
function sameJson(left, right) {
|
|
23
|
+
return canonicalJson(left) === canonicalJson(right);
|
|
24
|
+
}
|
|
25
|
+
function buildResult(runId, parent) {
|
|
26
|
+
return {
|
|
27
|
+
runId,
|
|
28
|
+
changedParentTaskIds: [...parent.changedParentTaskIds],
|
|
29
|
+
projectedAuditInstanceIds: [],
|
|
30
|
+
errors: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function createWorkflowPersistenceProjection(options) {
|
|
34
|
+
const parentSinkOptions = {
|
|
35
|
+
taskRepo: options.taskRepo,
|
|
36
|
+
workspaceId: options.workspaceId,
|
|
37
|
+
...(options.parentKinds ? { parentKinds: options.parentKinds } : {}),
|
|
38
|
+
};
|
|
39
|
+
const parentSink = (0, parent_task_sync_js_1.createWorkflowParentPersistSink)(parentSinkOptions);
|
|
40
|
+
const warn = options.warn ?? ((message) => console.warn(message));
|
|
41
|
+
return (run) => {
|
|
42
|
+
let parent;
|
|
43
|
+
try {
|
|
44
|
+
parent = parentSink(run);
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
const message = `workflow persistence parent projection failed for ${run.id}: ${errorMessage(error)}`;
|
|
48
|
+
warn(message);
|
|
49
|
+
return {
|
|
50
|
+
runId: run.id,
|
|
51
|
+
changedParentTaskIds: [],
|
|
52
|
+
projectedAuditInstanceIds: [],
|
|
53
|
+
errors: [message],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const result = buildResult(run.id, parent);
|
|
57
|
+
const addError = (stage, error) => {
|
|
58
|
+
const message = `workflow persistence ${stage} failed for ${run.id}: ${errorMessage(error)}`;
|
|
59
|
+
result.errors.push(message);
|
|
60
|
+
warn(message);
|
|
61
|
+
};
|
|
62
|
+
const instanceIds = [...new Set(parent.linkedAuditInstanceIds)];
|
|
63
|
+
if (instanceIds.length > 0) {
|
|
64
|
+
let spec;
|
|
65
|
+
try {
|
|
66
|
+
spec = options.resolveWorkflowSpec(run);
|
|
67
|
+
if (!spec)
|
|
68
|
+
throw new Error(`workflow spec not found for ${run.workflow_id}`);
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
addError('spec resolution', error);
|
|
72
|
+
}
|
|
73
|
+
if (spec) {
|
|
74
|
+
let state = null;
|
|
75
|
+
try {
|
|
76
|
+
state = (0, card_state_js_1.buildWorkflowApprovalState)(run, spec);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
addError('audit state build', error);
|
|
80
|
+
}
|
|
81
|
+
if (state) {
|
|
82
|
+
const updatedAt = Date.parse(run.updated_at);
|
|
83
|
+
if (!Number.isSafeInteger(updatedAt) || updatedAt < 0) {
|
|
84
|
+
addError('audit snapshot', new Error(`invalid run updated_at: ${run.updated_at}`));
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
let store = options.uiInstanceStore;
|
|
88
|
+
if (!store && options.getUiInstanceStore) {
|
|
89
|
+
try {
|
|
90
|
+
store = options.getUiInstanceStore();
|
|
91
|
+
}
|
|
92
|
+
catch (error) {
|
|
93
|
+
addError('audit store creation', error);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (!store) {
|
|
97
|
+
addError('audit snapshot', new Error('no UiInstanceStore was provided'));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
for (const instanceId of instanceIds) {
|
|
101
|
+
try {
|
|
102
|
+
const instance = store.get(instanceId);
|
|
103
|
+
const domainRunId = instance?.domainRef?.workflowRunId;
|
|
104
|
+
if (!instance
|
|
105
|
+
|| instance.workspaceId !== options.workspaceId
|
|
106
|
+
|| domainRunId !== run.id) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const beforeState = canonicalJson(instance.state);
|
|
110
|
+
const beforeUpdatedAt = instance.updatedAt;
|
|
111
|
+
const updatedInstance = store.updateAuditSnapshot({
|
|
112
|
+
instanceId,
|
|
113
|
+
workspaceId: options.workspaceId,
|
|
114
|
+
updatedAt,
|
|
115
|
+
state: asJsonObject(state),
|
|
116
|
+
});
|
|
117
|
+
if (updatedInstance
|
|
118
|
+
&& (canonicalJson(updatedInstance.state) !== beforeState
|
|
119
|
+
|| updatedInstance.updatedAt !== beforeUpdatedAt)) {
|
|
120
|
+
result.projectedAuditInstanceIds.push(instanceId);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (error) {
|
|
124
|
+
addError(`audit snapshot ${instanceId}`, error);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if ((result.changedParentTaskIds.length > 0 || result.projectedAuditInstanceIds.length > 0)
|
|
133
|
+
&& options.onChanged) {
|
|
134
|
+
try {
|
|
135
|
+
options.onChanged(result);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
addError('change callback', error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function previewWorkflowPersistenceProjection(options, run) {
|
|
145
|
+
const parent = (0, parent_task_sync_js_1.previewWorkflowParentRepair)({
|
|
146
|
+
taskRepo: options.taskRepo,
|
|
147
|
+
run,
|
|
148
|
+
workspaceId: options.workspaceId,
|
|
149
|
+
...(options.parentKinds ? { parentKinds: options.parentKinds } : {}),
|
|
150
|
+
});
|
|
151
|
+
const result = {
|
|
152
|
+
runId: run.id,
|
|
153
|
+
runStatus: parent.runStatus,
|
|
154
|
+
parentChanges: [...parent.changes],
|
|
155
|
+
auditSnapshotChanges: [],
|
|
156
|
+
errors: [],
|
|
157
|
+
};
|
|
158
|
+
const addError = (stage, error) => {
|
|
159
|
+
result.errors.push(`workflow persistence preview ${stage} failed for ${run.id}: ${errorMessage(error)}`);
|
|
160
|
+
};
|
|
161
|
+
const instanceIds = [...new Set(parent.linkedAuditInstanceIds)];
|
|
162
|
+
if (instanceIds.length === 0)
|
|
163
|
+
return result;
|
|
164
|
+
let spec;
|
|
165
|
+
try {
|
|
166
|
+
spec = options.resolveWorkflowSpec(run);
|
|
167
|
+
if (!spec)
|
|
168
|
+
throw new Error(`workflow spec not found for ${run.workflow_id}`);
|
|
169
|
+
}
|
|
170
|
+
catch (error) {
|
|
171
|
+
addError('spec resolution', error);
|
|
172
|
+
}
|
|
173
|
+
if (!spec)
|
|
174
|
+
return result;
|
|
175
|
+
let state;
|
|
176
|
+
try {
|
|
177
|
+
state = (0, card_state_js_1.buildWorkflowApprovalState)(run, spec);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
addError('audit state build', error);
|
|
181
|
+
return result;
|
|
182
|
+
}
|
|
183
|
+
const updatedAt = Date.parse(run.updated_at);
|
|
184
|
+
if (!Number.isSafeInteger(updatedAt) || updatedAt < 0) {
|
|
185
|
+
addError('audit snapshot', new Error(`invalid run updated_at: ${run.updated_at}`));
|
|
186
|
+
return result;
|
|
187
|
+
}
|
|
188
|
+
let store = options.uiInstanceStore;
|
|
189
|
+
if (!store && options.getUiInstanceStore) {
|
|
190
|
+
try {
|
|
191
|
+
store = options.getUiInstanceStore();
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
addError('audit store creation', error);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (!store) {
|
|
198
|
+
addError('audit snapshot', new Error('no UiInstanceStore was provided'));
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
for (const instanceId of instanceIds) {
|
|
202
|
+
try {
|
|
203
|
+
const instance = store.get(instanceId);
|
|
204
|
+
if (!instance
|
|
205
|
+
|| instance.workspaceId !== options.workspaceId
|
|
206
|
+
|| instance.domainRef.workflowRunId !== run.id) {
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
if (!sameJson(instance.state, state)) {
|
|
210
|
+
result.auditSnapshotChanges.push({
|
|
211
|
+
instanceId,
|
|
212
|
+
before: instance.state,
|
|
213
|
+
after: state,
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (error) {
|
|
218
|
+
addError(`audit snapshot ${instanceId}`, error);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
void updatedAt;
|
|
222
|
+
return result;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=workflow-persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-persistence.js","sourceRoot":"","sources":["../../src/workflow-persistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
"cwd": {
|
|
83
83
|
"type": "string",
|
|
84
|
-
"description": "skill_task/shell_task: working directory, normalized and constrained under the project root."
|
|
84
|
+
"description": "agent_task/skill_task/shell_task: working directory, normalized and constrained under the project root."
|
|
85
85
|
},
|
|
86
86
|
"env": {
|
|
87
87
|
"type": "object",
|
|
@@ -90,6 +90,10 @@
|
|
|
90
90
|
},
|
|
91
91
|
"description": "shell_task: explicit env pass-through. Dangerous keys (LD_PRELOAD, etc.) are rejected."
|
|
92
92
|
},
|
|
93
|
+
"stdin": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"description": "skill_task/shell_task: optional stdin payload. Supports {{template}} interpolation."
|
|
96
|
+
},
|
|
93
97
|
"mode": {
|
|
94
98
|
"type": "string",
|
|
95
99
|
"enum": ["query", "execute"]
|
|
@@ -109,6 +113,10 @@
|
|
|
109
113
|
"retry": {
|
|
110
114
|
"$ref": "#/definitions/RetryConfig"
|
|
111
115
|
},
|
|
116
|
+
"fail_when": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Task nodes: semantic failure judgment. Safe expression evaluated against state after the node's output is stored (e.g. 'state.verify_result.status !== \"pass\"'). Truthy → node fails and the run halts."
|
|
119
|
+
},
|
|
112
120
|
"condition": {
|
|
113
121
|
"type": "string"
|
|
114
122
|
},
|
|
@@ -214,19 +222,36 @@
|
|
|
214
222
|
"required": ["max", "delay"],
|
|
215
223
|
"properties": {
|
|
216
224
|
"max": {
|
|
217
|
-
"type": "
|
|
225
|
+
"type": "integer",
|
|
226
|
+
"minimum": 0,
|
|
227
|
+
"maximum": 10,
|
|
228
|
+
"description": "Number of additional retries after the first attempt (0 disables retry)."
|
|
218
229
|
},
|
|
219
230
|
"delay": {
|
|
220
231
|
"type": "string",
|
|
221
232
|
"enum": ["exponential", "fixed"]
|
|
222
233
|
},
|
|
223
234
|
"max_delay": {
|
|
224
|
-
"type": "
|
|
235
|
+
"type": "integer",
|
|
236
|
+
"minimum": 0,
|
|
237
|
+
"description": "Maximum retry delay in milliseconds; runtime hard-caps this at 60000."
|
|
225
238
|
},
|
|
226
239
|
"on": {
|
|
227
240
|
"type": "array",
|
|
228
241
|
"items": {
|
|
229
|
-
"type": "string"
|
|
242
|
+
"type": "string",
|
|
243
|
+
"enum": [
|
|
244
|
+
"CLI_UNRESOLVABLE",
|
|
245
|
+
"SPAWN_FAILED",
|
|
246
|
+
"NODE_TIMEOUT",
|
|
247
|
+
"NODE_EXIT_NONZERO",
|
|
248
|
+
"OUTPUT_INVALID",
|
|
249
|
+
"RATE_LIMITED",
|
|
250
|
+
"CONFIG_INVALID",
|
|
251
|
+
"INTERRUPTED",
|
|
252
|
+
"CANCELLED",
|
|
253
|
+
"UNKNOWN"
|
|
254
|
+
]
|
|
230
255
|
}
|
|
231
256
|
}
|
|
232
257
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewx/workflow",
|
|
3
|
-
"version": "0.3.22-rc.
|
|
3
|
+
"version": "0.3.22-rc.181",
|
|
4
4
|
"description": "Workflow engine for CrewX - list, show, validate workflows with Mermaid visualization",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "dist/src/engine.js",
|
|
7
7
|
"types": "dist/src/engine.d.ts",
|
|
8
|
+
"typesVersions": {
|
|
9
|
+
"*": {
|
|
10
|
+
"run-manager": [
|
|
11
|
+
"dist/src/run-manager.d.ts"
|
|
12
|
+
],
|
|
13
|
+
"types": [
|
|
14
|
+
"dist/src/types.d.ts"
|
|
15
|
+
],
|
|
16
|
+
"list": [
|
|
17
|
+
"dist/src/list-view.d.ts"
|
|
18
|
+
]
|
|
19
|
+
}
|
|
20
|
+
},
|
|
8
21
|
"exports": {
|
|
9
22
|
".": {
|
|
10
23
|
"types": "./dist/src/engine.d.ts",
|
|
@@ -28,6 +41,12 @@
|
|
|
28
41
|
"import": "./dist/cli.js",
|
|
29
42
|
"require": "./dist/cli.js",
|
|
30
43
|
"default": "./dist/cli.js"
|
|
44
|
+
},
|
|
45
|
+
"./list": {
|
|
46
|
+
"types": "./dist/src/list-view.d.ts",
|
|
47
|
+
"import": "./dist/src/list-view.js",
|
|
48
|
+
"require": "./dist/src/list-view.js",
|
|
49
|
+
"default": "./dist/src/list-view.js"
|
|
31
50
|
}
|
|
32
51
|
},
|
|
33
52
|
"bin": {
|
|
@@ -48,9 +67,9 @@
|
|
|
48
67
|
"dependencies": {
|
|
49
68
|
"@hyperjump/json-schema": "^1.9.4",
|
|
50
69
|
"js-yaml": "^4.1.0",
|
|
51
|
-
"@crewx/knowledge-core": "0.1.17",
|
|
52
|
-
"@crewx/sdk": "0.
|
|
53
|
-
"@crewx/shared": "0.0.
|
|
70
|
+
"@crewx/knowledge-core": "0.1.17-rc.145",
|
|
71
|
+
"@crewx/sdk": "0.9.0-rc.135",
|
|
72
|
+
"@crewx/shared": "0.0.6-rc.50"
|
|
54
73
|
},
|
|
55
74
|
"devDependencies": {
|
|
56
75
|
"@types/js-yaml": "^4.0.9",
|
package/workflow-schema.json
CHANGED
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
},
|
|
82
82
|
"cwd": {
|
|
83
83
|
"type": "string",
|
|
84
|
-
"description": "skill_task/shell_task: working directory, normalized and constrained under the project root."
|
|
84
|
+
"description": "agent_task/skill_task/shell_task: working directory, normalized and constrained under the project root."
|
|
85
85
|
},
|
|
86
86
|
"env": {
|
|
87
87
|
"type": "object",
|
|
@@ -90,6 +90,10 @@
|
|
|
90
90
|
},
|
|
91
91
|
"description": "shell_task: explicit env pass-through. Dangerous keys (LD_PRELOAD, etc.) are rejected."
|
|
92
92
|
},
|
|
93
|
+
"stdin": {
|
|
94
|
+
"type": "string",
|
|
95
|
+
"description": "skill_task/shell_task: optional stdin payload. Supports {{template}} interpolation."
|
|
96
|
+
},
|
|
93
97
|
"mode": {
|
|
94
98
|
"type": "string",
|
|
95
99
|
"enum": ["query", "execute"]
|
|
@@ -109,6 +113,10 @@
|
|
|
109
113
|
"retry": {
|
|
110
114
|
"$ref": "#/definitions/RetryConfig"
|
|
111
115
|
},
|
|
116
|
+
"fail_when": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Task nodes: semantic failure judgment. Safe expression evaluated against state after the node's output is stored (e.g. 'state.verify_result.status !== \"pass\"'). Truthy → node fails and the run halts."
|
|
119
|
+
},
|
|
112
120
|
"condition": {
|
|
113
121
|
"type": "string"
|
|
114
122
|
},
|
|
@@ -214,19 +222,36 @@
|
|
|
214
222
|
"required": ["max", "delay"],
|
|
215
223
|
"properties": {
|
|
216
224
|
"max": {
|
|
217
|
-
"type": "
|
|
225
|
+
"type": "integer",
|
|
226
|
+
"minimum": 0,
|
|
227
|
+
"maximum": 10,
|
|
228
|
+
"description": "Number of additional retries after the first attempt (0 disables retry)."
|
|
218
229
|
},
|
|
219
230
|
"delay": {
|
|
220
231
|
"type": "string",
|
|
221
232
|
"enum": ["exponential", "fixed"]
|
|
222
233
|
},
|
|
223
234
|
"max_delay": {
|
|
224
|
-
"type": "
|
|
235
|
+
"type": "integer",
|
|
236
|
+
"minimum": 0,
|
|
237
|
+
"description": "Maximum retry delay in milliseconds; runtime hard-caps this at 60000."
|
|
225
238
|
},
|
|
226
239
|
"on": {
|
|
227
240
|
"type": "array",
|
|
228
241
|
"items": {
|
|
229
|
-
"type": "string"
|
|
242
|
+
"type": "string",
|
|
243
|
+
"enum": [
|
|
244
|
+
"CLI_UNRESOLVABLE",
|
|
245
|
+
"SPAWN_FAILED",
|
|
246
|
+
"NODE_TIMEOUT",
|
|
247
|
+
"NODE_EXIT_NONZERO",
|
|
248
|
+
"OUTPUT_INVALID",
|
|
249
|
+
"RATE_LIMITED",
|
|
250
|
+
"CONFIG_INVALID",
|
|
251
|
+
"INTERRUPTED",
|
|
252
|
+
"CANCELLED",
|
|
253
|
+
"UNKNOWN"
|
|
254
|
+
]
|
|
230
255
|
}
|
|
231
256
|
}
|
|
232
257
|
}
|