@coralai/sps-cli 0.48.1 → 0.49.1
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/console-assets/assets/{index-BR3iEolY.js → index-Co0H5e5_.js} +85 -85
- package/dist/console-assets/assets/{index-lsG7ZrzD.css → index-DNKOkgDj.css} +1 -1
- package/dist/console-assets/index.html +2 -2
- package/dist/console-server/routes/system.d.ts.map +1 -1
- package/dist/console-server/routes/system.js +30 -0
- package/dist/console-server/routes/system.js.map +1 -1
- package/package.json +4 -1
- package/dist/commands/cardMarkComplete.test.d.ts +0 -2
- package/dist/commands/cardMarkComplete.test.d.ts.map +0 -1
- package/dist/commands/cardMarkComplete.test.js +0 -142
- package/dist/commands/cardMarkComplete.test.js.map +0 -1
- package/dist/commands/cardMarkStarted.test.d.ts +0 -2
- package/dist/commands/cardMarkStarted.test.d.ts.map +0 -1
- package/dist/commands/cardMarkStarted.test.js +0 -98
- package/dist/commands/cardMarkStarted.test.js.map +0 -1
- package/dist/commands/projectInit.test.d.ts +0 -2
- package/dist/commands/projectInit.test.d.ts.map +0 -1
- package/dist/commands/projectInit.test.js +0 -126
- package/dist/commands/projectInit.test.js.map +0 -1
- package/dist/commands/tick-heartbeat.test.d.ts +0 -2
- package/dist/commands/tick-heartbeat.test.d.ts.map +0 -1
- package/dist/commands/tick-heartbeat.test.js +0 -89
- package/dist/commands/tick-heartbeat.test.js.map +0 -1
- package/dist/core/checklist.test.d.ts +0 -2
- package/dist/core/checklist.test.d.ts.map +0 -1
- package/dist/core/checklist.test.js +0 -74
- package/dist/core/checklist.test.js.map +0 -1
- package/dist/core/config.test.d.ts +0 -2
- package/dist/core/config.test.d.ts.map +0 -1
- package/dist/core/config.test.js +0 -352
- package/dist/core/config.test.js.map +0 -1
- package/dist/core/lock.test.d.ts +0 -2
- package/dist/core/lock.test.d.ts.map +0 -1
- package/dist/core/lock.test.js +0 -118
- package/dist/core/lock.test.js.map +0 -1
- package/dist/core/markerFile.test.d.ts +0 -2
- package/dist/core/markerFile.test.d.ts.map +0 -1
- package/dist/core/markerFile.test.js +0 -111
- package/dist/core/markerFile.test.js.map +0 -1
- package/dist/core/queue.test.d.ts +0 -2
- package/dist/core/queue.test.d.ts.map +0 -1
- package/dist/core/queue.test.js +0 -114
- package/dist/core/queue.test.js.map +0 -1
- package/dist/core/sessionCleanup.test.d.ts +0 -2
- package/dist/core/sessionCleanup.test.d.ts.map +0 -1
- package/dist/core/sessionCleanup.test.js +0 -158
- package/dist/core/sessionCleanup.test.js.map +0 -1
- package/dist/core/shellEnv.test.d.ts +0 -2
- package/dist/core/shellEnv.test.d.ts.map +0 -1
- package/dist/core/shellEnv.test.js +0 -116
- package/dist/core/shellEnv.test.js.map +0 -1
- package/dist/core/skillStore.test.d.ts +0 -2
- package/dist/core/skillStore.test.d.ts.map +0 -1
- package/dist/core/skillStore.test.js +0 -203
- package/dist/core/skillStore.test.js.map +0 -1
- package/dist/core/state.test.d.ts +0 -2
- package/dist/core/state.test.d.ts.map +0 -1
- package/dist/core/state.test.js +0 -336
- package/dist/core/state.test.js.map +0 -1
- package/dist/engines/CloseoutEngine.d.ts +0 -72
- package/dist/engines/CloseoutEngine.d.ts.map +0 -1
- package/dist/engines/CloseoutEngine.js +0 -648
- package/dist/engines/CloseoutEngine.js.map +0 -1
- package/dist/engines/EventHandler.test.d.ts +0 -2
- package/dist/engines/EventHandler.test.d.ts.map +0 -1
- package/dist/engines/EventHandler.test.js +0 -169
- package/dist/engines/EventHandler.test.js.map +0 -1
- package/dist/engines/ExecutionEngine.d.ts +0 -125
- package/dist/engines/ExecutionEngine.d.ts.map +0 -1
- package/dist/engines/ExecutionEngine.js +0 -766
- package/dist/engines/ExecutionEngine.js.map +0 -1
- package/dist/engines/MonitorEngine.test.d.ts +0 -2
- package/dist/engines/MonitorEngine.test.d.ts.map +0 -1
- package/dist/engines/MonitorEngine.test.js +0 -355
- package/dist/engines/MonitorEngine.test.js.map +0 -1
- package/dist/engines/engine-pipeline-adapter.test.d.ts +0 -17
- package/dist/engines/engine-pipeline-adapter.test.d.ts.map +0 -1
- package/dist/engines/engine-pipeline-adapter.test.js +0 -707
- package/dist/engines/engine-pipeline-adapter.test.js.map +0 -1
- package/dist/interfaces/HookProvider.d.ts +0 -9
- package/dist/interfaces/HookProvider.d.ts.map +0 -1
- package/dist/interfaces/HookProvider.js +0 -2
- package/dist/interfaces/HookProvider.js.map +0 -1
- package/dist/manager/completion-judge.test.d.ts +0 -17
- package/dist/manager/completion-judge.test.d.ts.map +0 -1
- package/dist/manager/completion-judge.test.js +0 -233
- package/dist/manager/completion-judge.test.js.map +0 -1
- package/dist/manager/integration-queue.d.ts +0 -71
- package/dist/manager/integration-queue.d.ts.map +0 -1
- package/dist/manager/integration-queue.js +0 -137
- package/dist/manager/integration-queue.js.map +0 -1
- package/dist/manager/integration-queue.test.d.ts +0 -17
- package/dist/manager/integration-queue.test.d.ts.map +0 -1
- package/dist/manager/integration-queue.test.js +0 -210
- package/dist/manager/integration-queue.test.js.map +0 -1
- package/dist/manager/pm-client.d.ts +0 -10
- package/dist/manager/pm-client.d.ts.map +0 -1
- package/dist/manager/pm-client.js +0 -260
- package/dist/manager/pm-client.js.map +0 -1
- package/dist/manager/resource-limiter.d.ts +0 -56
- package/dist/manager/resource-limiter.d.ts.map +0 -1
- package/dist/manager/resource-limiter.js +0 -116
- package/dist/manager/resource-limiter.js.map +0 -1
- package/dist/manager/resource-limiter.test.d.ts +0 -17
- package/dist/manager/resource-limiter.test.d.ts.map +0 -1
- package/dist/manager/resource-limiter.test.js +0 -118
- package/dist/manager/resource-limiter.test.js.map +0 -1
- package/dist/manager/supervisor.test.d.ts +0 -17
- package/dist/manager/supervisor.test.d.ts.map +0 -1
- package/dist/manager/supervisor.test.js +0 -216
- package/dist/manager/supervisor.test.js.map +0 -1
- package/dist/manager/worker-manager-impl.test.d.ts +0 -17
- package/dist/manager/worker-manager-impl.test.d.ts.map +0 -1
- package/dist/manager/worker-manager-impl.test.js +0 -446
- package/dist/manager/worker-manager-impl.test.js.map +0 -1
- package/dist/providers/PlaneTaskBackend.d.ts +0 -83
- package/dist/providers/PlaneTaskBackend.d.ts.map +0 -1
- package/dist/providers/PlaneTaskBackend.js +0 -461
- package/dist/providers/PlaneTaskBackend.js.map +0 -1
- package/dist/providers/TrelloTaskBackend.d.ts +0 -64
- package/dist/providers/TrelloTaskBackend.d.ts.map +0 -1
- package/dist/providers/TrelloTaskBackend.js +0 -298
- package/dist/providers/TrelloTaskBackend.js.map +0 -1
- package/dist/providers/adapters/acp-fs-handlers.test.d.ts +0 -2
- package/dist/providers/adapters/acp-fs-handlers.test.d.ts.map +0 -1
- package/dist/providers/adapters/acp-fs-handlers.test.js +0 -80
- package/dist/providers/adapters/acp-fs-handlers.test.js.map +0 -1
- package/dist/providers/adapters/acp-permissions.test.d.ts +0 -2
- package/dist/providers/adapters/acp-permissions.test.d.ts.map +0 -1
- package/dist/providers/adapters/acp-permissions.test.js +0 -103
- package/dist/providers/adapters/acp-permissions.test.js.map +0 -1
- package/dist/providers/adapters/acp-session-accumulator.test.d.ts +0 -2
- package/dist/providers/adapters/acp-session-accumulator.test.d.ts.map +0 -1
- package/dist/providers/adapters/acp-session-accumulator.test.js +0 -88
- package/dist/providers/adapters/acp-session-accumulator.test.js.map +0 -1
- package/dist/providers/adapters/acp-terminal-manager.test.d.ts +0 -2
- package/dist/providers/adapters/acp-terminal-manager.test.d.ts.map +0 -1
- package/dist/providers/adapters/acp-terminal-manager.test.js +0 -86
- package/dist/providers/adapters/acp-terminal-manager.test.js.map +0 -1
- package/dist/providers/outputParser.test.d.ts +0 -2
- package/dist/providers/outputParser.test.d.ts.map +0 -1
- package/dist/providers/outputParser.test.js +0 -185
- package/dist/providers/outputParser.test.js.map +0 -1
- package/dist/test-setup.d.ts +0 -2
- package/dist/test-setup.d.ts.map +0 -1
- package/dist/test-setup.js +0 -27
- package/dist/test-setup.js.map +0 -1
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module resource-limiter
|
|
3
|
-
* @description 全局 Worker 资源限制器,控制并发数量、启动间隔和内存使用
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-25
|
|
10
|
-
* @updated 2026-03-30
|
|
11
|
-
*
|
|
12
|
-
* @role manager
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
import { freemem, totalmem } from 'node:os';
|
|
17
|
-
const DEFAULT_CONFIG = {
|
|
18
|
-
maxGlobalWorkers: 30,
|
|
19
|
-
staggerDelayMs: 5_000,
|
|
20
|
-
maxMemoryPercent: 100, // Disabled by default — os.freemem() is unreliable on macOS
|
|
21
|
-
};
|
|
22
|
-
export class ResourceLimiter {
|
|
23
|
-
config;
|
|
24
|
-
activeCount = 0;
|
|
25
|
-
lastLaunchAt = 0;
|
|
26
|
-
constructor(config) {
|
|
27
|
-
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Try to acquire a worker slot.
|
|
31
|
-
* Returns true if launch is allowed, false if at capacity.
|
|
32
|
-
*/
|
|
33
|
-
tryAcquire() {
|
|
34
|
-
return this.tryAcquireDetailed().acquired;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Try to acquire a worker slot and return structured rejection details.
|
|
38
|
-
*/
|
|
39
|
-
tryAcquireDetailed() {
|
|
40
|
-
const stats = this.collectStats();
|
|
41
|
-
if (!stats.canLaunch) {
|
|
42
|
-
return { acquired: false, stats };
|
|
43
|
-
}
|
|
44
|
-
this.activeCount++;
|
|
45
|
-
return {
|
|
46
|
-
acquired: true,
|
|
47
|
-
stats: {
|
|
48
|
-
...stats,
|
|
49
|
-
active: this.activeCount,
|
|
50
|
-
},
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Release a worker slot (call when worker exits).
|
|
55
|
-
*/
|
|
56
|
-
release() {
|
|
57
|
-
if (this.activeCount > 0) {
|
|
58
|
-
this.activeCount--;
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Enforce stagger delay between launches.
|
|
63
|
-
* Returns a promise that resolves when the delay has passed.
|
|
64
|
-
*/
|
|
65
|
-
async enforceStagger() {
|
|
66
|
-
const now = Date.now();
|
|
67
|
-
const elapsed = now - this.lastLaunchAt;
|
|
68
|
-
if (elapsed < this.config.staggerDelayMs) {
|
|
69
|
-
const wait = this.config.staggerDelayMs - elapsed;
|
|
70
|
-
await new Promise(r => setTimeout(r, wait));
|
|
71
|
-
}
|
|
72
|
-
this.lastLaunchAt = Date.now();
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Get current resource stats.
|
|
76
|
-
*/
|
|
77
|
-
getStats() {
|
|
78
|
-
return this.collectStats();
|
|
79
|
-
}
|
|
80
|
-
/**
|
|
81
|
-
* Override active count (used during Recovery to sync with actual state).
|
|
82
|
-
*/
|
|
83
|
-
setActiveCount(count) {
|
|
84
|
-
this.activeCount = count;
|
|
85
|
-
}
|
|
86
|
-
formatBlockReason(stats) {
|
|
87
|
-
const detail = `active=${stats.active}/${stats.max}, memory=${stats.memoryPercent}%/${stats.maxMemoryPercent}%`;
|
|
88
|
-
if (stats.blockReason === 'workers') {
|
|
89
|
-
return `worker cap reached (${detail})`;
|
|
90
|
-
}
|
|
91
|
-
if (stats.blockReason === 'memory') {
|
|
92
|
-
return `memory threshold reached (${detail})`;
|
|
93
|
-
}
|
|
94
|
-
return `resources available (${detail})`;
|
|
95
|
-
}
|
|
96
|
-
collectStats() {
|
|
97
|
-
const mem = Math.round(this.memoryPercent());
|
|
98
|
-
const workerLimited = this.activeCount >= this.config.maxGlobalWorkers;
|
|
99
|
-
const memoryLimited = mem > this.config.maxMemoryPercent;
|
|
100
|
-
const blockReason = workerLimited ? 'workers' : memoryLimited ? 'memory' : null;
|
|
101
|
-
return {
|
|
102
|
-
active: this.activeCount,
|
|
103
|
-
max: this.config.maxGlobalWorkers,
|
|
104
|
-
memoryPercent: mem,
|
|
105
|
-
maxMemoryPercent: this.config.maxMemoryPercent,
|
|
106
|
-
canLaunch: !workerLimited && !memoryLimited,
|
|
107
|
-
blockReason,
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
|
-
memoryPercent() {
|
|
111
|
-
const total = totalmem();
|
|
112
|
-
const free = freemem();
|
|
113
|
-
return ((total - free) / total) * 100;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=resource-limiter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resource-limiter.js","sourceRoot":"","sources":["../../src/manager/resource-limiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module resource-limiter.test
|
|
3
|
-
* @description ResourceLimiter 单元测试
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-29
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role test
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=resource-limiter.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resource-limiter.test.d.ts","sourceRoot":"","sources":["../../src/manager/resource-limiter.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module resource-limiter.test
|
|
3
|
-
* @description ResourceLimiter 单元测试
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-29
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role test
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
import { describe, expect, it } from 'vitest';
|
|
17
|
-
import { ResourceLimiter } from './resource-limiter.js';
|
|
18
|
-
describe('ResourceLimiter', () => {
|
|
19
|
-
describe('tryAcquire / release', () => {
|
|
20
|
-
it('acquires when under limit', () => {
|
|
21
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 2 });
|
|
22
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
23
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
it('rejects when at capacity', () => {
|
|
26
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 1 });
|
|
27
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
28
|
-
expect(limiter.tryAcquire()).toBe(false);
|
|
29
|
-
});
|
|
30
|
-
it('allows acquire after release', () => {
|
|
31
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 1 });
|
|
32
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
33
|
-
expect(limiter.tryAcquire()).toBe(false);
|
|
34
|
-
limiter.release();
|
|
35
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
36
|
-
});
|
|
37
|
-
it('release does not go below zero', () => {
|
|
38
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 2 });
|
|
39
|
-
limiter.release(); // Already at 0
|
|
40
|
-
limiter.release(); // Still at 0
|
|
41
|
-
// Should still allow max acquires
|
|
42
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
43
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
44
|
-
expect(limiter.tryAcquire()).toBe(false);
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
describe('tryAcquireDetailed', () => {
|
|
48
|
-
it('returns structured result with stats', () => {
|
|
49
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 2 });
|
|
50
|
-
const result = limiter.tryAcquireDetailed();
|
|
51
|
-
expect(result.acquired).toBe(true);
|
|
52
|
-
expect(result.stats.active).toBe(1);
|
|
53
|
-
expect(result.stats.max).toBe(2);
|
|
54
|
-
expect(result.stats.canLaunch).toBe(true);
|
|
55
|
-
});
|
|
56
|
-
it('returns blockReason when at capacity', () => {
|
|
57
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 1 });
|
|
58
|
-
limiter.tryAcquire();
|
|
59
|
-
const result = limiter.tryAcquireDetailed();
|
|
60
|
-
expect(result.acquired).toBe(false);
|
|
61
|
-
expect(result.stats.blockReason).toBe('workers');
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
describe('getStats', () => {
|
|
65
|
-
it('reports correct active count', () => {
|
|
66
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 5 });
|
|
67
|
-
limiter.tryAcquire();
|
|
68
|
-
limiter.tryAcquire();
|
|
69
|
-
const stats = limiter.getStats();
|
|
70
|
-
expect(stats.active).toBe(2);
|
|
71
|
-
expect(stats.max).toBe(5);
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
describe('setActiveCount', () => {
|
|
75
|
-
it('overrides internal active count for recovery', () => {
|
|
76
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 3 });
|
|
77
|
-
limiter.setActiveCount(2);
|
|
78
|
-
expect(limiter.getStats().active).toBe(2);
|
|
79
|
-
expect(limiter.tryAcquire()).toBe(true);
|
|
80
|
-
expect(limiter.tryAcquire()).toBe(false); // Now at 3
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
describe('enforceStagger', () => {
|
|
84
|
-
it('resolves immediately on first call', async () => {
|
|
85
|
-
const limiter = new ResourceLimiter({ staggerDelayMs: 100 });
|
|
86
|
-
const start = Date.now();
|
|
87
|
-
await limiter.enforceStagger();
|
|
88
|
-
const elapsed = Date.now() - start;
|
|
89
|
-
expect(elapsed).toBeLessThan(50);
|
|
90
|
-
});
|
|
91
|
-
it('delays subsequent calls within stagger window', async () => {
|
|
92
|
-
const limiter = new ResourceLimiter({ staggerDelayMs: 100 });
|
|
93
|
-
await limiter.enforceStagger();
|
|
94
|
-
const start = Date.now();
|
|
95
|
-
await limiter.enforceStagger();
|
|
96
|
-
const elapsed = Date.now() - start;
|
|
97
|
-
// Should have waited ~100ms
|
|
98
|
-
expect(elapsed).toBeGreaterThanOrEqual(50);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('formatBlockReason', () => {
|
|
102
|
-
it('formats worker cap message', () => {
|
|
103
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 1 });
|
|
104
|
-
limiter.tryAcquire();
|
|
105
|
-
const stats = limiter.getStats();
|
|
106
|
-
const msg = limiter.formatBlockReason(stats);
|
|
107
|
-
expect(msg).toContain('worker cap reached');
|
|
108
|
-
expect(msg).toContain('1/1');
|
|
109
|
-
});
|
|
110
|
-
it('formats available message when not blocked', () => {
|
|
111
|
-
const limiter = new ResourceLimiter({ maxGlobalWorkers: 5 });
|
|
112
|
-
const stats = limiter.getStats();
|
|
113
|
-
const msg = limiter.formatBlockReason(stats);
|
|
114
|
-
expect(msg).toContain('resources available');
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
//# sourceMappingURL=resource-limiter.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resource-limiter.test.js","sourceRoot":"","sources":["../../src/manager/resource-limiter.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module supervisor.test
|
|
3
|
-
* @description ProcessSupervisor 单元测试
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-29
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role test
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=supervisor.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.test.d.ts","sourceRoot":"","sources":["../../src/manager/supervisor.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module supervisor.test
|
|
3
|
-
* @description ProcessSupervisor 单元测试
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-29
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role test
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
import { mkdtempSync, } from 'node:fs';
|
|
17
|
-
import { tmpdir } from 'node:os';
|
|
18
|
-
import { join } from 'node:path';
|
|
19
|
-
import { beforeEach, describe, expect, it, } from 'vitest';
|
|
20
|
-
import { ProcessSupervisor, } from './supervisor.js';
|
|
21
|
-
// ─── Helpers ──────────────────────────────────────────────────────
|
|
22
|
-
function _makeTempDir() {
|
|
23
|
-
return mkdtempSync(join(tmpdir(), 'sps-sup-test-'));
|
|
24
|
-
}
|
|
25
|
-
function makeSupervisor() {
|
|
26
|
-
return new ProcessSupervisor();
|
|
27
|
-
}
|
|
28
|
-
/** Create a handle suitable for registerAcpHandle (transport omitted, added by normalize) */
|
|
29
|
-
function makeHandle(id, overrides) {
|
|
30
|
-
return {
|
|
31
|
-
id,
|
|
32
|
-
pid: 12345,
|
|
33
|
-
outputFile: '/tmp/output.jsonl',
|
|
34
|
-
project: 'test',
|
|
35
|
-
seq: '1',
|
|
36
|
-
slot: 'worker-1',
|
|
37
|
-
branch: 'feat-1',
|
|
38
|
-
worktree: '/tmp/wt',
|
|
39
|
-
tool: 'claude',
|
|
40
|
-
exitCode: null,
|
|
41
|
-
sessionId: null,
|
|
42
|
-
runId: null,
|
|
43
|
-
sessionState: null,
|
|
44
|
-
remoteStatus: null,
|
|
45
|
-
lastEventAt: null,
|
|
46
|
-
startedAt: '2026-01-01T00:00:00.000Z',
|
|
47
|
-
exitedAt: null,
|
|
48
|
-
...overrides,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
// ─── Tests ────────────────────────────────────────────────────────
|
|
52
|
-
describe('ProcessSupervisor', () => {
|
|
53
|
-
let sup;
|
|
54
|
-
beforeEach(() => {
|
|
55
|
-
sup = makeSupervisor();
|
|
56
|
-
});
|
|
57
|
-
describe('get / getAll / getByProject / activeCount', () => {
|
|
58
|
-
it('returns undefined for unknown handle', () => {
|
|
59
|
-
expect(sup.get('nonexistent')).toBeUndefined();
|
|
60
|
-
});
|
|
61
|
-
it('starts with zero active workers', () => {
|
|
62
|
-
expect(sup.activeCount).toBe(0);
|
|
63
|
-
expect(sup.getAll()).toEqual([]);
|
|
64
|
-
});
|
|
65
|
-
it('registerAcpHandle adds a handle', () => {
|
|
66
|
-
const handle = makeHandle('test:worker-1:5', { transport: 'acp-sdk' });
|
|
67
|
-
sup.registerAcpHandle(handle);
|
|
68
|
-
expect(sup.activeCount).toBe(1);
|
|
69
|
-
expect(sup.get('test:worker-1:5')).toBeDefined();
|
|
70
|
-
expect(sup.get('test:worker-1:5').transport).toBe('acp-sdk');
|
|
71
|
-
});
|
|
72
|
-
it('getByProject filters by project', () => {
|
|
73
|
-
sup.registerAcpHandle(makeHandle('proj-a:w1:1', { project: 'proj-a' }));
|
|
74
|
-
sup.registerAcpHandle(makeHandle('proj-b:w1:2', { project: 'proj-b' }));
|
|
75
|
-
sup.registerAcpHandle(makeHandle('proj-a:w2:3', { project: 'proj-a' }));
|
|
76
|
-
const projA = sup.getByProject('proj-a');
|
|
77
|
-
expect(projA).toHaveLength(2);
|
|
78
|
-
expect(projA.every(h => h.project === 'proj-a')).toBe(true);
|
|
79
|
-
const projB = sup.getByProject('proj-b');
|
|
80
|
-
expect(projB).toHaveLength(1);
|
|
81
|
-
});
|
|
82
|
-
it('getAll returns all handles', () => {
|
|
83
|
-
sup.registerAcpHandle(makeHandle('a:w1:1'));
|
|
84
|
-
sup.registerAcpHandle(makeHandle('b:w1:2'));
|
|
85
|
-
expect(sup.getAll()).toHaveLength(2);
|
|
86
|
-
});
|
|
87
|
-
});
|
|
88
|
-
describe('remove', () => {
|
|
89
|
-
it('removes a handle by id', () => {
|
|
90
|
-
sup.registerAcpHandle(makeHandle('test:w1:1'));
|
|
91
|
-
expect(sup.activeCount).toBe(1);
|
|
92
|
-
sup.remove('test:w1:1');
|
|
93
|
-
expect(sup.activeCount).toBe(0);
|
|
94
|
-
expect(sup.get('test:w1:1')).toBeUndefined();
|
|
95
|
-
});
|
|
96
|
-
it('does nothing for unknown id', () => {
|
|
97
|
-
sup.remove('nonexistent');
|
|
98
|
-
expect(sup.activeCount).toBe(0);
|
|
99
|
-
});
|
|
100
|
-
});
|
|
101
|
-
describe('updateAcpHandle', () => {
|
|
102
|
-
it('patches an existing handle', () => {
|
|
103
|
-
sup.registerAcpHandle(makeHandle('test:w1:1'));
|
|
104
|
-
const updated = sup.updateAcpHandle('test:w1:1', {
|
|
105
|
-
sessionId: 'sess-abc',
|
|
106
|
-
remoteStatus: 'running',
|
|
107
|
-
exitCode: null,
|
|
108
|
-
});
|
|
109
|
-
expect(updated).toBeDefined();
|
|
110
|
-
expect(updated.sessionId).toBe('sess-abc');
|
|
111
|
-
expect(updated.remoteStatus).toBe('running');
|
|
112
|
-
});
|
|
113
|
-
it('returns undefined for unknown handle', () => {
|
|
114
|
-
const result = sup.updateAcpHandle('nonexistent', { exitCode: 0 });
|
|
115
|
-
expect(result).toBeUndefined();
|
|
116
|
-
});
|
|
117
|
-
it('patches exitCode and exitedAt', () => {
|
|
118
|
-
sup.registerAcpHandle(makeHandle('test:w1:1'));
|
|
119
|
-
const updated = sup.updateAcpHandle('test:w1:1', {
|
|
120
|
-
exitCode: 0,
|
|
121
|
-
exitedAt: '2026-01-02T00:00:00.000Z',
|
|
122
|
-
});
|
|
123
|
-
expect(updated.exitCode).toBe(0);
|
|
124
|
-
expect(updated.exitedAt).toBe('2026-01-02T00:00:00.000Z');
|
|
125
|
-
});
|
|
126
|
-
it('patches lastEventAt', () => {
|
|
127
|
-
sup.registerAcpHandle(makeHandle('test:w1:1'));
|
|
128
|
-
const updated = sup.updateAcpHandle('test:w1:1', {
|
|
129
|
-
lastEventAt: '2026-01-02T12:00:00.000Z',
|
|
130
|
-
});
|
|
131
|
-
expect(updated.lastEventAt).toBe('2026-01-02T12:00:00.000Z');
|
|
132
|
-
});
|
|
133
|
-
});
|
|
134
|
-
describe('drainPendingActions', () => {
|
|
135
|
-
it('resolves immediately when no pending actions', async () => {
|
|
136
|
-
await expect(sup.drainPendingActions()).resolves.toBeUndefined();
|
|
137
|
-
});
|
|
138
|
-
});
|
|
139
|
-
describe('registerAcpHandle / normalizeAcpHandle', () => {
|
|
140
|
-
it('normalizes transport to acp', () => {
|
|
141
|
-
const handle = makeHandle('test:w1:1');
|
|
142
|
-
const registered = sup.registerAcpHandle(handle);
|
|
143
|
-
expect(registered.transport).toBe('acp-sdk');
|
|
144
|
-
expect(registered.pid).toBeNull();
|
|
145
|
-
});
|
|
146
|
-
it('preserves sessionId and runId', () => {
|
|
147
|
-
const handle = makeHandle('test:w1:1', {
|
|
148
|
-
sessionId: 'sess-xyz',
|
|
149
|
-
runId: 'run-123',
|
|
150
|
-
});
|
|
151
|
-
const registered = sup.registerAcpHandle(handle);
|
|
152
|
-
expect(registered.sessionId).toBe('sess-xyz');
|
|
153
|
-
expect(registered.runId).toBe('run-123');
|
|
154
|
-
});
|
|
155
|
-
it('defaults nullable fields to null', () => {
|
|
156
|
-
const handle = makeHandle('test:w1:1');
|
|
157
|
-
// Remove optional fields
|
|
158
|
-
delete handle.runId;
|
|
159
|
-
delete handle.sessionState;
|
|
160
|
-
delete handle.remoteStatus;
|
|
161
|
-
delete handle.lastEventAt;
|
|
162
|
-
delete handle.outputFile;
|
|
163
|
-
const registered = sup.registerAcpHandle(handle);
|
|
164
|
-
expect(registered.runId).toBeNull();
|
|
165
|
-
expect(registered.sessionState).toBeNull();
|
|
166
|
-
expect(registered.remoteStatus).toBeNull();
|
|
167
|
-
expect(registered.lastEventAt).toBeNull();
|
|
168
|
-
expect(registered.outputFile).toBeNull();
|
|
169
|
-
});
|
|
170
|
-
});
|
|
171
|
-
describe('kill', () => {
|
|
172
|
-
it('does nothing for unknown handle', async () => {
|
|
173
|
-
await expect(sup.kill('nonexistent')).resolves.toBeUndefined();
|
|
174
|
-
});
|
|
175
|
-
it('removes handle after kill (ACP handle, no real PID)', async () => {
|
|
176
|
-
sup.registerAcpHandle(makeHandle('test:w1:1', { pid: null }));
|
|
177
|
-
expect(sup.activeCount).toBe(1);
|
|
178
|
-
await sup.kill('test:w1:1');
|
|
179
|
-
expect(sup.activeCount).toBe(0);
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
describe('reloadGlobalEnv', () => {
|
|
183
|
-
it('reloads without error', () => {
|
|
184
|
-
expect(() => sup.reloadGlobalEnv()).not.toThrow();
|
|
185
|
-
});
|
|
186
|
-
});
|
|
187
|
-
describe('monitorOrphanPid', () => {
|
|
188
|
-
it('registers orphan handle and tracks it', () => {
|
|
189
|
-
const handle = { ...makeHandle('test:w1:1', { pid: 99999 }), transport: 'acp-sdk' };
|
|
190
|
-
sup.monitorOrphanPid('test:w1:1', 99999, handle, () => { });
|
|
191
|
-
expect(sup.get('test:w1:1')).toBeDefined();
|
|
192
|
-
expect(sup.activeCount).toBe(1);
|
|
193
|
-
sup.remove('test:w1:1');
|
|
194
|
-
});
|
|
195
|
-
it('calls onDead when PID dies (dead PID detected on first poll)', async () => {
|
|
196
|
-
const deadPid = 4_000_000;
|
|
197
|
-
const handle = { ...makeHandle('test:w1:dead', { pid: deadPid }), transport: 'acp-sdk' };
|
|
198
|
-
const deadPromise = new Promise((resolve) => {
|
|
199
|
-
sup.monitorOrphanPid('test:w1:dead', deadPid, handle, (exitCode) => resolve(exitCode));
|
|
200
|
-
});
|
|
201
|
-
// The 5s poll interval will detect the dead PID on first tick
|
|
202
|
-
const exitCode = await deadPromise;
|
|
203
|
-
expect(typeof exitCode).toBe('number');
|
|
204
|
-
sup.remove('test:w1:dead');
|
|
205
|
-
}, 10_000);
|
|
206
|
-
});
|
|
207
|
-
describe('multiple handle upserts', () => {
|
|
208
|
-
it('upsert replaces existing handle with same id', () => {
|
|
209
|
-
sup.registerAcpHandle(makeHandle('test:w1:1', { sessionId: 'old' }));
|
|
210
|
-
sup.registerAcpHandle(makeHandle('test:w1:1', { sessionId: 'new' }));
|
|
211
|
-
expect(sup.activeCount).toBe(1);
|
|
212
|
-
expect(sup.get('test:w1:1').sessionId).toBe('new');
|
|
213
|
-
});
|
|
214
|
-
});
|
|
215
|
-
});
|
|
216
|
-
//# sourceMappingURL=supervisor.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"supervisor.test.js","sourceRoot":"","sources":["../../src/manager/supervisor.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module worker-manager-impl.test
|
|
3
|
-
* @description WorkerManagerImpl 单元测试
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-03-29
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role test
|
|
13
|
-
* @layer manager
|
|
14
|
-
* @boundedContext worker-lifecycle
|
|
15
|
-
*/
|
|
16
|
-
export {};
|
|
17
|
-
//# sourceMappingURL=worker-manager-impl.test.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"worker-manager-impl.test.d.ts","sourceRoot":"","sources":["../../src/manager/worker-manager-impl.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
|