@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.
@@ -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 objMatch = trimmed.match(/\{[\s\S]*\}/);
63
- const arrMatch = trimmed.match(/\[[\s\S]*\]/);
64
- if (objMatch && arrMatch) {
65
- return objMatch.index < arrMatch.index ? objMatch[0] : arrMatch[0];
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 objMatch?.[0] ?? arrMatch?.[0] ?? trimmed;
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":"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"}
1
+ {"version":3,"file":"output-format.js","sourceRoot":"","sources":["../../../src/utils/output-format.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"shell-security.d.ts","sourceRoot":"","sources":["../../../src/utils/shell-security.ts"],"names":[],"mappings":"AAWA,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,CAUnF;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"}
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
- const root = path.resolve(projectRoot);
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 resolved = path.resolve(root, cwd);
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":"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"}
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.8",
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.8.8-rc.28",
53
- "@crewx/shared": "0.0.5"
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",
@@ -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
  },