@s_s/harmonia 1.1.0 → 1.2.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 (50) hide show
  1. package/README.md +413 -205
  2. package/build/cli/setup.js +2 -3
  3. package/build/cli/setup.js.map +1 -1
  4. package/build/core/dispatch.d.ts +11 -11
  5. package/build/core/dispatch.js +33 -33
  6. package/build/core/dispatch.js.map +1 -1
  7. package/build/core/docs.d.ts +11 -11
  8. package/build/core/docs.js +19 -19
  9. package/build/core/docs.js.map +1 -1
  10. package/build/core/registry.d.ts +29 -6
  11. package/build/core/registry.js +50 -8
  12. package/build/core/registry.js.map +1 -1
  13. package/build/core/reviews.d.ts +8 -8
  14. package/build/core/reviews.js +20 -20
  15. package/build/core/reviews.js.map +1 -1
  16. package/build/core/state.d.ts +12 -12
  17. package/build/core/state.js +24 -23
  18. package/build/core/state.js.map +1 -1
  19. package/build/core/steps.d.ts +7 -7
  20. package/build/core/steps.js +19 -19
  21. package/build/core/steps.js.map +1 -1
  22. package/build/core/types.d.ts +2 -0
  23. package/build/index.js +30 -3
  24. package/build/index.js.map +1 -1
  25. package/build/setup/inject.d.ts +11 -3
  26. package/build/setup/inject.js +19 -12
  27. package/build/setup/inject.js.map +1 -1
  28. package/build/setup/templates.js +9 -2
  29. package/build/setup/templates.js.map +1 -1
  30. package/build/tools/approve-doc.js +31 -2
  31. package/build/tools/approve-doc.js.map +1 -1
  32. package/build/tools/dispatch-role.js +19 -4
  33. package/build/tools/dispatch-role.js.map +1 -1
  34. package/build/tools/doc-tools.js +59 -16
  35. package/build/tools/doc-tools.js.map +1 -1
  36. package/build/tools/get-project-status.js +61 -15
  37. package/build/tools/get-project-status.js.map +1 -1
  38. package/build/tools/iteration-start.d.ts +13 -0
  39. package/build/tools/iteration-start.js +98 -0
  40. package/build/tools/iteration-start.js.map +1 -0
  41. package/build/tools/project-init.d.ts +5 -1
  42. package/build/tools/project-init.js +30 -14
  43. package/build/tools/project-init.js.map +1 -1
  44. package/build/tools/report-dispatch.js +30 -15
  45. package/build/tools/report-dispatch.js.map +1 -1
  46. package/build/tools/set-scale.js +18 -3
  47. package/build/tools/set-scale.js.map +1 -1
  48. package/build/tools/update-phase.js +20 -5
  49. package/build/tools/update-phase.js.map +1 -1
  50. package/package.json +2 -2
package/README.md CHANGED
@@ -2,8 +2,6 @@
2
2
 
3
3
  > _众声喧哗之中,和谐不是沉默,而是各得其所。_
4
4
 
5
- Multi-agent orchestration MCP server with pluggable workflows.
6
-
7
5
  Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的智能体编排服务器。它为 AI 编程助手(Claude Code、OpenCode、OpenClaw、Codex)提供项目管理工具,让多个 AI agent 在预定义的工作流中按角色协作完成软件开发任务。
8
6
 
9
7
  ## 核心理念
@@ -15,89 +13,186 @@ Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprot
15
13
 
16
14
  ## 特性
17
15
 
18
- ### 工作流编排
16
+ - **工作流编排** — 5 阶段、4 角色、15 种文档类型,按项目规模自动调整
17
+ - **迭代管理** — 同一项目支持多次迭代,每次迭代独立的状态和文档
18
+ - **文档结构校验** — Markdown 标题结构和 JSON 字段/类型自动校验
19
+ - **逐步文档写入** — 大型文档拆分为多步,每步独立校验,支持步骤回滚
20
+ - **覆盖配置** — 三层合并的配置系统,灵活控制审批规则、角色绑定、能力映射
21
+ - **跨 Agent 边界守卫** — hook 脚本拦截越权操作 + 角色提示词注入约束上下文
22
+ - **工具访问控制** — 基于 MCP tool 级别的角色白名单/黑名单
19
23
 
20
- - 5 个阶段:需求澄清 → 方案设计 → 开发 → 测试 → 交付验收
21
- - 4 个角色:PM / 架构师 / 开发者 / 测试
22
- - 15 种文档类型,按项目规模(small / medium / large)自动调整必选/可选
23
- - 项目规模延迟设定 — PRD 审批后由 PM 设定,设定后不可更改
24
- - 角色调度与报告机制(`role_dispatch` / `dispatch_report`)
24
+ ## 快速开始
25
25
 
