@s_s/harmonia 1.2.0 → 1.4.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 (180) hide show
  1. package/README.md +140 -392
  2. package/build/cli/setup.d.ts +4 -2
  3. package/build/cli/setup.js +44 -18
  4. package/build/cli/setup.js.map +1 -1
  5. package/build/core/action-registry.d.ts +36 -0
  6. package/build/core/action-registry.js +53 -0
  7. package/build/core/action-registry.js.map +1 -0
  8. package/build/core/artifacts.d.ts +66 -0
  9. package/build/core/artifacts.js +178 -0
  10. package/build/core/artifacts.js.map +1 -0
  11. package/build/core/dispatch.d.ts +18 -11
  12. package/build/core/dispatch.js +43 -33
  13. package/build/core/dispatch.js.map +1 -1
  14. package/build/core/issues.d.ts +37 -0
  15. package/build/core/issues.js +100 -0
  16. package/build/core/issues.js.map +1 -0
  17. package/build/core/overrides.d.ts +19 -26
  18. package/build/core/overrides.js +32 -98
  19. package/build/core/overrides.js.map +1 -1
  20. package/build/core/plugin.d.ts +86 -0
  21. package/build/core/plugin.js +332 -0
  22. package/build/core/plugin.js.map +1 -0
  23. package/build/core/registry.d.ts +36 -3
  24. package/build/core/registry.js +63 -5
  25. package/build/core/registry.js.map +1 -1
  26. package/build/core/reviews.d.ts +13 -13
  27. package/build/core/reviews.js +31 -32
  28. package/build/core/reviews.js.map +1 -1
  29. package/build/core/schema.d.ts +43 -15
  30. package/build/core/schema.js +124 -20
  31. package/build/core/schema.js.map +1 -1
  32. package/build/core/state.d.ts +29 -22
  33. package/build/core/state.js +49 -81
  34. package/build/core/state.js.map +1 -1
  35. package/build/core/steps.d.ts +15 -15
  36. package/build/core/steps.js +32 -33
  37. package/build/core/steps.js.map +1 -1
  38. package/build/core/tree-utils.d.ts +52 -0
  39. package/build/core/tree-utils.js +226 -0
  40. package/build/core/tree-utils.js.map +1 -0
  41. package/build/core/types.d.ts +417 -117
  42. package/build/core/types.js +15 -1
  43. package/build/core/types.js.map +1 -1
  44. package/build/core/workflow-engine.d.ts +68 -0
  45. package/build/core/workflow-engine.js +821 -0
  46. package/build/core/workflow-engine.js.map +1 -0
  47. package/build/core/workflow-validator.d.ts +22 -0
  48. package/build/core/workflow-validator.js +489 -0
  49. package/build/core/workflow-validator.js.map +1 -0
  50. package/build/index.js +28 -25
  51. package/build/index.js.map +1 -1
  52. package/build/setup/inject.d.ts +4 -4
  53. package/build/setup/inject.js +6 -6
  54. package/build/setup/inject.js.map +1 -1
  55. package/build/setup/templates.d.ts +9 -7
  56. package/build/setup/templates.js +68 -103
  57. package/build/setup/templates.js.map +1 -1
  58. package/build/tools/artifact-approve.d.ts +8 -0
  59. package/build/tools/artifact-approve.js +94 -0
  60. package/build/tools/artifact-approve.js.map +1 -0
  61. package/build/tools/artifact-schema.d.ts +12 -0
  62. package/build/tools/artifact-schema.js +148 -0
  63. package/build/tools/artifact-schema.js.map +1 -0
  64. package/build/tools/artifact-tools.d.ts +18 -0
  65. package/build/tools/artifact-tools.js +465 -0
  66. package/build/tools/artifact-tools.js.map +1 -0
  67. package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
  68. package/build/tools/dispatch-report.js +261 -0
  69. package/build/tools/dispatch-report.js.map +1 -0
  70. package/build/tools/engine-helpers.d.ts +41 -0
  71. package/build/tools/engine-helpers.js +182 -0
  72. package/build/tools/engine-helpers.js.map +1 -0
  73. package/build/tools/get-project-status.d.ts +6 -4
  74. package/build/tools/get-project-status.js +308 -246
  75. package/build/tools/get-project-status.js.map +1 -1
  76. package/build/tools/get-role-prompt.d.ts +1 -1
  77. package/build/tools/get-role-prompt.js +7 -41
  78. package/build/tools/get-role-prompt.js.map +1 -1
  79. package/build/tools/issue-tools.d.ts +10 -0
  80. package/build/tools/issue-tools.js +169 -0
  81. package/build/tools/issue-tools.js.map +1 -0
  82. package/build/tools/iteration-start.d.ts +7 -4
  83. package/build/tools/iteration-start.js +51 -20
  84. package/build/tools/iteration-start.js.map +1 -1
  85. package/build/tools/loop-done.d.ts +11 -0
  86. package/build/tools/loop-done.js +109 -0
  87. package/build/tools/loop-done.js.map +1 -0
  88. package/build/tools/patch-start.d.ts +16 -0
  89. package/build/tools/patch-start.js +122 -0
  90. package/build/tools/patch-start.js.map +1 -0
  91. package/build/tools/project-init.d.ts +5 -5
  92. package/build/tools/project-init.js +47 -18
  93. package/build/tools/project-init.js.map +1 -1
  94. package/build/tools/role-dispatch.d.ts +55 -0
  95. package/build/tools/role-dispatch.js +508 -0
  96. package/build/tools/role-dispatch.js.map +1 -0
  97. package/build/tools/utils.d.ts +40 -0
  98. package/build/tools/utils.js +97 -0
  99. package/build/tools/utils.js.map +1 -0
  100. package/package.json +1 -1
  101. package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
  102. package/{build → workflows/dev}/hooks/content.js +27 -18
  103. package/workflows/dev/hooks/index.js +52 -0
  104. package/{build → workflows/dev}/hooks/openclaw.js +31 -20
  105. package/{build → workflows/dev}/hooks/opencode.js +31 -20
  106. package/workflows/dev/roles/architect.md +68 -28
  107. package/workflows/dev/roles/coordinator.md +103 -0
  108. package/workflows/dev/roles/developer.md +5 -5
  109. package/workflows/dev/roles/tester.md +19 -19
  110. package/workflows/dev/schemas/api-contract.json +42 -0
  111. package/workflows/dev/schemas/api-design.json +30 -13
  112. package/workflows/dev/schemas/data-model.json +20 -7
  113. package/workflows/dev/schemas/prd.completeness-check.json +6 -5
  114. package/workflows/dev/schemas/prd.draft.json +13 -5
  115. package/workflows/dev/schemas/prd.final.json +34 -11
  116. package/workflows/dev/schemas/prd.json +29 -11
  117. package/workflows/dev/schemas/prd.requirements.json +6 -5
  118. package/workflows/dev/schemas/prototype.json +6 -2
  119. package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
  120. package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
  121. package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
  122. package/workflows/dev/schemas/task-breakdown.final.json +8 -3
  123. package/workflows/dev/schemas/task-breakdown.json +8 -3
  124. package/workflows/dev/schemas/tech-design.analysis.json +6 -5
  125. package/workflows/dev/schemas/tech-design.draft.json +14 -5
  126. package/workflows/dev/schemas/tech-design.final.json +39 -13
  127. package/workflows/dev/schemas/tech-design.json +34 -13
  128. package/workflows/dev/schemas/tech-design.research.json +21 -0
  129. package/workflows/dev/schemas/test-plan.json +17 -7
  130. package/workflows/dev/schemas/test-report.json +26 -9
  131. package/workflows/dev/schemas/user-stories.json +7 -3
  132. package/workflows/dev/tools/index.js +23 -0
  133. package/workflows/dev/workflow.json +234 -101
  134. package/build/core/docs.d.ts +0 -32
  135. package/build/core/docs.js +0 -91
  136. package/build/core/docs.js.map +0 -1
  137. package/build/core/workflow.d.ts +0 -33
  138. package/build/core/workflow.js +0 -140
  139. package/build/core/workflow.js.map +0 -1
  140. package/build/hooks/claude-code.d.ts +0 -20
  141. package/build/hooks/claude-code.js.map +0 -1
  142. package/build/hooks/content.d.ts +0 -43
  143. package/build/hooks/content.js.map +0 -1
  144. package/build/hooks/install.d.ts +0 -40
  145. package/build/hooks/install.js +0 -63
  146. package/build/hooks/install.js.map +0 -1
  147. package/build/hooks/openclaw.d.ts +0 -24
  148. package/build/hooks/openclaw.js.map +0 -1
  149. package/build/hooks/opencode.d.ts +0 -29
  150. package/build/hooks/opencode.js.map +0 -1
  151. package/build/tools/approve-doc.d.ts +0 -6
  152. package/build/tools/approve-doc.js +0 -108
  153. package/build/tools/approve-doc.js.map +0 -1
  154. package/build/tools/dispatch-role.d.ts +0 -16
  155. package/build/tools/dispatch-role.js +0 -277
  156. package/build/tools/dispatch-role.js.map +0 -1
  157. package/build/tools/doc-tools.d.ts +0 -16
  158. package/build/tools/doc-tools.js +0 -389
  159. package/build/tools/doc-tools.js.map +0 -1
  160. package/build/tools/override-tools.d.ts +0 -6
  161. package/build/tools/override-tools.js +0 -129
  162. package/build/tools/override-tools.js.map +0 -1
  163. package/build/tools/report-dispatch.js +0 -194
  164. package/build/tools/report-dispatch.js.map +0 -1
  165. package/build/tools/set-scale.d.ts +0 -6
  166. package/build/tools/set-scale.js +0 -107
  167. package/build/tools/set-scale.js.map +0 -1
  168. package/build/tools/setup-project.d.ts +0 -8
  169. package/build/tools/setup-project.js +0 -116
  170. package/build/tools/setup-project.js.map +0 -1
  171. package/build/tools/update-phase.d.ts +0 -12
  172. package/build/tools/update-phase.js +0 -159
  173. package/build/tools/update-phase.js.map +0 -1
  174. package/workflows/dev/roles/pm.md +0 -99
  175. package/workflows/dev/schemas/deploy.json +0 -20
  176. package/workflows/dev/schemas/fsd.json +0 -25
  177. package/workflows/dev/schemas/project-plan.json +0 -20
  178. package/workflows/dev/schemas/retrospective.json +0 -20
  179. package/workflows/dev/schemas/risk-assessment.json +0 -15
  180. package/workflows/dev/schemas/tech-design.api-contract.json +0 -20
