@coralai/sps-cli 0.89.13 → 0.89.15

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 (66) hide show
  1. package/dist/commands/cardDashboard.d.ts.map +1 -1
  2. package/dist/commands/cardDashboard.js +2 -5
  3. package/dist/commands/cardDashboard.js.map +1 -1
  4. package/dist/commands/cardMarkComplete.d.ts.map +1 -1
  5. package/dist/commands/cardMarkComplete.js +2 -5
  6. package/dist/commands/cardMarkComplete.js.map +1 -1
  7. package/dist/commands/cardMarkStarted.d.ts.map +1 -1
  8. package/dist/commands/cardMarkStarted.js +2 -5
  9. package/dist/commands/cardMarkStarted.js.map +1 -1
  10. package/dist/commands/hookCommand.d.ts.map +1 -1
  11. package/dist/commands/hookCommand.js +2 -5
  12. package/dist/commands/hookCommand.js.map +1 -1
  13. package/dist/commands/pipelineTick.d.ts.map +1 -1
  14. package/dist/commands/pipelineTick.js +2 -5
  15. package/dist/commands/pipelineTick.js.map +1 -1
  16. package/dist/commands/qaTick.d.ts.map +1 -1
  17. package/dist/commands/qaTick.js +2 -5
  18. package/dist/commands/qaTick.js.map +1 -1
  19. package/dist/commands/tick.d.ts.map +1 -1
  20. package/dist/commands/tick.js +2 -11
  21. package/dist/commands/tick.js.map +1 -1
  22. package/dist/commands/workerLaunch.d.ts.map +1 -1
  23. package/dist/commands/workerLaunch.js +2 -5
  24. package/dist/commands/workerLaunch.js.map +1 -1
  25. package/dist/console/index.d.ts.map +1 -1
  26. package/dist/console/index.js +2 -0
  27. package/dist/console/index.js.map +1 -1
  28. package/dist/console/routes/help.d.ts +3 -0
  29. package/dist/console/routes/help.d.ts.map +1 -0
  30. package/dist/console/routes/help.js +99 -0
  31. package/dist/console/routes/help.js.map +1 -0
  32. package/dist/console-assets/assets/{ShowcasePage-U8YSqMkw.js → ShowcasePage-DBSqP7-O.js} +1 -1
  33. package/dist/console-assets/assets/{index-BN0kx67J.css → index-CfPC9qFe.css} +1 -1
  34. package/dist/console-assets/assets/{index-_my94-Yq.js → index-DQkAZkNG.js} +1794 -1792
  35. package/dist/console-assets/index.html +2 -2
  36. package/dist/core/cardStates.d.ts +59 -0
  37. package/dist/core/cardStates.d.ts.map +1 -0
  38. package/dist/core/cardStates.js +32 -0
  39. package/dist/core/cardStates.js.map +1 -0
  40. package/dist/core/skills/distribution.d.ts +4 -3
  41. package/dist/core/skills/distribution.d.ts.map +1 -1
  42. package/dist/core/skills/distribution.js.map +1 -1
  43. package/dist/core/skills/ownership.d.ts +25 -6
  44. package/dist/core/skills/ownership.d.ts.map +1 -1
  45. package/dist/core/skills/ownership.js +24 -4
  46. package/dist/core/skills/ownership.js.map +1 -1
  47. package/dist/core/skills/skillPackage.d.ts +5 -2
  48. package/dist/core/skills/skillPackage.d.ts.map +1 -1
  49. package/dist/core/skills/skillPackage.js +8 -4
  50. package/dist/core/skills/skillPackage.js.map +1 -1
  51. package/dist/providers/MarkdownTaskBackend.d.ts +11 -0
  52. package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
  53. package/dist/providers/MarkdownTaskBackend.js +39 -1
  54. package/dist/providers/MarkdownTaskBackend.js.map +1 -1
  55. package/dist/services/SkillService.d.ts.map +1 -1
  56. package/dist/services/SkillService.js +17 -2
  57. package/dist/services/SkillService.js.map +1 -1
  58. package/dist/services/executors.d.ts.map +1 -1
  59. package/dist/services/executors.js +3 -18
  60. package/dist/services/executors.js.map +1 -1
  61. package/docs/help/01-install.md +95 -0
  62. package/docs/help/02-commands.md +230 -0
  63. package/docs/help/03-console.md +75 -0
  64. package/docs/help/04-plugins.md +106 -0
  65. package/docs/help/05-api.md +388 -0
  66. package/package.json +6 -3