26
- ### 文档结构校验
26
+ ### 安装
27
27
 
28
- 对文档内容进行结构化校验,包括 Markdown 标题结构和 JSON 字段/类型验证。每次 `doc_write` 时自动执行,确保产出物符合预期格式。
28
+ ```bash
29
+ npm install -g @s_s/harmonia
30
+ ```
29
31
 
30
- ### 工具访问控制
32
+ ### 配置 MCP 服务器
31
33
 
32
- 基于 MCP tool 级别的硬性约束。为每个角色定义允许使用的工具白名单/黑名单,在 agent 层面强制执行,防止角色越权操作。
34
+ Harmonia 注册为你的 AI 编程助手的 MCP 服务器:
33
35
 
34
- ### 覆盖配置体系(overrides.json)
36
+ <details>
37
+ <summary><strong>Claude Code</strong></summary>
35
38
 
36
- 三层合并的配置覆盖系统,优先级:**项目级 > 全局级 > 工作流默认值**。
39
+ 通过命令行:
37
40
 
41
+ ```bash
42
+ claude mcp add --transport stdio harmonia -- harmonia
38
43
  ```
39
- <data_dir>/harmonia/overrides.json # 全局覆盖
40
- <data_dir>/harmonia/<project_name>/overrides.json # 项目级覆盖
44
+
45
+ 或添加到 `.mcp.json`:
46
+
47
+ ```json
48
+ {
49
+ "mcpServers": {
50
+ "harmonia": {
51
+ "command": "harmonia"
52
+ }
53
+ }
54
+ }
41
55
  ```
42
56
 
43
- 支持覆盖的配置项:
57
+ </details>
44
58
 
45
- - **审批规则** — 控制哪些文档需要审批(review)
46
- - `review: true` — 全局开启所有文档审批
47
- - `review: { "prd": true, "tech-design": false }` — 按文档类型逐一配置
48
- - 通过 `review_set_rule` 工具设置
49
- - **角色配置** — 为每个角色指定 agent 类型和模型
50
- - `agent` — 执行角色的 agent 类型(opencode / claude-code / openclaw / codex)
51
- - `model` — 模型覆盖(如使用不同能力级别的模型)
52
- - 通过 `guard_set` 工具设置
53
- - **能力映射** — 将角色的抽象能力映射到具体工具
54
- - `capabilities.{capId}` — 指定工具类型(skill / mcp)、工具名、服务器名、静态参数
55
- - 通过 `guard_set` 工具设置
59
+ <details>
60
+ <summary><strong>OpenCode</strong></summary>
56
61
 
57
- 示例 `overrides.json`:
62
+ 添加到 `opencode.json`:
58
63
 
59
64
  ```json
60
65
  {
61
- "review": { "prd": true },
62
- "roles": {
63
- "developer": {
64
- "agent": "opencode",
65
- "model": "claude-sonnet-4-20250514",
66
- "capabilities": {
67
- "read_file": {
68
- "type": "mcp",
69
- "tool": "read_file",
70
- "server": "filesystem"
71
- }
72
- }
66
+ "mcp": {
67
+ "harmonia": {
68
+ "type": "local",
69
+ "command": ["harmonia"]
73
70
  }
74
71
  }
75
72
  }
76
73
  ```
77
74
 
78
- ### 跨 Agent 边界守卫
75
+ </details>
79
76
 
80
- 为 AI 编程助手安装 hook 脚本,在工具调用前拦截越界操作:
77
+ <details>
78
+ <summary><strong>Codex</strong></summary>
81
79
 
82
- - **Claude Code / Codex** — Shell hook,通过 exit code 阻断
83
- - **OpenCode** — TypeScript plugin hook
84
- - **OpenClaw** — handler.ts hook
80
+ 通过命令行:
85
81
 
86
- 同时提供主动提醒机制,在角色提示词中注入当前约束上下文。
82
+ ```bash
83
+ codex mcp add harmonia -- harmonia
84
+ ```
87
85
 
88
- ### 逐步文档写入
86
+ 或添加到 `~/.codex/config.toml`:
89
87
 
90
- 大型文档拆分为多个步骤(steps),每步独立写入并校验。支持:
88
+ ```toml
89
+ [mcp_servers.harmonia]
90
+ command = "harmonia"
91
+ ```
91
92
 