package/README.md CHANGED
@@ -2,24 +2,56 @@
2
2
 
3
3
  > _众声喧哗之中,和谐不是沉默,而是各得其所。_
4
4
 
5
- Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的智能体编排服务器。它为 AI 编程助手(Claude Code、OpenCode、OpenClaw、Codex)提供项目管理工具,让多个 AI agent 在预定义的工作流中按角色协作完成软件开发任务。
5
+ Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的**通用多代理协作框架**。它为 AI 编程助手(Claude Code、OpenCode、OpenClaw、Codex)提供工作流编排工具,让多个 AI agent 在**可插拔的工作流**中按角色协作完成任务。
6
6
 
7
7
  ## 核心理念
8
8
 
9
- - **角色分离**PM、架构师、开发者、测试各司其职,通过文档交接而非直接对话
10
- - **流程驱动**预定义的阶段和文档类型确保不跳步骤
11
- - **数据隔离**所有项目数据存储在平台数据目录(非项目源码目录),不污染代码仓库
12
- - **可插拔工作流**工作流定义为 JSON,可扩展自定义
9
+ - **节点树驱动**工作流定义为节点树(sequence / parallel / task / gate / loop),支持条件分支、循环迭代、失败重试、并行执行
10
+ - **角色分离**Coordinator、架构师、开发者、测试各司其职,通过产出(artifact)交接而非直接对话
11
+ - **可插拔工作流**工作流以插件形式存在,包含节点树定义、角色提示词、产出 Schema、钩子脚本
12
+ - **数据隔离**所有项目数据存储在平台数据目录,不污染代码仓库
13
+ - **被动式引擎** — Core 是决策计算器,通过 `nextAction` 指导 Coordinator 驱动工作流前进
13
14
 
