@coralai/sps-cli 0.49.0 → 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-C7skV1yt.js → index-Co0H5e5_.js} +14 -14
- package/dist/console-assets/index.html +1 -1
- package/package.json +1 -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/console-server/routes/chat.test.d.ts +0 -2
- package/dist/console-server/routes/chat.test.d.ts.map +0 -1
- package/dist/console-server/routes/chat.test.js +0 -131
- package/dist/console-server/routes/chat.test.js.map +0 -1
- package/dist/console-server/routes/projects.test.d.ts +0 -2
- package/dist/console-server/routes/projects.test.d.ts.map +0 -1
- package/dist/console-server/routes/projects.test.js +0 -150
- package/dist/console-server/routes/projects.test.js.map +0 -1
- package/dist/console-server/routes/system.test.d.ts +0 -2
- package/dist/console-server/routes/system.test.d.ts.map +0 -1
- package/dist/console-server/routes/system.test.js +0 -107
- package/dist/console-server/routes/system.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"}
|