92
- - 每步独立的 JSON Schema 校验
93
- - 步骤回滚(重写某步时自动清除后续步骤记录)
94
- - `project_status` 中展示步骤进度
93
+ </details>
94
+
95
+ <details>
96
+ <summary><strong>OpenClaw</strong>(通过 mcporter)</summary>
97
+
98
+ 添加到 `config/mcporter.json`(全局配置用 `~/.mcporter/mcporter.json`):
99
+
100
+ ```json
101
+ {
102
+ "mcpServers": {
103
+ "harmonia": {
104
+ "command": "harmonia"
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ 或通过 mcporter 命令行:
111
+
112
+ ```bash
113
+ mcporter config add harmonia --command harmonia --scope home
114
+ ```
115
+
116
+ </details>
117
+
118
+ ### 初始化
119
+
120
+ ```bash
121
+ harmonia setup --agent openclaw
122
+ ```
123
+
124
+ `harmonia setup` 一键完成:
125
+
126
+ 1. 注入 PM 提示词到 agent 配置文件(AGENTS.md / CLAUDE.md)
127
+ 2. 安装 agent hook 脚本(边界守卫 + 主动提醒)
128
+
129
+ 之后启动你的 AI 编程助手,用自然语言告诉它你要做什么即可。
130
+
131
+ ### 使用示例
132
+
133
+ setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自然语言描述需求,PM 会自动调用 Harmonia 工具驱动整个流程。
134
+
135
+ **启动新项目:**
136
+
137
+ ```
138
+ 你:我想开发一个命令行待办事项工具,用 TypeScript 写,支持增删改查和优先级排序。
139
+ ```
140
+
141
+ > PM 会先调用 `project_status()` 检查是否有已注册项目,发现没有后,会和你沟通确认项目名称和目录路径,然后调用 `project_init` 注册项目、`iteration_start` 开始第一次迭代,接着进入需求澄清阶段撰写 PRD。
142
+
143
+ **为已有代码库添加新功能:**
144
+
145
+ ```
146
+ 你:我的项目在 /Users/me/api-server,想给它加上用户认证模块,帮我管理一下。
147
+ ```
148
+
149
+ > 和启动新项目流程相同——PM 会确认项目信息后调用 `project_init` + `iteration_start`。`project_init` 只是将项目注册到 Harmonia,不会修改你的源码目录。
150
+
151
+ **继续已注册的项目:**
152
+
153
+ ```
154
+ 你:继续之前的 todo-cli 项目。
155
+ ```
156
+
157
+ > PM 调用 `project_status("todo-cli")` 获取当前迭代的阶段、文档、调度记录等状态,根据进度恢复工作。
158
+
159
+ **开始新一轮迭代:**
160
+
161
+ ```
162
+ 你:todo-cli 需要加一些新功能,开始新的迭代。
163
+ ```
164
+
165
+ > PM 调用 `iteration_start("todo-cli")` 创建新迭代(如 iter-2),从需求澄清阶段重新开始。上一轮迭代的文档和状态保留不变。
166
+
167
+ **查看所有项目:**
168
+
169
+ ```
170
+ 你:我有哪些项目?
171
+ ```
172
+
173
+ > PM 调用 `project_status()`(无参数)返回所有已注册项目及其当前迭代状态。
174
+
175
+ ### CLI 命令
176
+
177
+ ```
178
+ harmonia 启动 MCP stdio 服务器(供 agent 调用)
179
+ harmonia setup 初始化 agent 配置(注入提示词 + 安装 hook)
180
+ harmonia unregister <name> 注销项目(默认同时删除数据目录)
181
+ harmonia --help 显示帮助信息
182
+ harmonia --version 显示版本号
183
+ ```
184
+
185
+ | 命令 | 选项 | 说明 |
186
+ | ------------ | ---------------- | --------------------------------------------------------------------------------------------- |
187
+ | `setup` | `--agent <type>` | agent 类型:`opencode` / `claude-code` / `codex` / `openclaw`。建议显式指定,省略时自动检测。 |
188
+ | `unregister` | `--keep-data` | 仅移除注册表条目,保留项目数据目录。默认同时删除数据目录。 |
95
189
 
96
190
  ## MCP 工具一览
97
191
 
98
192
  | 工具 | 说明 |
99
193
  | ------------------- | -------------------------------------------------- |
100
194
  | `project_init` | 注册项目,创建数据目录,初始化工作流 |
195
+ | `iteration_start` | 开始新迭代(创建 iter-N 目录,重置阶段状态) |
101
196
  | `project_set_scale` | 设定项目规模(PRD 审批后,不可更改) |
102
197
  | `project_status` | 查看项目状态(无参数返回项目列表,有参数返回详情) |
103
198
  | `phase_update` | 推进项目阶段 |
@@ -110,12 +205,14 @@ Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprot
110
205
  | `role_prompt` | 获取角色提示词(含约束上下文注入) |
111
206
  | `role_dispatch` | 调度角色执行任务 |
112
207
  | `dispatch_report` | 角色报告任务完成状态 |
113
- | `guard_set` | 设置角色的工具白名单/黑名单 |
114
- | `guard_get` | 查看当前工具约束配置 |
208
+ | `guard_set` | 设置角色的 agent/model/能力覆盖 |
209
+ | `guard_get` | 查看当前覆盖配置 |
115
210
 
116
- ## 工作流结构
211
+ ## 工作流
117
212
 
118
- Harmonia 使用声明式工作流定义。内置的 `dev` 工作流(软件开发流程):
213
+ ### 阶段与角色
214
+
215
+ Harmonia 使用声明式工作流定义。内置的 `dev` 工作流(软件开发流程)包含 5 个阶段和 4 个角色:
119
216
 
120
217
  ```
