@coralai/sps-cli 0.49.16 → 0.50.0

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/cardAdd.d.ts.map +1 -1
  2. package/dist/commands/cardAdd.js +47 -67
  3. package/dist/commands/cardAdd.js.map +1 -1
  4. package/dist/commands/cardMarkComplete.js +1 -1
  5. package/dist/commands/cardMarkComplete.js.map +1 -1
  6. package/dist/commands/cardMarkStarted.js +1 -1
  7. package/dist/commands/cardMarkStarted.js.map +1 -1
  8. package/dist/commands/consoleCommand.js +3 -3
  9. package/dist/commands/consoleCommand.js.map +1 -1
  10. package/dist/commands/hookCommand.d.ts +25 -0
  11. package/dist/commands/hookCommand.d.ts.map +1 -1
  12. package/dist/commands/hookCommand.js +2 -2
  13. package/dist/commands/hookCommand.js.map +1 -1
  14. package/dist/console/index.d.ts +15 -0
  15. package/dist/console/index.d.ts.map +1 -0
  16. package/dist/console/index.js +177 -0
  17. package/dist/console/index.js.map +1 -0
  18. package/dist/console/lib/lockFile.d.ts +17 -0
  19. package/dist/console/lib/lockFile.d.ts.map +1 -0
  20. package/dist/console/lib/lockFile.js +61 -0
  21. package/dist/console/lib/lockFile.js.map +1 -0
  22. package/dist/console/lib/portPicker.d.ts +3 -0
  23. package/dist/console/lib/portPicker.d.ts.map +1 -0
  24. package/dist/console/lib/portPicker.js +25 -0
  25. package/dist/console/lib/portPicker.js.map +1 -0
  26. package/dist/console/lib/resultToJson.d.ts +18 -0
  27. package/dist/console/lib/resultToJson.d.ts.map +1 -0
  28. package/dist/console/lib/resultToJson.js +19 -0
  29. package/dist/console/lib/resultToJson.js.map +1 -0
  30. package/dist/console/routes/cards.d.ts +26 -0
  31. package/dist/console/routes/cards.d.ts.map +1 -0
  32. package/dist/console/routes/cards.js +85 -0
  33. package/dist/console/routes/cards.js.map +1 -0
  34. package/dist/console/routes/chat.d.ts +36 -0
  35. package/dist/console/routes/chat.d.ts.map +1 -0
  36. package/dist/console/routes/chat.js +458 -0
  37. package/dist/console/routes/chat.js.map +1 -0
  38. package/dist/console/routes/logs.d.ts +17 -0
  39. package/dist/console/routes/logs.d.ts.map +1 -0
  40. package/dist/console/routes/logs.js +159 -0
  41. package/dist/console/routes/logs.js.map +1 -0
  42. package/dist/console/routes/pipeline.d.ts +10 -0
  43. package/dist/console/routes/pipeline.d.ts.map +1 -0
  44. package/dist/console/routes/pipeline.js +39 -0
  45. package/dist/console/routes/pipeline.js.map +1 -0
  46. package/dist/console/routes/projects.d.ts +15 -0
  47. package/dist/console/routes/projects.d.ts.map +1 -0
  48. package/dist/console/routes/projects.js +132 -0
  49. package/dist/console/routes/projects.js.map +1 -0
  50. package/dist/console/routes/skills.d.ts +4 -0
  51. package/dist/console/routes/skills.d.ts.map +1 -0
  52. package/dist/console/routes/skills.js +91 -0
  53. package/dist/console/routes/skills.js.map +1 -0
  54. package/dist/console/routes/system.d.ts +7 -0
  55. package/dist/console/routes/system.d.ts.map +1 -0
  56. package/dist/console/routes/system.js +288 -0
  57. package/dist/console/routes/system.js.map +1 -0
  58. package/dist/console/routes/workers.d.ts +5 -0
  59. package/dist/console/routes/workers.d.ts.map +1 -0
  60. package/dist/console/routes/workers.js +149 -0
  61. package/dist/console/routes/workers.js.map +1 -0
  62. package/dist/console/sse/eventBus.d.ts +25 -0
  63. package/dist/console/sse/eventBus.d.ts.map +1 -0
  64. package/dist/console/sse/eventBus.js +32 -0
  65. package/dist/console/sse/eventBus.js.map +1 -0
  66. package/dist/console/sse/projectStream.d.ts +13 -0
  67. package/dist/console/sse/projectStream.d.ts.map +1 -0
  68. package/dist/console/sse/projectStream.js +84 -0
  69. package/dist/console/sse/projectStream.js.map +1 -0
  70. package/dist/infra/chokidarWatchers.d.ts +38 -0
  71. package/dist/infra/chokidarWatchers.d.ts.map +1 -0
  72. package/dist/infra/chokidarWatchers.js +213 -0
  73. package/dist/infra/chokidarWatchers.js.map +1 -0
  74. package/dist/infra/clock.d.ts +35 -0
  75. package/dist/infra/clock.d.ts.map +1 -0
  76. package/dist/infra/clock.js +45 -0
  77. package/dist/infra/clock.js.map +1 -0
  78. package/dist/infra/filesystem.d.ts +89 -0
  79. package/dist/infra/filesystem.d.ts.map +1 -0
  80. package/dist/infra/filesystem.js +247 -0
  81. package/dist/infra/filesystem.js.map +1 -0
  82. package/dist/infra/spawn.d.ts +67 -0
  83. package/dist/infra/spawn.d.ts.map +1 -0
  84. package/dist/infra/spawn.js +116 -0
  85. package/dist/infra/spawn.js.map +1 -0
  86. package/dist/infra/sseBus.d.ts +36 -0
  87. package/dist/infra/sseBus.d.ts.map +1 -0
  88. package/dist/infra/sseBus.js +72 -0
  89. package/dist/infra/sseBus.js.map +1 -0
  90. package/dist/interfaces/ACPClient.d.ts +1 -1
  91. package/dist/interfaces/ACPClient.d.ts.map +1 -1
  92. package/dist/main.js +1 -1
  93. package/dist/main.js.map +1 -1
  94. package/dist/providers/LocalACPClient.d.ts +1 -1
  95. package/dist/providers/LocalACPClient.d.ts.map +1 -1
  96. package/dist/services/CardService.d.ts +86 -0
  97. package/dist/services/CardService.d.ts.map +1 -0
  98. package/dist/services/CardService.js +313 -0
  99. package/dist/services/CardService.js.map +1 -0
  100. package/dist/services/ChatService.d.ts +62 -0
  101. package/dist/services/ChatService.d.ts.map +1 -0
  102. package/dist/services/ChatService.js +157 -0
  103. package/dist/services/ChatService.js.map +1 -0
  104. package/dist/services/LogService.d.ts +46 -0
  105. package/dist/services/LogService.d.ts.map +1 -0
  106. package/dist/services/LogService.js +185 -0
  107. package/dist/services/LogService.js.map +1 -0
  108. package/dist/services/PipelineService.d.ts +71 -0
  109. package/dist/services/PipelineService.d.ts.map +1 -0
  110. package/dist/services/PipelineService.js +349 -0
  111. package/dist/services/PipelineService.js.map +1 -0
  112. package/dist/services/ProjectService.d.ts +105 -0
  113. package/dist/services/ProjectService.d.ts.map +1 -0
  114. package/dist/services/ProjectService.js +346 -0
  115. package/dist/services/ProjectService.js.map +1 -0
  116. package/dist/services/SkillService.d.ts +38 -0
  117. package/dist/services/SkillService.d.ts.map +1 -0
  118. package/dist/services/SkillService.js +301 -0
  119. package/dist/services/SkillService.js.map +1 -0
  120. package/dist/services/WorkerService.d.ts +83 -0
  121. package/dist/services/WorkerService.d.ts.map +1 -0
  122. package/dist/services/WorkerService.js +262 -0
  123. package/dist/services/WorkerService.js.map +1 -0
  124. package/dist/services/container.d.ts +47 -0
  125. package/dist/services/container.d.ts.map +1 -0
  126. package/dist/services/container.js +77 -0
  127. package/dist/services/container.js.map +1 -0
  128. package/dist/services/defaults.d.ts +15 -0
  129. package/dist/services/defaults.d.ts.map +1 -0
  130. package/dist/services/defaults.js +11 -0
  131. package/dist/services/defaults.js.map +1 -0
  132. package/dist/services/executors.d.ts +38 -0
  133. package/dist/services/executors.d.ts.map +1 -0
  134. package/dist/services/executors.js +157 -0
  135. package/dist/services/executors.js.map +1 -0
  136. package/dist/services/ports.d.ts +17 -0
  137. package/dist/services/ports.d.ts.map +1 -0
  138. package/dist/services/ports.js +2 -0
  139. package/dist/services/ports.js.map +1 -0
  140. package/dist/shared/domainEvents.d.ts +118 -0
  141. package/dist/shared/domainEvents.d.ts.map +1 -0
  142. package/dist/shared/domainEvents.js +40 -0
  143. package/dist/shared/domainEvents.js.map +1 -0
  144. package/dist/shared/errors.d.ts +59 -0
  145. package/dist/shared/errors.d.ts.map +1 -0
  146. package/dist/shared/errors.js +79 -0
  147. package/dist/shared/errors.js.map +1 -0
  148. package/dist/shared/result.d.ts +51 -0
  149. package/dist/shared/result.d.ts.map +1 -0
  150. package/dist/shared/result.js +48 -0
  151. package/dist/shared/result.js.map +1 -0
  152. package/dist/shared/runtimePaths.d.ts +78 -0
  153. package/dist/shared/runtimePaths.d.ts.map +1 -0
  154. package/dist/shared/runtimePaths.js +179 -0
  155. package/dist/shared/runtimePaths.js.map +1 -0
  156. package/dist/shared/runtimeSchemas.d.ts +324 -0
  157. package/dist/shared/runtimeSchemas.d.ts.map +1 -0
  158. package/dist/shared/runtimeSchemas.js +124 -0
  159. package/dist/shared/runtimeSchemas.js.map +1 -0
  160. package/dist/shared/types.d.ts +12 -0
  161. package/dist/shared/types.d.ts.map +1 -0
  162. package/dist/shared/types.js +2 -0
  163. package/dist/shared/types.js.map +1 -0
  164. package/package.json +1 -1
