crewly 1.20.16 → 1.20.17
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/dist/backend/build-info.json +2 -2
- package/dist/cli/cli/src/utils/process-cleanup.d.ts +24 -1
- package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.js +58 -4
- package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
- package/package.json +1 -1
|
@@ -12,10 +12,33 @@
|
|
|
12
12
|
* @param logFn - Logging function for status messages.
|
|
13
13
|
*/
|
|
14
14
|
export declare function killZombieProcesses(port: number, logFn?: (msg: string) => void): void;
|
|
15
|
+
/**
|
|
16
|
+
* Whether a parent pid means "the real parent is gone": pid 1, or a
|
|
17
|
+
* `systemd --user` / launchd subreaper that adopted the process.
|
|
18
|
+
*
|
|
19
|
+
* @param ppid - Parent pid
|
|
20
|
+
* @returns True when the process has been reparented
|
|
21
|
+
*/
|
|
22
|
+
export declare function isOrphanParent(ppid: number): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Pick the test-runner pids that are truly orphaned from a `pid ppid`
|
|
25
|
+
* listing: roots whose parent is gone, plus their descendants in the same
|
|
26
|
+
* listing (vitest's worker pool survives its main process being killed).
|
|
27
|
+
*
|
|
28
|
+
* A test run with a live parent chain (`make → npm → vitest`) belongs to
|
|
29
|
+
* someone else on this machine — the SteamFun release pipeline lost its
|
|
30
|
+
* unit tests to every Crewly restart (TKT427) — and is left alone.
|
|
31
|
+
*
|
|
32
|
+
* @param rows - `[pid, ppid]` pairs of matching test processes
|
|
33
|
+
* @param isOrphan - Parent-gone predicate (injectable for tests)
|
|
34
|
+
* @returns Pids safe to kill
|
|
35
|
+
*/
|
|
36
|
+
export declare function selectOrphanedTestPids(rows: Array<[number, number]>, isOrphan?: (ppid: number) => boolean): number[];
|
|
15
37
|
/**
|
|
16
38
|
* Kill orphaned vitest worker processes that survived agent session termination.
|
|
17
39
|
* These accumulate when exec() kills only the parent shell but leaves
|
|
18
|
-
* vitest's forked worker pool running.
|
|
40
|
+
* vitest's forked worker pool running. Only processes whose parent is gone
|
|
41
|
+
* (see {@link selectOrphanedTestPids}) are touched.
|
|
19
42
|
*
|
|
20
43
|
* @param myPid - Current process PID to exclude from killing.
|
|
21
44
|
* @param logFn - Logging function for status messages.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-cleanup.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/process-cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAiElG;AAED
|
|
1
|
+
{"version":3,"file":"process-cleanup.d.ts","sourceRoot":"","sources":["../../../../../cli/src/utils/process-cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GAAG,IAAI,CAiElG;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAC7B,QAAQ,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAwB,GAClD,MAAM,EAAE,CAkBV;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,GAAE,MAAoB,EAC3B,KAAK,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAkB,GACxC,IAAI,CAwCN"}
|
|
@@ -75,10 +75,62 @@ export function killZombieProcesses(port, logFn = console.log) {
|
|
|
75
75
|
// Kill orphaned vitest/test runner processes from previous agent sessions
|
|
76
76
|
killOrphanedTestProcesses(myPid, logFn);
|
|
77
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Whether a parent pid means "the real parent is gone": pid 1, or a
|
|
80
|
+
* `systemd --user` / launchd subreaper that adopted the process.
|
|
81
|
+
*
|
|
82
|
+
* @param ppid - Parent pid
|
|
83
|
+
* @returns True when the process has been reparented
|
|
84
|
+
*/
|
|
85
|
+
export function isOrphanParent(ppid) {
|
|
86
|
+
if (ppid <= 1)
|
|
87
|
+
return true;
|
|
88
|
+
try {
|
|
89
|
+
const comm = execSync(`ps -o comm= -p ${ppid}`, { encoding: 'utf8', timeout: 2000 }).trim();
|
|
90
|
+
return comm === 'systemd' || comm === 'launchd' || comm === '';
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return true; // parent already gone
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Pick the test-runner pids that are truly orphaned from a `pid ppid`
|
|
98
|
+
* listing: roots whose parent is gone, plus their descendants in the same
|
|
99
|
+
* listing (vitest's worker pool survives its main process being killed).
|
|
100
|
+
*
|
|
101
|
+
* A test run with a live parent chain (`make → npm → vitest`) belongs to
|
|
102
|
+
* someone else on this machine — the SteamFun release pipeline lost its
|
|
103
|
+
* unit tests to every Crewly restart (TKT427) — and is left alone.
|
|
104
|
+
*
|
|
105
|
+
* @param rows - `[pid, ppid]` pairs of matching test processes
|
|
106
|
+
* @param isOrphan - Parent-gone predicate (injectable for tests)
|
|
107
|
+
* @returns Pids safe to kill
|
|
108
|
+
*/
|
|
109
|
+
export function selectOrphanedTestPids(rows, isOrphan = isOrphanParent) {
|
|
110
|
+
const listed = new Set(rows.map(([pid]) => pid));
|
|
111
|
+
const doomed = new Set();
|
|
112
|
+
for (const [pid, ppid] of rows) {
|
|
113
|
+
// A parent that is itself in the listing is judged by its own parent, not here.
|
|
114
|
+
if (!listed.has(ppid) && isOrphan(ppid))
|
|
115
|
+
doomed.add(pid);
|
|
116
|
+
}
|
|
117
|
+
let grew = true;
|
|
118
|
+
while (grew) {
|
|
119
|
+
grew = false;
|
|
120
|
+
for (const [pid, ppid] of rows) {
|
|
121
|
+
if (!doomed.has(pid) && doomed.has(ppid)) {
|
|
122
|
+
doomed.add(pid);
|
|
123
|
+
grew = true;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return [...doomed];
|
|
128
|
+
}
|
|
78
129
|
/**
|
|
79
130
|
* Kill orphaned vitest worker processes that survived agent session termination.
|
|
80
131
|
* These accumulate when exec() kills only the parent shell but leaves
|
|
81
|
-
* vitest's forked worker pool running.
|
|
132
|
+
* vitest's forked worker pool running. Only processes whose parent is gone
|
|
133
|
+
* (see {@link selectOrphanedTestPids}) are touched.
|
|
82
134
|
*
|
|
83
135
|
* @param myPid - Current process PID to exclude from killing.
|
|
84
136
|
* @param logFn - Logging function for status messages.
|
|
@@ -88,10 +140,12 @@ export function killOrphanedTestProcesses(myPid = process.pid, logFn = console.l
|
|
|
88
140
|
const result = execSync('ps -eo pid,ppid,command | grep -E "node.*vitest|npx vitest" | grep -v grep', { encoding: 'utf8', timeout: 5000 }).trim();
|
|
89
141
|
if (!result)
|
|
90
142
|
return;
|
|
91
|
-
const
|
|
143
|
+
const rows = result
|
|
92
144
|
.split('\n')
|
|
93
|
-
.map(line =>
|
|
94
|
-
.
|
|
145
|
+
.map(line => line.trim().split(/\s+/))
|
|
146
|
+
.map(cols => [parseInt(cols[0]), parseInt(cols[1])])
|
|
147
|
+
.filter(([pid, ppid]) => !isNaN(pid) && !isNaN(ppid) && pid !== myPid);
|
|
148
|
+
const pids = selectOrphanedTestPids(rows);
|
|
95
149
|
if (pids.length > 0) {
|
|
96
150
|
logFn(`Found ${pids.length} orphaned test process(es), killing...`);
|
|
97
151
|
for (const pid of pids) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-cleanup.js","sourceRoot":"","sources":["../../../../../cli/src/utils/process-cleanup.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,QAA+B,OAAO,CAAC,GAAG;IAC3F,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;IAE1B,kCAAkC;IAClC,IAAI,CAAC;QACJ,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;aACjF,IAAI,EAAE;aACN,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;QAE1C,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,SAAS,QAAQ,CAAC,MAAM,+BAA+B,IAAI,cAAc,CAAC,CAAC;YACjF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACR,eAAe;gBAChB,CAAC;YACF,CAAC;YACD,iDAAiD;YACjD,IAAI,CAAC;gBACJ,QAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACxC,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBAC5B,IAAI,CAAC;oBACJ,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACR,eAAe;gBAChB,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,+DAA+D;IAChE,CAAC;IAED,oDAAoD;IACpD,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,QAAQ,CACtB,8EAA8E,EAC9E,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CACnC,CAAC,IAAI,EAAE,CAAC;QAET,IAAI,MAAM,EAAE,CAAC;YACZ,MAAM,SAAS,GAAG,MAAM;iBACtB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBAClC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC;YAE9C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,SAAS,SAAS,CAAC,MAAM,wCAAwC,CAAC,CAAC;gBACzE,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;oBAC7B,IAAI,CAAC;wBACJ,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;oBAC9B,CAAC;oBAAC,MAAM,CAAC;wBACR,eAAe;oBAChB,CAAC;gBACF,CAAC;YACF,CAAC;QACF,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,2BAA2B;IAC5B,CAAC;IAED,0EAA0E;IAC1E,yBAAyB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"process-cleanup.js","sourceRoot":"","sources":["../../../../../cli/src/utils/process-cleanup.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.17",
|
|
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": [
|