121
218
  clarify (需求澄清) → PM 产出 PRD、用户故事
@@ -129,141 +226,304 @@ test (测试) → 测试编写测试、输出测试报告
129
226
  deliver (交付验收) → PM 验收成果、输出复盘记录
130
227
  ```
131
228
 
132
- 每个文档类型可定义 **steps**(步骤),例如 PRD 的写入流程:
229
+ | 角色 | 说明 | 默认模型 | 并行 |
230
+ | ------ | -------------------------------------- | -------- | ---- |
231
+ | PM | 需求澄清、文档撰写、任务分派、验收交付 | medium | 否 |
232
+ | 架构师 | 代码分析、技术方案、任务拆解 | strong | 否 |
233
+ | 开发者 | 编码实现、单元测试、代码质量 | medium | 是 |
234
+ | 测试 | 测试计划、测试执行、测试报告 | medium | 否 |
235
+
236
+ ### 文档类型
237
+
238
+ `dev` 工作流定义了 15 种文档类型。每种文档按项目规模(small / medium / large)有不同的要求等级:
239
+
240
+ | 文档 ID | 名称 | 阶段 | 规模行为 (S/M/L) | 默认审批 |
241
+ | ----------------- | ------------------- | ------- | ---------------------- | -------- |
242
+ | `prd` | 需求文档 | clarify | full / full / full | **是** |
243
+ | `user-stories` | 用户故事 + 验收标准 | clarify | full / full / full | 否 |
244
+ | `fsd` | 功能规格 | clarify | skip / full / full | 否 |
245
+ | `prototype` | 高保真原型 | clarify | skip / optional / full | **是** |
246
+ | `project-plan` | 项目计划 | clarify | skip / optional / full | 否 |
247
+ | `tech-design` | 技术方案 | design | lite / full / full | 否 |
248
+ | `data-model` | 数据模型设计 | design | skip / optional / full | 否 |
249
+ | `api-design` | API 设计 | design | skip / optional / full | 否 |
250
+ | `task-breakdown` | 任务拆解 | design | full / full / full | 否 |
251
+ | `risk-assessment` | 技术风险评估 | design | skip / skip / full | 否 |
252
+ | `code` | 代码实现 | develop | full / full / full | 否 |
253
+ | `test-plan` | 测试计划 | test | skip / full / full | 否 |
254
+ | `test-report` | 测试报告 | test | full / full / full | 否 |
255
+ | `deploy` | 部署文档 | deliver | skip / skip / optional | 否 |
256
+ | `retrospective` | 复盘记录 | deliver | full / full / full | 否 |
257
+
258
+ > **规模行为说明**:`full` = 必须产出;`lite` = 简化版;`optional` = 可选产出;`skip` = 跳过
259
+
260
+ 项目规模在 PRD 审批后由 PM 通过 `project_set_scale` 设定,设定后不可更改。
261
+
262
+ ### 逐步文档写入
263
+
264
+ 大型文档可拆分为多个步骤(steps),每步独立写入并校验:
265
+
266
+ - 每步有独立的 JSON Schema 校验
267
+ - 重写某步时自动清除后续步骤记录
268
+ - `project_status` 中展示步骤进度
269
+
270
+ 例如 PRD 的写入流程:
133
271
 
134
272
  1. `requirements` — 需求结构化(JSON)
135
273
  2. `completeness-check` — 完整性校验(JSON)
136
274
  3. `draft` — PRD 草稿(Markdown)
137
275
  4. `final` — PRD 最终版(Markdown)
138
276
 
139
- ## 安装
140
-
141
- ```bash
142
- npm install -g @s_s/harmonia
143
- ```
277
+ ### 自定义工作流
144
278
 
145
- ## 快速开始
279
+ Harmonia 使用两层工作流查找机制:
146
280
 
147
- ```bash
148
- harmonia setup --agent openclaw
149
- ```
281
+ 1. **自定义目录**(高优先级):`<data_dir>/harmonia/.workflows/<name>/`
282
+ 2. **内置目录**(回退):`<package>/workflows/<name>/`
150
283
 
151
- `harmonia setup` 一键完成:
284
+ 自定义工作流会覆盖同名的内置工作流。内置工作流随包版本自动更新,零维护。
152
285
 
153
- 1. 注入 PM 提示词到 agent 配置文件(AGENTS.md / CLAUDE.md)
154
- 2. 安装 agent hook 脚本(边界守卫 + 主动提醒)
286
+ 在全局数据目录下创建 `.workflows/<name>/` 目录:
155
287
 
156
- 之后启动你的 AI 编程助手,PM 会自动通过 `project_init` 注册项目,通过 `project_status` 获取项目信息。
288
+ ```
289
+ <data_dir>/harmonia/.workflows/
290
+ └── my-workflow/
291
+ ├── workflow.json # 工作流定义(阶段、角色、文档类型)
292
+ ├── roles/ # 角色提示词
293
+ │ ├── pm.md
294
+ │ └── ...
295
+ └── schemas/ # 文档 Schema(可选)
296
+ ├── prd.json
297
+ ├── prd.requirements.json # 步骤 Schema
298
+ └── ...
299
+ ```
157
300
 
158
- ### CLI 命令
301
+ `workflow.json` 格式:
159
302
 
303
+ ```json
304
+ {
305
+ "name": "my-workflow",
306
+ "description": "自定义工作流描述",
307
+ "version": "1.0.0",
308
+ "author": "your-name",
309
+ "phases": [ ... ],
310
+ "docs": { ... }
311
+ }
160
312
  ```
161
- harmonia 启动 MCP stdio 服务器(供 agent 调用)
162
- harmonia setup 初始化 agent 配置(注入提示词 + 安装 hook)
163
- harmonia --help 显示帮助信息
164
- harmonia --version 显示版本号
165
- ```
166
313
 