@@ -0,0 +1,247 @@
1
+ /**
2
+ * @module infra/filesystem
3
+ * @description FileSystem port —— 文件系统抽象 + 真/内存实现
4
+ *
5
+ * @layer infra
6
+ *
7
+ * Service 层不直接 import fs;通过这个端口操作。
8
+ * 目的:
9
+ * 1. 可单测(InMemoryFileSystem 零 IO)
10
+ * 2. 原子写 / 目录扫描等操作有统一 API,不再各处写 writeFileSync + rename
11
+ * 3. 未来想换成云端 KV 或远程存储,port 抽象让上层无感
12
+ */
13
+ import { existsSync, mkdirSync, readdirSync, readFileSync, renameSync, rmSync, statSync, unlinkSync, writeFileSync, } from 'node:fs';
14
+ import { dirname } from 'node:path';
15
+ // ─── 真文件系统 ────────────────────────────────────────────────────
16
+ export class NodeFileSystem {
17
+ exists(path) {
18
+ return existsSync(path);
19
+ }
20
+ stat(path) {
21
+ try {
22
+ const s = statSync(path);
23
+ return {
24
+ size: s.size,
25
+ mtimeMs: s.mtimeMs,
26
+ isDirectory: s.isDirectory(),
27
+ isFile: s.isFile(),
28
+ };
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ readFile(path) {
35
+ return readFileSync(path, 'utf-8');
36
+ }
37
+ writeFileAtomic(path, content) {
38
+ const tmp = `${path}.tmp`;
39
+ const dir = dirname(path);
40
+ if (!existsSync(dir))
41
+ mkdirSync(dir, { recursive: true });
42
+ writeFileSync(tmp, content);
43
+ renameSync(tmp, path);
44
+ }
45
+ writeFile(path, content) {
46
+ const dir = dirname(path);
47
+ if (!existsSync(dir))
48
+ mkdirSync(dir, { recursive: true });
49
+ writeFileSync(path, content);
50
+ }
51
+ readDir(path) {
52
+ const entries = readdirSync(path, { withFileTypes: true });
53
+ return entries.map((e) => ({
54
+ name: e.name,
55
+ isDirectory: e.isDirectory(),
56
+ isFile: e.isFile(),
57
+ }));
58
+ }
59
+ mkdir(path, opts = {}) {
60
+ mkdirSync(path, { recursive: opts.recursive ?? false });
61
+ }
62
+ unlink(path) {
63
+ unlinkSync(path);
64
+ }
65
+ rm(path, opts = {}) {
66
+ rmSync(path, { recursive: opts.recursive ?? false, force: opts.force ?? false });
67
+ }
68
+ rename(from, to) {
69
+ renameSync(from, to);
70
+ }
71
+ }
72
+ /**
73
+ * 简版内存 FS —— 支持 absolute path 的读写/扫描/删除。
74
+ * 用于 Service 层单测:构造场景快、清理干净、不依赖 tmp 目录。
75
+ * 不追求和 POSIX 100% 语义一致,够测试用即可。
76
+ */
77
+ export class InMemoryFileSystem {
78
+ root;
79
+ counter = 0;
80
+ nowFn;
81
+ /**
82
+ * @param opts.nowFn 自定义"写入时的 mtime 生成器"。默认用 Date.now()(和 Node FS 语义一致)。
83
+ * 测试想要精确控制 mtime 可以传 FakeClock 的 now 方法。
84
+ */
85
+ constructor(opts = {}) {
86
+ this.nowFn = opts.nowFn ?? (() => Date.now());
87
+ this.root = { kind: 'dir', mtimeMs: this.nowFn(), children: new Map() };
88
+ }
89
+ tick() {
90
+ // 递增计数避免同毫秒下两次 write 得到相同 mtimeMs(测试偶有)
91
+ this.counter += 1;
92
+ return this.nowFn() + (this.counter % 1000) * 0.001;
93
+ }
94
+ walk(path, createDirs) {
95
+ const parts = path.split('/').filter(Boolean);
96
+ let node = this.root;
97
+ for (let i = 0; i < parts.length; i++) {
98
+ if (node.kind !== 'dir' || !node.children)
99
+ return null;
100
+ const name = parts[i];
101
+ let child = node.children.get(name);
102
+ if (!child) {
103
+ if (!createDirs)
104
+ return null;
105
+ if (i === parts.length - 1)
106
+ return null;
107
+ child = { kind: 'dir', mtimeMs: this.tick(), children: new Map() };
108
+ node.children.set(name, child);
109
+ }
110
+ node = child;
111
+ }
112
+ return node;
113
+ }
114
+ /**
115
+ * 找到 path 的父目录节点 + basename;父不存在时按 createDirs 决定是否补齐。
116
+ * 返回 null 仅当 path 为空。
117
+ */
118
+ walkParent(path, createDirs = false) {
119
+ const parts = path.split('/').filter(Boolean);
120
+ if (parts.length === 0)
121
+ return null;
122
+ const name = parts[parts.length - 1];
123
+ const parentParts = parts.slice(0, -1);
124
+ let node = this.root;
125
+ for (const p of parentParts) {
126
+ if (!node.children)
127
+ node.children = new Map();
128
+ let next = node.children.get(p);
129
+ if (!next) {
130
+ if (!createDirs)
131
+ return null;
132
+ next = { kind: 'dir', mtimeMs: this.tick(), children: new Map() };
133
+ node.children.set(p, next);
134
+ }
135
+ if (next.kind !== 'dir')
136
+ return null;
137
+ node = next;
138
+ }
139
+ return { parent: node, name };
140
+ }
141
+ exists(path) {
142
+ return this.walk(path, false) !== null;
143
+ }
144
+ stat(path) {
145
+ const n = this.walk(path, false);
146
+ if (!n)
147
+ return null;
148
+ return {
149
+ size: n.kind === 'file' ? (n.content?.length ?? 0) : 0,
150
+ mtimeMs: n.mtimeMs,
151
+ isDirectory: n.kind === 'dir',
152
+ isFile: n.kind === 'file',
153
+ };
154
+ }
155
+ readFile(path) {
156
+ const n = this.walk(path, false);
157
+ if (!n || n.kind !== 'file' || n.content === undefined) {
158
+ throw new Error(`ENOENT: no such file, ${path}`);
159
+ }
160
+ return n.content;
161
+ }
162
+ writeFileAtomic(path, content) {
163
+ this.writeFile(path, content);
164
+ }
165
+ writeFile(path, content) {
166
+ const info = this.walkParent(path, true);
167
+ if (!info)
168
+ throw new Error(`invalid path: ${path}`);
169
+ if (!info.parent.children)
170
+ info.parent.children = new Map();
171
+ info.parent.children.set(info.name, { kind: 'file', content, mtimeMs: this.tick() });
172
+ }
173
+ readDir(path) {
174
+ const n = this.walk(path, false);
175
+ if (!n || n.kind !== 'dir' || !n.children) {
176
+ throw new Error(`ENOENT: not a directory, ${path}`);
177
+ }
178
+ return [...n.children.entries()].map(([name, e]) => ({
179
+ name,
180
+ isDirectory: e.kind === 'dir',
181
+ isFile: e.kind === 'file',
182
+ }));
183
+ }
184
+ mkdir(path, opts = {}) {
185
+ const parts = path.split('/').filter(Boolean);
186
+ let node = this.root;
187
+ for (let i = 0; i < parts.length; i++) {
188
+ if (!node.children)
189
+ node.children = new Map();
190
+ const name = parts[i];
191
+ const child = node.children.get(name);
192
+ if (child) {
193
+ if (child.kind !== 'dir')
194
+ throw new Error(`exists but not a dir: ${name}`);
195
+ node = child;
196
+ continue;
197
+ }
198
+ if (!opts.recursive && i !== parts.length - 1) {
199
+ throw new Error(`ENOENT: parent does not exist: ${parts.slice(0, i).join('/')}`);
200
+ }
201
+ const fresh = { kind: 'dir', mtimeMs: this.tick(), children: new Map() };
202
+ node.children.set(name, fresh);
203
+ node = fresh;
204
+ }
205
+ }
206
+ unlink(path) {
207
+ const info = this.walkParent(path);
208
+ if (!info || !info.parent.children || !info.parent.children.has(info.name)) {
209
+ throw new Error(`ENOENT: no such file, ${path}`);
210
+ }
211
+ const e = info.parent.children.get(info.name);
212
+ if (e.kind !== 'file')
213
+ throw new Error(`is a directory: ${path}`);
214
+ info.parent.children.delete(info.name);
215
+ }
216
+ rm(path, opts = {}) {
217
+ const info = this.walkParent(path);
218
+ if (!info || !info.parent.children || !info.parent.children.has(info.name)) {
219
+ if (opts.force)
220
+ return;
221
+ throw new Error(`ENOENT: no such entry, ${path}`);
222
+ }
223
+ const e = info.parent.children.get(info.name);
224
+ if (e.kind === 'dir' && !opts.recursive) {
225
+ throw new Error(`EISDIR: directory not empty, ${path}`);
226
+ }
227
+ info.parent.children.delete(info.name);
228
+ }
229
+ rename(from, to) {
230
+ const src = this.walkParent(from);
231
+ if (!src || !src.parent.children || !src.parent.children.has(src.name)) {
232
+ throw new Error(`ENOENT: source not found, ${from}`);
233
+ }
234
+ const e = src.parent.children.get(src.name);
235
+ src.parent.children.delete(src.name);
236
+ this.writeEntryAt(to, e);
237
+ }
238
+ writeEntryAt(path, entry) {
239
+ const info = this.walkParent(path, true);
240
+ if (!info)
241
+ throw new Error(`invalid path: ${path}`);
242
+ if (!info.parent.children)
243
+ info.parent.children = new Map();
244
+ info.parent.children.set(info.name, entry);
245
+ }
246
+ }
247
+ //# sourceMappingURL=filesystem.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../src/infra/filesystem.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * @module infra/spawn
3
+ * @description ProcessSpawner port —— 只用于启动 supervisor(长跑 sps tick 进程)
4
+ *
5
+ * @layer infra
6
+ *
7
+ * 注意:Console 层禁止用 spawn 执行同步 CLI 操作(如 card add / worker launch)。
8
+ * 这些都应走 Service 层直接调 Domain。只有 pipeline supervisor 这种长跑 + detach
9
+ * 的进程才合法用 spawn。
10
+ */
11
+ import { type ChildProcess } from 'node:child_process';
12
+ export interface SupervisorSpawnOptions {
13
+ /** supervisor 要带的参数,如 ['tick', '<project>'] */
14
+ args: string[];
15
+ /** 输出重定向目标文件 */
16
+ logPath: string;
17
+ /** 工作目录,可选 */
18
+ cwd?: string;
19
+ }
20
+ export interface CliSyncOptions {
21
+ args: string[];
22
+ cwd?: string;
23
+ timeoutMs?: number;
24
+ }
25
+ export interface CliSyncResult {
26
+ exitCode: number | null;
27
+ stdout: string;
28
+ stderr: string;
29
+ }
30
+ export interface ProcessSpawner {
31
+ /**
32
+ * 启动一个 detached supervisor 进程,父退出后子继续跑。
33
+ * 返回 ChildProcess 句柄(调用方可以 kill,但不 await)。
34
+ */
35
+ spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
36
+ /**
37
+ * 同步 spawn sps 子命令(短任务)—— 用于 executor glue。
38
+ * Console 路由禁止直接用,必须经过 service → executor → spawner 这条路径。
39
+ */
40
+ runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
41
+ }
42
+ export declare class NodeProcessSpawner implements ProcessSpawner {
43
+ spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
44
+ runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
45
+ }
46
+ export interface FakeSpawnCall {
47
+ args: string[];
48
+ logPath: string;
49
+ cwd?: string;
50
+ }
51
+ /**
52
+ * 不真 spawn,仅记录调用。用于 Service 层单测验证 "PipelineService.start
53
+ * 的确调用了 supervisor"。
54
+ */
55
+ export declare class FakeProcessSpawner implements ProcessSpawner {
56
+ calls: FakeSpawnCall[];
57
+ syncCalls: Array<{
58
+ args: string[];
59
+ cwd?: string;
60
+ }>;
61
+ /** 测试可以预设每次 runCliSync 的响应;缺省返 { exitCode: 0, stdout:'', stderr:'' } */
62
+ nextSyncResult: CliSyncResult | null;
63
+ private _pid;
64
+ runCliSync(opts: CliSyncOptions): Promise<CliSyncResult>;
65
+ spawnSupervisor(opts: SupervisorSpawnOptions): ChildProcess;
66
+ }
67
+ //# sourceMappingURL=spawn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../src/infra/spawn.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,sBAAsB;IACrC,+CAA+C;IAC/C,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,YAAY,CAAC;IAE5D;;;OAGG;IACH,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC1D;AAqBD,qBAAa,kBAAmB,YAAW,cAAc;IACvD,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,YAAY;IAc3D,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;CA4BzD;AAID,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IAChD,KAAK,EAAE,aAAa,EAAE,CAAM;IAC5B,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAM;IAC/D,wEAAwE;IACjE,cAAc,EAAE,aAAa,GAAG,IAAI,CAAQ;IACnD,OAAO,CAAC,IAAI,CAAU;IAEhB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC;IAK9D,eAAe,CAAC,IAAI,EAAE,sBAAsB,GAAG,YAAY;CAsB5D"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @module infra/spawn
3
+ * @description ProcessSpawner port —— 只用于启动 supervisor(长跑 sps tick 进程)
4
+ *
5
+ * @layer infra
6
+ *
7
+ * 注意:Console 层禁止用 spawn 执行同步 CLI 操作(如 card add / worker launch)。
8
+ * 这些都应走 Service 层直接调 Domain。只有 pipeline supervisor 这种长跑 + detach
9
+ * 的进程才合法用 spawn。
10
+ */
11
+ import { spawn } from 'node:child_process';
12
+ import { existsSync, mkdirSync, openSync } from 'node:fs';
13
+ import { dirname, resolve } from 'node:path';
14
+ import { fileURLToPath } from 'node:url';
15
+ /**
16
+ * 定位 CLI 主入口 —— 优先用运行时的 process.argv[1](就是当前 sps 可执行文件),
17
+ * 测试环境兜底到源码路径。
18
+ */
19
+ function cliEntry() {
20
+ return { node: process.argv[0] ?? 'node', entry: process.argv[1] ?? defaultEntry() };
21
+ }
22
+ function defaultEntry() {
23
+ // infra/spawn.ts → src/ → workflow-cli/ → main.ts (源码模式) 或 dist/main.js(编译)
24
+ const here = fileURLToPath(import.meta.url);
25
+ // 源码:.../src/infra/spawn.ts → .../src/main.ts
26
+ const srcSibling = resolve(dirname(here), '..', 'main.ts');
27
+ if (existsSync(srcSibling))
28
+ return srcSibling;
29
+ // 编译:.../dist/infra/spawn.js → .../dist/main.js
30
+ const distSibling = resolve(dirname(here), '..', 'main.js');
31
+ return distSibling;
32
+ }
33
+ export class NodeProcessSpawner {
34
+ spawnSupervisor(opts) {
35
+ const { node, entry } = cliEntry();
36
+ const logDir = dirname(opts.logPath);
37
+ if (!existsSync(logDir))
38
+ mkdirSync(logDir, { recursive: true });
39
+ const logFd = openSync(opts.logPath, 'a');
40
+ const child = spawn(node, [entry, ...opts.args], {
41
+ cwd: opts.cwd,
42
+ detached: true,
43
+ stdio: ['ignore', logFd, logFd],
44
+ });
45
+ child.unref();
46
+ return child;
47
+ }
48
+ runCliSync(opts) {
49
+ const { node, entry } = cliEntry();
50
+ return new Promise((resolvePromise) => {
51
+ const child = spawn(node, [entry, ...opts.args], {
52
+ cwd: opts.cwd,
53
+ stdio: ['ignore', 'pipe', 'pipe'],
54
+ });
55
+ let stdout = '';
56
+ let stderr = '';
57
+ child.stdout?.on('data', (d) => {
58
+ stdout += d.toString();
59
+ });
60
+ child.stderr?.on('data', (d) => {
61
+ stderr += d.toString();
62
+ });
63
+ const timer = opts.timeoutMs
64
+ ? setTimeout(() => child.kill('SIGTERM'), opts.timeoutMs)
65
+ : null;
66
+ child.on('close', (code) => {
67
+ if (timer)
68
+ clearTimeout(timer);
69
+ resolvePromise({ exitCode: code, stdout, stderr });
70
+ });
71
+ child.on('error', (err) => {
72
+ if (timer)
73
+ clearTimeout(timer);
74
+ resolvePromise({ exitCode: -1, stdout, stderr: stderr + String(err) });
75
+ });
76
+ });
77
+ }
78
+ }
79
+ /**
80
+ * 不真 spawn,仅记录调用。用于 Service 层单测验证 "PipelineService.start
81
+ * 的确调用了 supervisor"。
82
+ */
83
+ export class FakeProcessSpawner {
84
+ calls = [];
85
+ syncCalls = [];
86
+ /** 测试可以预设每次 runCliSync 的响应;缺省返 { exitCode: 0, stdout:'', stderr:'' } */
87
+ nextSyncResult = null;
88
+ _pid = 100000;
89
+ async runCliSync(opts) {
90
+ this.syncCalls.push({ args: opts.args, cwd: opts.cwd });
91
+ return this.nextSyncResult ?? { exitCode: 0, stdout: '', stderr: '' };
92
+ }
93
+ spawnSupervisor(opts) {
94
+ this.calls.push({ args: opts.args, logPath: opts.logPath, cwd: opts.cwd });
95
+ // 返回一个 stub 足够满足 ChildProcess 接口用到的字段
96
+ const pid = this._pid++;
97
+ const stub = {
98
+ pid,
99
+ unref() { },
100
+ kill() {
101
+ return true;
102
+ },
103
+ on() {
104
+ return stub;
105
+ },
106
+ once() {
107
+ return stub;
108
+ },
109
+ removeListener() {
110
+ return stub;
111
+ },
112
+ };
113
+ return stub;
114
+ }
115
+ }
116
+ //# sourceMappingURL=spawn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../src/infra/spawn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { DomainEvent, DomainEventBus } from '../shared/domainEvents.js';
2
+ export interface SseBusEvent {
3
+ /** 单调递增 ID(SSE 需要) */
4
+ readonly id: number;
5
+ /** SSE event 字段值 = DomainEvent.type */
6
+ readonly event: string;
7
+ /** 原始领域事件 */
8
+ readonly data: DomainEvent;
9
+ /** 发布时的 wall-clock ts(ms) */
10
+ readonly ts: number;
11
+ }
12
+ export interface SseEventBusOptions {
13
+ /** 历史窗口大小 —— 超过丢最早的。默认 1000。 */
14
+ maxHistory?: number;
15
+ }
16
+ export declare class SseEventBus implements DomainEventBus {
17
+ private lastEventId;
18
+ private history;
19
+ private readonly maxHistory;
20
+ private readonly emitter;
21
+ constructor(opts?: SseEventBusOptions);
22
+ emit(event: DomainEvent): void;
23
+ subscribe(handler: (event: DomainEvent) => void): () => void;
24
+ /**
25
+ * SSE route 订阅的原始接口 —— 给需要 id / event 字段的 route 用。
26
+ * 订阅器内抛异常会冒泡(调用方 try/catch 或接受 EventEmitter 行为)。
27
+ */
28
+ subscribeRaw(handler: (record: SseBusEvent) => void): () => void;
29
+ /** SSE 断线重连用:返回 lastEventId 之后的历史 */
30
+ since(lastEventId: number): SseBusEvent[];
31
+ /** 测试 / close 时清空 */
32
+ clearHistory(): void;
33
+ /** 当前最大 id,测试用 */
34
+ currentId(): number;
35
+ }
36
+ //# sourceMappingURL=sseBus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sseBus.d.ts","sourceRoot":"","sources":["../../src/infra/sseBus.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE7E,MAAM,WAAW,WAAW;IAC1B,sBAAsB;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uCAAuC;IACvC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,aAAa;IACb,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,6BAA6B;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,WAAY,YAAW,cAAc;IAChD,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAEpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;gBAE3B,IAAI,GAAE,kBAAuB;IAMzC,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IAQ9B,SAAS,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAc5D;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,GAAG,MAAM,IAAI;IAOhE,qCAAqC;IACrC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,WAAW,EAAE;IAIzC,qBAAqB;IACrB,YAAY,IAAI,IAAI;IAKpB,kBAAkB;IAClB,SAAS,IAAI,MAAM;CAGpB"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * @module infra/sseBus
3
+ * @description DomainEventBus 的 SSE 实现 —— Console 专用
4
+ *
5
+ * @layer infra
6
+ *
7
+ * 相比 InMemoryEventBus,本实现多了:
8
+ * - lastEventId 自增(SSE 协议要求)
9
+ * - 有限历史(Last-Event-ID 断线重连补偿)
10
+ * - 心跳由上层 route 自己管,本 bus 只管事件分发和历史
11
+ *
12
+ * 相当于把原 console-server/sse/eventBus.ts 重新抽象成 DomainEventBus port 的实现。
13
+ */
14
+ import { EventEmitter } from 'node:events';
15
+ export class SseEventBus {
16
+ lastEventId = 0;
17
+ history = [];
18
+ maxHistory;
19
+ // 内部 EventEmitter 仅分发 record —— 不暴露,避免和 DomainEventBus.emit 签名冲突
20
+ emitter;
21
+ constructor(opts = {}) {
22
+ this.emitter = new EventEmitter();
23
+ this.emitter.setMaxListeners(0); // SSE 连接多,不要警告
24
+ this.maxHistory = opts.maxHistory ?? 1000;
25
+ }
26
+ emit(event) {
27
+ const id = ++this.lastEventId;
28
+ const record = { id, event: event.type, data: event, ts: Date.now() };
29
+ this.history.push(record);
30
+ if (this.history.length > this.maxHistory)
31
+ this.history.shift();
32
+ this.emitter.emit('*', record);
33
+ }
34
+ subscribe(handler) {
35
+ const wrapped = (record) => {
36
+ try {
37
+ handler(record.data);
38
+ }
39
+ catch (err) {
40
+ console.warn('[SseEventBus] handler threw:', err);
41
+ }
42
+ };
43
+ this.emitter.on('*', wrapped);
44
+ return () => {
45
+ this.emitter.off('*', wrapped);
46
+ };
47
+ }
48
+ /**
49
+ * SSE route 订阅的原始接口 —— 给需要 id / event 字段的 route 用。
50
+ * 订阅器内抛异常会冒泡(调用方 try/catch 或接受 EventEmitter 行为)。
51
+ */
52
+ subscribeRaw(handler) {
53
+ this.emitter.on('*', handler);
54
+ return () => {
55
+ this.emitter.off('*', handler);
56
+ };
57
+ }
58
+ /** SSE 断线重连用:返回 lastEventId 之后的历史 */
59
+ since(lastEventId) {
60
+ return this.history.filter((r) => r.id > lastEventId);
61
+ }
62
+ /** 测试 / close 时清空 */
63
+ clearHistory() {
64
+ this.history = [];
65
+ this.lastEventId = 0;
66
+ }
67
+ /** 当前最大 id,测试用 */
68
+ currentId() {
69
+ return this.lastEventId;
70
+ }
71
+ }
72
+ //# sourceMappingURL=sseBus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sseBus.js","sourceRoot":"","sources":["../../src/infra/sseBus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAmB3C,MAAM,OAAO,WAAW;IACd,WAAW,GAAG,CAAC,CAAC;IAChB,OAAO,GAAkB,EAAE,CAAC;IACnB,UAAU,CAAS;IACpC,iEAAiE;IAChD,OAAO,CAAe;IAEvC,YAAY,OAA2B,EAAE;QACvC,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe;QAChD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,KAAkB;QACrB,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;QAC9B,MAAM,MAAM,GAAgB,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QACnF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAChE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACjC,CAAC;IAED,SAAS,CAAC,OAAqC;QAC7C,MAAM,OAAO,GAAG,CAAC,MAAmB,EAAQ,EAAE;YAC5C,IAAI,CAAC;gBACH,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,CAAC,CAAC;YACpD,CAAC;QACH,CAAC,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,OAAsC;QACjD,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,KAAK,CAAC,WAAmB;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC;IACxD,CAAC;IAED,qBAAqB;IACrB,YAAY;QACV,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,kBAAkB;IAClB,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF"}
@@ -13,8 +13,8 @@
13
13
  * @layer interface
14
14
  * @boundedContext agent-control-protocol
15
15
  */
16
- import type { AccumulatorEvent, AccumulatorListener } from '../providers/adapters/acp-session-accumulator.js';
17
16
  import type { ACPRunStatus, ACPSessionStatus, ACPTool } from '../models/acp.js';
17
+ import type { AccumulatorEvent, AccumulatorListener } from '../providers/adapters/acp-session-accumulator.js';
18
18
  export type { AccumulatorEvent, AccumulatorListener };
19
19
  export interface McpServerConfig {
20
20
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ACPClient.d.ts","sourceRoot":"","sources":["../../src/interfaces/ACPClient.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ACPClient.d.ts","sourceRoot":"","sources":["../../src/interfaces/ACPClient.ts"],"names":[],"mappings":"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"}
package/dist/main.js CHANGED
@@ -51,8 +51,8 @@ import { executeCardAdd } from './commands/cardAdd.js';
51
51
  import { executeCardDashboard } from './commands/cardDashboard.js';
52
52
  import { executeCardMarkComplete } from './commands/cardMarkComplete.js';
53
53
  import { executeCardMarkStarted } from './commands/cardMarkStarted.js';
54
- import { executeHook } from './commands/hookCommand.js';
55
54
  import { executeDoctor } from './commands/doctor.js';
55
+ import { executeHook } from './commands/hookCommand.js';
56
56
  import { executeLogs } from './commands/logs.js';
57
57
  import { executeMonitorTick } from './commands/monitorTick.js';
58
58
  import { executePipelineTick } from './commands/pipelineTick.js';