14
15
  ## 特性
15
16
 
16
- - **工作流编排** — 5 阶段、4 角色、15 种文档类型,按项目规模自动调整
17
- - **迭代管理**同一项目支持多次迭代,每次迭代独立的状态和文档
18
- - **文档结构校验**Markdown 标题结构和 JSON 字段/类型自动校验
19
- - **逐步文档写入**大型文档拆分为多步,每步独立校验,支持步骤回滚
20
- - **覆盖配置** — 三层合并的配置系统,灵活控制审批规则、角色绑定、能力映射
21
- - **跨 Agent 边界守卫** — hook 脚本拦截越权操作 + 角色提示词注入约束上下文
22
- - **工具访问控制** — 基于 MCP tool 级别的角色白名单/黑名单
17
+ - **节点树工作流** — 5 种节点类型(task / sequence / parallel / gate / loop),声明式定义复杂工作流
18
+ - **Gate 条件引擎** 支持 `artifact_exists`、`artifact_approved`、`artifact_field` 三种条件,自动评估
19
+ - **产出系统**通用的读写 / 审批机制,Schema 校验,逐步写入支持
20
+ - **迭代管理**同一项目支持多次迭代,每次迭代独立的状态和产出
21
+ - **覆盖配置** — 两层合并(项目级 > 工作流默认值),灵活控制审批规则和角色绑定
22
+ - **跨 Agent 边界守卫** — Hook 脚本拦截越权操作 + 角色提示词注入约束上下文
23
+
24
+ ## 架构概览
25
+
26
+ ```
27
+ ┌─────────────────────────────────────────────┐
28
+ │ AI 编程助手(Claude Code / OpenCode / ...) │
29
+ │ └─ Coordinator 角色 │
30
+ │ ↕ MCP Tool 调用 │
31
+ ├─────────────────────────────────────────────┤
32
+ │ Harmonia Core(MCP Server) │
33
+ │ ┌─────────────┐ ┌──────────────┐ │
34
+ │ │ Workflow │ │ Artifact │ │
35
+ │ │ Engine │ │ System │ │
36
+ │ ├─────────────┤ ├──────────────┤ │
37
+ │ │ Plugin │ │ State │ │
38
+ │ │ Loader │ │ Manager │ │
39
+ │ └─────────────┘ └──────────────┘ │
40
+ ├─────────────────────────────────────────────┤
41
+ │ Workflow Plugin(如 dev) │
42
+ │ ┌──────────┐ ┌──────┐ ┌───────┐ ┌───────┐ │
43
+ │ │workflow │ │roles/│ │schemas│ │hooks │ │
44
+ │ │.json │ │*.md │ │/*.json│ │.js │ │
45
+ │ └──────────┘ └──────┘ └───────┘ └───────┘ │
46
+ └─────────────────────────────────────────────┘
47
+ ```
48
+
49
+ **核心交互循环:**
50
+
51
+ 1. Coordinator 调用 MCP 工具(dispatch、artifact_write 等)
52
+ 2. Core 处理调用,同步评估工作流状态(节点状态、Gate 条件)
53
+ 3. Core 返回结果 + `nextAction` 字段——告知 Coordinator 下一步操作
54
+ 4. Coordinator 根据 `nextAction` 继续推进
23
55
 