167
- `setup` 选项:
314
+ 可参考内置 `dev` 工作流(`node_modules/@s_s/harmonia/workflows/dev/`)作为模板。
315
+
316
+ 工作流选择规则:
168
317
 
169
- | 选项 | 说明 | 默认值 |
170
- | ---------------- | ------------------------------------------------------------- | ---------------------------------------------------------- |
171
- | `--agent <type>` | agent 类型:`opencode` / `claude-code` / `codex` / `openclaw` | 建议显式指定。省略时通过 cwd 和 `~` 下的配置文件自动检测。 |
318
+ - 只有一个可用工作流时自动选中
319
+ - 多个可用工作流时,需在 `project_init` 中指定 `workflow` 参数
172
320
 
173
- ## 配置
321
+ ## 覆盖配置
174
322
 
175
- Harmonia 注册为 MCP 服务器。
323
+ Harmonia 提供三层合并的配置覆盖系统,让你无需修改工作流定义即可自定义行为。
176
324
 
177
- <details>
178
- <summary><strong>Claude Code</strong></summary>
325
+ ### 合并优先级
179
326
 
180
- 通过命令行:
327
+ ```
328
+ 项目级 overrides.json > 全局 overrides.json > 工作流默认值
329
+ ```
181
330
 
182
- ```bash
183
- claude mcp add --transport stdio harmonia -- harmonia
331
+ | 层级 | 文件位置 | 作用域 |
332
+ | ------------ | ---------------------------------------------- | ---------------------- |
333
+ | 工作流默认值 | `workflow.json` 中的定义 | 所有使用该工作流的项目 |
334
+ | 全局覆盖 | `<data_dir>/harmonia/overrides.json` | 所有项目 |
335
+ | 项目覆盖 | `<data_dir>/harmonia/<project>/overrides.json` | 仅该项目(跨迭代共享) |
336
+
337
+ 项目级覆盖只需要写你想改的字段,未设置的字段自动回退到全局覆盖,再回退到工作流默认值。
338
+
339
+ ### 完整结构
340
+
341
+ ```typescript
342
+ // overrides.json 的完整类型定义
343
+ interface OverrideConfig {
344
+ // 审批规则
345
+ review?: boolean | Record<string, boolean>;
346
+
347
+ // 角色配置
348
+ roles?: Record<
349
+ string,
350
+ {
351
+ agent?: 'opencode' | 'claude-code' | 'openclaw' | 'codex';
352
+ model?: string;
353
+ capabilities?: Record<
354
+ string,
355
+ {
356
+ type: 'skill' | 'mcp';
357
+ tool: string;
358
+ server?: string; // type 为 'mcp' 时必填
359
+ params?: Record<string, unknown>;
360
+ notes?: string;
361
+ }
362
+ >;
363
+ }
364
+ >;
365
+ }
184
366
  ```
185
367
 
186
- 或添加到 `.mcp.json`:
368
+ 完整示例:
187
369
 
188
370
  ```json
