@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.
Files changed (147) hide show
  1. package/dist/console-assets/assets/{index-BR3iEolY.js → index-Co0H5e5_.js} +85 -85
  2. package/dist/console-assets/assets/{index-lsG7ZrzD.css → index-DNKOkgDj.css} +1 -1
  3. package/dist/console-assets/index.html +2 -2
  4. package/dist/console-server/routes/system.d.ts.map +1 -1
  5. package/dist/console-server/routes/system.js +30 -0
  6. package/dist/console-server/routes/system.js.map +1 -1
  7. package/package.json +4 -1
  8. package/dist/commands/cardMarkComplete.test.d.ts +0 -2
  9. package/dist/commands/cardMarkComplete.test.d.ts.map +0 -1
  10. package/dist/commands/cardMarkComplete.test.js +0 -142
  11. package/dist/commands/cardMarkComplete.test.js.map +0 -1
  12. package/dist/commands/cardMarkStarted.test.d.ts +0 -2
  13. package/dist/commands/cardMarkStarted.test.d.ts.map +0 -1
  14. package/dist/commands/cardMarkStarted.test.js +0 -98
  15. package/dist/commands/cardMarkStarted.test.js.map +0 -1
  16. package/dist/commands/projectInit.test.d.ts +0 -2
  17. package/dist/commands/projectInit.test.d.ts.map +0 -1
  18. package/dist/commands/projectInit.test.js +0 -126
  19. package/dist/commands/projectInit.test.js.map +0 -1
  20. package/dist/commands/tick-heartbeat.test.d.ts +0 -2
  21. package/dist/commands/tick-heartbeat.test.d.ts.map +0 -1
  22. package/dist/commands/tick-heartbeat.test.js +0 -89
  23. package/dist/commands/tick-heartbeat.test.js.map +0 -1
  24. package/dist/core/checklist.test.d.ts +0 -2
  25. package/dist/core/checklist.test.d.ts.map +0 -1
  26. package/dist/core/checklist.test.js +0 -74
  27. package/dist/core/checklist.test.js.map +0 -1
  28. package/dist/core/config.test.d.ts +0 -2
  29. package/dist/core/config.test.d.ts.map +0 -1
  30. package/dist/core/config.test.js +0 -352
  31. package/dist/core/config.test.js.map +0 -1
  32. package/dist/core/lock.test.d.ts +0 -2
  33. package/dist/core/lock.test.d.ts.map +0 -1
  34. package/dist/core/lock.test.js +0 -118
  35. package/dist/core/lock.test.js.map +0 -1
  36. package/dist/core/markerFile.test.d.ts +0 -2
  37. package/dist/core/markerFile.test.d.ts.map +0 -1
  38. package/dist/core/markerFile.test.js +0 -111
  39. package/dist/core/markerFile.test.js.map +0 -1
  40. package/dist/core/queue.test.d.ts +0 -2
  41. package/dist/core/queue.test.d.ts.map +0 -1
  42. package/dist/core/queue.test.js +0 -114
  43. package/dist/core/queue.test.js.map +0 -1
  44. package/dist/core/sessionCleanup.test.d.ts +0 -2
  45. package/dist/core/sessionCleanup.test.d.ts.map +0 -1
  46. package/dist/core/sessionCleanup.test.js +0 -158
  47. package/dist/core/sessionCleanup.test.js.map +0 -1
  48. package/dist/core/shellEnv.test.d.ts +0 -2
  49. package/dist/core/shellEnv.test.d.ts.map +0 -1
  50. package/dist/core/shellEnv.test.js +0 -116
  51. package/dist/core/shellEnv.test.js.map +0 -1
  52. package/dist/core/skillStore.test.d.ts +0 -2
  53. package/dist/core/skillStore.test.d.ts.map +0 -1
  54. package/dist/core/skillStore.test.js +0 -203
  55. package/dist/core/skillStore.test.js.map +0 -1
  56. package/dist/core/state.test.d.ts +0 -2
  57. package/dist/core/state.test.d.ts.map +0 -1
  58. package/dist/core/state.test.js +0 -336
  59. package/dist/core/state.test.js.map +0 -1
  60. package/dist/engines/CloseoutEngine.d.ts +0 -72
  61. package/dist/engines/CloseoutEngine.d.ts.map +0 -1
  62. package/dist/engines/CloseoutEngine.js +0 -648
  63. package/dist/engines/CloseoutEngine.js.map +0 -1
  64. package/dist/engines/EventHandler.test.d.ts +0 -2
  65. package/dist/engines/EventHandler.test.d.ts.map +0 -1
  66. package/dist/engines/EventHandler.test.js +0 -169
  67. package/dist/engines/EventHandler.test.js.map +0 -1
  68. package/dist/engines/ExecutionEngine.d.ts +0 -125
  69. package/dist/engines/ExecutionEngine.d.ts.map +0 -1
  70. package/dist/engines/ExecutionEngine.js +0 -766
  71. package/dist/engines/ExecutionEngine.js.map +0 -1
  72. package/dist/engines/MonitorEngine.test.d.ts +0 -2
  73. package/dist/engines/MonitorEngine.test.d.ts.map +0 -1
  74. package/dist/engines/MonitorEngine.test.js +0 -355
  75. package/dist/engines/MonitorEngine.test.js.map +0 -1
  76. package/dist/engines/engine-pipeline-adapter.test.d.ts +0 -17
  77. package/dist/engines/engine-pipeline-adapter.test.d.ts.map +0 -1
  78. package/dist/engines/engine-pipeline-adapter.test.js +0 -707
  79. package/dist/engines/engine-pipeline-adapter.test.js.map +0 -1
  80. package/dist/interfaces/HookProvider.d.ts +0 -9
  81. package/dist/interfaces/HookProvider.d.ts.map +0 -1
  82. package/dist/interfaces/HookProvider.js +0 -2
  83. package/dist/interfaces/HookProvider.js.map +0 -1
  84. package/dist/manager/completion-judge.test.d.ts +0 -17
  85. package/dist/manager/completion-judge.test.d.ts.map +0 -1
  86. package/dist/manager/completion-judge.test.js +0 -233
  87. package/dist/manager/completion-judge.test.js.map +0 -1
  88. package/dist/manager/integration-queue.d.ts +0 -71
  89. package/dist/manager/integration-queue.d.ts.map +0 -1
  90. package/dist/manager/integration-queue.js +0 -137
  91. package/dist/manager/integration-queue.js.map +0 -1
  92. package/dist/manager/integration-queue.test.d.ts +0 -17
  93. package/dist/manager/integration-queue.test.d.ts.map +0 -1
  94. package/dist/manager/integration-queue.test.js +0 -210
  95. package/dist/manager/integration-queue.test.js.map +0 -1
  96. package/dist/manager/pm-client.d.ts +0 -10
  97. package/dist/manager/pm-client.d.ts.map +0 -1
  98. package/dist/manager/pm-client.js +0 -260
  99. package/dist/manager/pm-client.js.map +0 -1
  100. package/dist/manager/resource-limiter.d.ts +0 -56
  101. package/dist/manager/resource-limiter.d.ts.map +0 -1
  102. package/dist/manager/resource-limiter.js +0 -116
  103. package/dist/manager/resource-limiter.js.map +0 -1
  104. package/dist/manager/resource-limiter.test.d.ts +0 -17
  105. package/dist/manager/resource-limiter.test.d.ts.map +0 -1
  106. package/dist/manager/resource-limiter.test.js +0 -118
  107. package/dist/manager/resource-limiter.test.js.map +0 -1
  108. package/dist/manager/supervisor.test.d.ts +0 -17
  109. package/dist/manager/supervisor.test.d.ts.map +0 -1
  110. package/dist/manager/supervisor.test.js +0 -216
  111. package/dist/manager/supervisor.test.js.map +0 -1
  112. package/dist/manager/worker-manager-impl.test.d.ts +0 -17
  113. package/dist/manager/worker-manager-impl.test.d.ts.map +0 -1
  114. package/dist/manager/worker-manager-impl.test.js +0 -446
  115. package/dist/manager/worker-manager-impl.test.js.map +0 -1
  116. package/dist/providers/PlaneTaskBackend.d.ts +0 -83
  117. package/dist/providers/PlaneTaskBackend.d.ts.map +0 -1
  118. package/dist/providers/PlaneTaskBackend.js +0 -461
  119. package/dist/providers/PlaneTaskBackend.js.map +0 -1
  120. package/dist/providers/TrelloTaskBackend.d.ts +0 -64
  121. package/dist/providers/TrelloTaskBackend.d.ts.map +0 -1
  122. package/dist/providers/TrelloTaskBackend.js +0 -298
  123. package/dist/providers/TrelloTaskBackend.js.map +0 -1
  124. package/dist/providers/adapters/acp-fs-handlers.test.d.ts +0 -2
  125. package/dist/providers/adapters/acp-fs-handlers.test.d.ts.map +0 -1
  126. package/dist/providers/adapters/acp-fs-handlers.test.js +0 -80
  127. package/dist/providers/adapters/acp-fs-handlers.test.js.map +0 -1
  128. package/dist/providers/adapters/acp-permissions.test.d.ts +0 -2
  129. package/dist/providers/adapters/acp-permissions.test.d.ts.map +0 -1
  130. package/dist/providers/adapters/acp-permissions.test.js +0 -103
  131. package/dist/providers/adapters/acp-permissions.test.js.map +0 -1
  132. package/dist/providers/adapters/acp-session-accumulator.test.d.ts +0 -2
  133. package/dist/providers/adapters/acp-session-accumulator.test.d.ts.map +0 -1
  134. package/dist/providers/adapters/acp-session-accumulator.test.js +0 -88
  135. package/dist/providers/adapters/acp-session-accumulator.test.js.map +0 -1
  136. package/dist/providers/adapters/acp-terminal-manager.test.d.ts +0 -2
  137. package/dist/providers/adapters/acp-terminal-manager.test.d.ts.map +0 -1
  138. package/dist/providers/adapters/acp-terminal-manager.test.js +0 -86
  139. package/dist/providers/adapters/acp-terminal-manager.test.js.map +0 -1
  140. package/dist/providers/outputParser.test.d.ts +0 -2
  141. package/dist/providers/outputParser.test.d.ts.map +0 -1
  142. package/dist/providers/outputParser.test.js +0 -185
  143. package/dist/providers/outputParser.test.js.map +0 -1
  144. package/dist/test-setup.d.ts +0 -2
  145. package/dist/test-setup.d.ts.map +0 -1
  146. package/dist/test-setup.js +0 -27
  147. 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"}