24
56
  ## 快速开始
25
57
 
@@ -123,14 +155,14 @@ harmonia setup --agent openclaw
123
155
 
124
156
  `harmonia setup` 一键完成:
125
157
 
126
- 1. 注入 PM 提示词到 agent 配置文件(AGENTS.md / CLAUDE.md)
158
+ 1. 注入 Coordinator 提示词到 agent 配置文件(AGENTS.md / CLAUDE.md)
127
159
  2. 安装 agent hook 脚本(边界守卫 + 主动提醒)
128
160
 
129
161
  之后启动你的 AI 编程助手,用自然语言告诉它你要做什么即可。
130
162
 
131
163
  ### 使用示例
132
164
 
133
- setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自然语言描述需求,PM 会自动调用 Harmonia 工具驱动整个流程。
165
+ setup 完成后,AI 编程助手已被注入 Coordinator 提示词。你只需要用自然语言描述需求,Coordinator 会自动调用 Harmonia 工具驱动整个流程。
134
166
 
135
167
  **启动新项目:**
136
168
 
@@ -138,15 +170,7 @@ setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自
138
170
  你:我想开发一个命令行待办事项工具,用 TypeScript 写,支持增删改查和优先级排序。
139
171
  ```
140
172
 
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,不会修改你的源码目录。
173
+ > Coordinator 会先调用 `project_status()` 检查是否有已注册项目,发现没有后,会和你沟通确认项目名称和目录路径,然后调用 `project_init` 注册项目、`iteration_start` 开始第一次迭代,接着根据 `nextAction` 指引开始执行工作流。
150
174
 
151
175
  **继续已注册的项目:**
152
176
 
@@ -154,7 +178,7 @@ setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自
154
178
  你:继续之前的 todo-cli 项目。
155
179
  ```