189
371
  {
190
- "mcpServers": {
191
- "harmonia": {
192
- "command": "harmonia"
372
+ "review": {
373
+ "prd": true,
374
+ "tech-design": true,
375
+ "prototype": false
376
+ },
377
+ "roles": {
378
+ "architect": {
379
+ "agent": "claude-code",
380
+ "model": "claude-sonnet-4-20250514"
381
+ },
382
+ "developer": {
383
+ "agent": "opencode",
384
+ "model": "claude-sonnet-4-20250514",
385
+ "capabilities": {
386
+ "read_file": {
387
+ "type": "mcp",
388
+ "tool": "read_file",
389
+ "server": "filesystem"
390
+ }
391
+ }
193
392
  }
194
393
  }
195
394
  }
196
395
  ```
197
396
 
198
- </details>
397
+ ### 审批规则(review)
199
398
 
200
- <details>
201
- <summary><strong>OpenCode</strong></summary>
399
+ 控制哪些文档在 `doc_write` 后需要用户通过 `doc_approve` 审批。
202
400
 
203
- 添加到 `opencode.json`:
401
+ 三种配置方式:
402
+
403
+ | 写法 | 含义 |
404
+ | ------------------------------------------------ | ---------------------------------------------------------------------- |
405
+ | `"review": true` | 全局开启——所有文档写入后都需要审批 |
406
+ | `"review": false` | 全局关闭——所有文档写入后无需审批 |
407
+ | `"review": { "prd": true, "tech-design": true }` | 按文档类型逐一控制——只有指定为 `true` 的需要审批,未列出的回退到下一层 |
408
+
409
+ `dev` 工作流默认审批的文档:
410
+
411
+ | 文档 | 默认 review |
412
+ | ----------- | ----------- |
413
+ | `prd` | `true` |
414
+ | `prototype` | `true` |
415
+ | 其余 13 种 | `false` |
416
+
417
+ 通过 `review_set_rule` 工具设置,或直接编辑 `overrides.json`。
418
+
419
+ ### 角色配置(agent / model)
420
+
421
+ 为角色指定执行的 agent 类型和模型:
204
422
 
205
423
  ```json
206
424
  {
207
- "mcp": {
208
- "harmonia": {
209
- "type": "local",
210
- "command": ["harmonia"]
425
+ "roles": {
426
+ "architect": {
427
+ "agent": "claude-code",
428
+ "model": "claude-sonnet-4-20250514"
211
429
  }
212
430
  }
213
431
  }
214
432
  ```
215
433
 
434
+ - `agent` — 执行该角色的 AI 编程助手类型
435
+ - `model` — 覆盖角色的默认模型(角色提示词 frontmatter 中定义了默认模型等级:`strong` / `medium`)
436
+
437
+ 通过 `guard_set` 工具设置,或直接编辑 `overrides.json`。
438
+
439
+ ### 能力映射(capabilities)
440
+
441
+ 角色提示词中声明了该角色需要的抽象能力(如"读取文件"、"分析代码库"),能力映射将这些抽象能力绑定到具体的工具实现。
442
+
443
+ `dev` 工作流各角色的能力:
444
+
445
+ <details>
446
+ <summary><strong>PM</strong>(10 个能力)</summary>
447
+
448
+ | 能力 ID | 描述 |
449
+ | ---------------------- | -------------------------- |
450
+ | `clarify-requirements` | 与用户沟通,理解和澄清需求 |
451
+ | `assess-scale` | 评估项目规模 |
452
+ | `write-prd` | 撰写需求文档 |
453
+ | `write-user-stories` | 撰写用户故事和验收标准 |
454
+ | `write-fsd` | 撰写功能规格文档 |
455
+ | `write-prototype` | 创建高保真 HTML 原型 |
456
+ | `write-project-plan` | 撰写项目计划 |
457
+ | `dispatch-tasks` | 将任务分派给开发者 |
458
+ | `track-progress` | 跟踪项目进度和阶段状态 |
459
+ | `accept-deliver` | 验收成果并输出复盘记录 |
460
+
216
461
  </details>
217
462
 
218
463
  <details>
219
- <summary><strong>Codex</strong></summary>
464
+ <summary><strong>架构师</strong>(6 个能力)</summary>
220
465
 
221
- 通过命令行:
466
+ | 能力 ID | 描述 |
467
+ | ----------------------- | -------------------- |
468
+ | `analyze-codebase` | 阅读理解现有代码结构 |
469
+ | `write-tech-design` | 撰写技术方案文档 |
470
+ | `write-data-model` | 设计数据模型 |
471
+ | `write-api-design` | 设计 API 接口 |
472
+ | `write-task-breakdown` | 拆解开发任务 |
473
+ | `write-risk-assessment` | 评估技术风险 |
222
474
 
223
- ```bash
224
- codex mcp add harmonia -- harmonia
225
- ```
475
+ </details>
226
476
 
227
- 或添加到 `~/.codex/config.toml`:
477
+ <details>
478
+ <summary><strong>开发者</strong>(3 个能力)</summary>
228
479
 
229
- ```toml
230
- [mcp_servers.harmonia]
231
- command = "harmonia"
232
- ```
480
+ | 能力 ID | 描述 |
481
+ | ------------------ | ------------------------------------ |
482
+ | `implement-code` | 按任务拆解编码实现功能 |
483
+ | `write-unit-tests` | 为关键逻辑编写单元测试 |
484
+ | `ensure-quality` | 代码质量保障(lint、类型检查、规范) |
233
485
 
234
486
  </details>
235
487
 
236
488
  <details>
237
- <summary><strong>OpenClaw</strong>(通过 mcporter)</summary>
489
+ <summary><strong>测试</strong>(3 个能力)</summary>
238
490
 
239
- 添加到 `config/mcporter.json`(全局配置用 `~/.mcporter/mcporter.json`):
491
+ | 能力 ID | 描述 |
492
+ | ------------------- | ------------------ |
493
+ | `write-test-plan` | 撰写测试计划 |
494
+ | `execute-tests` | 编写并执行测试用例 |
495
+ | `write-test-report` | 撰写测试报告 |
496
+
497
+ </details>
498
+
499
+ 配置示例——将架构师的"分析代码库"能力绑定到 MCP filesystem 工具:
240
500
 
241
501
  ```json
242
502
  {
243
- "mcpServers": {
244
- "harmonia": {
245
- "command": "harmonia"
503
+ "roles": {
504
+ "architect": {
505
+ "capabilities": {
506
+ "analyze-codebase": {
507
+ "type": "mcp",
508
+ "tool": "read_file",
509
+ "server": "filesystem",
510
+ "notes": "用于读取项目源码文件"
511
+ }
512
+ }
246
513
  }
247
514
  }
248
515
  }
249
516
  ```
250
517
 
251
- 或通过 mcporter 命令行:
252
-
253
- ```bash
254
- mcporter config add harmonia --command harmonia --scope home
255
- ```
518
+ 通过 `guard_set` 工具设置,或直接编辑 `overrides.json`。
256
519
 
257
- </details>
258
-
259
- ## 全局目录
520
+ ## 数据目录
260
521
 
261
522
  Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [agent-kit](https://github.com/anthropics/agent-kit) 管理),**不会在项目源码目录中创建任何文件**。
262
523
 
263
- 全局目录结构:
264
-
265
524
  ```
266
525
  <data_dir>/harmonia/
526
+ ├── registry.json # 项目注册表
267
527
  ├── overrides.json # 全局覆盖配置
268
528
  ├── .workflows/ # 自定义工作流目录
269
529
  │ └── <workflow_name>/
@@ -271,68 +531,27 @@ Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [
271
531
  │ ├── roles/
272
532
  │ └── schemas/
273
533
  ├── <project_name>/
274
- │ ├── state.json # 项目状态(当前阶段、规模等)
275
- │ ├── steps.json # 文档步骤进度
276
- │ ├── overrides.json # 项目级覆盖配置
277
- │ ├── docs/ # 文档产出物
278
- │ │ ├── prd.md
279
- │ │ ├── prd.requirements.json # 步骤产出物
280
- │ │ ├── tech-design.md
534
+ │ ├── overrides.json # 项目级覆盖配置(跨迭代共享)
535
+ │ ├── iter-1/ # 第 1 次迭代
536
+ ├── state.json # 项目状态(当前阶段、规模等)
537
+ ├── sessions.json # 会话记录
538
+ │ │ ├── dispatches.json # 调度记录
539
+ │ │ ├── reviews.json # 审批记录
540
+ │ │ ├── steps.json # 文档步骤进度
541
+ │ │ └── docs/ # 文档产出物
542
+ │ │ ├── prd.md
543
+ │ │ ├── prd.requirements.json
544
+ │ │ └── ...
545
+ │ ├── iter-2/ # 第 2 次迭代
281
546
  │ │ └── ...
282
- ├── reviews/ # 审批记录
283
- │ └── dispatch/ # 调度记录
547
+ └── ...
284
548
  └── <other_project>/
285
549
  └── ...
286
550
  ```
287
551
 
288
- ## 自定义工作流
289
-
290
- Harmonia 使用两层工作流查找机制:
291
-
292
- 1. **自定义目录**(高优先级):`<data_dir>/harmonia/.workflows/<name>/`
293
- 2. **内置目录**(回退):`<package>/workflows/<name>/`
294
-
295
- 自定义工作流会覆盖同名的内置工作流。内置工作流随包版本自动更新,零维护。
296
-
297
- ### 创建自定义工作流
298
-
299
- 在全局数据目录下创建 `.workflows/<name>/` 目录:
300
-
301
- ```
302
- <data_dir>/harmonia/.workflows/
303
- └── my-workflow/
304
- ├── workflow.json # 工作流定义(阶段、角色、文档类型)
305
- ├── roles/ # 角色提示词
306
- │ ├── pm.md
307
- │ └── ...
308
- └── schemas/ # 文档 Schema(可选)
309
- ├── prd.json
310
- ├── prd.requirements.json # 步骤 Schema
311
- └── ...
312
- ```
313
-
314
- ### workflow.json 格式
315
-
316
- ```json
317
- {
318
- "name": "my-workflow",
319
- "description": "自定义工作流描述",
320
- "version": "1.0.0",
321
- "author": "your-name",
322
- "phases": [ ... ],
323
- "docs": { ... }
324
- }
325
- ```
326
-
327
- 可参考内置 `dev` 工作流(`node_modules/@s_s/harmonia/workflows/dev/`)作为模板。
328
-
329
- ### project_init 工作流选择
330
-
331
- - 只有一个可用工作流时自动选中
332
- - 多个可用工作流时,需在 `project_init` 中指定 `workflow` 参数
333
- - 示例:`project_init(project_name="my-app", project_dir="/path/to/src", workflow="my-workflow")`
552
+ ## 开发
334
553
 
335
- ## 项目结构
554
+ ### 项目结构
336
555
 
337
556
  ```
338
557
  harmonia/
@@ -344,15 +563,15 @@ harmonia/
344
563
  │ │ ├── types.ts # 核心类型定义
345
564
  │ │ ├── state.ts # 项目状态管理
346
565
  │ │ ├── docs.ts # 文档读写
347
- │ │ ├── schema.ts # P0 Schema 校验引擎
348
- │ │ ├── steps.ts # P3 步骤管理
566
+ │ │ ├── schema.ts # Schema 校验引擎
567
+ │ │ ├── steps.ts # 步骤管理
349
568
  │ │ ├── dispatch.ts # 角色调度
350
569
  │ │ ├── registry.ts # 项目注册表
351
570
  │ │ ├── workflow.ts # 工作流加载
352
- │ │ ├── overrides.ts # 工具约束管理
571
+ │ │ ├── overrides.ts # 覆盖配置管理
353
572
  │ │ └── reviews.ts # 文档审批
354
- │ ├── tools/ # 11 个 MCP 工具注册
355
- │ ├── hooks/ # P2 Agent Hook 系统
573
+ │ ├── tools/ # MCP 工具注册
574
+ │ ├── hooks/ # Agent Hook 系统
356
575
  │ │ ├── content.ts # Hook 内容生成
357
576
  │ │ ├── install.ts # Hook 安装逻辑
358
577
  │ │ ├── claude-code.ts # Claude Code hook 适配
@@ -366,30 +585,19 @@ harmonia/
366
585
  │ ├── workflow.json # 工作流定义
367
586
  │ ├── roles/ # 角色提示词 (pm.md, architect.md, ...)
368
587
  │ └── schemas/ # 文档 + 步骤 Schema
369
- ├── tests/ # 测试 (261 tests, 13 files)
370
- └── .dev-logs/ # 开发日志
588
+ └── tests/ # 测试
371
589
  ```
372
590
 
373
- ## 开发
591
+ ### 开发命令
374
592
 
375
593
  ```bash
376
- # 安装依赖
377
- npm install
378
-
379
- # 构建
380
- npm run build
381
-
382
- # 开发模式(watch)
383
- npm run dev
384
-
385
- # 运行测试
386
- npm test
387
-
388
- # 运行测试(watch 模式)
389
- npm run test:watch
390
-
391
- # 代码格式化
392
- npm run prettier:fix
594
+ npm install # 安装依赖
595
+ npm run build # 构建
596
+ npm run dev # 开发模式(watch)
597
+ npm test # 运行测试
598
+ npm run test:watch # 测试 watch 模式
599
+ npm run prettier:fix # 代码格式化
600
+ npm run release # 发布版本
393
601
  ```
394
602
 
395
603
  ## License