@modus-ai/modus 0.1.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 +121 -0
- package/bin/modus.js +2 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +39 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +66 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +89 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +19 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/generators/codebuddy.d.ts +3 -0
- package/dist/generators/codebuddy.d.ts.map +1 -0
- package/dist/generators/codebuddy.js +77 -0
- package/dist/generators/codebuddy.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/config.d.ts +13 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +25 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file-system.d.ts +11 -0
- package/dist/utils/file-system.d.ts.map +1 -0
- package/dist/utils/file-system.js +41 -0
- package/dist/utils/file-system.js.map +1 -0
- package/package.json +55 -0
- package/schemas/harness-schema.yaml +91 -0
- package/schemas/knowledge-schema.yaml +174 -0
- package/schemas/plan-schema.yaml +42 -0
- package/schemas/spec-schema.yaml +64 -0
- package/templates/commands/harness.md +46 -0
- package/templates/commands/init.md +16 -0
- package/templates/commands/plan.md +28 -0
- package/templates/commands/spec.md +37 -0
- package/templates/commands/vibe.md +18 -0
- package/templates/knowledge-catalog.md +26 -0
- package/templates/skills/modus-harness/SKILL.md +247 -0
- package/templates/skills/modus-harness-agents/00-skills-builder/SKILL.md +293 -0
- package/templates/skills/modus-harness-agents/01-analysis/SKILL.md +135 -0
- package/templates/skills/modus-harness-agents/02-dev/SKILL.md +102 -0
- package/templates/skills/modus-harness-agents/03-test/SKILL.md +84 -0
- package/templates/skills/modus-harness-agents/04-perf/SKILL.md +109 -0
- package/templates/skills/modus-harness-agents/05-security/SKILL.md +116 -0
- package/templates/skills/modus-harness-agents/06-review/SKILL.md +123 -0
- package/templates/skills/modus-harness-agents/07-deploy/SKILL.md +101 -0
- package/templates/skills/modus-init/SKILL.md +227 -0
- package/templates/skills/modus-plan/SKILL.md +246 -0
- package/templates/skills/modus-spec/SKILL.md +255 -0
- package/templates/skills/modus-vibe/SKILL.md +150 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
# modus-init
|
|
2
|
+
|
|
3
|
+
**触发条件:** 用户运行 `/modus:init` 时使用此 Skill。
|
|
4
|
+
|
|
5
|
+
## 职责
|
|
6
|
+
|
|
7
|
+
分析当前项目代码库,按业务领域分类,为每个业务域生成 Business Skill 文件,同时初始化团队约定 Skill(Layer 0-T)、技术知识 Skill(Layer 1)和知识全景目录索引(`modus/knowledge-catalog.md`),作为后续所有 Modus 命令的知识底座。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 执行流程
|
|
12
|
+
|
|
13
|
+
### Step 0:读取项目宪法
|
|
14
|
+
|
|
15
|
+
读取 `modus/config.yaml`(若存在),提取 `constitution` 字段中的硬性约束,作为整个初始化过程的最高优先级约束。
|
|
16
|
+
|
|
17
|
+
若 `modus/config.yaml` 不存在,将在 Step 5 创建默认配置。
|
|
18
|
+
|
|
19
|
+
### Step 1:项目扫描与业务分类
|
|
20
|
+
|
|
21
|
+
启动一个「项目分析 SubAgent」,执行以下操作:
|
|
22
|
+
|
|
23
|
+
1. 读取项目根目录结构,识别主要模块、包或服务
|
|
24
|
+
2. 扫描核心代码文件(优先:Controller/Facade、Service、Manager、Mapper/DAO、Domain/Entity、配置文件)
|
|
25
|
+
3. 结合文件名、包名、注释、接口命名,提炼业务域列表
|
|
26
|
+
4. 每个业务域给出:
|
|
27
|
+
- 域名称(英文,用作目录名,如 `order`, `payment`, `user`)
|
|
28
|
+
- 中文名称(如 订单域、支付域、用户域)
|
|
29
|
+
- 核心职责一句话概述
|
|
30
|
+
- 涉及的主要文件路径(最多 5 个代表性路径)
|
|
31
|
+
|
|
32
|
+
**输出格式(向用户展示):**
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
我识别到以下业务域,请确认:
|
|
36
|
+
|
|
37
|
+
1. order(订单域)— 订单创建、状态流转、查询
|
|
38
|
+
关键文件: OrderController, OrderService, OrderMapper, OrderDomain
|
|
39
|
+
2. payment(支付域)— 支付发起、回调、退款
|
|
40
|
+
关键文件: PayFacade, PayManager, PayRecordMapper
|
|
41
|
+
3. user(用户域)— 用户注册、登录、权限
|
|
42
|
+
关键文件: UserController, UserService, AuthManager
|
|
43
|
+
|
|
44
|
+
是否确认以上分类?(可以修改/新增/删除)
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### Step 2:用户确认
|
|
48
|
+
|
|
49
|
+
等待用户确认或修改业务域列表。用户可以:
|
|
50
|
+
- 直接回复「确认」继续
|
|
51
|
+
- 修改某个域的名称或描述
|
|
52
|
+
- 增加遗漏的业务域
|
|
53
|
+
- 删除不需要的域
|
|
54
|
+
|
|
55
|
+
### Step 3:生成业务 Skill(Layer 2)
|
|
56
|
+
|
|
57
|
+
用户确认后,为每个业务域调用「Skills Builder SubAgent」(`modus-harness-00-skills-builder` Skill,模式 A),生成对应的业务 Skill 文件:
|
|
58
|
+
|
|
59
|
+
**目标路径:** `.codebuddy/skills/modus-biz-{domain}/SKILL.md`
|
|
60
|
+
|
|
61
|
+
每个 Skill 文件遵循 Business Skill 标准格式(含 maturity/last_referenced/usage_count 字段)。
|
|
62
|
+
|
|
63
|
+
### Step 4:生成团队约定 Skill(Layer 0-T)
|
|
64
|
+
|
|
65
|
+
调用「Skills Builder SubAgent」(模式 E:团队约定初始化):
|
|
66
|
+
|
|
67
|
+
从以下来源提取团队规范:
|
|
68
|
+
1. 项目中已有的 `CONTRIBUTING.md`、`.editorconfig`、`checkstyle.xml`、`pmd.xml` 等规范文件
|
|
69
|
+
2. `modus/config.yaml` 中的 `constitution.hard_rules`
|
|
70
|
+
3. 代码中高频出现的注解模式(如 `@Transactional`、`@DistributedLock` 的用法)
|
|
71
|
+
|
|
72
|
+
生成文件:`.codebuddy/skills/modus-team-conventions/SKILL.md`
|
|
73
|
+
|
|
74
|
+
### Step 5:生成技术知识 Skill(Layer 1)
|
|
75
|
+
|
|
76
|
+
调用「Skills Builder SubAgent」(模式 E:技术知识初始化),初始化一个空的技术知识骨架:
|
|
77
|
+
|
|
78
|
+
生成文件:`.codebuddy/skills/modus-tech-wiki/SKILL.md`
|
|
79
|
+
|
|
80
|
+
初始内容包含:
|
|
81
|
+
- 已发现的技术栈(从 `pom.xml` 或 `build.gradle` 提取)
|
|
82
|
+
- 框架版本信息
|
|
83
|
+
- 占位符章节(反模式库、架构决策、跨项目经验——待后续工作流积累)
|
|
84
|
+
|
|
85
|
+
### Step 6:生成知识全景目录(knowledge-catalog.md)
|
|
86
|
+
|
|
87
|
+
在 `modus/knowledge-catalog.md` 创建全景索引,内容如下:
|
|
88
|
+
|
|
89
|
+
```markdown
|
|
90
|
+
# Modus 知识全景目录
|
|
91
|
+
# 所有 Modus 命令启动时先读此文件(~200 tokens),按需加载完整 Skill
|
|
92
|
+
|
|
93
|
+
updated: {YYYY-MM-DD}
|
|
94
|
+
|
|
95
|
+
## 团队约定 (Layer 0-T)
|
|
96
|
+
- **modus-team-conventions**: 代码规范/提交规范/最佳实践 [maturity: draft] 更新: {日期}
|
|
97
|
+
|
|
98
|
+
## 技术知识 (Layer 1)
|
|
99
|
+
- **modus-tech-wiki**: 跨项目技术经验(反模式、架构决策、性能优化) [maturity: draft] 更新: {日期}
|
|
100
|
+
|
|
101
|
+
## 业务知识 (Layer 2)
|
|
102
|
+
- **modus-biz-order**: 订单域 — 创建/状态流转/查询 [maturity: draft] 最近引用: {日期}
|
|
103
|
+
- **modus-biz-payment**: 支付域 — 发起/回调/退款 [maturity: draft] 最近引用: {日期}
|
|
104
|
+
- **modus-biz-user**: 用户域 — 注册/登录/权限 [maturity: draft] 最近引用: {日期}
|
|
105
|
+
|
|
106
|
+
## 使用说明
|
|
107
|
+
所有 Skill 初始 maturity 为 draft。随着工作流执行和人工验证:
|
|
108
|
+
- 在 1 个工作流中被成功引用 → verified
|
|
109
|
+
- 在 ≥2 个工作流中验证有效 → proven
|
|
110
|
+
衰减规则:proven 12 个月未引用 → verified;verified 6 个月未引用 → draft(标注 ⚠️ 可能已过时)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Step 7:初始化 modus/config.yaml(若不存在)
|
|
114
|
+
|
|
115
|
+
若项目尚无 `modus/config.yaml`,生成默认配置:
|
|
116
|
+
|
|
117
|
+
```yaml
|
|
118
|
+
# Modus 项目配置
|
|
119
|
+
|
|
120
|
+
# TAPD 项目 ID(可选,用于 Harness 自动创建 Bug 单)
|
|
121
|
+
tapdProjectId: ""
|
|
122
|
+
|
|
123
|
+
# Harness 流程配置
|
|
124
|
+
harness:
|
|
125
|
+
buildCommand: "mvn clean compile -q"
|
|
126
|
+
environments: [dev, test, pre]
|
|
127
|
+
|
|
128
|
+
# 项目宪法(所有 SubAgent 必须遵守的硬性约束)
|
|
129
|
+
# 这些约束在每次命令执行时自动加载,无需重复说明
|
|
130
|
+
constitution:
|
|
131
|
+
tech_stack: "" # 如 "Java 17 + Spring Boot 3 + MyBatis"
|
|
132
|
+
test_command: "" # 如 "mvn test -pl {module}"
|
|
133
|
+
hard_rules: [] # 如 ["Mapper 接口必须在 dao 包下", "金额使用 Long 单位分"]
|
|
134
|
+
build_command: "" # 如 "mvn clean compile -q"
|
|
135
|
+
key_patterns: [] # 项目特有的技术模式描述
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
提示用户填写 `constitution` 字段,以便后续命令无需重复说明项目约束。
|
|
139
|
+
|
|
140
|
+
### Step 8:完成回报
|
|
141
|
+
|
|
142
|
+
所有业务 Skill 生成完毕后,回复用户:
|
|
143
|
+
|
|
144
|
+
```
|
|
145
|
+
✅ Modus 知识库初始化完成
|
|
146
|
+
|
|
147
|
+
生成了 N 个业务 Skill(Layer 2):
|
|
148
|
+
- .codebuddy/skills/modus-biz-order/SKILL.md [draft]
|
|
149
|
+
- .codebuddy/skills/modus-biz-payment/SKILL.md [draft]
|
|
150
|
+
- ...
|
|
151
|
+
|
|
152
|
+
初始化基础 Skill:
|
|
153
|
+
- .codebuddy/skills/modus-team-conventions/SKILL.md (Layer 0-T) [draft]
|
|
154
|
+
- .codebuddy/skills/modus-tech-wiki/SKILL.md (Layer 1) [draft]
|
|
155
|
+
|
|
156
|
+
知识目录:
|
|
157
|
+
- modus/knowledge-catalog.md(所有命令的快速索引,~200 tokens)
|
|
158
|
+
|
|
159
|
+
💡 建议:填写 modus/config.yaml 中的 constitution 字段,
|
|
160
|
+
记录项目硬性约束(技术栈、命名规范等),后续所有命令将自动加载。
|
|
161
|
+
|
|
162
|
+
现在可以使用:
|
|
163
|
+
/modus:vibe — 氛围编程(自动加载业务上下文)
|
|
164
|
+
/modus:plan — 功能规划
|
|
165
|
+
/modus:spec — 规范驱动开发
|
|
166
|
+
/modus:harness — 全自动 Harness 流程
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## 重新初始化(已有 Skill 时)
|
|
172
|
+
|
|
173
|
+
如果 `.codebuddy/skills/` 下已存在 `modus-biz-*` 目录:
|
|
174
|
+
|
|
175
|
+
1. 提示用户当前已有哪些业务 Skill 及其最后更新时间和 maturity
|
|
176
|
+
2. 询问:全量重建 / 仅更新指定域 / 新增缺失域
|
|
177
|
+
3. 按用户选择执行对应操作
|
|
178
|
+
4. 无论何种选择,都更新 `modus/knowledge-catalog.md` 的索引信息
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Business Skill 标准格式参考(含知识体系字段)
|
|
183
|
+
|
|
184
|
+
```markdown
|
|
185
|
+
---
|
|
186
|
+
name: modus-biz-{domain}
|
|
187
|
+
description: "[MODUS:BIZ] {中文域名}业务知识 — {核心职责一句话}"
|
|
188
|
+
version: 1.0.0
|
|
189
|
+
updated: {YYYY-MM-DD}
|
|
190
|
+
maturity: draft # draft | verified | proven
|
|
191
|
+
last_referenced: {YYYY-MM-DD}
|
|
192
|
+
usage_count: 0
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
# {中文域名}业务知识
|
|
196
|
+
|
|
197
|
+
## 1. 域概述
|
|
198
|
+
{业务域的职责边界、核心价值,2-3句话}
|
|
199
|
+
|
|
200
|
+
## 2. 核心实体 [model]
|
|
201
|
+
| 实体名 | 说明 | 关键字段 |
|
|
202
|
+
|--------|------|----------|
|
|
203
|
+
| ... | ... | ... |
|
|
204
|
+
|
|
205
|
+
## 3. 业务规则 [process] [guideline]
|
|
206
|
+
- [guideline] {规则1:如 订单状态只能按指定方向流转}
|
|
207
|
+
- [process] {规则2:如 退款金额不能超过原始支付金额}
|
|
208
|
+
- [pitfall] {已知坑:如 并发创建订单时需加分布式锁}
|
|
209
|
+
|
|
210
|
+
## 4. 关键文件 [decision]
|
|
211
|
+
| 层次 | 文件/类 | 说明 |
|
|
212
|
+
|------|---------|------|
|
|
213
|
+
| Controller | ...Controller | ... |
|
|
214
|
+
| Service | ...Service | ... |
|
|
215
|
+
| Mapper | ...Mapper | ... |
|
|
216
|
+
|
|
217
|
+
## 5. API 契约(重要接口)[model]
|
|
218
|
+
- `POST /api/v1/{domain}/create` — {说明}
|
|
219
|
+
- `GET /api/v1/{domain}/{id}` — {说明}
|
|
220
|
+
|
|
221
|
+
## 6. 项目特有模式 [decision] [guideline]
|
|
222
|
+
- [decision] {架构决策:如 选择事件驱动而非同步 RPC 的原因}
|
|
223
|
+
- [guideline] {推荐做法:如 AopContext.currentProxy() 解决事务同类调用}
|
|
224
|
+
|
|
225
|
+
## 7. 典型代码示例
|
|
226
|
+
{重要业务逻辑的代码片段,帮助 AI 理解实现风格}
|
|
227
|
+
```
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
# modus-plan(计划模式)
|
|
2
|
+
|
|
3
|
+
**触发条件:** 用户运行 `/modus:plan [需求描述]` 时使用此 Skill。
|
|
4
|
+
|
|
5
|
+
支持快速模式:`/modus:plan --quick [描述]` 跳过 design.md,仅生成 proposal + tasks。
|
|
6
|
+
|
|
7
|
+
## 职责
|
|
8
|
+
|
|
9
|
+
功能规划入口。通过**三级渐进加载**获取业务上下文(前置更新),基于最新知识生成结构化的 proposal/design/tasks 文档,归档后将本次规划中的新知识回写到 Skill(后置更新),并将状态写入 `.modus-state.yaml` 支持断点续跑。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 执行流程
|
|
14
|
+
|
|
15
|
+
### Step 0:读取项目宪法 + 断点续跑检查
|
|
16
|
+
|
|
17
|
+
**读取 constitution:**
|
|
18
|
+
读取 `modus/config.yaml` 的 `constitution` 字段,作为最高优先级约束贯穿整个规划流程。
|
|
19
|
+
|
|
20
|
+
**断点续跑检查:**
|
|
21
|
+
扫描 `modus/plans/` 目录,检查是否存在同名的 `.modus-state.yaml`:
|
|
22
|
+
- 若存在且 `status: in-progress`,提示用户:
|
|
23
|
+
```
|
|
24
|
+
检测到未完成的规划:{name}
|
|
25
|
+
已完成:{completed 列表}
|
|
26
|
+
待完成:{pending 列表}
|
|
27
|
+
|
|
28
|
+
是否继续上次的规划,还是重新开始?
|
|
29
|
+
```
|
|
30
|
+
- 若用户选择继续,跳到对应的未完成步骤
|
|
31
|
+
- 若是全新流程,正常从 Step 1 开始
|
|
32
|
+
|
|
33
|
+
### Step 1:Level 1 加载——读知识目录(~200 tokens)
|
|
34
|
+
|
|
35
|
+
读取 `modus/knowledge-catalog.md`,了解当前可用 Skill 及其状态。
|
|
36
|
+
|
|
37
|
+
若不存在,与 vibe 模式相同的降级提示(建议先运行 /modus:init)。
|
|
38
|
+
|
|
39
|
+
### Step 2:域匹配与确认(有则更新,无则新增)
|
|
40
|
+
|
|
41
|
+
基于 catalog 目录信息(无需读完整 Skill),结合用户 prompt,判断涉及的业务域:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
根据你的需求,我认为涉及以下业务域:
|
|
45
|
+
|
|
46
|
+
✓ order(订单域) [verified] → 将前置更新后使用
|
|
47
|
+
✓ payment(支付域) [proven] → 将前置更新后使用
|
|
48
|
+
? export(导出域) [未初始化] → 将在前置步骤中新建
|
|
49
|
+
|
|
50
|
+
确认?
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Step 3:澄清用户意图(AskUserQuestion)
|
|
54
|
+
|
|
55
|
+
确认域后,在正式启动规划前,提出 1-3 个关键澄清问题:
|
|
56
|
+
|
|
57
|
+
**提问原则:**
|
|
58
|
+
- 聚焦影响规划方向的不确定点(范围、优先级、约束条件)
|
|
59
|
+
- 若 prompt 已足够具体,可跳过此步
|
|
60
|
+
- 从 Skill 中已有的 `[pitfall]` 和 `[decision]` 检查是否存在相关风险点
|
|
61
|
+
|
|
62
|
+
**示例问题类型:**
|
|
63
|
+
```
|
|
64
|
+
为了生成准确的规划文档,我需要确认:
|
|
65
|
+
|
|
66
|
+
1. [范围] 这次改动是否涉及 {相邻域},还是严格限定在 {domain} 域内?
|
|
67
|
+
2. [优先级] 功能上线有时间限制吗?影响 Sprint 拆分方式。
|
|
68
|
+
3. [兼容性] {已有接口/数据结构} 是否可以修改,还是需要向后兼容?
|
|
69
|
+
4. [规模] 预期数据量级是多少?影响技术方案选型。
|
|
70
|
+
5. [风险] ⚠️ Skill 中记录了已知坑:{pitfall},是否已考虑到?
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
等待用户回答后,输出意图摘要:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
理解已确认:
|
|
77
|
+
- 目标: {一句话概括}
|
|
78
|
+
- 边界: {在范围内 / 不在范围内}
|
|
79
|
+
- 约束: {技术/业务约束}
|
|
80
|
+
- 项目硬性规则: {来自 constitution 的关键规则}
|
|
81
|
+
|
|
82
|
+
开始前置更新 Skill,然后生成规划文档。
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### Step 4:前置 Skill 更新(Level 2 加载)
|
|
86
|
+
|
|
87
|
+
确认域和意图后,启动「Skill 更新 SubAgent」(`modus-harness-00-skills-builder` 模式 B),对每个涉及的业务域执行:
|
|
88
|
+
|
|
89
|
+
1. **Level 2 加载**:读取完整 SKILL.md 文件
|
|
90
|
+
2. 扫描该域相关的最新代码文件(近期变更的文件)
|
|
91
|
+
3. 对比 Skill 内容与代码现实,识别差异
|
|
92
|
+
4. 更新 Skill 文件中过时的信息,更新 `last_referenced` 和 `usage_count`
|
|
93
|
+
5. 输出更新摘要:`✓ modus-biz-order Skill 已更新(新增: OrderStatus.PENDING_REVIEW | maturity: draft→verified)`
|
|
94
|
+
|
|
95
|
+
若有未初始化的域,调用模式 A 新建 Skill。
|
|
96
|
+
|
|
97
|
+
### Step 5:生成计划文档
|
|
98
|
+
|
|
99
|
+
基于更新后的 Skill 和已澄清的意图,生成文档到 `modus/plans/{name}/`。
|
|
100
|
+
|
|
101
|
+
**写入状态文件:**
|
|
102
|
+
创建 `modus/plans/{name}/.modus-state.yaml`:
|
|
103
|
+
```yaml
|
|
104
|
+
mode: plan
|
|
105
|
+
name: {name}
|
|
106
|
+
status: in-progress
|
|
107
|
+
domains: [{domain1}, {domain2}]
|
|
108
|
+
quick_mode: false
|
|
109
|
+
completed: []
|
|
110
|
+
pending: [proposal, design, tasks]
|
|
111
|
+
created: {ISO8601时间戳}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**确定 plan 名称:**
|
|
115
|
+
- 从用户 prompt 提取关键词,生成 kebab-case 名称(如 `add-batch-approve`)
|
|
116
|
+
- 如果目录已存在,提示用户确认
|
|
117
|
+
|
|
118
|
+
**快速模式(`--quick`)产出物:** proposal.md + tasks.md(跳过 design.md)
|
|
119
|
+
|
|
120
|
+
**产出物依赖(完整模式):**
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
proposal.md ─────────────┐
|
|
124
|
+
▼
|
|
125
|
+
design.md ────────────► tasks.md
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**1. proposal.md** — 意图与范围
|
|
129
|
+
|
|
130
|
+
```markdown
|
|
131
|
+
# Proposal: {功能名称}
|
|
132
|
+
|
|
133
|
+
## 意图
|
|
134
|
+
{为什么做,业务价值}
|
|
135
|
+
|
|
136
|
+
## 范围
|
|
137
|
+
在范围内:
|
|
138
|
+
- {具体事项}
|
|
139
|
+
不在范围内:
|
|
140
|
+
- {明确排除}
|
|
141
|
+
|
|
142
|
+
## 关键约束(来自项目宪法)
|
|
143
|
+
- {constitution.hard_rules 中与本次相关的规则}
|
|
144
|
+
|
|
145
|
+
## 方案概述
|
|
146
|
+
{技术路径的高层描述}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**2. design.md** — 技术方案
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
# Design: {功能名称}
|
|
153
|
+
|
|
154
|
+
## 技术方案
|
|
155
|
+
{详细实现路径,引用具体的类/方法/接口}
|
|
156
|
+
|
|
157
|
+
## 架构决策 [decision]
|
|
158
|
+
### 决策: {决策点}
|
|
159
|
+
选择方案: {方案}
|
|
160
|
+
原因: {理由}
|
|
161
|
+
|
|
162
|
+
## 数据流
|
|
163
|
+
{文字或 mermaid 图}
|
|
164
|
+
|
|
165
|
+
## 涉及文件变更
|
|
166
|
+
- {文件路径} — {新增/修改/删除}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**3. tasks.md** — 实现清单
|
|
170
|
+
|
|
171
|
+
```markdown
|
|
172
|
+
# Tasks: {功能名称}
|
|
173
|
+
|
|
174
|
+
## 1. 数据层
|
|
175
|
+
- [ ] 1.1 {具体任务}
|
|
176
|
+
|
|
177
|
+
## 2. 服务层
|
|
178
|
+
- [ ] 2.1 {具体任务}
|
|
179
|
+
|
|
180
|
+
## 3. 接口层
|
|
181
|
+
- [ ] 3.1 {具体任务}
|
|
182
|
+
|
|
183
|
+
## 4. 测试
|
|
184
|
+
- [ ] 4.1 单元测试
|
|
185
|
+
- [ ] 4.2 接口联调
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
生成每份文档后更新 `.modus-state.yaml` 的 `completed` 列表。
|
|
189
|
+
|
|
190
|
+
### Step 6:询问归档 ⏸️ 【人工审批节点】
|
|
191
|
+
|
|
192
|
+
```
|
|
193
|
+
计划文档已生成:
|
|
194
|
+
modus/plans/{name}/proposal.md
|
|
195
|
+
modus/plans/{name}/design.md
|
|
196
|
+
modus/plans/{name}/tasks.md
|
|
197
|
+
|
|
198
|
+
状态文件:modus/plans/{name}/.modus-state.yaml
|
|
199
|
+
|
|
200
|
+
是否归档?归档后文档将移动到 modus/plans/archive/{YYYY-MM-DD}-{name}/
|
|
201
|
+
(归档前可以继续编辑文档)
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
⏸️ **等待人工确认**(支持异步:可以在任意时间、任意设备上回复)
|
|
205
|
+
|
|
206
|
+
用户确认归档后:
|
|
207
|
+
1. 将目录移动到 `modus/plans/archive/{date}-{name}/`
|
|
208
|
+
2. 更新 `.modus-state.yaml`:`status: archived`
|
|
209
|
+
3. 回复:`✓ 已归档到 modus/plans/archive/{date}-{name}/`
|
|
210
|
+
|
|
211
|
+
### Step 7:后置 Skill 更新(知识回写)
|
|
212
|
+
|
|
213
|
+
归档完成后(或用户选择不归档但完成了规划),执行后置 Skill 更新(模式 C):
|
|
214
|
+
|
|
215
|
+
1. 从本次生成的 design.md 和 tasks.md 中提取新的技术决策和实现细节
|
|
216
|
+
2. 带类型标签回写到对应业务 Skill:
|
|
217
|
+
- `[decision]` → 架构决策章节
|
|
218
|
+
- `[guideline]` → 推荐做法/禁止做法
|
|
219
|
+
- `[pitfall]` → 已知风险
|
|
220
|
+
3. 更新 `modus/knowledge-catalog.md` 的 `last_referenced` 和 maturity
|
|
221
|
+
4. 输出更新摘要:
|
|
222
|
+
```
|
|
223
|
+
📚 知识已回写到 Skill:
|
|
224
|
+
- [decision] order 域:新增批量审批走 MQ 异步的架构决策
|
|
225
|
+
- [guideline] order 域:批量操作上限 50 条,防止内存溢出
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
---
|
|
229
|
+
|
|
230
|
+
## 产出物目录结构
|
|
231
|
+
|
|
232
|
+
```
|
|
233
|
+
modus/
|
|
234
|
+
├── plans/
|
|
235
|
+
│ ├── add-batch-approve/ ← 活跃计划(未归档)
|
|
236
|
+
│ │ ├── .modus-state.yaml ← 状态文件(断点续跑用)
|
|
237
|
+
│ │ ├── proposal.md
|
|
238
|
+
│ │ ├── design.md
|
|
239
|
+
│ │ └── tasks.md
|
|
240
|
+
│ └── archive/
|
|
241
|
+
│ └── 2026-04-20-add-batch-approve/
|
|
242
|
+
│ ├── .modus-state.yaml ← status: archived
|
|
243
|
+
│ ├── proposal.md
|
|
244
|
+
│ ├── design.md
|
|
245
|
+
│ └── tasks.md
|
|
246
|
+
```
|