@crewx/workflow 0.3.22-rc.8 → 0.3.22-rc.81
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 +58 -4
- package/dist/cli.js.map +1 -1
- package/dist/src/engine.d.ts.map +1 -1
- package/dist/src/engine.js +29 -2
- 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/run-manager.d.ts +5 -1
- package/dist/src/run-manager.d.ts.map +1 -1
- package/dist/src/run-manager.js +144 -6
- package/dist/src/run-manager.js.map +1 -1
- package/dist/src/types.d.ts +5 -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/src/utils/shell-security.d.ts.map +1 -1
- package/dist/src/utils/shell-security.js +16 -2
- package/dist/src/utils/shell-security.js.map +1 -1
- package/dist/workflow-schema.json +9 -1
- package/package.json +4 -4
- package/workflow-schema.json +9 -1
|
@@ -33,11 +33,60 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.WORKFLOW_SIGNAL_KEY = void 0;
|
|
37
|
+
exports.buildWorkflowPreamble = buildWorkflowPreamble;
|
|
38
|
+
exports.detectWorkflowSignal = detectWorkflowSignal;
|
|
36
39
|
exports.buildJsonOutputSuffix = buildJsonOutputSuffix;
|
|
37
40
|
exports.extractJson = extractJson;
|
|
38
41
|
exports.validateJsonSchema = validateJsonSchema;
|
|
39
42
|
exports.toOpenAIStrictSchema = toOpenAIStrictSchema;
|
|
40
43
|
const node_crypto_1 = require("node:crypto");
|
|
44
|
+
exports.WORKFLOW_SIGNAL_KEY = 'workflow_signal';
|
|
45
|
+
function buildWorkflowPreamble(ctx) {
|
|
46
|
+
return `<crewx.workflow>
|
|
47
|
+
## Execution Context
|
|
48
|
+
You are running headless as node "${ctx.nodeId}" of workflow "${ctx.workflowId}" (run ${ctx.execId}).
|
|
49
|
+
- No human is watching this session. NEVER ask clarifying questions or wait for
|
|
50
|
+
confirmation — state your assumptions and proceed, or report failure.
|
|
51
|
+
- Your output is consumed verbatim by downstream nodes. Output the result only;
|
|
52
|
+
skip greetings, progress notes, and meta commentary.
|
|
53
|
+
- If the task cannot be completed (broken precondition, missing data, failed
|
|
54
|
+
verification), do NOT pretend success or return a partial answer as if it
|
|
55
|
+
succeeded. Instead output exactly one JSON object and nothing else:
|
|
56
|
+
{"${exports.WORKFLOW_SIGNAL_KEY}": "fail", "reason": "<one-line cause>"}
|
|
57
|
+
The engine will halt the workflow at this node and record the reason.
|
|
58
|
+
</crewx.workflow>
|
|
59
|
+
|
|
60
|
+
`;
|
|
61
|
+
}
|
|
62
|
+
function detectWorkflowSignal(output) {
|
|
63
|
+
if (!output.includes(`"${exports.WORKFLOW_SIGNAL_KEY}"`))
|
|
64
|
+
return null;
|
|
65
|
+
const toSignal = (parsed) => {
|
|
66
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) &&
|
|
67
|
+
parsed[exports.WORKFLOW_SIGNAL_KEY] === 'fail') {
|
|
68
|
+
const reason = parsed['reason'];
|
|
69
|
+
return { signal: 'fail', ...(typeof reason === 'string' && reason ? { reason } : {}) };
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
};
|
|
73
|
+
try {
|
|
74
|
+
const signal = toSignal(JSON.parse(extractJson(output)));
|
|
75
|
+
if (signal)
|
|
76
|
+
return signal;
|
|
77
|
+
}
|
|
78
|
+
catch { }
|
|
79
|
+
const inline = output.match(new RegExp(`\\{[^{}]*"${exports.WORKFLOW_SIGNAL_KEY}"\\s*:\\s*"fail"[^{}]*\\}`));
|
|
80
|
+
if (inline) {
|
|
81
|
+
try {
|
|
82
|
+
return toSignal(JSON.parse(inline[0]));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return { signal: 'fail' };
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
41
90
|
function buildJsonOutputSuffix(schema, strict = false) {
|
|
42
91
|
const finalSchema = strict && schema ? toOpenAIStrictSchema(schema) : schema;
|
|
43
92
|
const schemaStr = finalSchema ? `JSON Schema:\n${JSON.stringify(finalSchema, null, 2)}\n` : '';
|
|
@@ -59,12 +108,61 @@ function extractJson(text) {
|
|
|
59
108
|
if (fenceMatch && fenceMatch[1] !== undefined) {
|
|
60
109
|
trimmed = fenceMatch[1].trim();
|
|
61
110
|
}
|
|
62
|
-
const
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
111
|
+
const collectSpans = (s, open, close) => {
|
|
112
|
+
const spans = [];
|
|
113
|
+
let inString = false;
|
|
114
|
+
let escape = false;
|
|
115
|
+
let depth = 0;
|
|
116
|
+
let spanStart = -1;
|
|
117
|
+
for (let i = 0; i < s.length; i++) {
|
|
118
|
+
const ch = s[i];
|
|
119
|
+
if (escape) {
|
|
120
|
+
escape = false;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (inString) {
|
|
124
|
+
if (ch === '\\') {
|
|
125
|
+
escape = true;
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (ch === '"') {
|
|
129
|
+
inString = false;
|
|
130
|
+
}
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
if (ch === '"') {
|
|
134
|
+
inString = true;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (ch === open) {
|
|
138
|
+
if (depth === 0)
|
|
139
|
+
spanStart = i;
|
|
140
|
+
depth++;
|
|
141
|
+
}
|
|
142
|
+
else if (ch === close) {
|
|
143
|
+
if (depth > 0) {
|
|
144
|
+
depth--;
|
|
145
|
+
if (depth === 0 && spanStart !== -1) {
|
|
146
|
+
spans.push({ text: s.slice(spanStart, i + 1), start: spanStart, end: i });
|
|
147
|
+
spanStart = -1;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return spans;
|
|
153
|
+
};
|
|
154
|
+
const objSpans = collectSpans(trimmed, '{', '}');
|
|
155
|
+
const arrSpans = collectSpans(trimmed, '[', ']');
|
|
156
|
+
const candidates = [...objSpans, ...arrSpans].sort((a, b) => b.end - a.end);
|
|
157
|
+
for (const candidate of candidates) {
|
|
158
|
+
try {
|
|
159
|
+
JSON.parse(candidate.text);
|
|
160
|
+
return candidate.text;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
}
|
|
66
164
|
}
|
|
67
|
-
return
|
|
165
|
+
return trimmed;
|
|
68
166
|
}
|
|
69
167
|
async function validateJsonSchema(value, schema) {
|
|
70
168
|
const { registerSchema, validate } = await Promise.resolve().then(() => __importStar(require('@hyperjump/json-schema/draft-2020-12')));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output-format.js","sourceRoot":"","sources":["../../../src/utils/output-format.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"output-format.js","sourceRoot":"","sources":["../../../src/utils/output-format.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,sDAgBC;AAOD,oDAgCC;AAED,sDAcC;AAED,kCAqFC;AAMD,gDAeC;AAYD,oDAEC;AA3ND,6CAAyC;AAY5B,QAAA,mBAAmB,GAAG,iBAAiB,CAAC;AAcrD,SAAgB,qBAAqB,CAAC,GAA4B;IAChE,OAAO;;oCAE2B,GAAG,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,UAAU,GAAG,CAAC,MAAM;;;;;;;;MAQ5F,2BAAmB;;;;CAIxB,CAAC;AACF,CAAC;AAOD,SAAgB,oBAAoB,CAAC,MAAc;IACjD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,2BAAmB,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9D,MAAM,QAAQ,GAAG,CAAC,MAAe,EAAyB,EAAE;QAC1D,IACE,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACtE,MAAkC,CAAC,2BAAmB,CAAC,KAAK,MAAM,EACnE,CAAC;YACD,MAAM,MAAM,GAAI,MAAkC,CAAC,QAAQ,CAAC,CAAC;YAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QACzF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACzD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC,CAAoC,CAAC;IAM9C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,aAAa,2BAAmB,2BAA2B,CAAC,CAAC,CAAC;IACrG,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,MAAmB,EAAE,MAAM,GAAG,KAAK;IACvE,MAAM,WAAW,GAAG,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC7E,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/F,OAAO;;;;;;;;;EASP,SAAS;kBACO,CAAC;AACnB,CAAC;AAED,SAAgB,WAAW,CAAC,IAAY;IACtC,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAE1B,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACjF,IAAI,UAAU,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC9C,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IAYD,MAAM,YAAY,GAAG,CACnB,CAAS,EACT,IAAY,EACZ,KAAa,EACwC,EAAE;QACvD,MAAM,KAAK,GAAwD,EAAE,CAAC;QACtE,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,MAAM,GAAG,KAAK,CAAC;QACnB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,SAAS,GAAG,CAAC,CAAC,CAAC;QAEnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhB,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,GAAG,KAAK,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;oBAAC,MAAM,GAAG,IAAI,CAAC;oBAAC,SAAS;gBAAC,CAAC;gBAC7C,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;oBAAC,QAAQ,GAAG,KAAK,CAAC;gBAAC,CAAC;gBACrC,SAAS;YACX,CAAC;YAGD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;gBACf,QAAQ,GAAG,IAAI,CAAC;gBAChB,SAAS;YACX,CAAC;YAED,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;gBAChB,IAAI,KAAK,KAAK,CAAC;oBAAE,SAAS,GAAG,CAAC,CAAC;gBAC/B,KAAK,EAAE,CAAC;YACV,CAAC;iBAAM,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;gBACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;oBACd,KAAK,EAAE,CAAC;oBACR,IAAI,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;wBACpC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;wBAC1E,SAAS,GAAG,CAAC,CAAC,CAAC;oBACjB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAIF,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAGjD,MAAM,UAAU,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAE5E,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAGD,OAAO,OAAO,CAAC;AACjB,CAAC;AAMM,KAAK,UAAU,kBAAkB,CAAC,KAAc,EAAE,MAAkB;IACzE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,wDAAa,sCAAsC,GAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,oBAAoB,IAAA,wBAAU,GAAE,EAAE,CAAC;IAC/C,cAAc,CACZ,EAAE,OAAO,EAAE,8CAA8C,EAAE,GAAG,MAAM,EAA6B,EACjG,GAAG,CACJ,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,KAAY,CAAC,CAAC;IACjD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC;aAC9B,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,IAAI,eAAe,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAYD,SAAgB,oBAAoB,CAAC,MAAkB;IACrD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,2BAA2B,GAAG,IAAI,GAAG,CAAC;IAC1C,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;IACxD,SAAS,EAAE,SAAS,EAAE,KAAK;CAC5B,CAAC,CAAC;AAEH,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,MAAM,GAAe,EAAE,CAAC;IAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,2BAA2B,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAEnD,IAAI,GAAG,KAAK,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5C,MAAM,WAAW,GAA+B,EAAE,CAAC;YACnD,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvD,WAAW,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,OAAqB,CAAC,CAAC;YAChE,CAAC;YACD,MAAM,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC;YAEnC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9C,MAAM,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;QACzC,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9C,MAAM,CAAC,OAAO,CAAC,GAAG,eAAe,CAAC,KAAmB,CAAC,CAAC;QACzD,CAAC;aAAM,IAAI,GAAG,KAAK,UAAU,EAAE,CAAC;YAE9B,IAAI,CAAC,CAAC,YAAY,IAAI,MAAM,CAAC,EAAE,CAAC;gBAC9B,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YAE1C,MAAM,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAGD,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,sBAAsB,IAAI,MAAM,CAAC,EAAE,CAAC;QACvE,MAAM,CAAC,sBAAsB,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-security.d.ts","sourceRoot":"","sources":["../../../src/utils/shell-security.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell-security.d.ts","sourceRoot":"","sources":["../../../src/utils/shell-security.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,aAAa,QAAyB,CAAC;AAGpD,eAAO,MAAM,cAAc,aAGzB,CAAC;AAGH,eAAO,MAAM,wBAAwB,aAEnC,CAAC;AAMH,eAAO,MAAM,kBAAkB,aAI7B,CAAC;AAOH,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAOD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,YAAY,CA+BnE;AAGD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,GAAG,YAAY,CAQrF;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,WAAW,EAAE,MAAM,GAAG,QAAQ,CAqBnF;AAOD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC3C,SAAS,GAAE,MAAM,CAAC,UAAwB,GACzC,MAAM,CAAC,UAAU,CAenB"}
|
|
@@ -39,6 +39,7 @@ exports.validateEnvKeys = validateEnvKeys;
|
|
|
39
39
|
exports.normalizeCwd = normalizeCwd;
|
|
40
40
|
exports.buildShellEnv = buildShellEnv;
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
|
+
const fs = __importStar(require("fs"));
|
|
42
43
|
exports.SKILL_NAME_RE = /^[a-z0-9][a-z0-9-]*$/;
|
|
43
44
|
exports.SHELL_DENYLIST = new Set([
|
|
44
45
|
'bash', 'sh', 'zsh', 'dash', 'fish',
|
|
@@ -95,11 +96,24 @@ function validateEnvKeys(env) {
|
|
|
95
96
|
return { ok: true };
|
|
96
97
|
}
|
|
97
98
|
function normalizeCwd(cwd, projectRoot) {
|
|
98
|
-
|
|
99
|
+
let root;
|
|
100
|
+
try {
|
|
101
|
+
root = fs.realpathSync(projectRoot);
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
return { ok: false, error: `project root "${projectRoot}" is not accessible: ${error.message}` };
|
|
105
|
+
}
|
|
99
106
|
if (cwd === undefined || cwd === '') {
|
|
100
107
|
return { ok: true, resolved: root };
|
|
101
108
|
}
|
|
102
|
-
const
|
|
109
|
+
const candidate = path.resolve(root, cwd);
|
|
110
|
+
let resolved;
|
|
111
|
+
try {
|
|
112
|
+
resolved = fs.realpathSync(candidate);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
return { ok: false, error: `cwd "${cwd}" is not accessible: ${error.message}` };
|
|
116
|
+
}
|
|
103
117
|
if (resolved !== root && !resolved.startsWith(root + path.sep)) {
|
|
104
118
|
return { ok: false, error: `cwd "${cwd}" resolves outside the project root` };
|
|
105
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell-security.js","sourceRoot":"","sources":["../../../src/utils/shell-security.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"shell-security.js","sourceRoot":"","sources":["../../../src/utils/shell-security.ts"],"names":[],"mappings":"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"}
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"properties": {
|
|
57
57
|
"type": {
|
|
58
58
|
"type": "string",
|
|
59
|
-
"enum": ["agent_task", "skill_task", "shell_task", "parallel", "join", "branch", "approval", "expression", "end"]
|
|
59
|
+
"enum": ["agent_task", "skill_task", "shell_task", "parallel", "join", "branch", "approval", "expression", "end", "error"]
|
|
60
60
|
},
|
|
61
61
|
"agent": {
|
|
62
62
|
"type": "string"
|
|
@@ -109,6 +109,10 @@
|
|
|
109
109
|
"retry": {
|
|
110
110
|
"$ref": "#/definitions/RetryConfig"
|
|
111
111
|
},
|
|
112
|
+
"fail_when": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"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."
|
|
115
|
+
},
|
|
112
116
|
"condition": {
|
|
113
117
|
"type": "string"
|
|
114
118
|
},
|
|
@@ -158,6 +162,10 @@
|
|
|
158
162
|
"comment": {
|
|
159
163
|
"type": "string"
|
|
160
164
|
},
|
|
165
|
+
"message": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"description": "error: failure message recorded in run.error. Supports {{template}} interpolation."
|
|
168
|
+
},
|
|
161
169
|
"on_approve": {
|
|
162
170
|
"type": "string"
|
|
163
171
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crewx/workflow",
|
|
3
|
-
"version": "0.3.22-rc.
|
|
3
|
+
"version": "0.3.22-rc.81",
|
|
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",
|
|
@@ -48,9 +48,9 @@
|
|
|
48
48
|
"dependencies": {
|
|
49
49
|
"@hyperjump/json-schema": "^1.9.4",
|
|
50
50
|
"js-yaml": "^4.1.0",
|
|
51
|
-
"@crewx/knowledge-core": "0.1.17",
|
|
52
|
-
"@crewx/sdk": "0.
|
|
53
|
-
"@crewx/shared": "0.0.
|
|
51
|
+
"@crewx/knowledge-core": "0.1.17-rc.44",
|
|
52
|
+
"@crewx/sdk": "0.9.0-rc.35",
|
|
53
|
+
"@crewx/shared": "0.0.6"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/js-yaml": "^4.0.9",
|
package/workflow-schema.json
CHANGED
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"properties": {
|
|
57
57
|
"type": {
|
|
58
58
|
"type": "string",
|
|
59
|
-
"enum": ["agent_task", "skill_task", "shell_task", "parallel", "join", "branch", "approval", "expression", "end"]
|
|
59
|
+
"enum": ["agent_task", "skill_task", "shell_task", "parallel", "join", "branch", "approval", "expression", "end", "error"]
|
|
60
60
|
},
|
|
61
61
|
"agent": {
|
|
62
62
|
"type": "string"
|
|
@@ -109,6 +109,10 @@
|
|
|
109
109
|
"retry": {
|
|
110
110
|
"$ref": "#/definitions/RetryConfig"
|
|
111
111
|
},
|
|
112
|
+
"fail_when": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"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."
|
|
115
|
+
},
|
|
112
116
|
"condition": {
|
|
113
117
|
"type": "string"
|
|
114
118
|
},
|
|
@@ -158,6 +162,10 @@
|
|
|
158
162
|
"comment": {
|
|
159
163
|
"type": "string"
|
|
160
164
|
},
|
|
165
|
+
"message": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"description": "error: failure message recorded in run.error. Supports {{template}} interpolation."
|
|
168
|
+
},
|
|
161
169
|
"on_approve": {
|
|
162
170
|
"type": "string"
|
|
163
171
|
},
|