@coralai/sps-cli 0.49.0 → 0.49.2

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 (164) hide show
  1. package/dist/commands/projectInit.d.ts.map +1 -1
  2. package/dist/commands/projectInit.js +13 -7
  3. package/dist/commands/projectInit.js.map +1 -1
  4. package/dist/console-assets/assets/index-9IBifmI1.js +486 -0
  5. package/dist/console-assets/assets/index-DRtlGwvq.css +10 -0
  6. package/dist/console-assets/index.html +2 -2
  7. package/dist/console-server/routes/projects.d.ts.map +1 -1
  8. package/dist/console-server/routes/projects.js +162 -1
  9. package/dist/console-server/routes/projects.js.map +1 -1
  10. package/package.json +1 -1
  11. package/dist/commands/cardMarkComplete.test.d.ts +0 -2
  12. package/dist/commands/cardMarkComplete.test.d.ts.map +0 -1
  13. package/dist/commands/cardMarkComplete.test.js +0 -142
  14. package/dist/commands/cardMarkComplete.test.js.map +0 -1
  15. package/dist/commands/cardMarkStarted.test.d.ts +0 -2
  16. package/dist/commands/cardMarkStarted.test.d.ts.map +0 -1
  17. package/dist/commands/cardMarkStarted.test.js +0 -98
  18. package/dist/commands/cardMarkStarted.test.js.map +0 -1
  19. package/dist/commands/projectInit.test.d.ts +0 -2
  20. package/dist/commands/projectInit.test.d.ts.map +0 -1
  21. package/dist/commands/projectInit.test.js +0 -126
  22. package/dist/commands/projectInit.test.js.map +0 -1
  23. package/dist/commands/tick-heartbeat.test.d.ts +0 -2
  24. package/dist/commands/tick-heartbeat.test.d.ts.map +0 -1
  25. package/dist/commands/tick-heartbeat.test.js +0 -89
  26. package/dist/commands/tick-heartbeat.test.js.map +0 -1
  27. package/dist/console-assets/assets/index-C7skV1yt.js +0 -338
  28. package/dist/console-assets/assets/index-DNKOkgDj.css +0 -10
  29. package/dist/console-server/routes/chat.test.d.ts +0 -2
  30. package/dist/console-server/routes/chat.test.d.ts.map +0 -1
  31. package/dist/console-server/routes/chat.test.js +0 -131
  32. package/dist/console-server/routes/chat.test.js.map +0 -1
  33. package/dist/console-server/routes/projects.test.d.ts +0 -2
  34. package/dist/console-server/routes/projects.test.d.ts.map +0 -1
  35. package/dist/console-server/routes/projects.test.js +0 -150
  36. package/dist/console-server/routes/projects.test.js.map +0 -1
  37. package/dist/console-server/routes/system.test.d.ts +0 -2
  38. package/dist/console-server/routes/system.test.d.ts.map +0 -1
  39. package/dist/console-server/routes/system.test.js +0 -107
  40. package/dist/console-server/routes/system.test.js.map +0 -1
  41. package/dist/core/checklist.test.d.ts +0 -2
  42. package/dist/core/checklist.test.d.ts.map +0 -1
  43. package/dist/core/checklist.test.js +0 -74
  44. package/dist/core/checklist.test.js.map +0 -1
  45. package/dist/core/config.test.d.ts +0 -2
  46. package/dist/core/config.test.d.ts.map +0 -1
  47. package/dist/core/config.test.js +0 -352
  48. package/dist/core/config.test.js.map +0 -1
  49. package/dist/core/lock.test.d.ts +0 -2
  50. package/dist/core/lock.test.d.ts.map +0 -1
  51. package/dist/core/lock.test.js +0 -118
  52. package/dist/core/lock.test.js.map +0 -1
  53. package/dist/core/markerFile.test.d.ts +0 -2
  54. package/dist/core/markerFile.test.d.ts.map +0 -1
  55. package/dist/core/markerFile.test.js +0 -111
  56. package/dist/core/markerFile.test.js.map +0 -1
  57. package/dist/core/queue.test.d.ts +0 -2
  58. package/dist/core/queue.test.d.ts.map +0 -1
  59. package/dist/core/queue.test.js +0 -114
  60. package/dist/core/queue.test.js.map +0 -1
  61. package/dist/core/sessionCleanup.test.d.ts +0 -2
  62. package/dist/core/sessionCleanup.test.d.ts.map +0 -1
  63. package/dist/core/sessionCleanup.test.js +0 -158
  64. package/dist/core/sessionCleanup.test.js.map +0 -1
  65. package/dist/core/shellEnv.test.d.ts +0 -2
  66. package/dist/core/shellEnv.test.d.ts.map +0 -1
  67. package/dist/core/shellEnv.test.js +0 -116
  68. package/dist/core/shellEnv.test.js.map +0 -1
  69. package/dist/core/skillStore.test.d.ts +0 -2
  70. package/dist/core/skillStore.test.d.ts.map +0 -1
  71. package/dist/core/skillStore.test.js +0 -203
  72. package/dist/core/skillStore.test.js.map +0 -1
  73. package/dist/core/state.test.d.ts +0 -2
  74. package/dist/core/state.test.d.ts.map +0 -1
  75. package/dist/core/state.test.js +0 -336
  76. package/dist/core/state.test.js.map +0 -1
  77. package/dist/engines/CloseoutEngine.d.ts +0 -72
  78. package/dist/engines/CloseoutEngine.d.ts.map +0 -1
  79. package/dist/engines/CloseoutEngine.js +0 -648
  80. package/dist/engines/CloseoutEngine.js.map +0 -1
  81. package/dist/engines/EventHandler.test.d.ts +0 -2
  82. package/dist/engines/EventHandler.test.d.ts.map +0 -1
  83. package/dist/engines/EventHandler.test.js +0 -169
  84. package/dist/engines/EventHandler.test.js.map +0 -1
  85. package/dist/engines/ExecutionEngine.d.ts +0 -125
  86. package/dist/engines/ExecutionEngine.d.ts.map +0 -1
  87. package/dist/engines/ExecutionEngine.js +0 -766
  88. package/dist/engines/ExecutionEngine.js.map +0 -1
  89. package/dist/engines/MonitorEngine.test.d.ts +0 -2
  90. package/dist/engines/MonitorEngine.test.d.ts.map +0 -1
  91. package/dist/engines/MonitorEngine.test.js +0 -355
  92. package/dist/engines/MonitorEngine.test.js.map +0 -1
  93. package/dist/engines/engine-pipeline-adapter.test.d.ts +0 -17
  94. package/dist/engines/engine-pipeline-adapter.test.d.ts.map +0 -1
  95. package/dist/engines/engine-pipeline-adapter.test.js +0 -707
  96. package/dist/engines/engine-pipeline-adapter.test.js.map +0 -1
  97. package/dist/interfaces/HookProvider.d.ts +0 -9
  98. package/dist/interfaces/HookProvider.d.ts.map +0 -1
  99. package/dist/interfaces/HookProvider.js +0 -2
  100. package/dist/interfaces/HookProvider.js.map +0 -1
  101. package/dist/manager/completion-judge.test.d.ts +0 -17
  102. package/dist/manager/completion-judge.test.d.ts.map +0 -1
  103. package/dist/manager/completion-judge.test.js +0 -233
  104. package/dist/manager/completion-judge.test.js.map +0 -1
  105. package/dist/manager/integration-queue.d.ts +0 -71
  106. package/dist/manager/integration-queue.d.ts.map +0 -1
  107. package/dist/manager/integration-queue.js +0 -137
  108. package/dist/manager/integration-queue.js.map +0 -1
  109. package/dist/manager/integration-queue.test.d.ts +0 -17
  110. package/dist/manager/integration-queue.test.d.ts.map +0 -1
  111. package/dist/manager/integration-queue.test.js +0 -210
  112. package/dist/manager/integration-queue.test.js.map +0 -1
  113. package/dist/manager/pm-client.d.ts +0 -10
  114. package/dist/manager/pm-client.d.ts.map +0 -1
  115. package/dist/manager/pm-client.js +0 -260
  116. package/dist/manager/pm-client.js.map +0 -1
  117. package/dist/manager/resource-limiter.d.ts +0 -56
  118. package/dist/manager/resource-limiter.d.ts.map +0 -1
  119. package/dist/manager/resource-limiter.js +0 -116
  120. package/dist/manager/resource-limiter.js.map +0 -1
  121. package/dist/manager/resource-limiter.test.d.ts +0 -17
  122. package/dist/manager/resource-limiter.test.d.ts.map +0 -1
  123. package/dist/manager/resource-limiter.test.js +0 -118
  124. package/dist/manager/resource-limiter.test.js.map +0 -1
  125. package/dist/manager/supervisor.test.d.ts +0 -17
  126. package/dist/manager/supervisor.test.d.ts.map +0 -1
  127. package/dist/manager/supervisor.test.js +0 -216
  128. package/dist/manager/supervisor.test.js.map +0 -1
  129. package/dist/manager/worker-manager-impl.test.d.ts +0 -17
  130. package/dist/manager/worker-manager-impl.test.d.ts.map +0 -1
  131. package/dist/manager/worker-manager-impl.test.js +0 -446
  132. package/dist/manager/worker-manager-impl.test.js.map +0 -1
  133. package/dist/providers/PlaneTaskBackend.d.ts +0 -83
  134. package/dist/providers/PlaneTaskBackend.d.ts.map +0 -1
  135. package/dist/providers/PlaneTaskBackend.js +0 -461
  136. package/dist/providers/PlaneTaskBackend.js.map +0 -1
  137. package/dist/providers/TrelloTaskBackend.d.ts +0 -64
  138. package/dist/providers/TrelloTaskBackend.d.ts.map +0 -1
  139. package/dist/providers/TrelloTaskBackend.js +0 -298
  140. package/dist/providers/TrelloTaskBackend.js.map +0 -1
  141. package/dist/providers/adapters/acp-fs-handlers.test.d.ts +0 -2
  142. package/dist/providers/adapters/acp-fs-handlers.test.d.ts.map +0 -1
  143. package/dist/providers/adapters/acp-fs-handlers.test.js +0 -80
  144. package/dist/providers/adapters/acp-fs-handlers.test.js.map +0 -1
  145. package/dist/providers/adapters/acp-permissions.test.d.ts +0 -2
  146. package/dist/providers/adapters/acp-permissions.test.d.ts.map +0 -1
  147. package/dist/providers/adapters/acp-permissions.test.js +0 -103
  148. package/dist/providers/adapters/acp-permissions.test.js.map +0 -1
  149. package/dist/providers/adapters/acp-session-accumulator.test.d.ts +0 -2
  150. package/dist/providers/adapters/acp-session-accumulator.test.d.ts.map +0 -1
  151. package/dist/providers/adapters/acp-session-accumulator.test.js +0 -88
  152. package/dist/providers/adapters/acp-session-accumulator.test.js.map +0 -1
  153. package/dist/providers/adapters/acp-terminal-manager.test.d.ts +0 -2
  154. package/dist/providers/adapters/acp-terminal-manager.test.d.ts.map +0 -1
  155. package/dist/providers/adapters/acp-terminal-manager.test.js +0 -86
  156. package/dist/providers/adapters/acp-terminal-manager.test.js.map +0 -1
  157. package/dist/providers/outputParser.test.d.ts +0 -2
  158. package/dist/providers/outputParser.test.d.ts.map +0 -1
  159. package/dist/providers/outputParser.test.js +0 -185
  160. package/dist/providers/outputParser.test.js.map +0 -1
  161. package/dist/test-setup.d.ts +0 -2
  162. package/dist/test-setup.d.ts.map +0 -1
  163. package/dist/test-setup.js +0 -27
  164. package/dist/test-setup.js.map +0 -1
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=acp-terminal-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acp-terminal-manager.test.d.ts","sourceRoot":"","sources":["../../../src/providers/adapters/acp-terminal-manager.test.ts"],"names":[],"mappings":""}
@@ -1,86 +0,0 @@
1
- /**
2
- * @module acp-terminal-manager.test
3
- * @description ACP 终端管理器的单元测试
4
- *
5
- * @author eddy
6
- * @organization wykj
7
- * @ownership wykj/eddy
8
- *
9
- * @created 2026-03-31
10
- * @updated 2026-04-03
11
- *
12
- * @role test-setup
13
- * @layer provider
14
- * @boundedContext acp
15
- */
16
- import { describe, expect, it } from 'vitest';
17
- import { TerminalManager } from './acp-terminal-manager.js';
18
- describe('TerminalManager', () => {
19
- describe('createTerminal', () => {
20
- it('creates terminal and returns terminalId', async () => {
21
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
22
- const result = await tm.createTerminal({ sessionId: 's1', command: 'echo', args: ['hello'] });
23
- expect(result.terminalId).toBeDefined();
24
- expect(typeof result.terminalId).toBe('string');
25
- await tm.releaseTerminal({ sessionId: 's1', terminalId: result.terminalId });
26
- });
27
- it('denies in deny-all mode', async () => {
28
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'deny-all' });
29
- await expect(tm.createTerminal({ sessionId: 's1', command: 'echo', args: ['hello'] })).rejects.toThrow('denied');
30
- });
31
- });
32
- describe('terminalOutput', () => {
33
- it('captures stdout', async () => {
34
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
35
- const { terminalId } = await tm.createTerminal({ sessionId: 's1', command: 'echo', args: ['hello world'] });
36
- // Wait for process to finish
37
- await tm.waitForTerminalExit({ sessionId: 's1', terminalId });
38
- const output = await tm.terminalOutput({ sessionId: 's1', terminalId });
39
- expect(output.output).toContain('hello world');
40
- expect(output.truncated).toBe(false);
41
- expect(output.exitStatus?.exitCode).toBe(0);
42
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
43
- });
44
- });
45
- describe('waitForTerminalExit', () => {
46
- it('returns exit code', async () => {
47
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
48
- const { terminalId } = await tm.createTerminal({ sessionId: 's1', command: 'true' });
49
- const result = await tm.waitForTerminalExit({ sessionId: 's1', terminalId });
50
- expect(result.exitCode).toBe(0);
51
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
52
- });
53
- it('captures non-zero exit code', async () => {
54
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
55
- const { terminalId } = await tm.createTerminal({ sessionId: 's1', command: 'false' });
56
- const result = await tm.waitForTerminalExit({ sessionId: 's1', terminalId });
57
- expect(result.exitCode).toBe(1);
58
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
59
- });
60
- });
61
- describe('killTerminal', () => {
62
- it('kills running process', async () => {
63
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
64
- const { terminalId } = await tm.createTerminal({ sessionId: 's1', command: 'sleep', args: ['60'] });
65
- await tm.killTerminal({ sessionId: 's1', terminalId });
66
- const output = await tm.terminalOutput({ sessionId: 's1', terminalId });
67
- expect(output.exitStatus).toBeDefined();
68
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
69
- });
70
- });
71
- describe('releaseTerminal', () => {
72
- it('releases and removes terminal', async () => {
73
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
74
- const { terminalId } = await tm.createTerminal({ sessionId: 's1', command: 'echo', args: ['hi'] });
75
- await tm.waitForTerminalExit({ sessionId: 's1', terminalId });
76
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
77
- // Second release is a no-op
78
- await tm.releaseTerminal({ sessionId: 's1', terminalId });
79
- });
80
- it('throws for unknown terminal on output', async () => {
81
- const tm = new TerminalManager({ cwd: '/tmp', permissionMode: 'approve-all' });
82
- await expect(tm.terminalOutput({ sessionId: 's1', terminalId: 'nonexistent' })).rejects.toThrow('Unknown terminal');
83
- });
84
- });
85
- });
86
- //# sourceMappingURL=acp-terminal-manager.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acp-terminal-manager.test.js","sourceRoot":"","sources":["../../../src/providers/adapters/acp-terminal-manager.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=outputParser.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"outputParser.test.d.ts","sourceRoot":"","sources":["../../src/providers/outputParser.test.ts"],"names":[],"mappings":""}
@@ -1,185 +0,0 @@
1
- /**
2
- * @module outputParser.test
3
- * @description 输出解析工具的单元测试
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-setup
13
- * @layer provider
14
- * @boundedContext worker-runtime
15
- */
16
- import { mkdtempSync, rmSync, writeFileSync } from 'node:fs';
17
- import { tmpdir } from 'node:os';
18
- import { join } from 'node:path';
19
- import { afterEach, beforeEach, describe, expect, it } from 'vitest';
20
- import { extractLastAssistantText, fileSize, isProcessAlive, parseClaudeSessionId, tailFile, } from './outputParser.js';
21
- // ─── Helpers ──────────────────────────────────────────────────────
22
- function makeTempDir() {
23
- return mkdtempSync(join(tmpdir(), 'sps-parser-test-'));
24
- }
25
- // ─── Tests ────────────────────────────────────────────────────────
26
- describe('tailFile', () => {
27
- let tempDir;
28
- beforeEach(() => { tempDir = makeTempDir(); });
29
- afterEach(() => { rmSync(tempDir, { recursive: true, force: true }); });
30
- it('returns empty string for nonexistent file', () => {
31
- expect(tailFile('/tmp/does-not-exist-12345.txt', 10)).toBe('');
32
- });
33
- it('returns last N lines', () => {
34
- const file = join(tempDir, 'log.txt');
35
- writeFileSync(file, 'line1\nline2\nline3\nline4\nline5\n');
36
- const result = tailFile(file, 2);
37
- expect(result).toBe('line5\n'); // last 2 entries include trailing empty
38
- });
39
- it('returns entire file when fewer lines than requested', () => {
40
- const file = join(tempDir, 'short.txt');
41
- writeFileSync(file, 'only\n');
42
- const result = tailFile(file, 100);
43
- expect(result).toContain('only');
44
- });
45
- });
46
- describe('fileSize', () => {
47
- let tempDir;
48
- beforeEach(() => { tempDir = makeTempDir(); });
49
- afterEach(() => { rmSync(tempDir, { recursive: true, force: true }); });
50
- it('returns 0 for nonexistent file', () => {
51
- expect(fileSize('/tmp/no-file-12345')).toBe(0);
52
- });
53
- it('returns correct size', () => {
54
- const file = join(tempDir, 'data.bin');
55
- writeFileSync(file, 'hello world'); // 11 bytes
56
- expect(fileSize(file)).toBe(11);
57
- });
58
- it('returns 0 for empty file', () => {
59
- const file = join(tempDir, 'empty.txt');
60
- writeFileSync(file, '');
61
- expect(fileSize(file)).toBe(0);
62
- });
63
- });
64
- describe('parseClaudeSessionId', () => {
65
- let tempDir;
66
- beforeEach(() => { tempDir = makeTempDir(); });
67
- afterEach(() => { rmSync(tempDir, { recursive: true, force: true }); });
68
- it('returns null for nonexistent file', () => {
69
- expect(parseClaudeSessionId('/tmp/no-file-12345')).toBeNull();
70
- });
71
- it('extracts session_id from stream-json output', () => {
72
- const file = join(tempDir, 'output.jsonl');
73
- writeFileSync(file, [
74
- '{"type":"system","message":"starting"}',
75
- '{"type":"assistant","message":{"content":"hello"}}',
76
- '{"type":"result","result":"done","session_id":"sess-abc-123"}',
77
- ].join('\n'));
78
- expect(parseClaudeSessionId(file)).toBe('sess-abc-123');
79
- });
80
- it('returns null when no session_id present', () => {
81
- const file = join(tempDir, 'output.jsonl');
82
- writeFileSync(file, '{"type":"result","result":"done"}\n');
83
- expect(parseClaudeSessionId(file)).toBeNull();
84
- });
85
- it('skips non-JSON lines gracefully', () => {
86
- const file = join(tempDir, 'mixed.jsonl');
87
- writeFileSync(file, [
88
- 'not json at all',
89
- '{"session_id":"found-it"}',
90
- 'another bad line',
91
- ].join('\n'));
92
- expect(parseClaudeSessionId(file)).toBe('found-it');
93
- });
94
- it('returns first session_id found', () => {
95
- const file = join(tempDir, 'multi.jsonl');
96
- writeFileSync(file, [
97
- '{"session_id":"first"}',
98
- '{"session_id":"second"}',
99
- ].join('\n'));
100
- expect(parseClaudeSessionId(file)).toBe('first');
101
- });
102
- });
103
- describe('isProcessAlive', () => {
104
- it('returns true for current process', () => {
105
- expect(isProcessAlive(process.pid)).toBe(true);
106
- });
107
- it('returns false for invalid PID', () => {
108
- expect(isProcessAlive(0)).toBe(false);
109
- expect(isProcessAlive(-1)).toBe(false);
110
- });
111
- it('returns false for non-existent PID', () => {
112
- // Use a very high PID that almost certainly doesn't exist
113
- expect(isProcessAlive(4_000_000)).toBe(false);
114
- });
115
- });
116
- describe('extractLastAssistantText', () => {
117
- let tempDir;
118
- beforeEach(() => { tempDir = makeTempDir(); });
119
- afterEach(() => { rmSync(tempDir, { recursive: true, force: true }); });
120
- it('returns empty string for nonexistent file', () => {
121
- expect(extractLastAssistantText('/tmp/no-file-12345')).toBe('');
122
- });
123
- it('extracts text from assistant message with content array', () => {
124
- const file = join(tempDir, 'output.jsonl');
125
- writeFileSync(file, JSON.stringify({
126
- type: 'assistant',
127
- message: {
128
- content: [
129
- { type: 'text', text: 'I have completed the task.' },
130
- ],
131
- },
132
- }) + '\n');
133
- expect(extractLastAssistantText(file)).toBe('I have completed the task.');
134
- });
135
- it('extracts text from assistant message with string content', () => {
136
- const file = join(tempDir, 'output.jsonl');
137
- writeFileSync(file, JSON.stringify({
138
- type: 'assistant',
139
- message: { content: 'Done! All tasks finished.' },
140
- }) + '\n');
141
- expect(extractLastAssistantText(file)).toBe('Done! All tasks finished.');
142
- });
143
- it('extracts from result type', () => {
144
- const file = join(tempDir, 'output.jsonl');
145
- writeFileSync(file, JSON.stringify({
146
- type: 'result',
147
- result: 'Task completed successfully 🎉',
148
- }) + '\n');
149
- expect(extractLastAssistantText(file)).toBe('Task completed successfully 🎉');
150
- });
151
- it('returns last assistant text when multiple messages', () => {
152
- const file = join(tempDir, 'output.jsonl');
153
- const lines = [
154
- JSON.stringify({ type: 'assistant', message: { content: 'Starting...' } }),
155
- JSON.stringify({ type: 'assistant', message: { content: 'Working...' } }),
156
- JSON.stringify({ type: 'assistant', message: { content: '全部完成' } }),
157
- ];
158
- writeFileSync(file, lines.join('\n') + '\n');
159
- expect(extractLastAssistantText(file)).toBe('全部完成');
160
- });
161
- it('accumulates content_block_delta text', () => {
162
- const file = join(tempDir, 'output.jsonl');
163
- const lines = [
164
- JSON.stringify({ type: 'content_block_delta', delta: { text: 'Hello ' } }),
165
- JSON.stringify({ type: 'content_block_delta', delta: { text: 'world' } }),
166
- ];
167
- writeFileSync(file, lines.join('\n') + '\n');
168
- expect(extractLastAssistantText(file)).toBe('Hello world');
169
- });
170
- it('skips non-JSON lines without error', () => {
171
- const file = join(tempDir, 'mixed.jsonl');
172
- writeFileSync(file, [
173
- 'garbage line',
174
- JSON.stringify({ type: 'assistant', message: { content: 'valid' } }),
175
- 'more garbage',
176
- ].join('\n') + '\n');
177
- expect(extractLastAssistantText(file)).toBe('valid');
178
- });
179
- it('returns empty string for empty file', () => {
180
- const file = join(tempDir, 'empty.jsonl');
181
- writeFileSync(file, '');
182
- expect(extractLastAssistantText(file)).toBe('');
183
- });
184
- });
185
- //# sourceMappingURL=outputParser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"outputParser.test.js","sourceRoot":"","sources":["../../src/providers/outputParser.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=test-setup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-setup.d.ts","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":""}
@@ -1,27 +0,0 @@
1
- /**
2
- * @module test-setup
3
- * @description Vitest 全局配置,抑制测试中的 stderr 日志噪音
4
- *
5
- * @author eddy
6
- * @organization wykj
7
- * @ownership wykj/eddy
8
- *
9
- * @created 2026-03-29
10
- * @updated 2026-03-29
11
- *
12
- * @role test-setup
13
- * @layer entry
14
- * @boundedContext test
15
- */
16
- import { vi } from 'vitest';
17
- const originalWrite = process.stderr.write.bind(process.stderr);
18
- vi.spyOn(process.stderr, 'write').mockImplementation((chunk, ...rest) => {
19
- const msg = typeof chunk === 'string' ? chunk : '';
20
- // Suppress known log prefixes from production code
21
- if (/^\[(worker-manager|supervisor|completion-judge|integration-queue)\]/.test(msg)) {
22
- return true;
23
- }
24
- // Pass through everything else (test framework output, actual errors)
25
- return originalWrite(chunk, ...rest);
26
- });
27
- //# sourceMappingURL=test-setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"test-setup.js","sourceRoot":"","sources":["../src/test-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AAEhE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,CAAC,KAAU,EAAE,GAAG,IAAW,EAAE,EAAE;IAClF,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,mDAAmD;IACnD,IAAI,qEAAqE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,sEAAsE;IACtE,OAAQ,aAAqB,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC"}