@modus-ai/modus 0.2.11 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +8 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.d.ts +37 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +215 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +9 -3
- package/dist/commands/status.js.map +1 -1
- package/dist/generators/claude.d.ts +4 -2
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +17 -8
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +5 -1
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/codex.d.ts.map +1 -1
- package/dist/generators/codex.js +4 -4
- package/dist/generators/codex.js.map +1 -1
- package/dist/generators/continue.d.ts +3 -2
- package/dist/generators/continue.d.ts.map +1 -1
- package/dist/generators/continue.js +11 -5
- package/dist/generators/continue.js.map +1 -1
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +3 -2
- package/dist/generators/copilot.js.map +1 -1
- package/dist/generators/cursor.d.ts +4 -3
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +15 -10
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts +2 -2
- package/dist/generators/custom.js +1 -1
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +7 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/generators/modus.d.ts +12 -0
- package/dist/generators/modus.d.ts.map +1 -0
- package/dist/generators/modus.js +225 -0
- package/dist/generators/modus.js.map +1 -0
- package/package.json +1 -1
- package/schemas/harness-schema.yaml +13 -13
- package/templates/agents/modus-analyst.md +2 -2
- package/templates/agents/modus-deployer.md +1 -1
- package/templates/agents/modus-designer.md +1 -1
- package/templates/agents/modus-developer.md +1 -1
- package/templates/agents/modus-perf-auditor.md +1 -1
- package/templates/agents/modus-reviewer.md +1 -1
- package/templates/agents/modus-security-auditor.md +1 -1
- package/templates/agents/modus-skill-creator.md +1 -1
- package/templates/agents/modus-tester.md +1 -1
- package/templates/commands/auto.md +3 -1
- package/templates/commands/commit.md +11 -5
- package/templates/commands/cr.md +14 -10
- package/templates/commands/harness.md +29 -18
- package/templates/commands/init.md +56 -23
- package/templates/commands/modus.md +33 -11
- package/templates/commands/plan.md +25 -19
- package/templates/commands/spec.md +32 -17
- package/templates/commands/upgrade.md +50 -38
- package/templates/commands/vibe.md +30 -20
- package/templates/domain-business-readme.md +69 -0
- package/templates/domain-code/SKILL.md +94 -0
- package/templates/domain-code/apis.md +48 -0
- package/templates/domain-code/data-models.md +57 -0
- package/templates/domain-code/entities.md +45 -0
- package/templates/domain-code/services.md +51 -0
- package/templates/domain-history-readme.md +60 -0
- package/templates/domain-scenarios-readme.md +58 -0
- package/templates/knowledge-base-map.md +78 -0
- package/templates/knowledge-base-service-graph.md +100 -0
- package/templates/knowledge-catalog.md +38 -43
- package/templates/paths-v4.md +158 -0
- package/templates/rules/modus-workflow/RULE.mdc +45 -38
- package/templates/skills/modus-agents/analyst/SKILL.md +1 -1
- package/templates/skills/modus-agents/developer/SKILL.md +1 -1
- package/templates/skills/modus-agents/reviewer/SKILL.md +1 -1
- package/templates/skills/modus-agents/skill-creator/SKILL.md +3 -3
- package/templates/skills/modus-auto/SKILL.md +19 -19
- package/templates/skills/modus-cr/SKILL.md +1 -1
- package/templates/skills/modus-design-brief/SKILL.md +3 -3
- package/templates/skills/modus-harness/SKILL.md +6 -5
- package/templates/skills/modus-init/SKILL.md +64 -64
- package/templates/skills/modus-init/shared/frontmatter-spec.md +2 -2
- package/templates/skills/modus-init/shared/stack-detection.md +1 -1
- package/templates/skills/modus-init/strategies/fallback-init.md +1 -1
- package/templates/skills/modus-plan/SKILL.md +64 -13
- package/templates/skills/modus-platform/SKILL.md +1 -1
- package/templates/skills/modus-spec/SKILL.md +61 -4
- package/templates/skills/modus-vibe/SKILL.md +10 -10
- package/templates/template/analysis.md +83 -0
- package/templates/template/api-chain.md +69 -0
- package/templates/template/design.md +160 -0
- package/templates/template/pid.md +97 -0
- package/templates/template/plan.md +91 -0
- package/templates/template/spec.md +78 -0
- package/templates/template/sprint-contract.md +101 -0
|
@@ -49,7 +49,7 @@ disable: false
|
|
|
49
49
|
|
|
50
50
|
检测到 --design?
|
|
51
51
|
是 → 执行 Step 0→Step 1→Step 2→Step 3→Step 4→Step 5→Step 6→Design Mode Step 7(生成 design.md + tasks.md 后暂停)
|
|
52
|
-
否 → 执行标准流程(Step 0 → Step
|
|
52
|
+
否 → 执行标准流程(Step 0 → Step 11)
|
|
53
53
|
```
|
|
54
54
|
|
|
55
55
|
---
|
|
@@ -78,11 +78,11 @@ disable: false
|
|
|
78
78
|
|
|
79
79
|
### Step 1:Level 1 加载——读知识目录(~200 tokens)
|
|
80
80
|
|
|
81
|
-
读取 `modus/
|
|
81
|
+
读取 `modus/knowledge_base/map.md`,了解当前可用 Skill 及其状态。
|
|
82
82
|
|
|
83
83
|
若不存在,输出降级提示:
|
|
84
84
|
```
|
|
85
|
-
⚠️ 未找到 modus/
|
|
85
|
+
⚠️ 未找到 modus/knowledge_base/map.md,建议先运行 /modus:init 初始化知识库。
|
|
86
86
|
将使用平台规则文件和源码扫描作为替代知识来源继续执行。
|
|
87
87
|
```
|
|
88
88
|
|
|
@@ -165,11 +165,11 @@ disable: false
|
|
|
165
165
|
|
|
166
166
|
#### 4-1:读取 Skill frontmatter(轻量操作,仅读前 20 行)
|
|
167
167
|
|
|
168
|
-
读取 `modus/
|
|
168
|
+
读取 `modus/knowledge_base/domain/{domain}/code/SKILL.md` 的 YAML frontmatter,提取:
|
|
169
169
|
- `last_hash`:上次记录的 key_files 内容摘要
|
|
170
170
|
- `key_files`:关键源文件列表
|
|
171
171
|
|
|
172
|
-
若 Skill 不存在(包括 modus/
|
|
172
|
+
若 Skill 不存在(包括 modus/knowledge_base/ 目录下不存在),跳到 4-4(新建)。
|
|
173
173
|
|
|
174
174
|
> **注意**:`.codebuddy/skills/modus-biz-{domain}/SKILL.md` 自 v3.2 起已降级为引用桩,不含实际内容,请勿从此路径读取。
|
|
175
175
|
|
|
@@ -323,7 +323,7 @@ done | shasum -a 1 | awk '{print $1}'
|
|
|
323
323
|
|
|
324
324
|
```
|
|
325
325
|
情形 A:来自 /modus:auto(context_bundle 含 story_id)
|
|
326
|
-
产出路径:modus/
|
|
326
|
+
产出路径:modus/artifacts/{story_id}/code/plan.md
|
|
327
327
|
|
|
328
328
|
情形 B:用户直接运行 /modus:plan(无 story_id)
|
|
329
329
|
产出路径:modus/plans/{name}/plan.md
|
|
@@ -389,7 +389,7 @@ created: {ISO8601时间戳}
|
|
|
389
389
|
|
|
390
390
|
### Step 7(Design Mode 分支):多 Artifact 设计文档生成 ⏸️ 【人工审批节点】
|
|
391
391
|
|
|
392
|
-
> **仅在 DESIGN_MODE=true 时执行此分支,替代标准 Step
|
|
392
|
+
> **仅在 DESIGN_MODE=true 时执行此分支,替代标准 Step 9(Build 循环)。**
|
|
393
393
|
> 参考:speckit.plan 三阶段 + opsx:propose DAG 状态机
|
|
394
394
|
|
|
395
395
|
---
|
|
@@ -614,7 +614,58 @@ MEDIUM(建议):
|
|
|
614
614
|
|
|
615
615
|
---
|
|
616
616
|
|
|
617
|
-
### Step 8
|
|
617
|
+
### Step 8:生成场景化接口调用链(api-chain.md)
|
|
618
|
+
|
|
619
|
+
> **触发条件:** 仅在 story 模式下执行(`STORY_ID` 已设置,即通过 `--story` 或 `/modus:auto` 传入)。
|
|
620
|
+
> 独立模式(`modus/plans/{name}/`)**跳过此步骤**。
|
|
621
|
+
|
|
622
|
+
**目标:** 将本次规划涉及的接口抽取为场景化调用链文档,供测试团队直接进行用例设计。
|
|
623
|
+
|
|
624
|
+
#### 8-1:确定内容来源(按优先级)
|
|
625
|
+
|
|
626
|
+
```
|
|
627
|
+
优先级 1(--design 模式):读取 modus/artifacts/{story_id}/design/design.md
|
|
628
|
+
→ 提取 §3.1 对外暴露接口(接口名/路径/入参/出参)
|
|
629
|
+
→ 提取 §3.2 调用下游接口(下游服务/路径/超时)
|
|
630
|
+
|
|
631
|
+
优先级 2(标准模式,无 design.md):读取 modus/knowledge_base/domain/{d}/code/apis.md
|
|
632
|
+
→ 提取本次 plan.md 涉及域的接口定义
|
|
633
|
+
|
|
634
|
+
优先级 3(兜底):扫描 plan.md 的「实现 Todos」接口层任务
|
|
635
|
+
→ 提取含接口路径关键词的任务条目(如 POST /api/、GET /api/)
|
|
636
|
+
```
|
|
637
|
+
|
|
638
|
+
#### 8-2:生成 api-chain.md
|
|
639
|
+
|
|
640
|
+
参照 `modus/template/api-chain.md` 模板,按以下规则生成内容:
|
|
641
|
+
|
|
642
|
+
- **每个对外接口对应 1 个 Scenario**(Happy Path)
|
|
643
|
+
- **复杂度 ≥ medium 时**,额外生成边界/异常 Scenario(参数超限、权限不足、并发防重)
|
|
644
|
+
- **Given/When/Then** 从 plan.md 的业务背景 + 接口功能描述中提炼
|
|
645
|
+
- **接口调用链表格** 中填写完整 HTTP 路径、关键请求参数、预期状态码 + 错误码
|
|
646
|
+
|
|
647
|
+
**写入路径:** `modus/artifacts/{story_id}/scenarios/api-chain.md`
|
|
648
|
+
|
|
649
|
+
若目录不存在,自动创建 `scenarios/`。
|
|
650
|
+
|
|
651
|
+
#### 8-3:完成输出
|
|
652
|
+
|
|
653
|
+
```
|
|
654
|
+
✅ api-chain.md 已生成:modus/artifacts/{story_id}/scenarios/api-chain.md
|
|
655
|
+
共 {N} 个 Scenario(Happy Path: {M} | 异常: {K})
|
|
656
|
+
来源:{design.md §3 | apis.md | plan.md tasks}
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
若无任何可提取的接口信息(如纯重构类任务),输出以下提示并跳过:
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
ℹ️ 未检测到明确的接口变更,跳过 api-chain.md 生成。
|
|
663
|
+
如需手动补充,可参考模板:modus/template/api-chain.md
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
---
|
|
667
|
+
|
|
668
|
+
### Step 9:Build 确认循环 ⏸️ 【人工审批节点】
|
|
618
669
|
|
|
619
670
|
plan.md 生成后,展示结果并进入确认循环:
|
|
620
671
|
|
|
@@ -671,7 +722,7 @@ plan.md 生成后,展示结果并进入确认循环:
|
|
|
671
722
|
|
|
672
723
|
---
|
|
673
724
|
|
|
674
|
-
### Step
|
|
725
|
+
### Step 10:后置 Skill 更新(知识回写,用户确认后执行)
|
|
675
726
|
|
|
676
727
|
规划阶段完成后,先扫描 `plan.md` 中可能值得沉淀的新知识,向用户展示并**请求确认**后再写回:
|
|
677
728
|
|
|
@@ -696,13 +747,13 @@ plan.md 生成后,展示结果并进入确认循环:
|
|
|
696
747
|
|
|
697
748
|
**`usage_count` 更新时机(plan 模式):**
|
|
698
749
|
|
|
699
|
-
用户在 Build 确认循环中回复「Build/开始/执行」后(即 Step
|
|
750
|
+
用户在 Build 确认循环中回复「Build/开始/执行」后(即 Step 9 Build 触发时),对本次 plan 涉及的每个业务域执行 `usage_count += 1`,并同步更新对应 Skill 的 frontmatter。此操作在 Step 9 Build 触发内执行,不依赖后续 vibe session 的完成。
|
|
700
751
|
|
|
701
752
|
> **设计理由(Karpathy Surgical Changes):** 用户请求的是"生成规划文档",不是"更新 Skill 文件"。自动写回会在用户不知情的情况下修改多个知识文件,违反"Touch only what you must"。用户确认机制既保留了知识闭环能力,又把文件修改的控制权还给用户。
|
|
702
753
|
|
|
703
754
|
---
|
|
704
755
|
|
|
705
|
-
### Step
|
|
756
|
+
### Step 11:多平台 Skill 同步(后置)
|
|
706
757
|
|
|
707
758
|
知识回写完成后,对所有本次**更新或新建**的业务 Skill 执行多平台同步。
|
|
708
759
|
|
|
@@ -710,7 +761,7 @@ plan.md 生成后,展示结果并进入确认循环:
|
|
|
710
761
|
|
|
711
762
|
1. 读取 `modus/config.yaml` 的 `platforms` 字段
|
|
712
763
|
2. 对受影响的每个业务域(Step 4 前置更新 / 新建的域),按以下规则同步:
|
|
713
|
-
- **CodeBuddy** → 同步更新 `.codebuddy/skills/modus-biz-{domain}/SKILL.md` 引用桩的摘要行(权威源已在 `modus/
|
|
764
|
+
- **CodeBuddy** → 同步更新 `.codebuddy/skills/modus-biz-{domain}/SKILL.md` 引用桩的摘要行(权威源已在 `modus/knowledge_base/domain/{domain}/code/SKILL.md` 中更新)
|
|
714
765
|
- **Claude** → 写入 `.claude/agents/modus-biz-{domain}.md`(覆盖旧版本)
|
|
715
766
|
- **Cursor** → 写入 `.cursor/rules/modus-biz-{domain}.mdc`(带 frontmatter,覆盖旧版本)
|
|
716
767
|
- **Copilot** → 在 `.github/copilot-instructions.md` 中替换对应域的标记段落
|
|
@@ -967,5 +1018,5 @@ for each Phase(按顺序):
|
|
|
967
1018
|
────────────────────────────────────────────────
|
|
968
1019
|
```
|
|
969
1020
|
|
|
970
|
-
**后置知识回写(与标准 plan Step
|
|
1021
|
+
**后置知识回写(与标准 plan Step 10 相同逻辑):**
|
|
971
1022
|
扫描编码过程中新发现的 pitfall/decision,询问用户是否写回 Skill(不强制)。
|
|
@@ -153,7 +153,7 @@ bizSkill:
|
|
|
153
153
|
outputPath: "{outputDir}/modus-biz-{domain}.{fileExtension}"
|
|
154
154
|
wrapper: |
|
|
155
155
|
# {domain} Business Domain Rules
|
|
156
|
-
<!-- Source: modus/
|
|
156
|
+
<!-- Source: modus/knowledge_base/domain/{domain}/code/SKILL.md -->
|
|
157
157
|
{content}
|
|
158
158
|
constitutionTemplate: |
|
|
159
159
|
# Modus Project Rules — {label}
|
|
@@ -58,7 +58,7 @@ supported_platforms:
|
|
|
58
58
|
|
|
59
59
|
### Step 1:Level 1 加载——读知识目录(~200 tokens)
|
|
60
60
|
|
|
61
|
-
读取 `modus/
|
|
61
|
+
读取 `modus/knowledge_base/map.md`,了解当前可用 Skill 及其状态。
|
|
62
62
|
|
|
63
63
|
若不存在,输出降级提示并继续(使用平台规则文件扫描替代)。
|
|
64
64
|
|
|
@@ -211,7 +211,64 @@ supported_platforms:
|
|
|
211
211
|
|
|
212
212
|
---
|
|
213
213
|
|
|
214
|
-
### Step 8
|
|
214
|
+
### Step 8:生成场景化接口调用链(api-chain.md)
|
|
215
|
+
|
|
216
|
+
> **触发条件:** 仅在 story 模式下执行(`STORY_ID` 已设置)。
|
|
217
|
+
> 独立模式(`modus/changes/{name}/`)**跳过此步骤**。
|
|
218
|
+
|
|
219
|
+
**目标:** 将本次规格涉及的 Gherkin 场景转换为面向测试团队的接口调用链文档。
|
|
220
|
+
|
|
221
|
+
#### 8-1:确定内容来源(按优先级)
|
|
222
|
+
|
|
223
|
+
```
|
|
224
|
+
优先级 1:读取 modus/artifacts/{story_id}/code/spec/*.feature.md
|
|
225
|
+
→ 提取每个 Scenario 的 When 子句(接口调用动作)
|
|
226
|
+
→ 将 Gherkin 步骤转换为调用链表格(When → 接口路径 + 参数)
|
|
227
|
+
|
|
228
|
+
优先级 2:读取 modus/artifacts/{story_id}/design/design.md(若存在)
|
|
229
|
+
→ 用 §3.1/§3.2 接口合同补充完整 HTTP 路径、请求参数、响应格式
|
|
230
|
+
|
|
231
|
+
优先级 3:读取 modus/artifacts/{story_id}/pid/prd.md(若存在)
|
|
232
|
+
→ 从验收标准 AC 的 Given/When/Then 中补充业务背景
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
#### 8-2:生成或追加 api-chain.md
|
|
236
|
+
|
|
237
|
+
**检测文件是否已存在:**
|
|
238
|
+
|
|
239
|
+
- **不存在**(首次,如只跑了 spec 未跑 plan):参照 `modus/template/api-chain.md` 模板完整生成
|
|
240
|
+
- **已存在**(先跑了 plan 已生成):追加新 Scenario 块,**不覆盖已有内容**,在文件末尾追加:
|
|
241
|
+
|
|
242
|
+
```markdown
|
|
243
|
+
---
|
|
244
|
+
<!-- 以下 Scenario 由 /modus:spec 生成,追加于 {YYYY-MM-DD} -->
|
|
245
|
+
|
|
246
|
+
## Scenario N: {来自 spec 的场景标题}
|
|
247
|
+
...
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**写入路径:** `modus/artifacts/{story_id}/scenarios/api-chain.md`
|
|
251
|
+
|
|
252
|
+
若目录不存在,自动创建 `scenarios/`。
|
|
253
|
+
|
|
254
|
+
#### 8-3:完成输出
|
|
255
|
+
|
|
256
|
+
```
|
|
257
|
+
✅ api-chain.md 已生成/更新:modus/artifacts/{story_id}/scenarios/api-chain.md
|
|
258
|
+
共 {N} 个 Scenario(来自 spec: {M} | 已有 plan 场景: {K})
|
|
259
|
+
来源:{spec/*.feature.md | design.md §3 | prd.md AC}
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
若无任何 Gherkin When 子句含接口调用动作,输出以下提示并跳过:
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
ℹ️ 未检测到明确的接口调用场景,跳过 api-chain.md 生成。
|
|
266
|
+
如需手动补充,可参考模板:modus/template/api-chain.md
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
### Step 9:归档确认 ⏸️ 【人工审批节点】
|
|
215
272
|
|
|
216
273
|
文档生成后,展示结果并等待用户决定:
|
|
217
274
|
|
|
@@ -243,7 +300,7 @@ supported_platforms:
|
|
|
243
300
|
|
|
244
301
|
---
|
|
245
302
|
|
|
246
|
-
### Step
|
|
303
|
+
### Step 10:后置 Skill 知识写回(归档后执行)
|
|
247
304
|
|
|
248
305
|
从 proposal.md + design-brief.md 中提取可沉淀的知识,**请求用户确认后**写回 Skill(调用 `modus-skill-creator` 模式 C):
|
|
249
306
|
|
|
@@ -256,7 +313,7 @@ supported_platforms:
|
|
|
256
313
|
|
|
257
314
|
---
|
|
258
315
|
|
|
259
|
-
### Step
|
|
316
|
+
### Step 11:多平台 Skill 同步(后置)
|
|
260
317
|
|
|
261
318
|
与 `modus-plan` Step 10 相同逻辑,对本次更新/新建的业务 Skill 执行多平台同步(根据 `modus/config.yaml` 的 `platforms` 字段)。
|
|
262
319
|
|
|
@@ -43,7 +43,7 @@ disable: false
|
|
|
43
43
|
--enhance X → ENHANCE_DOMAIN=X(Step 3 前先增量更新该域 Skill)
|
|
44
44
|
--file X → FOCUS_FILE=X(Step 3 从该文件推断域,而非 prompt 匹配)
|
|
45
45
|
--no-design → SKIP_DESIGN=true(跳过 Step 6 Design Brief)
|
|
46
|
-
--story X → STORY_ID=X(Step 9 日志写入 modus/
|
|
46
|
+
--story X → STORY_ID=X(Step 9 日志写入 modus/artifacts/{X}/code/vibe-log.md)
|
|
47
47
|
--dry-run → DRY_RUN=true(Step 7 只输出设计,不生成代码)
|
|
48
48
|
--watch → WATCH_MODE=true(Step 10 启用文件监听,实验性)
|
|
49
49
|
--codex → CODEX_MODE=true(禁用交互提问,全批量推断输出)
|
|
@@ -75,7 +75,7 @@ constitution:
|
|
|
75
75
|
|
|
76
76
|
### Step 1:Level 1 加载——读知识目录(~200 tokens)
|
|
77
77
|
|
|
78
|
-
读取 `modus/
|
|
78
|
+
读取 `modus/knowledge_base/map.md`(全景目录索引):
|
|
79
79
|
- 了解当前项目有哪些可用的 Skill
|
|
80
80
|
- 识别各 Skill 的 maturity 状态、最近引用时间
|
|
81
81
|
- 为 Step 2 的智能分析做准备
|
|
@@ -83,7 +83,7 @@ constitution:
|
|
|
83
83
|
**如果 `knowledge-catalog.md` 不存在:**
|
|
84
84
|
|
|
85
85
|
```
|
|
86
|
-
⚠️ 未找到知识目录(modus/
|
|
86
|
+
⚠️ 未找到知识目录(modus/knowledge_base/map.md)
|
|
87
87
|
|
|
88
88
|
建议先运行 /modus:init 初始化知识库,可以让 AI 更准确地理解项目。
|
|
89
89
|
|
|
@@ -233,10 +233,10 @@ Codex 模式:所有同步静默执行,不输出状态行(减少干扰)
|
|
|
233
233
|
|
|
234
234
|
**路径规则(v3.1 Single Source of Truth):**
|
|
235
235
|
```
|
|
236
|
-
modus/
|
|
236
|
+
modus/knowledge_base/domain/{domain}/code/SKILL.md
|
|
237
237
|
```
|
|
238
238
|
|
|
239
|
-
例如:`modus/
|
|
239
|
+
例如:`modus/knowledge_base/biz-order/SKILL.md`、`modus/knowledge_base/biz-payment/SKILL.md`
|
|
240
240
|
|
|
241
241
|
> **注意**:`.codebuddy/skills/modus-biz-{domain}/SKILL.md` 为旧路径引用桩,已废弃,请勿使用。
|
|
242
242
|
|
|
@@ -285,7 +285,7 @@ modus/knowledge/biz-{domain}/SKILL.md
|
|
|
285
285
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
286
286
|
|
|
287
287
|
## 实现蓝图
|
|
288
|
-
Data: {Mapper 类/方法}(路径: modus/
|
|
288
|
+
Data: {Mapper 类/方法}(路径: modus/knowledge_base/domain/{domain}/code/SKILL.md → 关键文件索引)
|
|
289
289
|
Service: {Manager/Service 类/方法,标注 @Transactional 位置}
|
|
290
290
|
API: {Facade/Controller 类/方法}
|
|
291
291
|
|
|
@@ -383,7 +383,7 @@ Codex 模式下,每个文件生成前输出分隔符:`=== 生成文件: {pat
|
|
|
383
383
|
#### 执行方式
|
|
384
384
|
|
|
385
385
|
```
|
|
386
|
-
有新知识 → 写入 modus/
|
|
386
|
+
有新知识 → 写入 modus/knowledge_base/domain/{domain}/code/SKILL.md(v3.1 路径)
|
|
387
387
|
→ 写入完成后输出单行提示:
|
|
388
388
|
[已更新 {domain} 域知识: 新增 [pitfall] {摘要} / 更正 [model] {字段名}]
|
|
389
389
|
|
|
@@ -402,7 +402,7 @@ Codex 模式下,每个文件生成前输出分隔符:`=== 生成文件: {pat
|
|
|
402
402
|
|
|
403
403
|
编码完成后,将本次会话**追加**(append-only,禁止覆盖原有内容)到日志文件:
|
|
404
404
|
|
|
405
|
-
- 若 STORY_ID 已设置:写入 `modus/
|
|
405
|
+
- 若 STORY_ID 已设置:写入 `modus/artifacts/{STORY_ID}/code/vibe-log.md`
|
|
406
406
|
- 否则:写入 `modus/sessions/vibe-log.md`
|
|
407
407
|
|
|
408
408
|
```markdown
|
|
@@ -514,7 +514,7 @@ Codex 平台与 Cursor 的核心差异及适配方式:
|
|
|
514
514
|
--enhance <domain> 编码前先对指定域执行增量 Skill 更新(如 --enhance album)
|
|
515
515
|
--file <path> 聚焦单文件:从该文件推断域,只加载相关 Skill
|
|
516
516
|
--no-design 跳过 Design Brief 内联设计(极速模式,仅适合单行改动)
|
|
517
|
-
--story <id> 关联 TAPD Story ID,将编码日志写入 modus/
|
|
517
|
+
--story <id> 关联 TAPD Story ID,将编码日志写入 modus/artifacts/{id}/code/vibe-log.md
|
|
518
518
|
--dry-run 只输出 Design Brief,不生成实际代码(用于方案确认)
|
|
519
519
|
--watch 持续监听文件变化,触发 save-driven vibe coding(实验性)
|
|
520
520
|
--codex Codex 平台模式:禁用交互提问,全批量推断输出,自动推断所有决策
|
|
@@ -531,7 +531,7 @@ Codex 平台与 Cursor 的核心差异及适配方式:
|
|
|
531
531
|
/modus:vibe 实现艺人等级更新 --codex --story 9876543
|
|
532
532
|
|
|
533
533
|
业务知识路径(v3.1):
|
|
534
|
-
modus/
|
|
534
|
+
modus/knowledge_base/domain/{domain}/code/SKILL.md
|
|
535
535
|
|
|
536
536
|
相关命令:
|
|
537
537
|
/modus:init 初始化/更新知识库(首次使用前建议先跑)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# Analysis — Harness Loop1 分析报告模板
|
|
2
|
+
|
|
3
|
+
> **生成位置**:(v3.2 旧)`modus/stories/<id>/harness/01-analysis.md`
|
|
4
|
+
> **生成位置**:(v4.0 新)通常拆为 `modus/artifacts/<id>/pid/prd.md` + `modus/artifacts/<id>/design/design.md`
|
|
5
|
+
> 当只需轻量分析(不区分 PID/Design)时,使用本模板,置于 `modus/artifacts/<id>/pid/analysis.md`
|
|
6
|
+
> **生成命令**:Harness Loop1 SubAgent00(modus-analyst)
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 元信息
|
|
11
|
+
|
|
12
|
+
```yaml
|
|
13
|
+
story_id: ""
|
|
14
|
+
agent: "modus-analyst"
|
|
15
|
+
schema_version: "1.1"
|
|
16
|
+
created_at: ""
|
|
17
|
+
input:
|
|
18
|
+
tapd_url: ""
|
|
19
|
+
prd_attachments: []
|
|
20
|
+
output:
|
|
21
|
+
next_subagent: "modus-designer"
|
|
22
|
+
handoff_block: "see HANDOFF below"
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 1. 需求理解
|
|
28
|
+
|
|
29
|
+
### 1.1 一句话总结
|
|
30
|
+
|
|
31
|
+
### 1.2 详细需求(结构化)
|
|
32
|
+
- **谁**:(用户角色)
|
|
33
|
+
- **做什么**:(业务动作)
|
|
34
|
+
- **价值**:(业务价值)
|
|
35
|
+
- **场景**:(典型场景)
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 2. 关键信息抽取
|
|
40
|
+
|
|
41
|
+
| 字段 | 值 | 来源 |
|
|
42
|
+
|------|-----|------|
|
|
43
|
+
| 优先级 | | TAPD/产品 |
|
|
44
|
+
| 截止日期 | | |
|
|
45
|
+
| 涉及模块 | | |
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## 3. 不确定项(必须澄清后才能进入 Design)
|
|
50
|
+
|
|
51
|
+
| 不确定点 | 影响范围 | 候选方案 | 推荐 |
|
|
52
|
+
|---------|---------|---------|------|
|
|
53
|
+
| | | | |
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 4. 历史相似需求
|
|
58
|
+
|
|
59
|
+
| Story ID | 相似度 | 差异点 |
|
|
60
|
+
|----------|--------|-------|
|
|
61
|
+
| | | |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## HANDOFF(schema v1.1)
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
schema_version: "1.1"
|
|
69
|
+
from: "modus-analyst"
|
|
70
|
+
to: "modus-designer"
|
|
71
|
+
story_id: ""
|
|
72
|
+
status: "ready_for_design"
|
|
73
|
+
artifacts:
|
|
74
|
+
- "modus/artifacts/<id>/pid/prd.md"
|
|
75
|
+
checkpoints:
|
|
76
|
+
unresolved_questions: []
|
|
77
|
+
related_stories: []
|
|
78
|
+
issues: []
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
> **维护规则**:本模板仅用于 Harness Loop1 内部 handoff;最终用户阅读产物以 `pid/prd.md` 为准。
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# API 调用链 — {业务场景名}
|
|
2
|
+
|
|
3
|
+
> **来源**:{plan.md | spec/{feature}.feature.md}
|
|
4
|
+
> **关联域**:{domain}
|
|
5
|
+
> **Story**:{story_id}
|
|
6
|
+
> **生成时间**:{YYYY-MM-DD}
|
|
7
|
+
> **说明**:本文件由 `/modus:plan` 或 `/modus:spec` 自动生成,供测试团队进行场景化用例设计。
|
|
8
|
+
>
|
|
9
|
+
> - Happy Path 场景:验证主业务流程正常执行
|
|
10
|
+
> - 边界/异常场景:验证参数校验、权限、并发等防御性逻辑
|
|
11
|
+
> - 每个 Scenario 包含:业务描述(Given/When/Then)+ 接口调用链(步骤表格)+ 测试数据
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Scenario 1: {场景标题}(Happy Path)
|
|
16
|
+
|
|
17
|
+
**Given** {前置条件,如:用户已登录,tenantId=xxx,待处理记录 N 条}
|
|
18
|
+
**When** {触发动作,如:调用 POST /api/v1/{resource}/xxx 接口}
|
|
19
|
+
**Then** {预期结果,如:返回 200,记录状态更新为 approved,审批日志写入}
|
|
20
|
+
|
|
21
|
+
### 接口调用链
|
|
22
|
+
|
|
23
|
+
| 步骤 | 接口 | 请求参数 | 预期返回 | 备注 |
|
|
24
|
+
|------|------|---------|---------|------|
|
|
25
|
+
| 1 | `POST /api/v1/...` | `{"key": "value"}` | `200 {"code":0}` | 主入口 |
|
|
26
|
+
| 2 | `GET /api/v1/.../status` | `id={id}` | `200 {"status":"xxx"}` | 验证状态流转 |
|
|
27
|
+
|
|
28
|
+
### 测试数据
|
|
29
|
+
|
|
30
|
+
- **前置数据**:{如:tenantId=1001, userId=2001, recordId=3001}
|
|
31
|
+
- **清理数据**:{如:删除 recordId=3001 的记录}
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Scenario 2: {场景标题}(边界/异常)
|
|
36
|
+
|
|
37
|
+
**Given** {前置条件,如:请求参数超过上限}
|
|
38
|
+
**When** {触发动作}
|
|
39
|
+
**Then** {预期结果,如:返回 400,错误码 ERROR_BATCH_LIMIT_EXCEEDED}
|
|
40
|
+
|
|
41
|
+
### 接口调用链
|
|
42
|
+
|
|
43
|
+
| 步骤 | 接口 | 请求参数 | 预期返回 | 备注 |
|
|
44
|
+
|------|------|---------|---------|------|
|
|
45
|
+
| 1 | `POST /api/v1/...` | `{"ids": [...超限数量...]}` | `400 {"code":"ERROR_XXX"}` | 参数校验 |
|
|
46
|
+
|
|
47
|
+
### 测试数据
|
|
48
|
+
|
|
49
|
+
- **前置数据**:{...}
|
|
50
|
+
- **清理数据**:{无需清理}
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Scenario 3: {场景标题}(权限/并发)
|
|
55
|
+
|
|
56
|
+
**Given** {前置条件,如:无操作权限的用户 / 并发提交同一任务}
|
|
57
|
+
**When** {触发动作}
|
|
58
|
+
**Then** {预期结果,如:返回 403 / 分布式锁触发,返回 409}
|
|
59
|
+
|
|
60
|
+
### 接口调用链
|
|
61
|
+
|
|
62
|
+
| 步骤 | 接口 | 请求参数 | 预期返回 | 备注 |
|
|
63
|
+
|------|------|---------|---------|------|
|
|
64
|
+
| 1 | `POST /api/v1/...` | `{...}` | `403 {"code":"NO_PERMISSION"}` | 权限校验 |
|
|
65
|
+
|
|
66
|
+
### 测试数据
|
|
67
|
+
|
|
68
|
+
- **前置数据**:{...}
|
|
69
|
+
- **清理数据**:{...}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
# Design — 技术评估设计
|
|
2
|
+
|
|
3
|
+
> **生成位置**:`modus/artifacts/<STORY_ID>/design/design.md`
|
|
4
|
+
> **生成命令**:`/modus:plan --design <pid-path>` 或 Harness Loop1 SubAgent01.5(modus-designer)
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 元信息
|
|
9
|
+
|
|
10
|
+
```yaml
|
|
11
|
+
story_id: ""
|
|
12
|
+
pid_ref: "modus/artifacts/<STORY_ID>/pid/prd.md"
|
|
13
|
+
created_at: ""
|
|
14
|
+
updated_at: ""
|
|
15
|
+
status: "draft" # draft | reviewed | approved | implemented
|
|
16
|
+
reviewers: [] # 评审人列表
|
|
17
|
+
related_designs: [] # 历史可复用设计
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 1. 设计目标
|
|
23
|
+
|
|
24
|
+
> 一段话:本次方案要达到的技术目标 + 与 PID 验收标准的对应关系。
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 2. 整体架构
|
|
29
|
+
|
|
30
|
+
### 2.1 上下游关系
|
|
31
|
+
```mermaid
|
|
32
|
+
graph LR
|
|
33
|
+
A[上游系统] --> B[本服务]
|
|
34
|
+
B --> C[下游系统]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 2.2 涉及模块清单
|
|
38
|
+
|
|
39
|
+
| 模块 | 是否新增 | 变更类型 | 说明 |
|
|
40
|
+
|------|---------|---------|------|
|
|
41
|
+
| | | (新增/修改/删除) | |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 3. 接口设计
|
|
46
|
+
|
|
47
|
+
### 3.1 对外暴露接口
|
|
48
|
+
|
|
49
|
+
| 接口名 | 类型 | 路径/Topic | 是否新增 | 入参 | 出参 |
|
|
50
|
+
|-------|------|-----------|---------|------|------|
|
|
51
|
+
| | HTTP/MQ/RPC | | | | |
|
|
52
|
+
|
|
53
|
+
### 3.2 调用下游接口
|
|
54
|
+
|
|
55
|
+
| 下游服务 | 接口 | 调用频率 | 超时 | 重试策略 | 降级方案 |
|
|
56
|
+
|---------|------|---------|------|---------|---------|
|
|
57
|
+
| | | | | | |
|
|
58
|
+
|
|
59
|
+
> ⚠️ **超时必填**:每个下游调用必须明确写出超时时间和重试次数,不接受"按默认"。
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 4. 数据模型
|
|
64
|
+
|
|
65
|
+
### 4.1 新增/修改的表
|
|
66
|
+
|
|
67
|
+
| 表名 | 字段 | 类型 | 是否索引 | 说明 |
|
|
68
|
+
|------|------|------|---------|------|
|
|
69
|
+
| | | | | |
|
|
70
|
+
|
|
71
|
+
### 4.2 数据迁移
|
|
72
|
+
|
|
73
|
+
- 是否需要迁移:(是/否)
|
|
74
|
+
- 迁移方式:(脚本/在线 DDL/双写切流)
|
|
75
|
+
- 回滚方案:
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## 5. 状态流转(如适用)
|
|
80
|
+
|
|
81
|
+
```mermaid
|
|
82
|
+
stateDiagram-v2
|
|
83
|
+
[*] --> 待审核
|
|
84
|
+
待审核 --> 已通过
|
|
85
|
+
待审核 --> 已驳回
|
|
86
|
+
已通过 --> [*]
|
|
87
|
+
已驳回 --> [*]
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
| 状态 | 流入条件 | 流出条件 | 副作用 |
|
|
91
|
+
|------|---------|---------|--------|
|
|
92
|
+
| | | | |
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 6. 边界控制
|
|
97
|
+
|
|
98
|
+
> 明确**本设计不解决**的问题,以及**与既有设计冲突点**的解决方案。
|
|
99
|
+
|
|
100
|
+
- ❌ 不解决:(如:跨地域容灾,由基础设施层兜底)
|
|
101
|
+
- ⚠️ 冲突点:与 XXX 模块的 YYY 字段语义存在歧义,约定使用 ZZZ
|
|
102
|
+
- 🛡️ 兜底:当下游 A 不可用时,降级返回 B 的默认值
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## 7. 性能与并发
|
|
107
|
+
|
|
108
|
+
| 维度 | 目标 | 风险点 | 缓解措施 |
|
|
109
|
+
|------|------|-------|---------|
|
|
110
|
+
| QPS | | | |
|
|
111
|
+
| P99 延迟 | | | |
|
|
112
|
+
| 并发锁 | | | |
|
|
113
|
+
| 缓存穿透 | | | |
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 8. 安全与合规
|
|
118
|
+
|
|
119
|
+
- 鉴权方式:
|
|
120
|
+
- 数据脱敏:
|
|
121
|
+
- 审计日志:
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 9. 测试策略
|
|
126
|
+
|
|
127
|
+
- 单元测试:
|
|
128
|
+
- 集成测试:
|
|
129
|
+
- 性能测试:
|
|
130
|
+
- 灰度方案:
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 10. 实施步骤(高阶)
|
|
135
|
+
|
|
136
|
+
> 仅描述大步骤;细粒度步骤在 plan.md 中展开。
|
|
137
|
+
|
|
138
|
+
1. (步骤一)
|
|
139
|
+
2. (步骤二)
|
|
140
|
+
3. (步骤三)
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## 11. 历史可复用资产
|
|
145
|
+
|
|
146
|
+
| 来源 Story | 可复用内容 | 复用路径 |
|
|
147
|
+
|-----------|-----------|---------|
|
|
148
|
+
| | | `modus/artifacts/<id>/design/design.md` |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 12. 评审记录
|
|
153
|
+
|
|
154
|
+
| 日期 | 评审人 | 关键意见 | 决议 |
|
|
155
|
+
|------|-------|---------|------|
|
|
156
|
+
| | | | |
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
> **维护规则**:本模板由 modus-designer 自动填充第 1-10 节;评审记录由人工填写。
|