@s_s/harmonia 1.3.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.
- package/README.md +140 -392
- package/build/cli/setup.d.ts +4 -2
- package/build/cli/setup.js +44 -18
- package/build/cli/setup.js.map +1 -1
- package/build/core/action-registry.d.ts +36 -0
- package/build/core/action-registry.js +53 -0
- package/build/core/action-registry.js.map +1 -0
- package/build/core/artifacts.d.ts +66 -0
- package/build/core/artifacts.js +178 -0
- package/build/core/artifacts.js.map +1 -0
- package/build/core/dispatch.d.ts +6 -2
- package/build/core/dispatch.js +12 -7
- package/build/core/dispatch.js.map +1 -1
- package/build/core/overrides.d.ts +19 -26
- package/build/core/overrides.js +32 -98
- package/build/core/overrides.js.map +1 -1
- package/build/core/plugin.d.ts +86 -0
- package/build/core/plugin.js +332 -0
- package/build/core/plugin.js.map +1 -0
- package/build/core/registry.d.ts +4 -5
- package/build/core/registry.js +8 -9
- package/build/core/registry.js.map +1 -1
- package/build/core/reviews.d.ts +11 -12
- package/build/core/reviews.js +18 -21
- package/build/core/reviews.js.map +1 -1
- package/build/core/schema.d.ts +43 -15
- package/build/core/schema.js +124 -20
- package/build/core/schema.js.map +1 -1
- package/build/core/state.d.ts +26 -27
- package/build/core/state.js +36 -90
- package/build/core/state.js.map +1 -1
- package/build/core/steps.d.ts +13 -14
- package/build/core/steps.js +26 -29
- package/build/core/steps.js.map +1 -1
- package/build/core/tree-utils.d.ts +52 -0
- package/build/core/tree-utils.js +226 -0
- package/build/core/tree-utils.js.map +1 -0
- package/build/core/types.d.ts +389 -118
- package/build/core/types.js +15 -1
- package/build/core/types.js.map +1 -1
- package/build/core/workflow-engine.d.ts +68 -0
- package/build/core/workflow-engine.js +821 -0
- package/build/core/workflow-engine.js.map +1 -0
- package/build/core/workflow-validator.d.ts +22 -0
- package/build/core/workflow-validator.js +489 -0
- package/build/core/workflow-validator.js.map +1 -0
- package/build/index.js +25 -26
- package/build/index.js.map +1 -1
- package/build/setup/inject.d.ts +4 -4
- package/build/setup/inject.js +6 -6
- package/build/setup/inject.js.map +1 -1
- package/build/setup/templates.d.ts +9 -7
- package/build/setup/templates.js +68 -172
- package/build/setup/templates.js.map +1 -1
- package/build/tools/artifact-approve.d.ts +8 -0
- package/build/tools/{approve-doc.js → artifact-approve.js} +24 -16
- package/build/tools/artifact-approve.js.map +1 -0
- package/build/tools/artifact-schema.d.ts +12 -0
- package/build/tools/artifact-schema.js +148 -0
- package/build/tools/artifact-schema.js.map +1 -0
- package/build/tools/artifact-tools.d.ts +18 -0
- package/build/tools/artifact-tools.js +465 -0
- package/build/tools/artifact-tools.js.map +1 -0
- package/build/tools/{report-dispatch.d.ts → dispatch-report.d.ts} +7 -3
- package/build/tools/{report-dispatch.js → dispatch-report.js} +106 -28
- package/build/tools/dispatch-report.js.map +1 -0
- package/build/tools/engine-helpers.d.ts +41 -0
- package/build/tools/engine-helpers.js +182 -0
- package/build/tools/engine-helpers.js.map +1 -0
- package/build/tools/get-project-status.d.ts +6 -4
- package/build/tools/get-project-status.js +265 -248
- package/build/tools/get-project-status.js.map +1 -1
- package/build/tools/get-role-prompt.d.ts +1 -1
- package/build/tools/get-role-prompt.js +7 -41
- package/build/tools/get-role-prompt.js.map +1 -1
- package/build/tools/iteration-start.d.ts +7 -4
- package/build/tools/iteration-start.js +45 -19
- package/build/tools/iteration-start.js.map +1 -1
- package/build/tools/loop-done.d.ts +11 -0
- package/build/tools/loop-done.js +109 -0
- package/build/tools/loop-done.js.map +1 -0
- package/build/tools/patch-start.d.ts +4 -2
- package/build/tools/patch-start.js +36 -11
- package/build/tools/patch-start.js.map +1 -1
- package/build/tools/project-init.d.ts +5 -5
- package/build/tools/project-init.js +41 -10
- package/build/tools/project-init.js.map +1 -1
- package/build/tools/role-dispatch.d.ts +55 -0
- package/build/tools/role-dispatch.js +508 -0
- package/build/tools/role-dispatch.js.map +1 -0
- package/build/tools/utils.d.ts +6 -0
- package/build/tools/utils.js +36 -0
- package/build/tools/utils.js.map +1 -1
- package/package.json +1 -1
- package/{build/hooks/claude-code.js → workflows/dev/hooks/claude.js} +34 -23
- package/{build → workflows/dev}/hooks/content.js +27 -18
- package/workflows/dev/hooks/index.js +52 -0
- package/{build → workflows/dev}/hooks/openclaw.js +31 -20
- package/{build → workflows/dev}/hooks/opencode.js +31 -20
- package/workflows/dev/roles/architect.md +68 -28
- package/workflows/dev/roles/coordinator.md +103 -0
- package/workflows/dev/roles/developer.md +5 -5
- package/workflows/dev/roles/tester.md +19 -19
- package/workflows/dev/schemas/api-contract.json +42 -0
- package/workflows/dev/schemas/api-design.json +30 -13
- package/workflows/dev/schemas/data-model.json +20 -7
- package/workflows/dev/schemas/prd.completeness-check.json +6 -5
- package/workflows/dev/schemas/prd.draft.json +13 -5
- package/workflows/dev/schemas/prd.final.json +34 -11
- package/workflows/dev/schemas/prd.json +29 -11
- package/workflows/dev/schemas/prd.requirements.json +6 -5
- package/workflows/dev/schemas/prototype.json +6 -2
- package/workflows/dev/schemas/task-breakdown.coarse.json +4 -3
- package/workflows/dev/schemas/task-breakdown.dependencies.json +5 -4
- package/workflows/dev/schemas/task-breakdown.detailed.json +8 -3
- package/workflows/dev/schemas/task-breakdown.final.json +8 -3
- package/workflows/dev/schemas/task-breakdown.json +8 -3
- package/workflows/dev/schemas/tech-design.analysis.json +6 -5
- package/workflows/dev/schemas/tech-design.draft.json +14 -5
- package/workflows/dev/schemas/tech-design.final.json +39 -13
- package/workflows/dev/schemas/tech-design.json +34 -13
- package/workflows/dev/schemas/tech-design.research.json +21 -0
- package/workflows/dev/schemas/test-plan.json +17 -7
- package/workflows/dev/schemas/test-report.json +26 -9
- package/workflows/dev/schemas/user-stories.json +7 -3
- package/workflows/dev/tools/index.js +23 -0
- package/workflows/dev/workflow.json +234 -101
- package/build/core/docs.d.ts +0 -36
- package/build/core/docs.js +0 -96
- package/build/core/docs.js.map +0 -1
- package/build/core/workflow.d.ts +0 -33
- package/build/core/workflow.js +0 -140
- package/build/core/workflow.js.map +0 -1
- package/build/hooks/claude-code.d.ts +0 -20
- package/build/hooks/claude-code.js.map +0 -1
- package/build/hooks/content.d.ts +0 -43
- package/build/hooks/content.js.map +0 -1
- package/build/hooks/install.d.ts +0 -40
- package/build/hooks/install.js +0 -63
- package/build/hooks/install.js.map +0 -1
- package/build/hooks/openclaw.d.ts +0 -24
- package/build/hooks/openclaw.js.map +0 -1
- package/build/hooks/opencode.d.ts +0 -29
- package/build/hooks/opencode.js.map +0 -1
- package/build/tools/approve-doc.d.ts +0 -6
- package/build/tools/approve-doc.js.map +0 -1
- package/build/tools/dispatch-role.d.ts +0 -16
- package/build/tools/dispatch-role.js +0 -266
- package/build/tools/dispatch-role.js.map +0 -1
- package/build/tools/doc-tools.d.ts +0 -16
- package/build/tools/doc-tools.js +0 -425
- package/build/tools/doc-tools.js.map +0 -1
- package/build/tools/override-tools.d.ts +0 -6
- package/build/tools/override-tools.js +0 -129
- package/build/tools/override-tools.js.map +0 -1
- package/build/tools/report-dispatch.js.map +0 -1
- package/build/tools/set-scale.d.ts +0 -6
- package/build/tools/set-scale.js +0 -95
- package/build/tools/set-scale.js.map +0 -1
- package/build/tools/setup-project.d.ts +0 -8
- package/build/tools/setup-project.js +0 -116
- package/build/tools/setup-project.js.map +0 -1
- package/build/tools/update-phase.d.ts +0 -12
- package/build/tools/update-phase.js +0 -148
- package/build/tools/update-phase.js.map +0 -1
- package/workflows/dev/roles/pm.md +0 -99
- package/workflows/dev/schemas/deploy.json +0 -20
- package/workflows/dev/schemas/fsd.json +0 -25
- package/workflows/dev/schemas/project-plan.json +0 -20
- package/workflows/dev/schemas/retrospective.json +0 -20
- package/workflows/dev/schemas/risk-assessment.json +0 -15
- 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/)
|
|
5
|
+
Harmonia 是一个基于 [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) 的**通用多代理协作框架**。它为 AI 编程助手(Claude Code、OpenCode、OpenClaw、Codex)提供工作流编排工具,让多个 AI agent 在**可插拔的工作流**中按角色协作完成任务。
|
|
6
6
|
|
|
7
7
|
## 核心理念
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
9
|
+
- **节点树驱动** — 工作流定义为节点树(sequence / parallel / task / gate / loop),支持条件分支、循环迭代、失败重试、并行执行
|
|
10
|
+
- **角色分离** — Coordinator、架构师、开发者、测试各司其职,通过产出(artifact)交接而非直接对话
|
|
11
|
+
- **可插拔工作流** — 工作流以插件形式存在,包含节点树定义、角色提示词、产出 Schema、钩子脚本
|
|
12
|
+
- **数据隔离** — 所有项目数据存储在平台数据目录,不污染代码仓库
|
|
13
|
+
- **被动式引擎** — Core 是决策计算器,通过 `nextAction` 指导 Coordinator 驱动工作流前进
|
|
13
14
|
|
|
14
15
|
## 特性
|
|
15
16
|
|
|
16
|
-
-
|
|
17
|
-
-
|
|
18
|
-
-
|
|
19
|
-
-
|
|
20
|
-
- **覆盖配置** —
|
|
21
|
-
- **跨 Agent 边界守卫** —
|
|
22
|
-
|
|
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. 注入
|
|
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 编程助手已被注入
|
|
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
|
-
>
|
|
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
|
-
>
|
|
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
|
-
>
|
|
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`
|
|
196
|
-
| `
|
|
197
|
-
| `
|
|
198
|
-
| `
|
|
199
|
-
| `
|
|
200
|
-
| `
|
|
201
|
-
| `
|
|
202
|
-
| `
|
|
203
|
-
| `
|
|
204
|
-
| `
|
|
205
|
-
| `role_prompt`
|
|
206
|
-
| `
|
|
207
|
-
| `
|
|
208
|
-
| `
|
|
209
|
-
| `
|
|
210
|
-
|
|
211
|
-
##
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
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 的所有项目数据存储在平台特定的数据目录中(通过
|
|
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
|
-
│ │ └──
|
|
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
|
|
283
|
+
│ ├── index.ts # 入口,MCP 服务器 + CLI 路由
|
|
560
284
|
│ ├── cli/
|
|
561
|
-
│ │ └── setup.ts
|
|
285
|
+
│ │ └── setup.ts # CLI setup 命令
|
|
562
286
|
│ ├── core/
|
|
563
|
-
│ │ ├── types.ts
|
|
564
|
-
│ │ ├──
|
|
565
|
-
│ │ ├──
|
|
566
|
-
│ │ ├──
|
|
567
|
-
│ │ ├──
|
|
568
|
-
│ │ ├──
|
|
569
|
-
│ │ ├──
|
|
570
|
-
│ │ ├──
|
|
571
|
-
│ │ ├──
|
|
572
|
-
│ │
|
|
573
|
-
│ ├──
|
|
574
|
-
│ ├──
|
|
575
|
-
│ │ ├──
|
|
576
|
-
│ │ ├──
|
|
577
|
-
│ │
|
|
578
|
-
│
|
|
579
|
-
│ │
|
|
580
|
-
│
|
|
581
|
-
│
|
|
582
|
-
│
|
|
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
|
-
│ ├──
|
|
587
|
-
│
|
|
588
|
-
|
|
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
|
### 开发命令
|
package/build/cli/setup.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI command: harmonia setup
|
|
3
3
|
*
|
|
4
|
-
* Prompt injection
|
|
5
|
-
* No project registration, no state init
|
|
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]
|