@coralai/sps-cli 0.52.3 → 0.53.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README-CN.md +457 -131
- package/README.md +460 -131
- package/dist/commands/agentCommand.js +1 -1
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/agentDaemon.d.ts.map +1 -1
- package/dist/commands/agentDaemon.js +3 -9
- package/dist/commands/agentDaemon.js.map +1 -1
- package/dist/commands/agentRenderer.d.ts +1 -1
- package/dist/commands/agentRenderer.d.ts.map +1 -1
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +0 -4
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/skillCommand.js +14 -14
- package/dist/commands/skillCommand.js.map +1 -1
- package/dist/console/routes/chat.d.ts.map +1 -1
- package/dist/console/routes/chat.js +14 -18
- package/dist/console/routes/chat.js.map +1 -1
- package/dist/console/routes/fs.js +2 -2
- package/dist/console/routes/fs.js.map +1 -1
- package/dist/console-assets/assets/index-CoAkaUkW.css +10 -0
- package/dist/console-assets/assets/index-p6b8pcpR.js +557 -0
- package/dist/console-assets/index.html +2 -2
- package/dist/core/claudeJsonl.d.ts +43 -0
- package/dist/core/claudeJsonl.d.ts.map +1 -0
- package/dist/core/claudeJsonl.js +187 -0
- package/dist/core/claudeJsonl.js.map +1 -0
- package/dist/core/runtimeSnapshot.d.ts +1 -1
- package/dist/core/runtimeSnapshot.d.ts.map +1 -1
- package/dist/core/runtimeStore.d.ts +1 -1
- package/dist/core/runtimeStore.d.ts.map +1 -1
- package/dist/core/sessionContext.d.ts +1 -1
- package/dist/core/sessionContext.d.ts.map +1 -1
- package/dist/core/sessionLiveness.d.ts +1 -1
- package/dist/core/sessionLiveness.d.ts.map +1 -1
- package/dist/core/state.d.ts +1 -1
- package/dist/core/state.d.ts.map +1 -1
- package/dist/core/wiki/hot.js +2 -2
- package/dist/core/wiki/hot.js.map +1 -1
- package/dist/core/wiki/reader.js +4 -4
- package/dist/core/wiki/reader.js.map +1 -1
- package/dist/core/wiki/scaffold.js +1 -1
- package/dist/core/wiki/types.d.ts +50 -50
- package/dist/daemon/daemonClient.d.ts +2 -2
- package/dist/daemon/daemonClient.d.ts.map +1 -1
- package/dist/engines/MonitorEngine.js.map +1 -1
- package/dist/main.js +40 -40
- package/dist/main.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +1 -1
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.d.ts +5 -5
- package/dist/providers/ACPWorkerRuntime.d.ts.map +1 -1
- package/dist/providers/ACPWorkerRuntime.js +1 -1
- package/dist/providers/ACPWorkerRuntime.js.map +1 -1
- package/dist/providers/MarkdownTaskBackend.d.ts +2 -6
- package/dist/providers/MarkdownTaskBackend.d.ts.map +1 -1
- package/dist/providers/MarkdownTaskBackend.js +20 -32
- package/dist/providers/MarkdownTaskBackend.js.map +1 -1
- package/dist/providers/registry.d.ts +1 -1
- package/dist/providers/registry.d.ts.map +1 -1
- package/dist/services/CardService.js +11 -11
- package/dist/services/CardService.js.map +1 -1
- package/dist/services/ChatService.d.ts +31 -1
- package/dist/services/ChatService.d.ts.map +1 -1
- package/dist/services/ChatService.js +149 -33
- package/dist/services/ChatService.js.map +1 -1
- package/dist/services/LogService.js +2 -2
- package/dist/services/LogService.js.map +1 -1
- package/dist/services/PipelineService.js +29 -29
- package/dist/services/PipelineService.js.map +1 -1
- package/dist/services/ProjectService.js +16 -16
- package/dist/services/ProjectService.js.map +1 -1
- package/dist/services/SkillService.js +9 -9
- package/dist/services/SkillService.js.map +1 -1
- package/dist/services/SystemService.js +9 -9
- package/dist/services/SystemService.js.map +1 -1
- package/dist/services/WorkerService.js +7 -7
- package/dist/services/WorkerService.js.map +1 -1
- package/dist/services/executors.d.ts +1 -0
- package/dist/services/executors.d.ts.map +1 -1
- package/dist/services/executors.js +7 -0
- package/dist/services/executors.js.map +1 -1
- package/dist/shared/runtimePaths.d.ts +8 -0
- package/dist/shared/runtimePaths.d.ts.map +1 -1
- package/dist/shared/runtimePaths.js +22 -0
- package/dist/shared/runtimePaths.js.map +1 -1
- package/dist/shared/runtimeSchemas.d.ts +14 -14
- package/package.json +7 -3
- package/skills/sps-memory/SKILL.md +1 -1
- package/skills/sps-pipeline/SKILL.md +19 -19
- package/LICENSE +0 -21
- package/dist/console-assets/assets/index-Bf8zeTg0.js +0 -566
- package/dist/console-assets/assets/index-j5Dtsmq0.css +0 -10
package/README-CN.md
CHANGED
|
@@ -1,218 +1,544 @@
|
|
|
1
|
-
# SPS CLI
|
|
1
|
+
# SPS CLI — AI Agent 流水线编排器
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@coralai/sps-cli) [](
|
|
3
|
+
[](https://www.npmjs.com/package/@coralai/sps-cli) [](../../LICENSE)
|
|
4
4
|
|
|
5
|
-
> English
|
|
5
|
+
> **English**:[README.md](./README.md)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**v0.51.3**
|
|
8
8
|
|
|
9
|
-
SPS(Smart Pipeline System
|
|
9
|
+
SPS(Smart Pipeline System)驱动 Claude Code worker 走完任务卡 — 写代码、commit、push、QA、合并,全自动。三种模式:
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
| 模式 | 命令 | 适用场景 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| **Harness** | `sps agent` | 零配置 — 与 Claude 一次性对话或多轮 chat。无需建项目、无需 PM。 |
|
|
14
|
+
| **Pipeline** | `sps tick <project>` | 自动化 — 卡片按 YAML 走完 stage 直到 Done。 |
|
|
15
|
+
| **Console** | `sps console` | Web UI — 看板、日志、worker、项目、聊天(v0.44+)。 |
|
|
12
16
|
|
|
13
|
-
|
|
17
|
+
v0.51 头条特性是 **Wiki 知识库** — per-project 可选,结构化互链 page(modules / concepts / decisions / lessons / sources),自动注入 worker prompt 的 5 层检索结果。详见 [doc-28](../../docs/design/28-wiki-system.md) 和 [`ATTRIBUTION.md`](./ATTRIBUTION.md)。
|
|
14
18
|
|
|
15
|
-
|
|
19
|
+
---
|
|
16
20
|
|
|
17
|
-
|
|
21
|
+
## 目录
|
|
18
22
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
23
|
+
- [安装与初始化](#安装与初始化)
|
|
24
|
+
- [Harness 模式(`sps agent`)](#harness-模式sps-agent)
|
|
25
|
+
- [Console 模式(`sps console`)](#console-模式sps-console)
|
|
26
|
+
- [Pipeline 模式(`sps tick`)](#pipeline-模式sps-tick)
|
|
27
|
+
- [卡片生命周期](#卡片生命周期)
|
|
28
|
+
- [Memory + Wiki](#memory--wiki)
|
|
29
|
+
- [Skills](#skills)
|
|
30
|
+
- [命令参考](#命令参考)
|
|
31
|
+
- [项目配置(conf)](#项目配置conf)
|
|
32
|
+
- [目录布局](#目录布局)
|
|
33
|
+
- [架构](#架构)
|
|
34
|
+
- [Troubleshooting](#troubleshooting)
|
|
24
35
|
|
|
25
|
-
|
|
36
|
+
---
|
|
26
37
|
|
|
27
|
-
|
|
38
|
+
## 安装与初始化
|
|
28
39
|
|
|
29
|
-
|
|
40
|
+
```bash
|
|
41
|
+
npm install -g @coralai/sps-cli # 最新 0.51.x
|
|
42
|
+
sps setup # 交互式向导(首次必跑)
|
|
43
|
+
```
|
|
30
44
|
|
|
31
|
-
|
|
32
|
-
|
|
45
|
+
`sps setup` 做的事:
|
|
46
|
+
1. 创建 `~/.coral/` 目录树(`projects/`、`memory/{user,agents}/`)。
|
|
47
|
+
2. 把 bundled skills 复制到 `~/.coral/skills/`。
|
|
48
|
+
3. 询问 `GITLAB_URL` / `GITLAB_TOKEN` / `MATRIX_*`(可跳过),写到 `~/.coral/env`。
|
|
49
|
+
4. 把 user skill symlink 到 `~/.claude/skills/`。
|
|
50
|
+
5. 全局安装 `@agentclientprotocol/claude-agent-acp`。
|
|
33
51
|
|
|
34
|
-
|
|
35
|
-
每个任务是一张**卡片**,流经 `Backlog → Planning → Todo → Inprogress → QA → Done` 各阶段。每阶段有独立 prompt、工具白名单、出场条件 —— 全部 YAML 可配。
|
|
52
|
+
`sps setup --force` 重跑(保留旧值作默认)。**升级 sps-cli 后必须跑 `sps skill sync --force`** 才能拉新版 skill SOP(默认 sync 是非破坏性的,不会覆盖已有 skill)。
|
|
36
53
|
|
|
37
|
-
|
|
38
|
-
阶段按需分派**原子 skill** 来驱动每个任务执行 —— 内建 `sps-pipeline`、`wiki-update`、`git-commit`,加 24 个开发 skill 与 persona skill。Skill 可组合而不会撑爆 system prompt,Harness 只加载当前阶段需要的部分。
|
|
54
|
+
**前置条件**:Node ≥ 18;Anthropic API key(或 Claude Pro / Max 订阅);`claude` CLI 在 PATH。
|
|
39
55
|
|
|
40
|
-
|
|
41
|
-
跨会话持久化"非显然、可复用"事实的三层 markdown 文件库。全部在 `~/.coral/memory/`,Pipeline 模式下由 `StageEngine` 自动注入到每个 Worker prompt。
|
|
56
|
+
---
|
|
42
57
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
58
|
+
## Harness 模式(`sps agent`)
|
|
59
|
+
|
|
60
|
+
直接和 Claude 对话,单次或多轮。无项目、无 PM、无 git。
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 一次性
|
|
64
|
+
sps agent "解释这个 repo"
|
|
65
|
+
sps agent --output summary.md "总结架构"
|
|
66
|
+
|
|
67
|
+
# 多轮(daemon 后端,会话持久化)
|
|
68
|
+
sps agent --chat # 交互 REPL
|
|
69
|
+
sps agent --chat --name reviewer # 命名会话,下次可继续
|
|
70
|
+
sps agent status # 列活跃会话
|
|
71
|
+
sps agent close --name reviewer
|
|
72
|
+
|
|
73
|
+
# Profile + 上下文文件
|
|
74
|
+
sps agent --profile reviewer "审这个模块" --context src/auth.ts --context src/auth.test.ts
|
|
75
|
+
sps agent --system "你是发布工程师" "规划 v0.52 切版"
|
|
76
|
+
|
|
77
|
+
# Verbose
|
|
78
|
+
sps agent --verbose "为什么构建失败"
|
|
79
|
+
```
|
|
48
80
|
|
|
49
|
-
|
|
81
|
+
**`--profile <name>`**:查 `~/.coral/skills/dev-worker/references/<name>.md`,作为 system prompt 注入。(注意区别 `sps skill add` — 那是项目级 skill 链接。)
|
|
50
82
|
|
|
51
|
-
|
|
83
|
+
**Built-in agent**:仅 `claude`(Codex / Gemini 支持已在 v0.38 移除)。Worker 通过 ACP JSON-RPC over stdio 与 `claude-agent-acp` 通信。
|
|
52
84
|
|
|
53
|
-
|
|
85
|
+
**Agent skill 由 Claude Code 自己加载**:`~/.claude/skills/` 是 `claude` 自己扫的目录 — 含 `sps-pipeline`、`sps-memory`、`wiki-update`、以及 24 个 dev / persona skill。Skill description 触发懒加载,harness 模式不需要 SPS 主动注入。
|
|
54
86
|
|
|
55
|
-
|
|
87
|
+
**Daemon cwd 注意**:`sps console` 和 `sps agent --chat` 启动 session daemon(`~/.coral/sessions/daemon.sock`),daemon 启动时捕获 `process.cwd()` 作为所有 chat worker 的默认工作目录。要切目录必须重启 daemon:`sps agent daemon stop && sps agent daemon start`,从目标目录发起。
|
|
56
88
|
|
|
57
|
-
|
|
89
|
+
---
|
|
58
90
|
|
|
59
|
-
|
|
91
|
+
## Console 模式(`sps console`)
|
|
92
|
+
|
|
93
|
+
本机 web UI,打包进二进制。`~/.coral/console.lock` 单实例保证。
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
sps console # 打开 http://127.0.0.1:4311
|
|
97
|
+
sps console --port 5000
|
|
98
|
+
sps console --no-open # 不自动开浏览器
|
|
99
|
+
sps console --kill # 停止运行中的 console
|
|
100
|
+
sps console --dev # vite dev 模式(开发用)
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
页面:
|
|
104
|
+
|
|
105
|
+
| 路径 | 用途 |
|
|
60
106
|
|---|---|
|
|
61
|
-
| `
|
|
62
|
-
| `
|
|
63
|
-
|
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
107
|
+
| `/projects` | 项目列表 + 状态摘要 |
|
|
108
|
+
| `/projects/new` | 新建项目(含 Wiki 开关,v0.51+) |
|
|
109
|
+
| `/projects/<n>` | Pipeline 编辑器 + conf 编辑器 + 删除 |
|
|
110
|
+
| `/board` | 看板(列内独立滚动,v0.51.1+) |
|
|
111
|
+
| `/workers` | 跨项目聚合 worker 仪表板 |
|
|
112
|
+
| `/logs` | 实时 SSE 日志查看器 |
|
|
113
|
+
| `/skills` | User-level skill 管理 |
|
|
114
|
+
| `/system` | 全局设置 + daemon 状态 |
|
|
115
|
+
| `/chat` | Agent 聊天(多会话,持久化) |
|
|
116
|
+
|
|
117
|
+
技术栈:Hono server on `127.0.0.1:4311`、chokidar 推 SSE 给 React 19 + Vite + Tailwind v4 + shadcn/ui 前端。设计系统:Pastel Neubrutalism,规范在 [`console/DESIGN.md`](./console/DESIGN.md)。
|
|
66
118
|
|
|
67
|
-
|
|
119
|
+
---
|
|
68
120
|
|
|
69
|
-
|
|
121
|
+
## Pipeline 模式(`sps tick`)
|
|
70
122
|
|
|
71
|
-
|
|
72
|
-
- **L2** `index.md` 节选 —— top-30 页 TL;DR(~500 token)
|
|
73
|
-
- **L3** pinned 页 —— 卡片 frontmatter 显式引用
|
|
74
|
-
- **L4** skill-tag 匹配 —— 与卡片激活 skill 相符的页
|
|
75
|
-
- **L5** BM25F 关键词回退 —— title/desc top-3
|
|
123
|
+
全自动卡片驱动。**单 worker,单卡,串行**。每卡走 YAML 定义的若干 stage(如 `develop → review → Done`);失败 → halt pipeline 直到你移除 `NEEDS-FIX` 标签。
|
|
76
124
|
|
|
77
|
-
|
|
125
|
+
### 建项目
|
|
78
126
|
|
|
79
|
-
|
|
127
|
+
```bash
|
|
128
|
+
sps project init my-app
|
|
129
|
+
# 或用 Console /projects/new — 表单含 Wiki 开关(v0.51+)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
会问:项目目录、合并分支、最大 worker 数、ACK 超时、可选 GitLab 远程、可选 Matrix 房间。
|
|
133
|
+
|
|
134
|
+
生成:
|
|
80
135
|
|
|
81
|
-
|
|
82
|
-
|
|
136
|
+
```
|
|
137
|
+
~/.coral/projects/my-app/
|
|
138
|
+
├── conf # mode 600 — 当前活动配置
|
|
139
|
+
├── conf.example # 字段全参考(自动生成)
|
|
140
|
+
├── pipelines/
|
|
141
|
+
│ ├── project.yaml # 默认 1-stage(develop → Done)
|
|
142
|
+
│ └── sample.yaml.example # YAML 完整带注释参考
|
|
143
|
+
└── pipeline_order.json # 当前 active pipeline 指针
|
|
144
|
+
```
|
|
83
145
|
|
|
84
|
-
|
|
146
|
+
在目标 repo(PROJECT_DIR)下:
|
|
85
147
|
|
|
86
|
-
|
|
148
|
+
```
|
|
149
|
+
.claude/CLAUDE.md # Worker 规则(自动安装)
|
|
150
|
+
.claude/skills/ # 从 ~/.coral/skills/ symlink
|
|
151
|
+
.claude/settings.local.json # Claude Code 本地配置
|
|
152
|
+
wiki/ # 若 WIKI_ENABLED — 见 doc-28
|
|
153
|
+
ATTRIBUTION.md # 若 WIKI_ENABLED
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 运行
|
|
87
157
|
|
|
88
158
|
```bash
|
|
89
|
-
sps
|
|
90
|
-
sps
|
|
91
|
-
sps
|
|
92
|
-
sps
|
|
159
|
+
sps tick my-app # 前台 tick 循环
|
|
160
|
+
sps pipeline start my-app # 别名
|
|
161
|
+
sps pipeline stop my-app # 优雅停(别名 sps stop my-app)
|
|
162
|
+
sps stop --all # 停所有运行中的 tick
|
|
163
|
+
sps status # 看所有项目
|
|
93
164
|
```
|
|
94
165
|
|
|
95
|
-
|
|
166
|
+
### Pipeline YAML
|
|
167
|
+
|
|
168
|
+
`~/.coral/projects/<n>/pipelines/project.yaml` — stage 单一来源。
|
|
169
|
+
|
|
170
|
+
```yaml
|
|
171
|
+
mode: project
|
|
172
|
+
git: true # false = 非代码项目,无 git 操作
|
|
173
|
+
stages:
|
|
174
|
+
- name: develop
|
|
175
|
+
profile: fullstack
|
|
176
|
+
on_complete: "move_card Review"
|
|
177
|
+
on_fail: { action: "label NEEDS-FIX", halt: true }
|
|
178
|
+
- name: review
|
|
179
|
+
profile: reviewer
|
|
180
|
+
on_complete: "move_card Done"
|
|
181
|
+
on_fail: { action: "label REVIEW-FAILED", halt: true }
|
|
182
|
+
```
|
|
96
183
|
|
|
97
|
-
|
|
184
|
+
关键规则:
|
|
185
|
+
1. `mode: project` 是状态机式 pipeline;`mode: steps` 是一次性脚本,用 `sps pipeline run <name>` 触发。
|
|
186
|
+
2. 每个 stage 的 `on_complete` 必须指向**下一个** stage 的目标 state。
|
|
187
|
+
3. 最后一个 stage `on_complete: "move_card Done"`。
|
|
188
|
+
4. 别写 `agent:` 字段 — v0.38+ 起被静默忽略(Claude 是唯一 worker)。
|
|
189
|
+
5. `trigger` 和 `card_state` 按 stage 位置自动推导。
|
|
98
190
|
|
|
99
|
-
|
|
191
|
+
字段全集见 `~/.coral/projects/<n>/pipelines/sample.yaml.example`(自动生成,注释丰富)或 [doc-17](../../docs/design/17-pipeline-configuration-design.md)。
|
|
100
192
|
|
|
101
|
-
|
|
193
|
+
---
|
|
102
194
|
|
|
103
|
-
|
|
195
|
+
## 卡片生命周期
|
|
104
196
|
|
|
105
|
-
|
|
197
|
+
```
|
|
198
|
+
Backlog → Todo → Inprogress → [QA / Review] → Done
|
|
199
|
+
↑↓ ↓ 失败
|
|
200
|
+
Planning NEEDS-FIX (halt)
|
|
201
|
+
(人工暂存,v0.51.9+)
|
|
202
|
+
```
|
|
106
203
|
|
|
107
|
-
|
|
204
|
+
**v0.51.10**:按调用方区分默认入场状态。
|
|
205
|
+
- **`sps card add`(CLI / agent / 直接调 API)** → **Backlog**(自动跑)
|
|
206
|
+
- **Console "新卡片" 表单(人在 UI 操作)** → **Planning**(暂存,等用户拖到 Backlog 派发)
|
|
108
207
|
|
|
109
|
-
|
|
208
|
+
CLI 用户想暂存:`sps card add ... --draft`。Console 用户想立即跑:勾"立即派发执行"。
|
|
209
|
+
卡片严格按 seq 排序;不再有 pipeline_order.json。
|
|
210
|
+
|
|
211
|
+
默认状态(可在 YAML `pm.card_states` 自定义)。
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
sps card add <p> "标题" "描述"
|
|
215
|
+
sps card add <p> "T" "D" --skills python,backend --labels feature
|
|
110
216
|
|
|
111
|
-
|
|
217
|
+
sps card dashboard <p> # CLI 表格
|
|
218
|
+
# console: /board?project=<n>
|
|
112
219
|
|
|
113
|
-
|
|
220
|
+
sps card mark-started <p> <seq> # 由 Claude Code UserPromptSubmit hook 调用
|
|
221
|
+
sps card mark-complete <p> <seq> # 由 Claude Code Stop hook 调用
|
|
222
|
+
|
|
223
|
+
sps reset <p> # 重置非 Done 卡
|
|
224
|
+
sps reset <p> --card 5,6,7
|
|
225
|
+
sps reset <p> --all # 全重置含 Done + worktree + branch
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### 卡片标签词典
|
|
229
|
+
|
|
230
|
+
| 标签 | 含义 | 设置者 |
|
|
231
|
+
|---|---|---|
|
|
232
|
+
| `AI-PIPELINE` | 进入 pipeline 的必备标签 | 创建时由用户加 |
|
|
233
|
+
| `STARTED-<stage>` | ACK 信号 — Claude 收到了 prompt | UserPromptSubmit hook |
|
|
234
|
+
| `COMPLETED-<stage>` | Worker 完成了某 stage | Stop hook |
|
|
235
|
+
| `CLAIMED` | StageEngine 占了 worker slot | Engine |
|
|
236
|
+
| `NEEDS-FIX` | Worker 失败;pipeline halt | Engine |
|
|
237
|
+
| `BLOCKED` | 外部依赖阻塞;pipeline 跳过 | 用户 |
|
|
238
|
+
| `WAITING-CONFIRMATION` | Worker 等用户输入 | Engine |
|
|
239
|
+
| `STALE-RUNTIME` | Inprogress 超时 | MonitorEngine |
|
|
240
|
+
| `ACK-TIMEOUT` | Claude 在 `WORKER_ACK_TIMEOUT_S` 内没 ACK | MonitorEngine |
|
|
241
|
+
| `skill:<name>` | 强制加载某 skill | 用户 |
|
|
242
|
+
| `conflict:<domain>` | 同 domain 内串行 | 用户 |
|
|
243
|
+
|
|
244
|
+
活动 stage 会在 `~/.coral/projects/<p>/runtime/worker-<slot>-current.json` 写 marker 文件(v0.50.21+),Stop hook 读它判断 worker 刚刚做完哪张卡。
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
248
|
+
## Memory + Wiki
|
|
249
|
+
|
|
250
|
+
两套互补的持久化系统,都自动注入 worker prompt。
|
|
251
|
+
|
|
252
|
+
| | **Memory** | **Wiki**(v0.51+) |
|
|
253
|
+
|---|---|---|
|
|
254
|
+
| 路径 | `~/.coral/memory/{user,agents,projects/<p>}/` | `<repo>/wiki/`(per-project,进 repo) |
|
|
255
|
+
| 格式 | 平铺 markdown + YAML frontmatter | 5 类 page,zod 校验的 frontmatter |
|
|
256
|
+
| 互链 | 无(平铺索引) | `[[type/Title]]` wikilink |
|
|
257
|
+
| 自动注入 | prompt 的 `knowledge` 段 | `wikiContext` 段(5 层检索) |
|
|
258
|
+
| 开关 | 默认开(`ENABLE_MEMORY=false` 关) | per-project(`WIKI_ENABLED=true` 开) |
|
|
259
|
+
| 适合 | 个人偏好、零散决策、坑 | 结构化项目知识:modules、concepts、decisions、lessons |
|
|
260
|
+
|
|
261
|
+
### Memory CLI
|
|
114
262
|
|
|
115
263
|
```bash
|
|
116
|
-
#
|
|
117
|
-
|
|
118
|
-
sps
|
|
264
|
+
sps memory list <p> # 看项目 memory 索引
|
|
265
|
+
sps memory list # 看全局 user + agents
|
|
266
|
+
sps memory context <p> --card <seq> # 预览注入内容
|
|
119
267
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
sps skill sync --force # 升级后拉最新 skill SOP
|
|
268
|
+
sps memory add <p> --type convention --name "API 用 camelCase" \
|
|
269
|
+
--description "REST 接口用 camelCase" --body "..."
|
|
123
270
|
```
|
|
124
271
|
|
|
125
|
-
|
|
272
|
+
类型:`convention`(不衰减)、`decision`(缓慢衰减)、`lesson`(30 天衰减)、`reference`(不衰减)。
|
|
273
|
+
|
|
274
|
+
### Wiki CLI(`WIKI_ENABLED=true` 时)
|
|
126
275
|
|
|
127
276
|
```bash
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
277
|
+
sps wiki init <p> # scaffold wiki/(开了 toggle 时建项目自动跑)
|
|
278
|
+
sps wiki update <p> # 看 source diff
|
|
279
|
+
sps wiki update <p> --finalize # worker 写完 page 后刷新 manifest
|
|
280
|
+
sps wiki check <p> # lint:orphan / dead-link / fm-gap / stale
|
|
281
|
+
sps wiki list <p> --type lesson --tag pipeline
|
|
282
|
+
sps wiki get <p> lessons/Stop-Hook-Race
|
|
283
|
+
sps wiki status <p> # source ↔ manifest ↔ pages 差异
|
|
284
|
+
sps wiki add <p> ~/notes.md --category transcripts
|
|
285
|
+
sps wiki read <p> "<query>" # 预览 5 层检索
|
|
133
286
|
```
|
|
134
287
|
|
|
135
|
-
|
|
288
|
+
5 层检索:hot.md / index 节选 / pinned / skill-tag / BM25F keyword。类型优先级:lesson = 3、decision = 3、concept = 2、module = 1、source = 1。Token 预算硬上限 ~2000。
|
|
136
289
|
|
|
137
|
-
-
|
|
138
|
-
- **本地已经能正常运行的 Claude Code。** 先跑一下 `claude --help`,能跑通就 OK。SPS **不限制**你 Claude Code 怎么登录:
|
|
139
|
-
- Anthropic API key(`ANTHROPIC_API_KEY`)
|
|
140
|
-
- Claude Pro / Max 订阅
|
|
141
|
-
- 第三方 API gateway / 代理
|
|
142
|
-
- 任何其他 Claude Code 支持的鉴权方式
|
|
290
|
+
Worker SOP:[`skills/wiki-update/SKILL.md`](./skills/wiki-update/SKILL.md)(300 行,单一来源)。
|
|
143
291
|
|
|
144
|
-
|
|
292
|
+
---
|
|
145
293
|
|
|
146
|
-
##
|
|
294
|
+
## Skills
|
|
147
295
|
|
|
148
|
-
|
|
296
|
+
User-level skill 在 `~/.coral/skills/`(28 个 bundled,`sps setup` 时从 npm 包拷贝)。Symlink 到 `~/.claude/skills/`,Claude Code 自动加载。
|
|
149
297
|
|
|
150
298
|
```bash
|
|
151
|
-
sps
|
|
299
|
+
sps skill list # 列可用 + 项目链接状态
|
|
300
|
+
sps skill add <name> --project <p> # symlink 到 <repo>/.claude/skills/
|
|
301
|
+
sps skill remove <name> --project <p>
|
|
302
|
+
sps skill freeze <name> --project <p> # symlink → 真实副本(项目可定制)
|
|
303
|
+
sps skill unfreeze <name> --project <p> # 改回 symlink
|
|
304
|
+
sps skill sync # ① bundled (npm 包) → ~/.coral/skills/
|
|
305
|
+
# ② ~/.coral/skills/ → ~/.claude/skills/
|
|
306
|
+
sps skill sync --force # ⭐ 覆盖已存在的 user skill(升级 sps-cli 后用)
|
|
152
307
|
```
|
|
153
308
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
309
|
+
Bundled skill 列表(v0.51.3):
|
|
310
|
+
|
|
311
|
+
- **开发类(23 个)**:`frontend`、`frontend-developer`、`backend`、`backend-architect`、`typescript`、`golang`、`rust`、`python`、`java`、`kotlin`、`swift`、`mobile`、`database`、`database-optimizer`、`qa-tester`、`security-engineer`、`architecture-decision-records`、`coding-standards`、`debugging-workflow`、`devops`、`devops-automator`、`git-workflow`、`code-reviewer`
|
|
312
|
+
- **Worker profile(3 个)**:`dev-worker`、`tax-worker`、`reviewer`(通过 `--profile` 引用)
|
|
313
|
+
- **SPS 专用(5 个)**:`sps-pipeline`、`sps-memory`、`wiki-update`
|
|
159
314
|
|
|
160
|
-
|
|
315
|
+
---
|
|
161
316
|
|
|
162
|
-
|
|
317
|
+
## 命令参考
|
|
163
318
|
|
|
164
319
|
```bash
|
|
165
|
-
|
|
166
|
-
sps
|
|
320
|
+
# Setup & 项目
|
|
321
|
+
sps setup [--force]
|
|
322
|
+
sps project init <name>
|
|
323
|
+
sps project doctor <name> [--fix] [--json] [--reset-state] [--skip-remote]
|
|
324
|
+
sps doctor <name> --fix # 别名
|
|
325
|
+
|
|
326
|
+
# Pipeline
|
|
327
|
+
sps tick <project> [--json]
|
|
328
|
+
sps pipeline start|stop|status|reset|workers|board|card|logs|list|run|use [project] [args]
|
|
329
|
+
sps pipeline run <name> "<prompt>" # 用于 mode: steps pipeline
|
|
330
|
+
sps pipeline tick <project> # 单次 StageEngine pass
|
|
331
|
+
sps scheduler tick <project> # v0.51.9 起 dormant(保留接口给 tick 编排器)
|
|
332
|
+
sps qa tick <project> # QA → Done 收尾
|
|
333
|
+
sps monitor tick <project> # 健康探测(ACK timeout、stale)
|
|
334
|
+
sps pm scan <project> # 从磁盘重建卡片索引
|
|
335
|
+
|
|
336
|
+
# 卡片
|
|
337
|
+
sps card add <p> "title" ["description"] [--skills a,b] [--labels x,y]
|
|
338
|
+
sps card dashboard <p>
|
|
339
|
+
sps card mark-started <p> [seq] [--stage <name>]
|
|
340
|
+
sps card mark-complete <p> <seq> [--stage <name>]
|
|
341
|
+
|
|
342
|
+
# Worker
|
|
343
|
+
sps worker ps <project>
|
|
344
|
+
sps worker dashboard <project>
|
|
345
|
+
sps worker kill <project> <seq>
|
|
346
|
+
sps worker launch <project> <seq>
|
|
347
|
+
|
|
348
|
+
# 状态 / 日志
|
|
349
|
+
sps status [--json]
|
|
350
|
+
sps stop <project> [--all]
|
|
351
|
+
sps reset <project> [--all] [--card N,N,N]
|
|
352
|
+
sps logs [project] [--err] [--lines N] [--no-follow]
|
|
353
|
+
|
|
354
|
+
# Memory
|
|
355
|
+
sps memory list [project] [--agent <id>]
|
|
356
|
+
sps memory context <project> [--card <seq>] [--agent <id>]
|
|
357
|
+
sps memory add <project> --type <T> --name "title" [--body "content"]
|
|
358
|
+
|
|
359
|
+
# Wiki(v0.51+)
|
|
360
|
+
sps wiki init <p>
|
|
361
|
+
sps wiki update <p> [--finalize] [--json]
|
|
362
|
+
sps wiki read <p> "<query>" [--skills a,b] [--pinned id1,id2] [--budget N]
|
|
363
|
+
sps wiki check <p> [--json] [--fix]
|
|
364
|
+
sps wiki add <p> <file> [--category <name>] [--no-ingest]
|
|
365
|
+
sps wiki list <p> [--type T] [--tag T] [--json]
|
|
366
|
+
sps wiki get <p> <pageId> [--json]
|
|
367
|
+
sps wiki status <p> [--json]
|
|
368
|
+
|
|
369
|
+
# Skill
|
|
370
|
+
sps skill list [--project <p>]
|
|
371
|
+
sps skill add <name> [--project <p>]
|
|
372
|
+
sps skill remove <name> [--project <p>]
|
|
373
|
+
sps skill freeze <name> [--project <p>]
|
|
374
|
+
sps skill unfreeze <name> [--project <p>]
|
|
375
|
+
sps skill sync [--force]
|
|
376
|
+
|
|
377
|
+
# Console
|
|
378
|
+
sps console [--port N] [--host H] [--no-open] [--dev] [--kill]
|
|
379
|
+
|
|
380
|
+
# Agent
|
|
381
|
+
sps agent "<prompt>" [--profile <p>] [--system "..."] [--context file] [--output file] [--verbose]
|
|
382
|
+
sps agent --chat [--name <session>]
|
|
383
|
+
sps agent status|close|list|add [args]
|
|
384
|
+
sps agent daemon start|stop|status
|
|
385
|
+
|
|
386
|
+
# Hook(由 Claude Code 调用,不是用户)
|
|
387
|
+
sps hook stop
|
|
388
|
+
sps hook user-prompt-submit
|
|
389
|
+
|
|
390
|
+
# ACP 控制(高级 debug 用)
|
|
391
|
+
sps acp <ensure|run|prompt|status|stop|pending|respond> <project> [args]
|
|
167
392
|
```
|
|
168
393
|
|
|
169
|
-
|
|
394
|
+
任何命令后加 `--help` 看具体用法;支持的命令加 `--json` 输出结构化结果。
|
|
170
395
|
|
|
171
|
-
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## 项目配置(conf)
|
|
399
|
+
|
|
400
|
+
文件位置 `~/.coral/projects/<name>/conf`(shell `export VAR="value"` 语法,mode 600)。完整字段参考自动生成在 `~/.coral/projects/<name>/conf.example`。
|
|
401
|
+
|
|
402
|
+
| 字段 | 默认 | 说明 |
|
|
403
|
+
|---|---|---|
|
|
404
|
+
| `PROJECT_NAME` | (必填) | 内部 id |
|
|
405
|
+
| `PROJECT_DIR` | (必填) | repo 绝对路径 |
|
|
406
|
+
| `GITLAB_PROJECT` | — | `user/repo`(可选,用 GitLab API 时必填) |
|
|
407
|
+
| `GITLAB_PROJECT_ID` | — | 数字 ID(GitLab 才需,按路径首次 MR 时自动解析) |
|
|
408
|
+
| `GITLAB_MERGE_BRANCH` | `main` | Worker push 的目标分支 |
|
|
409
|
+
| `PM_TOOL` | `markdown` | **v0.42 起只支持 `markdown`**。卡片在 `~/.coral/projects/<n>/cards/<state>/<seq>.md` |
|
|
410
|
+
| `PIPELINE_LABEL` | `AI-PIPELINE` | 卡片进入 pipeline 必备标签 |
|
|
411
|
+
| `MR_MODE` | `none` | `none`(直接 push)/ `create`(开 MR,需要 `GITLAB_PROJECT_ID`) |
|
|
412
|
+
| `WORKER_TRANSPORT` | `acp-sdk` | 固定,不要改 |
|
|
413
|
+
| `MAX_CONCURRENT_WORKERS` | `1` | Slot 数;同一项目内卡仍是串行 |
|
|
414
|
+
| `MAX_ACTIONS_PER_TICK` | `3` | 单次 tick 可领多少新任务 |
|
|
415
|
+
| `INPROGRESS_TIMEOUT_HOURS` | `2` | 超时后 MonitorEngine 标 STALE-RUNTIME |
|
|
416
|
+
| `WORKER_ACK_TIMEOUT_S` | `300` | 派发后等 STARTED-<stage> 标签的最长时间(v0.50.24 提到 5min) |
|
|
417
|
+
| `WORKER_ACK_MAX_RETRIES` | `1` | ACK 超时后最多重试次数 |
|
|
418
|
+
| `MONITOR_AUTO_QA` | `true` | 检测到 stale runtime 时自动迁到 QA |
|
|
419
|
+
| `CONFLICT_DEFAULT` | `serial` | 卡上无 `conflict:` 标签时的兜底策略 |
|
|
420
|
+
| `MATRIX_ROOM_ID` | — | 项目级 Matrix 覆盖 |
|
|
421
|
+
| `WORKTREE_DIR` | `~/.coral/worktrees/<p>` | Worker 工作树根 |
|
|
422
|
+
| `DEFAULT_WORKER_SKILLS` | — | 逗号分隔;卡上无 `profile:` 也无 `card.skills` 时兜底 |
|
|
423
|
+
| `ENABLE_MEMORY` | `true` | `false` 跳过 prompt 里的 memory 写指引 |
|
|
424
|
+
| **`WIKI_ENABLED`** | 未设(关) | **v0.51+**:`true` 启用 wiki context 注入 + reminder |
|
|
425
|
+
| `COMPLETION_SIGNAL` | `done` | Stop hook 监听的完成关键词 |
|
|
426
|
+
|
|
427
|
+
全局凭证 `~/.coral/env`:`GITLAB_URL`、`GITLAB_TOKEN`、`GITLAB_SSH_HOST`、`GITLAB_SSH_PORT`、`MATRIX_HOMESERVER`、`MATRIX_ACCESS_TOKEN`、`MATRIX_ROOM_ID`。`sps setup` 写或 `vim` 改。
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## 目录布局
|
|
172
432
|
|
|
173
|
-
```
|
|
174
|
-
|
|
433
|
+
```
|
|
434
|
+
~/.coral/ # 用户全局状态
|
|
435
|
+
├── env # 全局凭证(mode 600)
|
|
436
|
+
├── skills/ # User-level skill(从 npm 同步)
|
|
437
|
+
├── memory/{user,agents,projects}/ # 3 层 memory 存储
|
|
438
|
+
├── projects/<name>/ # 项目状态
|
|
439
|
+
│ ├── conf # 项目配置(mode 600)
|
|
440
|
+
│ ├── conf.example # 字段全参考(自动生成)
|
|
441
|
+
│ ├── pipelines/{project,*}.yaml # Pipeline 定义
|
|
442
|
+
│ ├── pipeline_order.json # 当前 active pipeline 指针
|
|
443
|
+
│ ├── runtime/state.json # Worker slot + 当前卡状态
|
|
444
|
+
│ ├── runtime/worker-<slot>-current.json # Per-slot 卡 marker(v0.50.21+)
|
|
445
|
+
│ ├── runtime/tick.lock # tick 锁
|
|
446
|
+
│ ├── runtime/acp-state.json # ACP 会话状态
|
|
447
|
+
│ ├── cards/<state>/<seq>.md # 卡片文件(markdown PM 后端)
|
|
448
|
+
│ ├── cards/seq.txt # 序列号
|
|
449
|
+
│ ├── logs/ # 每次 tick 的日志
|
|
450
|
+
│ └── pm_meta/ # 卡片索引
|
|
451
|
+
├── sessions/ # Agent daemon(chat 会话)
|
|
452
|
+
│ ├── daemon.sock daemon.pid
|
|
453
|
+
│ └── chat-sessions/<id>.json # 持久化 chat 会话
|
|
454
|
+
├── console.lock # console 单实例 guard
|
|
455
|
+
└── worktrees/<project>/<seq>/ # 每张活动卡一个 worktree
|
|
456
|
+
|
|
457
|
+
<目标 repo>/ # 你的项目 repo
|
|
458
|
+
├── .claude/
|
|
459
|
+
│ ├── CLAUDE.md # Worker 规则(项目相关 + SPS 注入)
|
|
460
|
+
│ ├── settings.local.json # Claude Code 本地配置
|
|
461
|
+
│ ├── skills/ # 从 ~/.coral/skills/ symlink
|
|
462
|
+
│ └── hooks/{start,stop}.sh # 生命周期 hook(call sps)
|
|
463
|
+
├── wiki/ # 若 WIKI_ENABLED — 见 doc-28
|
|
464
|
+
└── ATTRIBUTION.md # 若 WIKI_ENABLED
|
|
175
465
|
```
|
|
176
466
|
|
|
177
|
-
|
|
467
|
+
---
|
|
178
468
|
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
469
|
+
## 架构
|
|
470
|
+
|
|
471
|
+
4 层服务架构(v0.50+):
|
|
472
|
+
|
|
473
|
+
```
|
|
474
|
+
Delivery (commands/, console/routes/) 参数解析 + I/O 编排(薄)
|
|
475
|
+
↓
|
|
476
|
+
Service (services/) ProjectService / ChatService / PipelineService /
|
|
477
|
+
SkillService / WikiService — Result<T> + DomainEvent
|
|
478
|
+
↓
|
|
479
|
+
Domain (engines/) SchedulerEngine / StageEngine / MonitorEngine /
|
|
480
|
+
CloseoutEngine / EventHandler — pipeline 逻辑
|
|
481
|
+
↓
|
|
482
|
+
Infrastructure WorkerManager(单 worker)、ACPWorkerRuntime、
|
|
483
|
+
(manager/, providers/, daemon/) sessionDaemon、TaskBackend、RepoBackend
|
|
183
484
|
```
|
|
184
485
|
|
|
185
|
-
|
|
486
|
+
引擎职责:
|
|
186
487
|
|
|
187
|
-
|
|
488
|
+
- **SchedulerEngine** — v0.51.9 起 dormant(卡 add 直接进 Backlog;Planning 是人工暂存)。class 保留为 no-op,给 tick 编排器接口稳定。
|
|
489
|
+
- **StageEngine** — 驱动卡走 stage;构造 prompt(skill + projectRules + memory + **wikiContext** + task description + **wikiUpdateReminder**);通过 ACP 拉起 worker。
|
|
490
|
+
- **MonitorEngine** — ACK 超时检测、stale runtime、自动 QA 提升。
|
|
491
|
+
- **CloseoutEngine** + **EventHandler** — 完成卡的收尾。
|
|
188
492
|
|
|
189
|
-
|
|
493
|
+
**单 worker 是刻意设计**:v0.37.2 已删除多 worker 并发代码。不要提议"加并行模式" — 架构依赖串行执行保证状态一致。要更高吞吐,跑多个项目并行。
|
|
190
494
|
|
|
191
|
-
|
|
495
|
+
深入阅读:
|
|
496
|
+
- [doc-27:Service Layer Architecture](../../docs/design/27-service-layer-architecture.md) — 当前架构
|
|
497
|
+
- [doc-26:Console Architecture](../../docs/design/26-console-architecture.md) — Console 内部
|
|
498
|
+
- [doc-28:Wiki System](../../docs/design/28-wiki-system.md) — Wiki 设计
|
|
499
|
+
- [doc-13:Development Guardrails](../../docs/design/13-development-guardrails.md) — 贡献者硬规则
|
|
500
|
+
- [doc-17:Pipeline Configuration](../../docs/design/17-pipeline-configuration-design.md) — YAML 字段语义
|
|
501
|
+
- [docs/design/](../../docs/design/) — 完整设计树(v0.15-v0.32 时代的多数文档已标 HISTORICAL)
|
|
192
502
|
|
|
193
|
-
|
|
194
|
-
|---|---|
|
|
195
|
-
| **Claude Code** | ✅ `sps skill sync` 把 `sps-pipeline` 软链到 `~/.claude/skills/`;按描述匹配自动加载 |
|
|
196
|
-
| **Codex** | ✅ 把 `skills/sps-pipeline/SKILL.md` 放进 Codex 的 skill 目录 |
|
|
197
|
-
| **OpenClaw** | ✅ 一样 —— 让它的 skill loader 指向 `skills/sps-pipeline/` |
|
|
198
|
-
| **Harness Agent** | ✅ 同模式 —— skill 内容代理无关 |
|
|
199
|
-
| **其他任何编码代理** | ✅ 只要能读指令 + 执行 shell,就能驱动 SPS |
|
|
503
|
+
---
|
|
200
504
|
|
|
201
|
-
|
|
505
|
+
## Troubleshooting
|
|
202
506
|
|
|
203
|
-
|
|
507
|
+
```bash
|
|
508
|
+
sps doctor <project> --fix # ★ 第一招
|
|
509
|
+
sps logs <project> --err # 只看 stderr / 错误
|
|
510
|
+
sps reset <project> --card <seq> # 重置卡死的卡
|
|
511
|
+
sps reset <project> --all # 全项目重置
|
|
512
|
+
|
|
513
|
+
# Worker / daemon 问题
|
|
514
|
+
sps worker ps <project>
|
|
515
|
+
sps agent daemon status # chat daemon 还在不?
|
|
516
|
+
sps agent daemon stop && sps agent daemon start # 重启(清旧 cwd)
|
|
517
|
+
|
|
518
|
+
# Wiki 问题
|
|
519
|
+
sps wiki check <project>
|
|
520
|
+
sps wiki status <project>
|
|
521
|
+
```
|
|
522
|
+
|
|
523
|
+
常见问题:
|
|
204
524
|
|
|
205
|
-
|
|
525
|
+
| 现象 | 原因 / 修复 |
|
|
526
|
+
|---|---|
|
|
527
|
+
| Pipeline halt 在 `NEEDS-FIX` | 打开失败的卡,修问题,移除标签。Console 上 2 步搞定。 |
|
|
528
|
+
| Worker 启动不了 | 先 `sps worker ps`,再 `sps logs --err`。多半是 Claude API key 缺、或 `claude-agent-acp` adapter 没装(`sps setup` 重装它)。 |
|
|
529
|
+
| 卡片卡在 Planning | 缺 `AI-PIPELINE` 标签。`sps card add` 自动加;外部加的需手动补。 |
|
|
530
|
+
| 每张卡都 ACK timeout | Claude 冷启动慢(skill / memory 多)。conf 里调高 `WORKER_ACK_TIMEOUT_S`(v0.50.24 起默认 300s)。 |
|
|
531
|
+
| Console 数据陈旧 | SSE 可能掉了;刷新页面;不行就 `sps console --kill && sps console`。 |
|
|
532
|
+
| Wiki context 不注入 | 检查 `WIKI_ENABLED=true` 在 conf 里、`wiki/WIKI.md` 存在。conf 开了但 scaffold 缺时 StageEngine 会 warn。 |
|
|
533
|
+
| 升级后 skill SOP 不更新 | `sps skill sync --force`(默认 sync 会跳过已存在的)。 |
|
|
534
|
+
| Daemon chat 用了错的 cwd | Daemon 启动时锁 cwd。`sps agent daemon stop && cd <repo> && sps agent daemon start`。 |
|
|
206
535
|
|
|
207
|
-
|
|
208
|
-
- **Anthropic Claude Agent SDK** —— ACP 传输层、子代理基础设施
|
|
209
|
-
- **kepano / claude-obsidian**(MIT)—— Wiki 架构、manifest、hot cache。完整归属见 [ATTRIBUTION.md](./ATTRIBUTION.md)
|
|
210
|
-
- **hono · chokidar · zod · yaml · vitest · biome** —— 运行时与工具链
|
|
536
|
+
---
|
|
211
537
|
|
|
212
|
-
##
|
|
538
|
+
## 许可证 & 致谢
|
|
213
539
|
|
|
214
|
-
[
|
|
540
|
+
MIT,见 [`LICENSE`](../../LICENSE)。
|
|
215
541
|
|
|
216
|
-
|
|
542
|
+
Wiki 系统(v0.51+)~70% 借鉴 [claude-obsidian](https://github.com/kepano/claude-obsidian)(MIT)— 三层架构、manifest 增量、hot cache、ingest 流程、contradiction callout、wikilink。SPS 专属 30%:5 类 page、`sources={card,commit,path}`、5 层 reader、`sps wiki check` exit gate。心智模型来自 Karpathy "LLM Wiki" gist。
|
|
217
543
|
|
|
218
|
-
|
|
544
|
+
完整归属见 [`ATTRIBUTION.md`](./ATTRIBUTION.md)。
|