crewly 1.20.341 → 1.20.342
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/config/skills/agent/core/app-data/SKILL.md +5 -0
- package/config/skills/agent/core/app-data/execute.sh +9 -0
- package/config/skills/agent/core/app-data/execute.test.sh +12 -0
- package/dist/backend/backend/src/constants.d.ts +17 -0
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +17 -0
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/recurring-change-handoff.d.ts +8 -0
- package/dist/backend/backend/src/services/decisions/recurring-change-handoff.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/recurring-change-handoff.js +15 -2
- package/dist/backend/backend/src/services/decisions/recurring-change-handoff.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-exec.utils.d.ts +30 -4
- package/dist/backend/backend/src/services/harness/harness-exec.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-exec.utils.js +150 -56
- package/dist/backend/backend/src/services/harness/harness-exec.utils.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +17 -0
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +17 -0
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-exec.utils.d.ts +30 -4
- package/dist/cli/backend/src/services/harness/harness-exec.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-exec.utils.js +150 -56
- package/dist/cli/backend/src/services/harness/harness-exec.utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* @module services/harness/harness-exec.utils
|
|
14
14
|
*/
|
|
15
|
+
import { spawn } from 'child_process';
|
|
15
16
|
import type { RunCommand } from './harness.types.js';
|
|
16
17
|
/**
|
|
17
18
|
* The user-owned npm prefix used when a global install is not permitted.
|
|
@@ -69,16 +70,41 @@ export declare function withHarnessPath(env?: NodeJS.ProcessEnv): NodeJS.Process
|
|
|
69
70
|
* @returns Absolute path, or null when not found
|
|
70
71
|
*/
|
|
71
72
|
export declare function resolveExecutable(command: string, envPath: string | undefined, isExecutable?: (file: string) => boolean): string | null;
|
|
73
|
+
/** Injectable seams of {@link createRunCommand}. */
|
|
74
|
+
export interface RunCommandDeps {
|
|
75
|
+
spawn?: typeof spawn;
|
|
76
|
+
now?: () => number;
|
|
77
|
+
/** Whether a pid still exists (default: `process.kill(pid, 0)`) */
|
|
78
|
+
isAlive?: (pid: number) => boolean;
|
|
79
|
+
/** Receives the rate-limited stuck-executable warning */
|
|
80
|
+
warn?: (message: string, data: Record<string, unknown>) => void;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build a command runner with per-executable pile-up protection.
|
|
84
|
+
*
|
|
85
|
+
* On macOS a process stuck in exec / Gatekeeper verification survives SIGKILL
|
|
86
|
+
* until the kernel call returns, so killing a timed-out probe does not free
|
|
87
|
+
* it, and every new probe of that executable hangs too (hundreds of `codex`
|
|
88
|
+
* processes). The runner therefore remembers killed-but-still-alive children
|
|
89
|
+
* per executable and, while any exist, returns `{ code: null, error }`
|
|
90
|
+
* without spawning. It also caps concurrent timeout-bounded runs per
|
|
91
|
+
* executable. Callers already treat `code: null` as "could not run".
|
|
92
|
+
*
|
|
93
|
+
* @param deps - Injectable seams (tests)
|
|
94
|
+
* @returns A {@link RunCommand}
|
|
95
|
+
*/
|
|
96
|
+
export declare function createRunCommand(deps?: RunCommandDeps): RunCommand;
|
|
72
97
|
/**
|
|
73
98
|
* Run a command without a shell and collect its output.
|
|
74
99
|
*
|
|
75
|
-
* Never rejects: a spawn failure (ENOENT) or
|
|
100
|
+
* Never rejects: a spawn failure (ENOENT), timeout, or a refusal because an
|
|
101
|
+
* earlier run of the same executable is still stuck comes back as
|
|
76
102
|
* `{ code: null, error }`. The command runs in its own process group and a
|
|
77
103
|
* timeout kills the whole group: harness CLIs such as `codex` are Node
|
|
78
104
|
* wrappers around a native binary, and SIGKILL on the wrapper alone left the
|
|
79
|
-
* native child running forever
|
|
80
|
-
* Secrets must go through `options.stdin`, never through
|
|
81
|
-
* cannot appear in `ps` output.
|
|
105
|
+
* native child running forever. See {@link createRunCommand} for the
|
|
106
|
+
* pile-up guard. Secrets must go through `options.stdin`, never through
|
|
107
|
+
* `args`, so they cannot appear in `ps` output.
|
|
82
108
|
*
|
|
83
109
|
* @param command - Executable
|
|
84
110
|
* @param args - Arguments
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-exec.utils.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-exec.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"harness-exec.utils.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-exec.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAOtC,OAAO,KAAK,EAAiB,UAAU,EAAqB,MAAM,oBAAoB,CAAC;AAEvF;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,GAAE,MAAqB,GAAG,MAAM,CAOxG;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC3B,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,OAAO,GAAE,MAAqB,EAC9B,UAAU,GAAE,MAAuC,GACjD,MAAM,CAGR;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,UAAU,CAEvF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,YAAY,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAA6B,GAC3D,MAAM,GAAG,IAAI,CAUf;AAkCD,oDAAoD;AACpD,MAAM,WAAW,cAAc;IAC9B,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,mEAAmE;IACnE,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACnC,yDAAyD;IACzD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAChE;AAoBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,cAAmB,GAAG,UAAU,CA6GtE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,UAAU,EAAE,UAA+B,CAAC"}
|
|
@@ -17,6 +17,7 @@ import * as fs from 'fs';
|
|
|
17
17
|
import * as os from 'os';
|
|
18
18
|
import * as path from 'path';
|
|
19
19
|
import { HARNESS_CONSTANTS } from '../../constants.js';
|
|
20
|
+
import { LoggerService } from '../core/logger.service.js';
|
|
20
21
|
import { getCrewlyHomePath } from '../core/crewly-home.utils.js';
|
|
21
22
|
/**
|
|
22
23
|
* The user-owned npm prefix used when a global install is not permitted.
|
|
@@ -135,72 +136,165 @@ function killTree(child) {
|
|
|
135
136
|
}
|
|
136
137
|
child.kill('SIGKILL');
|
|
137
138
|
}
|
|
139
|
+
/**
|
|
140
|
+
* Whether anything from a run is still alive. Runs are spawned as their own
|
|
141
|
+
* process group (pgid = the child's pid), and the process that hangs is
|
|
142
|
+
* usually the native binary a wrapper started, not the wrapper itself, so on
|
|
143
|
+
* POSIX the whole group is checked.
|
|
144
|
+
*
|
|
145
|
+
* @param pid - Pid of the spawned child (its process group id on POSIX)
|
|
146
|
+
* @returns True when signal 0 to the group (or pid) succeeds; EPERM still means alive
|
|
147
|
+
*/
|
|
148
|
+
function defaultIsAlive(pid) {
|
|
149
|
+
try {
|
|
150
|
+
process.kill(process.platform === 'win32' ? pid : -pid, 0);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
return error.code === 'EPERM';
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Build a command runner with per-executable pile-up protection.
|
|
159
|
+
*
|
|
160
|
+
* On macOS a process stuck in exec / Gatekeeper verification survives SIGKILL
|
|
161
|
+
* until the kernel call returns, so killing a timed-out probe does not free
|
|
162
|
+
* it, and every new probe of that executable hangs too (hundreds of `codex`
|
|
163
|
+
* processes). The runner therefore remembers killed-but-still-alive children
|
|
164
|
+
* per executable and, while any exist, returns `{ code: null, error }`
|
|
165
|
+
* without spawning. It also caps concurrent timeout-bounded runs per
|
|
166
|
+
* executable. Callers already treat `code: null` as "could not run".
|
|
167
|
+
*
|
|
168
|
+
* @param deps - Injectable seams (tests)
|
|
169
|
+
* @returns A {@link RunCommand}
|
|
170
|
+
*/
|
|
171
|
+
export function createRunCommand(deps = {}) {
|
|
172
|
+
const spawnFn = deps.spawn ?? spawn;
|
|
173
|
+
const now = deps.now ?? Date.now;
|
|
174
|
+
const isAlive = deps.isAlive ?? defaultIsAlive;
|
|
175
|
+
const warn = deps.warn ??
|
|
176
|
+
((message, data) => LoggerService.getInstance().createComponentLogger('HarnessExec').warn(message, data));
|
|
177
|
+
const stuck = new Map();
|
|
178
|
+
const inflight = new Map();
|
|
179
|
+
const lastWarnAt = new Map();
|
|
180
|
+
const stuckCount = (key) => {
|
|
181
|
+
const pids = stuck.get(key);
|
|
182
|
+
if (!pids)
|
|
183
|
+
return 0;
|
|
184
|
+
for (const pid of [...pids])
|
|
185
|
+
if (!isAlive(pid))
|
|
186
|
+
pids.delete(pid);
|
|
187
|
+
if (pids.size === 0)
|
|
188
|
+
stuck.delete(key);
|
|
189
|
+
return pids.size;
|
|
190
|
+
};
|
|
191
|
+
const warnOnce = (key, count) => {
|
|
192
|
+
const last = lastWarnAt.get(key);
|
|
193
|
+
if (last !== undefined && now() - last < HARNESS_CONSTANTS.STUCK_WARN_INTERVAL_MS)
|
|
194
|
+
return;
|
|
195
|
+
lastWarnAt.set(key, now());
|
|
196
|
+
warn(`${key} is not responding; skipping new runs until the stuck ones exit`, { executable: key, stuckPids: count });
|
|
197
|
+
};
|
|
198
|
+
return (command, args, options = {}) => new Promise((resolve) => {
|
|
199
|
+
const key = resolveExecutable(command, options.env?.PATH ?? process.env.PATH) ?? command;
|
|
200
|
+
const stuckNow = stuckCount(key);
|
|
201
|
+
if (stuckNow > 0) {
|
|
202
|
+
warnOnce(key, stuckNow);
|
|
203
|
+
resolve({ code: null, stdout: '', stderr: '', error: `${key} is not responding (an earlier run is still stuck)` });
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
const bounded = Boolean(options.timeoutMs);
|
|
207
|
+
if (bounded && (inflight.get(key) ?? 0) >= HARNESS_CONSTANTS.MAX_INFLIGHT_PER_EXECUTABLE) {
|
|
208
|
+
warnOnce(key, 0);
|
|
209
|
+
resolve({ code: null, stdout: '', stderr: '', error: `${key} is not responding (too many runs in flight)` });
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
let stdout = '';
|
|
213
|
+
let stderr = '';
|
|
214
|
+
let settled = false;
|
|
215
|
+
let timer = null;
|
|
216
|
+
let released = false;
|
|
217
|
+
const release = () => {
|
|
218
|
+
if (released || !bounded)
|
|
219
|
+
return;
|
|
220
|
+
released = true;
|
|
221
|
+
inflight.set(key, Math.max(0, (inflight.get(key) ?? 1) - 1));
|
|
222
|
+
};
|
|
223
|
+
const finish = (result) => {
|
|
224
|
+
if (settled)
|
|
225
|
+
return;
|
|
226
|
+
settled = true;
|
|
227
|
+
if (timer)
|
|
228
|
+
clearTimeout(timer);
|
|
229
|
+
release();
|
|
230
|
+
resolve(result);
|
|
231
|
+
};
|
|
232
|
+
let child;
|
|
233
|
+
try {
|
|
234
|
+
child = spawnFn(command, [...args], {
|
|
235
|
+
env: options.env ?? process.env,
|
|
236
|
+
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
237
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
238
|
+
detached: process.platform !== 'win32',
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
catch (error) {
|
|
242
|
+
resolve({ code: null, stdout: '', stderr: '', error: error instanceof Error ? error.message : String(error) });
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (bounded)
|
|
246
|
+
inflight.set(key, (inflight.get(key) ?? 0) + 1);
|
|
247
|
+
if (options.timeoutMs) {
|
|
248
|
+
timer = setTimeout(() => {
|
|
249
|
+
killTree(child);
|
|
250
|
+
// Remember the group even if the wrapper itself dies: its native
|
|
251
|
+
// child may be the one that cannot be reaped. stuckCount() drops it
|
|
252
|
+
// once nothing in the group is left.
|
|
253
|
+
if (child.pid !== undefined) {
|
|
254
|
+
const pids = stuck.get(key) ?? new Set();
|
|
255
|
+
pids.add(child.pid);
|
|
256
|
+
stuck.set(key, pids);
|
|
257
|
+
}
|
|
258
|
+
finish({ code: null, stdout, stderr, error: `timed out after ${options.timeoutMs} ms` });
|
|
259
|
+
}, options.timeoutMs);
|
|
260
|
+
}
|
|
261
|
+
child.stdout?.on('data', (chunk) => {
|
|
262
|
+
const text = chunk.toString();
|
|
263
|
+
stdout += text;
|
|
264
|
+
options.onOutput?.(text);
|
|
265
|
+
});
|
|
266
|
+
child.stderr?.on('data', (chunk) => {
|
|
267
|
+
const text = chunk.toString();
|
|
268
|
+
stderr += text;
|
|
269
|
+
options.onOutput?.(text);
|
|
270
|
+
});
|
|
271
|
+
child.on('error', (error) => finish({ code: null, stdout, stderr, error: error.message }));
|
|
272
|
+
child.on('close', (code) => finish({ code, stdout, stderr }));
|
|
273
|
+
child.stdin?.on('error', () => undefined);
|
|
274
|
+
if (options.stdin !== undefined) {
|
|
275
|
+
child.stdin?.end(options.stdin);
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
child.stdin?.end();
|
|
279
|
+
}
|
|
280
|
+
});
|
|
281
|
+
}
|
|
138
282
|
/**
|
|
139
283
|
* Run a command without a shell and collect its output.
|
|
140
284
|
*
|
|
141
|
-
* Never rejects: a spawn failure (ENOENT) or
|
|
285
|
+
* Never rejects: a spawn failure (ENOENT), timeout, or a refusal because an
|
|
286
|
+
* earlier run of the same executable is still stuck comes back as
|
|
142
287
|
* `{ code: null, error }`. The command runs in its own process group and a
|
|
143
288
|
* timeout kills the whole group: harness CLIs such as `codex` are Node
|
|
144
289
|
* wrappers around a native binary, and SIGKILL on the wrapper alone left the
|
|
145
|
-
* native child running forever
|
|
146
|
-
* Secrets must go through `options.stdin`, never through
|
|
147
|
-
* cannot appear in `ps` output.
|
|
290
|
+
* native child running forever. See {@link createRunCommand} for the
|
|
291
|
+
* pile-up guard. Secrets must go through `options.stdin`, never through
|
|
292
|
+
* `args`, so they cannot appear in `ps` output.
|
|
148
293
|
*
|
|
149
294
|
* @param command - Executable
|
|
150
295
|
* @param args - Arguments
|
|
151
296
|
* @param options - env, timeout, stdin, streaming output callback
|
|
152
297
|
* @returns Exit code and output
|
|
153
298
|
*/
|
|
154
|
-
export const runCommand = (
|
|
155
|
-
let stdout = '';
|
|
156
|
-
let stderr = '';
|
|
157
|
-
let settled = false;
|
|
158
|
-
let timer = null;
|
|
159
|
-
const finish = (result) => {
|
|
160
|
-
if (settled)
|
|
161
|
-
return;
|
|
162
|
-
settled = true;
|
|
163
|
-
if (timer)
|
|
164
|
-
clearTimeout(timer);
|
|
165
|
-
resolve(result);
|
|
166
|
-
};
|
|
167
|
-
let child;
|
|
168
|
-
try {
|
|
169
|
-
child = spawn(command, [...args], {
|
|
170
|
-
env: options.env ?? process.env,
|
|
171
|
-
...(options.cwd ? { cwd: options.cwd } : {}),
|
|
172
|
-
stdio: ['pipe', 'pipe', 'pipe'],
|
|
173
|
-
detached: process.platform !== 'win32',
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
catch (error) {
|
|
177
|
-
resolve({ code: null, stdout: '', stderr: '', error: error instanceof Error ? error.message : String(error) });
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
if (options.timeoutMs) {
|
|
181
|
-
timer = setTimeout(() => {
|
|
182
|
-
killTree(child);
|
|
183
|
-
finish({ code: null, stdout, stderr, error: `timed out after ${options.timeoutMs} ms` });
|
|
184
|
-
}, options.timeoutMs);
|
|
185
|
-
}
|
|
186
|
-
child.stdout?.on('data', (chunk) => {
|
|
187
|
-
const text = chunk.toString();
|
|
188
|
-
stdout += text;
|
|
189
|
-
options.onOutput?.(text);
|
|
190
|
-
});
|
|
191
|
-
child.stderr?.on('data', (chunk) => {
|
|
192
|
-
const text = chunk.toString();
|
|
193
|
-
stderr += text;
|
|
194
|
-
options.onOutput?.(text);
|
|
195
|
-
});
|
|
196
|
-
child.on('error', (error) => finish({ code: null, stdout, stderr, error: error.message }));
|
|
197
|
-
child.on('close', (code) => finish({ code, stdout, stderr }));
|
|
198
|
-
child.stdin?.on('error', () => undefined);
|
|
199
|
-
if (options.stdin !== undefined) {
|
|
200
|
-
child.stdin?.end(options.stdin);
|
|
201
|
-
}
|
|
202
|
-
else {
|
|
203
|
-
child.stdin?.end();
|
|
204
|
-
}
|
|
205
|
-
});
|
|
299
|
+
export const runCommand = createRunCommand();
|
|
206
300
|
//# sourceMappingURL=harness-exec.utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"harness-exec.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-exec.utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"harness-exec.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/services/harness/harness-exec.utils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "crewly",
|
|
3
|
-
"version": "1.20.
|
|
3
|
+
"version": "1.20.342",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Multi-agent orchestration platform for AI coding teams — coordinates Claude Code, Gemini CLI, and Codex agents with a real-time web dashboard",
|
|
6
6
|
"workspaces": [
|