156
180
 
157
- > PM 调用 `project_status("todo-cli")` 获取当前迭代的阶段、文档、调度记录等状态,根据进度恢复工作。
181
+ > Coordinator 调用 `project_status("todo-cli")` 获取当前节点树状态和进度,根据 `nextAction` 恢复工作。
158
182
 
159
183
  **开始新一轮迭代:**
160
184
 
@@ -162,15 +186,7 @@ setup 完成后,AI 编程助手已被注入 PM 提示词。你只需要用自
162
186
  你:todo-cli 需要加一些新功能,开始新的迭代。
163
187
  ```
164
188
 
165
- > PM 调用 `iteration_start("todo-cli")` 创建新迭代(如 iter-2),从需求澄清阶段重新开始。上一轮迭代的文档和状态保留不变。
166
-
167
- **查看所有项目:**
168
-
169
- ```
170
- 你:我有哪些项目?
171
- ```
172
-
173
- > PM 调用 `project_status()`(无参数)返回所有已注册项目及其当前迭代状态。
189
+ > Coordinator 调用 `iteration_start("todo-cli")` 创建新迭代(如 iter-2),工作流节点树重置,从头开始。
174
190
 
175
191
  ### CLI 命令
176
192
 
@@ -189,342 +205,50 @@ harmonia --version 显示版本号
189
205
 
190
206
  ## MCP 工具一览
191
207
 
192
- | 工具 | 说明 |
193
- | ------------------- | -------------------------------------------------- |
194
- | `project_init` | 注册项目,创建数据目录,初始化工作流 |
195
- | `iteration_start` | 开始新迭代(创建 iter-N 目录,重置阶段状态) |
196
- | `project_set_scale` | 设定项目规模(PRD 审批后,不可更改) |
197
- | `project_status` | 查看项目状态(无参数返回项目列表,有参数返回详情) |
198
- | `phase_update` | 推进项目阶段 |
199
- | `doc_write` | 写入文档(自动 schema 校验,支持逐步写入) |
200
- | `doc_read` | 读取文档内容 |
201
- | `doc_list` | 列出项目所有文档 |
202
- | `doc_approve` | 审批需要 review 的文档(如 PRD) |
203
- | `review_list` | 列出待审批的文档 |
204
- | `review_set_rule` | 设置审批规则覆盖 |
205
- | `role_prompt` | 获取角色提示词(含约束上下文注入) |
206
- | `role_dispatch` | 调度角色执行任务 |
207
- | `dispatch_report` | 角色报告任务完成状态 |
208
- | `guard_set` | 设置角色的 agent/model/能力覆盖 |
209
- | `guard_get` | 查看当前覆盖配置 |
210
-
211
- ## 工作流
212
-
213
- ### 阶段与角色
214
-
215
- Harmonia 使用声明式工作流定义。内置的 `dev` 工作流(软件开发流程)包含 5 个阶段和 4 个角色:
216
-
217
- ```
218
- clarify (需求澄清) → PM 产出 PRD、用户故事
219
-
220
- design (方案设计) → 架构师产出技术方案、任务拆解
221
-
222
- develop (开发) → 开发者按任务拆解编码实现
223
-
224
- test (测试) → 测试编写测试、输出测试报告
225
-
226
- deliver (交付验收) → PM 验收成果、输出复盘记录
227
- ```
228
-
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 的写入流程:
271
-
272
- 1. `requirements` — 需求结构化(JSON)
273
- 2. `completeness-check` — 完整性校验(JSON)
274
- 3. `draft` — PRD 草稿(Markdown)
275
- 4. `final` — PRD 最终版(Markdown)
276
-
277
- ### 自定义工作流
278
-
279
- Harmonia 使用两层工作流查找机制:
280
-
281
- 1. **自定义目录**(高优先级):`<data_dir>/harmonia/.workflows/<name>/`
282
- 2. **内置目录**(回退):`<package>/workflows/<name>/`
283
-
284
- 自定义工作流会覆盖同名的内置工作流。内置工作流随包版本自动更新,零维护。
285
-
286
- 在全局数据目录下创建 `.workflows/<name>/` 目录:
287
-
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
- ```
300
-
301
- `workflow.json` 格式:
302
-
303
- ```json
304
- {
305
- "name": "my-workflow",
306
- "description": "自定义工作流描述",
307
- "version": "1.0.0",
308
- "author": "your-name",
309
- "phases": [ ... ],
310
- "docs": { ... }
311
- }
312
- ```
313
-
314
- 可参考内置 `dev` 工作流(`node_modules/@s_s/harmonia/workflows/dev/`)作为模板。
315
-
316
- 工作流选择规则:
317
-
318
- - 只有一个可用工作流时自动选中
319
- - 多个可用工作流时,需在 `project_init` 中指定 `workflow` 参数
320
-
321
- ## 覆盖配置
322
-
323
- Harmonia 提供三层合并的配置覆盖系统,让你无需修改工作流定义即可自定义行为。
324
-
325
- ### 合并优先级
326
-
327
- ```
328
- 项目级 overrides.json > 全局 overrides.json > 工作流默认值
329
- ```
330
-
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
- }
366
- ```
367
-
368
- 完整示例:
369
-
370
- ```json
371
- {
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
- }
392
- }
393
- }
394
- }
395
- ```
396
-
397
- ### 审批规则(review)
398
-
399
- 控制哪些文档在 `doc_write` 后需要用户通过 `doc_approve` 审批。
400
-
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 类型和模型:
422
-
423
- ```json
424
- {
425
- "roles": {
426
- "architect": {
427
- "agent": "claude-code",
428
- "model": "claude-sonnet-4-20250514"
429
- }
430
- }
431
- }
432
- ```
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
-
461
- </details>
462
-
463
- <details>
464
- <summary><strong>架构师</strong>(6 个能力)</summary>
465
-
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` | 评估技术风险 |
474
-
475
- </details>
476
-
477
- <details>
478
- <summary><strong>开发者</strong>(3 个能力)</summary>
479
-
480
- | 能力 ID | 描述 |
481
- | ------------------ | ------------------------------------ |
482
- | `implement-code` | 按任务拆解编码实现功能 |
483
- | `write-unit-tests` | 为关键逻辑编写单元测试 |
484
- | `ensure-quality` | 代码质量保障(lint、类型检查、规范) |
485
-
486
- </details>
487
-
488
- <details>
489
- <summary><strong>测试</strong>(3 个能力)</summary>
490
-
491
- | 能力 ID | 描述 |
492
- | ------------------- | ------------------ |
493
- | `write-test-plan` | 撰写测试计划 |
494
- | `execute-tests` | 编写并执行测试用例 |
495
- | `write-test-report` | 撰写测试报告 |
496
-
497
- </details>
498
-
499
- 配置示例——将架构师的"分析代码库"能力绑定到 MCP filesystem 工具:
500
-
501
- ```json
502
- {
503
- "roles": {
504
- "architect": {
505
- "capabilities": {
506
- "analyze-codebase": {
507
- "type": "mcp",
508
- "tool": "read_file",
509
- "server": "filesystem",
510
- "notes": "用于读取项目源码文件"
511
- }
512
- }
513
- }
514
- }
515
- }
516
- ```
517
-
518
- 通过 `guard_set` 工具设置,或直接编辑 `overrides.json`。
208
+ | 工具 | 说明 |
209
+ | ------------------ | -------------------------------------------------------------- |
210
+ | `project_init` | 注册项目,创建数据目录,加载工作流插件,安装 Hook |
211
+ | `iteration_start` | 开始新迭代(创建 iter-N 目录,重置节点状态) |
212
+ | `project_status` | 查看项目状态(无参数返回项目列表,有参数返回节点树详情) |
213
+ | `role_dispatch` | 调度角色执行任务(带 nodeId,触发 beforeDispatch 钩子) |
214
+ | `dispatch_report` | 角色报告任务完成/失败(触发 afterComplete 钩子,推进节点状态) |
215
+ | `artifact_write` | 写入产出(自动 Schema 校验,支持逐步写入) |
216
+ | `artifact_read` | 读取产出内容 |
217
+ | `artifact_list` | 列出项目所有产出 |
218
+ | `artifact_schema` | 查看产出的 JSON Schema 定义 |
219
+ | `artifact_approve` | 审批需要 review 的产出 |
220
+ | `review_list` | 列出待审批的产出 |
221
+ | `role_prompt` | 获取角色提示词(含约束上下文注入) |
222
+ | `patch_start` | 热修复模式启动(基于已有迭代快速修复) |
223
+ | `issue_create` | 创建 Issue |
224
+ | `issue_update` | 更新 Issue 状态 |
225
+ | `issue_list` | 列出项目 Issue |
226
+
227
+ ## 工作流系统
228
+
229
+ Harmonia 使用**节点树**定义工作流,支持 5 种节点类型:
230
+
231
+ | 节点类型 | 语义 |
232
+ | ------------ | -------------------------------------------------------------- |
233
+ | **task** | 工作单元,分配给某个角色执行 |
234
+ | **sequence** | 子节点按顺序执行 |
235
+ | **parallel** | 子节点并行执行,需指定 `failStrategy`(fail-fast / wait-all) |
236
+ | **gate** | 条件检查节点,pass/fail 两条路径 |
237
+ | **loop** | 循环节点,重复执行 body 子树直到满足退出条件或达到最大迭代次数 |
238
+
239
+ 工作流通过**插件机制**加载——以目录形式存在,包含 `workflow.json`(节点树 + 产出定义)、角色提示词、产出 Schema 以及可选的钩子/动作模块。内置 `dev` 工作流提供完整的软件开发流程(需求 → 设计 → 开发 → 测试 → 交付),自定义工作流可覆盖或扩展。
240
+
241
+ > **完整的工作流构建指南**(目录结构、workflow.json 字段详解、角色提示词格式、Schema 系统、钩子与动作扩展、覆盖配置、验证规则、内置 dev 工作流参考等)请参阅:
242
+ >
243
+ > [docs/workflow-guide.md](docs/workflow-guide.md)
519
244
 