@@ -0,0 +1,388 @@
1
+ ---
2
+ title: 开放 API
3
+ generated: true
4
+ source: src/console/routes/*.ts
5
+ version: 0.89.15
6
+ ---
7
+
8
+ # 开放 API
9
+
10
+ > ⚠️ **本页由 `scripts/gen-help-api.mjs` 从路由代码扫出,不要手改。**
11
+ > 门禁 `check:help` 会在代码与本页不一致时报红。
12
+
13
+ 共 **177** 条路由(其中 110 条尚无说明)。版本 `0.89.15`。
14
+
15
+ > ℹ️ 口径:这里**逐条列**(同一路径的不同方法算两条)。门禁 `check:api-docs` 报的是
16
+ > **归一去重后的唯一路径数**,两个数字不相等是正常的 —— 别拿它们互相"对账"。
17
+
18
+ ## 鉴权:两条通道,互不替代
19
+
20
+ | 通道 | 用法 | 给谁 |
21
+ |---|---|---|
22
+ | **service key** | `X-Sps-Caller: <服务名>` + `Authorization: Bearer <key>` | **平台/服务对接走这条** |
23
+ | console token | `?token=<token>` 或 `Authorization: Bearer <console token>` | 浏览器里的人 |
24
+
25
+ ⚠️ 两条通道的 401 响应体不同(`bad service key` vs `Unauthorized`)——
26
+ 排查时据此判断走的是哪条。**服务间调用不要长期借用人的 console token。**
27
+
28
+ ### /api/art · art
29
+
30
+ | 方法 | 路径 | 说明 |
31
+ |---|---|---|
32
+ | `POST` | `/api/art/chroma-key` | — |
33
+ | `POST` | `/api/art/rembg` | — |
34
+ | `POST` | `/api/art/clean-alpha` | — |
35
+ | `POST` | `/api/art/residue` | 只读判据:这张图值不值得交给模型(不是"抠得干不干净")。 |
36
+ | `POST` | `/api/art/inspect` | — |
37
+ | `POST` | `/api/art/slice-sheet` | — |
38
+ | `POST` | `/api/art/pack-atlas` | — |
39
+ | `POST` | `/api/art/normalize-sheet` | 🔴 两种 normalize 拆成两个端点(CLI 是 `--mode`): sheet 收单个 `in`,frames 收 `in: string[]` —— 同名字段两种类型正是我们刚在 `pack-atlas` 的 `id` 上踩过 |
40
+ | `POST` | `/api/art/normalize-frames` | — |
41
+ | `POST` | `/api/art/resize` | 🔴 不适用于图集!图集必须走 pack-atlas 的 frameMaxHeight(见上)。 |
42
+
43
+ ### /api/art/pipeline · artPipeline
44
+
45
+ | 方法 | 路径 | 说明 |
46
+ |---|---|---|
47
+ | `POST` | `/api/art/pipeline/runs` | — |
48
+ | `GET` | `/api/art/pipeline/runs/:id` | — |
49
+ | `POST` | `/api/art/pipeline/runs/:id/cancel` | — |
50
+
51
+ ### /api/audit · audit
52
+
53
+ | 方法 | 路径 | 说明 |
54
+ |---|---|---|
55
+ | `GET` | `/api/audit` | — |
56
+
57
+ ### /api/projects · capabilities
58
+
59
+ | 方法 | 路径 | 说明 |
60
+ |---|---|---|
61
+ | `GET` | `/api/projects/:project/capabilities` | — |
62
+
63
+ ### /api/projects · cards
64
+
65
+ | 方法 | 路径 | 说明 |
66
+ |---|---|---|
67
+ | `GET` | `/api/projects/:project/cards` | — |
68
+ | `GET` | `/api/projects/:project/cards/:seq` | — |
69
+ | `GET` | `/api/projects/:project/cards/:seq/prompt` | * 查看 worker 提示词。优先返回**派发时落盘的真实那份**(source=actual,含派发时间); * 该卡还没派过 → 回退到按当前状态**重建的预览**(source=preview)。 |
70
+ | `POST` | `/api/projects/:project/cards` | — |
71
+ | `PATCH` | `/api/projects/:project/cards/:seq` | — |
72
+ | `DELETE` | `/api/projects/:project/cards/:seq` | — |
73
+ | `POST` | `/api/projects/:project/cards/:seq/restore` | 从回收站还原(撤销删除,原号原内容)。 |
74
+ | `GET` | `/api/projects/:project/cards/:seq/rerun-impact` | * 重跑的**波及面**(只读预览)——「从这张卡开始重跑,还会连带哪些卡」 |
75
+ | `POST` | `/api/projects/:project/cards/:seq/reset` | — |
76
+ | `POST` | `/api/projects/:project/cards/:seq/launch` | — |
77
+
78
+ ### /api/channels · channels
79
+
80
+ | 方法 | 路径 | 说明 |
81
+ |---|---|---|
82
+ | `GET` | `/api/channels` | 读全量频道配置(console 桥 + adapters)。 |
83
+ | `PUT` | `/api/channels` | 写全量频道配置(前端主从编辑后整存)。 |
84
+
85
+ ### /api/chat · chat
86
+
87
+ | 方法 | 路径 | 说明 |
88
+ |---|---|---|
89
+ | `GET` | `/api/chat/sessions` | — |
90
+ | `POST` | `/api/chat/sessions` | — |
91
+ | `GET` | `/api/chat/sessions/:id` | — |
92
+ | `GET` | `/api/chat/sessions/:id/messages` | — |
93
+ | `DELETE` | `/api/chat/sessions/:id` | — |
94
+ | `POST` | `/api/chat/sessions/:id/interactions/push` | * 服务端注入一个交互块 —— **不经模型** |
95
+ | `POST` | `/api/chat/sessions/:id/interactions/:interactionId` | — |
96
+ | `POST` | `/api/chat/sessions/:id/interrupt` | — |
97
+ | `POST` | `/api/chat/sessions/:id/messages` | * POST messages —— 非阻塞发送。ChatService 只管持久化;streamAssistantResponse * 由 Delivery 层起 goroutine,通过 chatBus 广播给 SSE 订阅者。 |
98
+ | `GET` | `/api/chat/:id` | — |
99
+
100
+ ### /api/projects · flow
101
+
102
+ | 方法 | 路径 | 说明 |
103
+ |---|---|---|
104
+ | `GET` | `/api/projects/:project/flow` | 读项目卡图元数据。无 flow.json → 空(项目还没排布)。 |
105
+ | `PUT` | `/api/projects/:project/flow` | 覆盖式保存。要求项目目录已存在(sps 注册过的项目),避免写出游离目录。 |
106
+
107
+ ### /api/fs · fs
108
+
109
+ | 方法 | 路径 | 说明 |
110
+ |---|---|---|
111
+ | `GET` | `/api/fs/browse` | — |
112
+ | `POST` | `/api/fs/mkdir` | ─── POST /mkdir — 在指定目录下新建子目录 ────────────────────────── body(JSON):{ path: string(绝对路径,须已存在的目录), name: string(单段目录名) } |
113
+ | `POST` | `/api/fs/upload` | ─── POST /upload — 附件上传 ──────────────────────────────────────── multipart/form-data 字段: - sessionId: string (必) —— 用于落 |
114
+ | `GET` | `/api/fs/file` | ─── GET /file — 读取附件内容(用于预览) ─────────────────────────── Query: - path: 绝对路径 - sessionId: 关联 session id(用于校验路径是该 sessi |
115
+
116
+ ### /api/gen · gen
117
+
118
+ | 方法 | 路径 | 说明 |
119
+ |---|---|---|
120
+ | `GET` | `/api/gen/jobs` | 当前生成任务(running + 最近完成的)。 |
121
+
122
+ ### /api/projects · graph
123
+
124
+ | 方法 | 路径 | 说明 |
125
+ |---|---|---|
126
+ | `GET` | `/api/projects/:name/graph/status` | 建图状态(节点/边/文件数);未建图 data=null。 |
127
+ | `GET` | `/api/projects/:name/graph/data` | 文件级依赖图数据(渲染用);未建图 data=null。 |
128
+ | `POST` | `/api/projects/:name/graph/build` | 手动全量建图(同步,~秒级;完成回传状态)。 |
129
+ | `POST` | `/api/projects/:name/graph/sync` | 增量同步(只更新变化的文件;未建图则回 409,提示先 build)。 |
130
+
131
+ ### /api · health
132
+
133
+ | 方法 | 路径 | 说明 |
134
+ |---|---|---|
135
+ | `GET` | `/api/health` | — |
136
+ | `GET` | `/api/capacity` | — |
137
+
138
+ ### /api/help · help
139
+
140
+ | 方法 | 路径 | 说明 |
141
+ |---|---|---|
142
+ | `GET` | `/api/help` | 帮助目录:有哪些篇、各自标题与是否自动生成。 |
143
+ | `GET` | `/api/help/:doc` | 单篇内容(原始 markdown,由前端排版渲染)。 |
144
+
145
+ ### /api/logs · logs
146
+
147
+ | 方法 | 路径 | 说明 |
148
+ |---|---|---|
149
+ | `GET` | `/api/logs` | — |
150
+ | `GET` | `/api/logs/sources` | 可切换的日志源列表(固定类 + 每 worker),worker 附运行态状态点。 |
151
+ | `GET` | `/api/logs` | — |
152
+
153
+ ### /api/mcp-tools · mcpTools
154
+
155
+ | 方法 | 路径 | 说明 |
156
+ |---|---|---|
157
+ | `GET` | `/api/mcp-tools` | — |
158
+
159
+ ### /api/media-providers · mediaProviders
160
+
161
+ | 方法 | 路径 | 说明 |
162
+ |---|---|---|
163
+ | `GET` | `/api/media-providers` | 列 provider(可按 ?capability= 过滤)+ 当前每能力默认。apiKey 脱敏。 |
164
+ | `PUT` | `/api/media-providers` | 新增/编辑。apiKey 留空 = 保留原 key(前端不回传脱敏 key)。 |
165
+ | `DELETE` | `/api/media-providers/:id` | — |
166
+ | `PUT` | `/api/media-providers/default/:capability` | 设某能力的默认 provider/model。 |
167
+
168
+ ### /api/memory · memory
169
+
170
+ | 方法 | 路径 | 说明 |
171
+ |---|---|---|
172
+ | `GET` | `/api/memory/scopes` | — |
173
+ | `GET` | `/api/memory/entries` | — |
174
+ | `GET` | `/api/memory/recall` | — |
175
+ | `GET` | `/api/memory/digest` | — |
176
+ | `GET` | `/api/memory/external` | 外部派生智能(agentmemory profile + graph);external 未启用返 {profile:null,graph:null}。 |
177
+ | `GET` | `/api/memory/entries/:id` | — |
178
+ | `POST` | `/api/memory/entries` | — |
179
+ | `DELETE` | `/api/memory/entries/:id` | — |
180
+ | `POST` | `/api/memory/promote` | — |
181
+ | `POST` | `/api/memory/gc` | — |
182
+
183
+ ### /api/model-config · modelConfig
184
+
185
+ | 方法 | 路径 | 说明 |
186
+ |---|---|---|
187
+ | `GET` | `/api/model-config/export` | — |
188
+ | `POST` | `/api/model-config/import` | — |
189
+
190
+ ### /api/projects · pipeline
191
+
192
+ | 方法 | 路径 | 说明 |
193
+ |---|---|---|
194
+ | `POST` | `/api/projects/:project/pipeline/start` | — |
195
+ | `POST` | `/api/projects/:project/pipeline/stop` | — |
196
+ | `POST` | `/api/projects/:project/pipeline/reset` | — |
197
+ | `GET` | `/api/projects/:project/pipeline/status` | — |
198
+
199
+ ### /serve · play
200
+
201
+ | 方法 | 路径 | 说明 |
202
+ |---|---|---|
203
+ | `GET` | `/serve/:project/*` | — |
204
+
205
+ ### /preview · preview
206
+
207
+ | 方法 | 路径 | 说明 |
208
+ |---|---|---|
209
+ | `GET` | `/preview/:sessionId` | 无尾斜杠 → 重定向;否则 `base:'./'` 的相对资源会按上一级解析(丢 sessionId)导致空白页。 |
210
+ | `GET` | `/preview/:sessionId/*` | — |
211
+
212
+ ### /api/processes · processes
213
+
214
+ | 方法 | 路径 | 说明 |
215
+ |---|---|---|
216
+ | `GET` | `/api/processes` | — |
217
+ | `GET` | `/api/processes/reclaim` | v0.57 自动回收设置:空闲多少分钟自动停掉 warm 会话(下次发消息 durable resume 续上)。 |
218
+ | `PUT` | `/api/processes/reclaim` | — |
219
+ | `POST` | `/api/processes/:pid/kill` | — |
220
+
221
+ ### /api/projects · projectConfig
222
+
223
+ | 方法 | 路径 | 说明 |
224
+ |---|---|---|
225
+ | `GET` | `/api/projects/:project/agent` | * `configureProjectAgent` 的**读侧** —— 回报项目当前的 agent 端点/模型(**脱敏**) |
226
+ | `PUT` | `/api/projects/:project/agent` | — |
227
+ | `PUT` | `/api/projects/:project/skills` | — |
228
+ | `PUT` | `/api/projects/:project/media-providers` | * 项目级媒体 provider 注入(`<cwd>/.sps/media-providers.json`,**整体替换**) |
229
+ | `PUT` | `/api/projects/:project/media-providers/gateway` | * 同一份文件的**网关形状**入口:给一把网关 token + 基址,sps **自己**展开成整套条目 |
230
+ | `PUT` | `/api/projects/:project/persona` | * 项目级人设注入(服务化分层 P4·A)—— 人设三件**一次调用给全** |
231
+ | `PUT` | `/api/projects/:project/base-rules` | 存在的理由:消费方(studio)今天**直写**这个文件,而第二步要让 studio 与 sps * **可以不共享文件系统**。写入方换成 sps 之后,工作区退化成 sps 独写 |
232
+
233
+ ### /api/projects · projects
234
+
235
+ | 方法 | 路径 | 说明 |
236
+ |---|---|---|
237
+ | `GET` | `/api/projects` | — |
238
+ | `GET` | `/api/projects/:name` | — |
239
+ | `POST` | `/api/projects` | — |
240
+ | `POST` | `/api/projects/register` | * `POST /api/projects/register` —— **纯登记(认领一棵已存在的项目树)** |
241
+ | `POST` | `/api/projects/:name/scaffold` | * `POST /api/projects/:name/scaffold` —— 把已注册模板落进项目目录 |
242
+ | `DELETE` | `/api/projects/:name/registration` | — |
243
+ | `DELETE` | `/api/projects/:name` | — |
244
+ | `POST` | `/api/projects/:name/relocate` | 迁移工作区到新目录 + 同步所有记着旧 cwd 的地方(gameforge 存量迁移用)。 |
245
+ | `GET` | `/api/projects/:name/conf` | — |
246
+ | `PUT` | `/api/projects/:name/conf` | — |
247
+ | `PATCH` | `/api/projects/:name/conf` | — |
248
+ | `GET` | `/api/projects/:name/pipelines` | — |
249
+ | `GET` | `/api/projects/:name/pipelines/:file` | — |
250
+ | `PATCH` | `/api/projects/:name/pipelines/:file` | — |
251
+ | `POST` | `/api/projects/:name/pipelines` | — |
252
+ | `DELETE` | `/api/projects/:name/pipelines/:file` | — |
253
+ | `PUT` | `/api/projects/:name/pipeline` | — |
254
+
255
+ ### /api/prompts · prompts
256
+
257
+ | 方法 | 路径 | 说明 |
258
+ |---|---|---|
259
+ | `POST` | `/api/prompts/generate` | AI 生成提示词:body = { intent }。**异步**:立即返回 { jobId },经 /api/gen/jobs 轮询。 |
260
+ | `GET` | `/api/prompts` | 列表(可选 ?q=关键词 搜索)。 |
261
+ | `GET` | `/api/prompts/:name` | — |
262
+ | `POST` | `/api/prompts` | 新建(body = PromptInput,重名 409)。 |
263
+ | `PUT` | `/api/prompts/:name` | 更新(必须已存在)。 |
264
+ | `DELETE` | `/api/prompts/:name` | — |
265
+
266
+ ### /api/providers · providers
267
+
268
+ | 方法 | 路径 | 说明 |
269
+ |---|---|---|
270
+ | `GET` | `/api/providers` | 列两类 provider;apiKey 脱敏(只回 hasKey + 末4位),绝不出全 key。 验证通过的本地官方订阅(claude / codex)作为 builtin 置顶,不可编辑/删除。 |
271
+ | `PUT` | `/api/providers` | 新增/编辑。apiKey 留空 = 保留已有(前端不回传脱敏 key)。 |
272
+ | `DELETE` | `/api/providers/:kind/:id` | — |
273
+
274
+ ### /api/rules · rules
275
+
276
+ | 方法 | 路径 | 说明 |
277
+ |---|---|---|
278
+ | `GET` | `/api/rules/:project` | 读项目 repo 根的 AGENTS.md / CLAUDE.md(只读)。 |
279
+
280
+ ### /api/skills · skills
281
+
282
+ | 方法 | 路径 | 说明 |
283
+ |---|---|---|
284
+ | `POST` | `/api/skills/create` | AI 创建 skill:body = { name, intent }。**异步**:立即返回 { jobId },经 /api/gen/jobs 轮询。 |
285
+ | `GET` | `/api/skills` | — |
286
+ | `GET` | `/api/skills/updates` | bundled↔HQ 更新检测(静态路径,须在 /:name 前)。 |
287
+ | `POST` | `/api/skills/import` | 导入 skill 到 HQ:body = { name, files: {relPath: content}, overwrite? }。 |
288
+ | `GET` | `/api/skills/:name` | — |
289
+ | `PUT` | `/api/skills/:name` | 编辑保存 skill 正文(整份 SKILL.md 覆盖)。body = { content }。 |
290
+ | `DELETE` | `/api/skills/:name` | 从 HQ 库删除 skill。 |
291
+ | `POST` | `/api/skills/:name/translate` | 中英转换 skill 正文(LLM,frontmatter 不动)。返回 { content } 译文,不落库,前端预览后再 PUT 保存。 |
292
+ | `GET` | `/api/skills/:name/export` | 导出 skill 目录树。 |
293
+ | `GET` | `/api/skills/policy/:project` | 项目 skill 白名单:读当前 policy + 合格宇宙 + 全部 skill(供项目页选择 UI)。 |
294
+ | `PUT` | `/api/skills/policy/:project` | * 写项目 skill 白名单并重投影。body = `{ allow?, deny?, tags? }` |
295
+ | `GET` | `/api/skills/:name/references/:file` | * reference 文件读取保留在 Delivery —— 不进 service,因为这是原始字节的透传,不是 * 领域行为。Phase 3 这里直接读 userSkillsDir 下的文件。 |
296
+ | `POST` | `/api/skills/:name/link` | — |
297
+ | `DELETE` | `/api/skills/:name/link` | — |
298
+ | `POST` | `/api/skills/:name/freeze` | — |
299
+ | `POST` | `/api/skills/:name/unfreeze` | — |
300
+ | `POST` | `/api/skills/sync` | — |
301
+ | `GET` | `/api/skills/links/:project` | — |
302
+
303
+ ### /api/storage · storage
304
+
305
+ | 方法 | 路径 | 说明 |
306
+ |---|---|---|
307
+ | `GET` | `/api/storage` | * 当前配置(**脱敏**) |
308
+ | `PUT` | `/api/storage` | 整体替换。缺字段即非法 —— 不做"沿用旧值"的合并,理由见模块头。 |
309
+ | `GET` | `/api/storage/active` | * 同步路径今天生效吗 —— 给运维/自检用的**一个字段**,免得从三种状态自己推 |
310
+ | `GET` | `/api/storage/scope` | * 同步范围声明(**按产品**)。内容由平台写入,sps 只执行 —— * 🔴 这不违反"配置里不放同步什么":那一条禁的是 **sps 把产品知识写死在代码里**, * 而这里是**数据**。反面教材是 coral sidecar 用 |
311
+ | `PUT` | `/api/storage/scope` | 整体替换。缺声明的产品走窄兜底(只同步 `assets/`),而**用了兜底这件事会进日志**。 |
312
+
313
+ ### /api/subagent · subagent
314
+
315
+ | 方法 | 路径 | 说明 |
316
+ |---|---|---|
317
+ | `POST` | `/api/subagent/run` | — |
318
+ | `GET` | `/api/subagent/runs/:id` | — |
319
+ | `GET` | `/api/subagent/runs` | — |
320
+ | `POST` | `/api/subagent/runs/:id/abort` | — |
321
+
322
+ ### /api/system · system
323
+
324
+ | 方法 | 路径 | 说明 |
325
+ |---|---|---|
326
+ | `GET` | `/api/system/info` | — |
327
+ | `GET` | `/api/system/env` | — |
328
+ | `GET` | `/api/system/env/raw` | — |
329
+ | `PATCH` | `/api/system/env` | — |
330
+ | `GET` | `/api/system/memory` | — |
331
+ | `PUT` | `/api/system/memory` | — |
332
+ | `GET` | `/api/system/agents` | — |
333
+ | `PUT` | `/api/system/agents` | — |
334
+ | `GET` | `/api/system/latest-version` | — |
335
+ | `POST` | `/api/system/upgrade` | — |
336
+ | `POST` | `/api/system/doctor/:project` | v0.50.17:删 shallow /doctor/all,只保留真实的单项目 doctor。 warm-load 项目列表前端走 /api/projects。 |
337
+ | `POST` | `/api/system/client-errors` | 前端错误日志:服务 stderr only,不进 Service |
338
+
339
+ ### /api/templates · templates
340
+
341
+ | 方法 | 路径 | 说明 |
342
+ |---|---|---|
343
+ | `GET` | `/api/templates/:id` | 已注册就 200(调用方据此跳过上传),没有就 404 —— 这条是"注册一次、长期命中"的入口。 |
344
+ | `POST` | `/api/templates` | — |
345
+ | `POST` | `/api/templates/register` | * 注册模板 —— **拉取式**:调用方把包传到自己的存储,给 sps 一个**能拉到字节的 URL** |
346
+ | `GET` | `/api/templates` | 上限对外可见 —— 调用方不必靠试错去猜。 |
347
+
348
+ ### /api/tts · tts
349
+
350
+ | 方法 | 路径 | 说明 |
351
+ |---|---|---|
352
+ | `POST` | `/api/tts` | — |
353
+
354
+ ### /api/projects · workers
355
+
356
+ | 方法 | 路径 | 说明 |
357
+ |---|---|---|
358
+ | `GET` | `/api/projects/:project/workers` | — |
359
+ | `GET` | `/api/projects/:project/activity` | * 后端无关的 worker 活动流(claude / openai 归一) |
360
+ | `GET` | `/api/projects/:project/workers/:slot` | — |
361
+ | `POST` | `/api/projects/:project/workers/:slot/kill` | — |
362
+ | `POST` | `/api/projects/:project/workers/:slot/launch` | — |
363
+ | `GET` | `/api/projects/all` | — |
364
+
365
+ ### /stream/projects · sse/projectStream
366
+
367
+ | 方法 | 路径 | 说明 |
368
+ |---|---|---|
369
+ | `GET` | `/stream/projects/:project` | — |
370
+
371
+ ### /stream/workspace · sse/workspaceStream
372
+
373
+ | 方法 | 路径 | 说明 |
374
+ |---|---|---|
375
+ | `GET` | `/stream/workspace` | — |
376
+
377
+ ### console/index.ts
378
+
379
+ | 方法 | 路径 | 说明 |
380
+ |---|---|---|
381
+ | `GET` | `/api/memory-cfg` | 记忆 viewer 配置:设了 SPS_CONSOLE_MEMORY_VIEWER_URL(如 https://mem.coralbot.top,反代 agentmemory 仪表板 :3113)→ 前端 iframe 内嵌该仪表板;没设 |
382
+ | `GET` | `/docs` | — |
383
+ | `GET` | `/docs/*` | 命不中静态文件 → 回 docs 的 404 页(而不是落到 console SPA)。 |
384
+ | `GET` | `/` | — |
385
+ | `GET` | `/*` | — |
386
+ | `GET` | `/` | — |
387
+ | `GET` | `/` | — |
388
+ | `GET` | `/` | — |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralai/sps-cli",
3
- "version": "0.89.13",
3
+ "version": "0.89.15",
4
4
  "description": "SPS CLI — AI-driven development pipeline orchestrator",
5
5
  "type": "module",
6
6
  "main": "dist/main.js",
@@ -20,12 +20,14 @@
20
20
  "test:coverage": "vitest run --coverage",
21
21
  "test:e2e": "playwright test",
22
22
  "prepublishOnly": "npm run check && npm run build",
23
- "check": "npm run build:packages && npm run build:seam-clients && npm run typecheck && npm run typecheck:test && npm run check:api-docs",
23
+ "check": "npm run build:packages && npm run build:seam-clients && npm run typecheck && npm run typecheck:test && npm run check:api-docs && npm run check:help",
24
24
  "dev:selflink": "node scripts/dev-selflink.mjs",
25
25
  "smoke:assembly": "node scripts/assembly-smoke.mjs",
26
26
  "prepare": "lefthook install || true",
27
27
  "build:packages": "for d in packages/*/; do (cd \"$d\" && npx tsc -p tsconfig.json) || exit 1; done",
28
- "build:seam-clients": "node scripts/build-seam-clients.mjs"
28
+ "build:seam-clients": "node scripts/build-seam-clients.mjs",
29
+ "gen:help": "node scripts/gen-help-commands.mjs && node scripts/gen-help-api.mjs",
30
+ "check:help": "node scripts/gen-help-commands.mjs --check && node scripts/gen-help-api.mjs --check"
29
31
  },
30
32
  "engines": {
31
33
  "node": ">=18.0.0"
@@ -53,6 +55,7 @@
53
55
  "README.md",
54
56
  "README-CN.md",
55
57
  "CHANGELOG.md",
58
+ "docs/help",
56
59
  "docs/openai-daemon-agent.md"
57
60
  ],
58
61
  "keywords": [