520
245
  ## 数据目录
521
246
 
522
- Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [agent-kit](https://github.com/anthropics/agent-kit) 管理),**不会在项目源码目录中创建任何文件**。
247
+ Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 @s_s/agent-kit 管理),**不会在项目源码目录中创建任何文件**。
523
248
 
524
249
  ```
525
250
  <data_dir>/harmonia/
526
251
  ├── registry.json # 项目注册表
527
- ├── overrides.json # 全局覆盖配置
528
252
  ├── .workflows/ # 自定义工作流目录
529
253
  │ └── <workflow_name>/
530
254
  │ ├── workflow.json
@@ -533,12 +257,12 @@ Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [
533
257
  ├── <project_name>/
534
258
  │ ├── overrides.json # 项目级覆盖配置(跨迭代共享)
535
259
  │ ├── iter-1/ # 第 1 次迭代
536
- │ │ ├── state.json # 项目状态(当前阶段、规模等)
260
+ │ │ ├── state.json # 工作流状态(节点树状态)
537
261
  │ │ ├── sessions.json # 会话记录
538
262
  │ │ ├── dispatches.json # 调度记录
539
263
  │ │ ├── reviews.json # 审批记录
540
- │ │ ├── steps.json # 文档步骤进度
541
- │ │ └── docs/ # 文档产出物
264
+ │ │ ├── steps.json # 产出步骤进度
265
+ │ │ └── artifacts/ # 产出文件
542
266
  │ │ ├── prd.md
543
267
  │ │ ├── prd.requirements.json
544
268
  │ │ └── ...
@@ -556,36 +280,60 @@ Harmonia 的所有项目数据存储在平台特定的数据目录中(通过 [
556
280
  ```
557
281
  harmonia/
558
282
  ├── src/
559
- │ ├── index.ts # 入口,注册所有 MCP 工具
283
+ │ ├── index.ts # 入口,MCP 服务器 + CLI 路由
560
284
  │ ├── cli/
561
- │ │ └── setup.ts # CLI setup 命令
285
+ │ │ └── setup.ts # CLI setup 命令
562
286
  │ ├── core/
563
- │ │ ├── types.ts # 核心类型定义
564
- │ │ ├── state.ts # 项目状态管理
565
- │ │ ├── docs.ts # 文档读写
566
- │ │ ├── schema.ts # Schema 校验引擎
567
- │ │ ├── steps.ts # 步骤管理
568
- │ │ ├── dispatch.ts # 角色调度
569
- │ │ ├── registry.ts # 项目注册表
570
- │ │ ├── workflow.ts # 工作流加载
571
- │ │ ├── overrides.ts # 覆盖配置管理
572
- │ │ └── reviews.ts # 文档审批
573
- │ ├── tools/ # MCP 工具注册
574
- │ ├── hooks/ # Agent Hook 系统
575
- │ │ ├── content.ts # Hook 内容生成
576
- │ │ ├── install.ts # Hook 安装逻辑
577
- │ │ ├── claude-code.ts # Claude Code hook 适配
578
- ├── opencode.ts # OpenCode hook 适配
579
- │ │ └── openclaw.ts # OpenClaw hook 适配
580
- └── setup/ # 项目初始化设置
581
- ├── inject.ts # 配置注入
582
- └── templates.ts # 模板管理
287
+ │ │ ├── types.ts # 核心类型定义
288
+ │ │ ├── workflow-engine.ts # 工作流状态机引擎
289
+ │ │ ├── workflow-validator.ts # 工作流静态校验
290
+ │ │ ├── tree-utils.ts # 节点树遍历纯函数
291
+ │ │ ├── plugin.ts # 工作流插件加载系统
292
+ │ │ ├── action-registry.ts # 节点钩子动作注册
293
+ │ │ ├── state.ts # 工作流状态管理
294
+ │ │ ├── artifacts.ts # 产出读写
295
+ │ │ ├── schema.ts # Schema 校验引擎
296
+ │ │ ├── steps.ts # 步骤管理
297
+ ├── dispatch.ts # 角色调度
298
+ ├── registry.ts # 项目注册表
299
+ │ │ ├── overrides.ts # 覆盖配置管理
300
+ │ │ ├── reviews.ts # 产出审批
301
+ │ │ └── issues.ts # Issue 管理
302
+ │ ├── tools/ # MCP 工具注册
303
+ │ │ ├── engine-helpers.ts # 引擎集成共享层
304
+ │ ├── project-init.ts # project_init
305
+ ├── iteration-start.ts # iteration_start
306
+ │ ├── get-project-status.ts # project_status
307
+ │ │ ├── get-role-prompt.ts # role_prompt
308
+ │ │ ├── role-dispatch.ts # role_dispatch
309
+ │ │ ├── dispatch-report.ts # dispatch_report
310
+ │ │ ├── artifact-tools.ts # artifact_write/read/list
311
+ │ │ ├── artifact-schema.ts # artifact_schema
312
+ │ │ ├── artifact-approve.ts # artifact_approve + review_list
313
+ │ │ ├── patch-start.ts # patch_start
314
+ │ │ ├── issue-tools.ts # issue_create/update/list
315
+ │ │ └── utils.ts # 工具共享辅助函数
316
+ │ └── setup/ # 项目初始化设置
317
+ │ ├── inject.ts # 配置注入
318
+ │ └── templates.ts # Coordinator 提示词模板
583
319
  ├── workflows/
584
- │ └── dev/
585
- │ ├── workflow.json # 工作流定义
586
- │ ├── roles/ # 角色提示词 (pm.md, architect.md, ...)
587
- └── schemas/ # 文档 + 步骤 Schema
588
- └── tests/ # 测试
320
+ │ └── dev/ # 内置 dev 工作流插件
321
+ │ ├── workflow.json # 节点树定义(v2.0.0)
322
+ │ ├── hooks/ # Hook 模块
323
+ │ ├── index.js # 入口,导出 createHooks()
324
+ │ │ ├── content.js # Hook 共享常量与内容
325
+ │ │ ├── claude.js # Claude Code hook 生成器
326
+ │ │ ├── opencode.js # OpenCode hook 生成器
327
+ │ │ └── openclaw.js # OpenClaw hook 生成器
328
+ │ ├── tools/ # Action 模块
329
+ │ │ └── index.js # 导出 registerActions()(节点钩子动作)
330
+ │ ├── roles/ # 角色提示词
331
+ │ │ ├── coordinator.md
332
+ │ │ ├── architect.md
333
+ │ │ ├── developer.md
334
+ │ │ └── tester.md
335
+ │ └── schemas/ # 产出 + 步骤 Schema(26 个)
336
+ └── tests/ # 测试(21 个文件,416 个测试)
589
337
  ```
590
338
 
591
339
  ### 开发命令
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * CLI command: harmonia setup
3
3
  *
4
- * Prompt injection + hook installation only.
5
- * No project registration, no state init PM does that at runtime via MCP tools.
4
+ * Prompt injection only.
5
+ * No project registration, no state init, no hook installation.
6
+ * Coordinator does project registration at runtime via MCP tools (project_init),
7
+ * which also handles hook installation.
6
8
  *
7
9
  * Usage:
8
10
  * harmonia setup [options]