@modus-ai/modus 0.2.3 → 0.2.4
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/package.json
CHANGED
|
@@ -69,6 +69,18 @@ skill_frontmatter:
|
|
|
69
69
|
type: date
|
|
70
70
|
required: true
|
|
71
71
|
description: 最近一次被工作流引用的日期,用于衰减计算
|
|
72
|
+
|
|
73
|
+
- name: last_hash
|
|
74
|
+
type: string
|
|
75
|
+
required: true
|
|
76
|
+
description: key_files 内容的 SHA-1 哈希值,用于检测代码变更。初始值为空字符串,首次使用时自动计算
|
|
77
|
+
default: ""
|
|
78
|
+
|
|
79
|
+
- name: key_files
|
|
80
|
+
type: list
|
|
81
|
+
required: true
|
|
82
|
+
description: 关键源文件路径列表(最多20个),用于计算 last_hash。按优先级选取:Service/Manager/Mapper/Entity(必选),Enum/Exception(强烈建议),MQ/Config(有则加入)
|
|
83
|
+
default: []
|
|
72
84
|
|
|
73
85
|
- name: usage_count
|
|
74
86
|
type: integer
|
|
@@ -24,3 +24,30 @@ updated: {YYYY-MM-DD}
|
|
|
24
24
|
Level 3(按需,无上限): 执行任务时读 Skill 引用的实际代码文件
|
|
25
25
|
|
|
26
26
|
目标:不相关的 Skill 不加载,大幅降低 token 消耗。
|
|
27
|
+
|
|
28
|
+
## Skill 状态生命周期
|
|
29
|
+
|
|
30
|
+
### 成熟度状态(基于 usage_count)
|
|
31
|
+
- **draft** → 初始生成,未经验证(usage_count = 0)
|
|
32
|
+
- **verified** → 经至少1次真实使用验证(usage_count ≥ 1,运行 `/modus:verify` 升级)
|
|
33
|
+
- **proven** → 经≥2个不同工作流验证有效(usage_count ≥ 2)
|
|
34
|
+
- **stale** → last_hash 不匹配或距 last_referenced 超过 stale_after_days,需更新(禁止直接引用)
|
|
35
|
+
- **archived** → 域已废弃,不再维护
|
|
36
|
+
|
|
37
|
+
### 衰减规则(基于 last_referenced)
|
|
38
|
+
- proven + 距 last_referenced 超过 12 个月 → verified
|
|
39
|
+
- verified + 距 last_referenced 超过 6 个月 → stale
|
|
40
|
+
- stale + 距 last_referenced 超过 stale_after_days → archived(需人工二次确认)
|
|
41
|
+
|
|
42
|
+
### 防腐机制核心字段
|
|
43
|
+
每个 Skill frontmatter 必须包含以下字段,缺一不可:
|
|
44
|
+
- **last_referenced**: 最后引用时间(用于衰减计算)
|
|
45
|
+
- **usage_count**: 使用次数(用于成熟度升级)
|
|
46
|
+
- **last_hash**: key_files 内容 SHA-1 哈希(用于检测代码变更,初始留空)
|
|
47
|
+
- **key_files**: 关键源文件列表(最多20个,用于 hash 计算)
|
|
48
|
+
|
|
49
|
+
缺少任一防腐字段将导致:
|
|
50
|
+
- 无法自动检测代码变更
|
|
51
|
+
- 无法触发 Skill 更新
|
|
52
|
+
- 无法计算知识衰减
|
|
53
|
+
- 防腐机制完全失效
|
|
@@ -230,7 +230,7 @@ shasum -a 1 {key_files...} | awk '{print $1}' | sort | shasum -a 1 | awk '{print
|
|
|
230
230
|
|
|
231
231
|
注释汇总统计(Step 1 完成后输出):
|
|
232
232
|
发现 TODO {N}条 | FIXME {M}条 | WARN/注意 {W}条 | HACK {H}条 | @deprecated {D}条
|
|
233
|
-
→ TODO > 3 条时:触发知识空白标记,供 modus-init Step
|
|
233
|
+
→ TODO > 3 条时:触发知识空白标记,供 modus-init Step 4 访谈问卷生成使用
|
|
234
234
|
```
|
|
235
235
|
|
|
236
236
|
---
|
|
@@ -324,7 +324,7 @@ Step 2C-4:构建完整转换矩阵(含禁止转换,不允许留空):
|
|
|
324
324
|
| PAID | COMPLETED | 确认收货 | completeOrder() | @Transactional | - |
|
|
325
325
|
| COMPLETED | CANCELLED | - | - | - | ❌ 抛 InvalidTransitionException |
|
|
326
326
|
|
|
327
|
-
孤立状态(无入/出转换的枚举值)→ 标记为 ⚠️「孤立状态,触发 Step
|
|
327
|
+
孤立状态(无入/出转换的枚举值)→ 标记为 ⚠️「孤立状态,触发 Step 4 访谈」
|
|
328
328
|
```
|
|
329
329
|
|
|
330
330
|
#### 2D. 自定义校验器扫描
|
|
@@ -522,7 +522,7 @@ Step 2C-4:构建完整转换矩阵(含禁止转换,不允许留空):
|
|
|
522
522
|
1. **2A if/else 推断结果** → 将所有 `[invariant]` 标签条目写入本节,标注来源行号
|
|
523
523
|
2. **2D 自定义校验器** → 将 isValid()/validate() 中的判断逻辑转为不变量条目
|
|
524
524
|
3. **Step 1.4 代码注释挖掘** → 将 `//WARN / //注意 / //重要` 注释写入本节(标注来源)
|
|
525
|
-
4. **Step
|
|
525
|
+
4. **Step 4 人工访谈回答** → 将用户补充的业务约束写入本节(标注 `[人工补充: {日期}]`)
|
|
526
526
|
|
|
527
527
|
每条不变量必含:不变量描述、验证位置(类名:行号或方法名)、违反后果(异常类或错误码)、来源标注
|
|
528
528
|
|
|
@@ -537,7 +537,7 @@ Step 2C-4:构建完整转换矩阵(含禁止转换,不允许留空):
|
|
|
537
537
|
2. Domain/Entity 类的类级 Javadoc → 实体中文含义与边界说明
|
|
538
538
|
3. Service/Manager 方法 Javadoc 中出现的业务专名词(如「结算」「对账」「预授权」「防重」)
|
|
539
539
|
4. Step 1.4 代码注释中出现的业务术语(`// 注意:此处的"XX"指的是...` 类注释)
|
|
540
|
-
5. Step
|
|
540
|
+
5. Step 4 人工访谈中用户提及的专业术语(标注 `[人工补充]`)
|
|
541
541
|
|
|
542
542
|
每个术语必含:术语名、定义(1-2句)、与通用概念的区别(若无区别可省略)
|
|
543
543
|
|
|
@@ -737,7 +737,7 @@ last_verified_by: "" # 最后 verified 确认人(运行 /modus:verify
|
|
|
737
737
|
domain_confidence: 0 # 域置信度评分(0-10),来自 modus-init Step 2 评分矩阵
|
|
738
738
|
invariant_count: 0 # Section 15 业务不变量条目数(由 Skills Builder 自动统计)
|
|
739
739
|
glossary_size: 0 # Section 16 领域词汇表条目数(由 Skills Builder 自动统计)
|
|
740
|
-
hidden_knowledge_rate: 0 # 隐性知识补全率(0-100),来自 modus-init Step
|
|
740
|
+
hidden_knowledge_rate: 0 # 隐性知识补全率(0-100),来自 modus-init Step 4 访谈问卷
|
|
741
741
|
upstream_skills: # 本 Skill 在 Section 10 中依赖的其他域 Skill(由 Step 4 双向同步维护)
|
|
742
742
|
- modus-biz-payment
|
|
743
743
|
downstream_skills: # 依赖本域的其他 Skill(由被依赖方的 Step 4 双向同步维护)
|
|
@@ -907,7 +907,7 @@ stateDiagram-v2
|
|
|
907
907
|
|
|
908
908
|
## 15. 业务不变量 [invariant]
|
|
909
909
|
|
|
910
|
-
(无条件生成。来源:2A if/else 推断 + 2D 自定义校验器 + Step 1.4 注释挖掘 + Step
|
|
910
|
+
(无条件生成。来源:2A if/else 推断 + 2D 自定义校验器 + Step 1.4 注释挖掘 + Step 4 人工访谈。)
|
|
911
911
|
|
|
912
912
|
| 不变量描述 | 验证位置 | 违反后果 | 来源 |
|
|
913
913
|
|---------|---------|---------|------|
|
|
@@ -917,7 +917,7 @@ stateDiagram-v2
|
|
|
917
917
|
|
|
918
918
|
## 16. 领域词汇表 [model]
|
|
919
919
|
|
|
920
|
-
(无条件生成。来源:枚举描述 + Javadoc + 代码注释 + Step
|
|
920
|
+
(无条件生成。来源:枚举描述 + Javadoc + 代码注释 + Step 4 人工访谈。)
|
|
921
921
|
|
|
922
922
|
| 术语 | 定义 | 与通用概念的区别 |
|
|
923
923
|
|------|------|----------------|
|
|
@@ -92,9 +92,9 @@ disable: false
|
|
|
92
92
|
|
|
93
93
|
---
|
|
94
94
|
|
|
95
|
-
### Step 2:项目扫描与业务分类(
|
|
95
|
+
### Step 2:项目扫描与业务分类(5 轮全量扫描)
|
|
96
96
|
|
|
97
|
-
启动一个「项目分析 SubAgent」,执行以下 **
|
|
97
|
+
启动一个「项目分析 SubAgent」,执行以下 **5 轮结构化扫描**(替代原有的简单目录读取):
|
|
98
98
|
|
|
99
99
|
#### 轮次 1:模块发现
|
|
100
100
|
|
|
@@ -272,7 +272,7 @@ disable: false
|
|
|
272
272
|
请指定每个小包的处理方式(合并/独立/重命名)或回复「保持原样」:
|
|
273
273
|
```
|
|
274
274
|
|
|
275
|
-
**严禁自动决策**:必须在一次交互中等待用户对「域归属确认 + 小包合并决策」全部回复后,才能进入 Step
|
|
275
|
+
**严禁自动决策**:必须在一次交互中等待用户对「域归属确认 + 小包合并决策」全部回复后,才能进入 Step 4。
|
|
276
276
|
|
|
277
277
|
#### 3.2 大域反向拆分保护
|
|
278
278
|
|
|
@@ -297,9 +297,9 @@ disable: false
|
|
|
297
297
|
|
|
298
298
|
---
|
|
299
299
|
|
|
300
|
-
### Step
|
|
300
|
+
### Step 4:结构化访谈问卷(隐性知识捕获)
|
|
301
301
|
|
|
302
|
-
**触发时机:** 用户确认域列表后、Step
|
|
302
|
+
**触发时机:** 用户确认域列表后、Step 5 启动前执行。
|
|
303
303
|
|
|
304
304
|
**核心目的:** 代码扫描只能获得「显性结构知识」,此步骤通过动态生成的针对性问题,补全代码中无法推断的**隐性业务知识**(口口相传的规则、历史决策、业务背景)。
|
|
305
305
|
|
|
@@ -362,7 +362,7 @@ disable: false
|
|
|
362
362
|
|
|
363
363
|
---
|
|
364
364
|
|
|
365
|
-
### Step
|
|
365
|
+
### Step 5:生成业务 Skill(Layer 2)—— 并行执行
|
|
366
366
|
|
|
367
367
|
用户确认后,**同时**为每个业务域启动独立的「Skills Builder SubAgent」(`modus-skill-creator` Skill,模式 A),并行生成所有业务 Skill 文件。各域之间完全独立,无需等待彼此完成。
|
|
368
368
|
|
|
@@ -446,7 +446,7 @@ SubAgent-3 (user域) ──► 扫描用户全量文件(含Enum/MQ/Config
|
|
|
446
446
|
payment.downstream_skills = [order, refund]
|
|
447
447
|
```
|
|
448
448
|
|
|
449
|
-
### Step
|
|
449
|
+
### Step 6:多平台同步(Business Skills)
|
|
450
450
|
|
|
451
451
|
Business Skills 全部生成后,读取 `modus/config.yaml` 的 `platforms` 字段,将每个业务 Skill 同步到其他已选平台。
|
|
452
452
|
|
|
@@ -516,7 +516,7 @@ alwaysApply: false
|
|
|
516
516
|
|
|
517
517
|
---
|
|
518
518
|
|
|
519
|
-
### Step
|
|
519
|
+
### Step 7:生成团队约定 Skill(Layer 0-T)
|
|
520
520
|
|
|
521
521
|
调用「Skills Builder SubAgent」(模式 E:团队约定初始化):
|
|
522
522
|
|
|
@@ -541,7 +541,7 @@ alwaysApply: false
|
|
|
541
541
|
> 原始文件保持不变,Modus 仅在此处做统一索引。
|
|
542
542
|
```
|
|
543
543
|
|
|
544
|
-
### Step
|
|
544
|
+
### Step 8:生成技术知识 Skill(Layer 1)
|
|
545
545
|
|
|
546
546
|
调用「Skills Builder SubAgent」(模式 E:技术知识初始化),初始化技术知识骨架:
|
|
547
547
|
|
|
@@ -554,7 +554,7 @@ alwaysApply: false
|
|
|
554
554
|
2. 从构建文件提取的技术栈(`pom.xml` → Spring Boot 版本、`package.json` → 框架版本等)
|
|
555
555
|
3. 占位符章节(反模式库、架构决策、跨项目经验——待后续工作流积累)
|
|
556
556
|
|
|
557
|
-
### Step
|
|
557
|
+
### Step 9:生成知识全景目录(knowledge-catalog.md)
|
|
558
558
|
|
|
559
559
|
在 `modus/knowledge-catalog.md` 创建全景索引,使用升级后的条目格式:
|
|
560
560
|
|
|
@@ -599,7 +599,7 @@ Skill status 生命周期(统一使用 status 字段):
|
|
|
599
599
|
- stale + 超过 stale_after_days → archived(需人工二次确认)
|
|
600
600
|
```
|
|
601
601
|
|
|
602
|
-
### Step
|
|
602
|
+
### Step 10:初始化 modus/config.yaml(若不存在)
|
|
603
603
|
|
|
604
604
|
若项目尚无 `modus/config.yaml`,生成默认配置:
|
|
605
605
|
|
|
@@ -626,7 +626,7 @@ constitution:
|
|
|
626
626
|
|
|
627
627
|
提示用户填写 `constitution` 字段,以便后续命令无需重复说明项目约束。
|
|
628
628
|
|
|
629
|
-
### Step
|
|
629
|
+
### Step 11:完成回报
|
|
630
630
|
|
|
631
631
|
所有业务 Skill 生成完毕后,回复用户:
|
|
632
632
|
|
|
@@ -716,25 +716,54 @@ constitution:
|
|
|
716
716
|
|
|
717
717
|
---
|
|
718
718
|
|
|
719
|
-
### Step
|
|
720
|
-
|
|
721
|
-
在生成每个业务 Skill(`.codebuddy/skills/modus-biz-{domain}/SKILL.md`)时,**必须**在 frontmatter
|
|
722
|
-
|
|
723
|
-
|
|
719
|
+
### Step 5 补充:生成 Business Skill 时必须填写完整 frontmatter(防腐机制核心)
|
|
720
|
+
|
|
721
|
+
在生成每个业务 Skill(`.codebuddy/skills/modus-biz-{domain}/SKILL.md`)时,**必须**在 frontmatter 中填写以下**完整字段清单**。这些字段是知识防腐机制的核心,缺一不可:
|
|
722
|
+
|
|
723
|
+
#### 一、基础元数据字段(必填)
|
|
724
|
+
- `name`: Skill 唯一标识符(与目录名一致)
|
|
725
|
+
- `description`: 一句话描述,必须包含 `[MODUS:BIZ]` 标记
|
|
726
|
+
- `version`: 语义化版本号(初始 1.0.0)
|
|
727
|
+
- `updated`: 最后更新日期(YYYY-MM-DD)
|
|
728
|
+
- `status`: 成熟度状态(初始 draft)
|
|
729
|
+
- `format_version`: 节结构版本(当前 v3)
|
|
730
|
+
- `stale_after_days`: 过期天数阈值(默认 90)
|
|
731
|
+
|
|
732
|
+
#### 二、防腐机制核心字段(必填,缺少则无法检测代码变更)
|
|
733
|
+
- **`last_referenced`**: 最后引用时间(初始值 = `updated` 日期)
|
|
734
|
+
- 用途:计算知识衰减,超过 `stale_after_days` 自动降级
|
|
735
|
+
- **`usage_count`**: 使用次数(初始值 = 0)
|
|
736
|
+
- 用途:成熟度升级判定(draft→verified→proven)
|
|
737
|
+
- **`last_hash`**: key_files 内容 SHA-1 哈希值(初始值 = "",留空)
|
|
738
|
+
- 用途:检测代码变更,触发 Skill 更新
|
|
739
|
+
- 计算时机:首次被 plan/spec/harness 引用时自动计算并写入
|
|
740
|
+
- **`last_verified_by`**: 最后确认人(初始值 = "",留空)
|
|
741
|
+
- 用途:记录人工验证信息,升为 verified 时填写
|
|
742
|
+
|
|
743
|
+
#### 三、key_files 填写规则(最多 20 个,用于 hash 检测)
|
|
724
744
|
- 上限 **20 个**文件(覆盖全部 10 类文件类型)
|
|
725
745
|
- 按以下优先级选取(满 20 个时从后往前截断):
|
|
726
|
-
-
|
|
727
|
-
-
|
|
728
|
-
-
|
|
729
|
-
-
|
|
730
|
-
- `last_hash` 初始留空(`""`),下次 plan/spec/harness 触发前置更新时自动计算并填入
|
|
746
|
+
- **优先级 1(必选)**:Service、Manager、Mapper/DAO、Domain/Entity
|
|
747
|
+
- **优先级 2(强烈建议)**:Enum/Constant(状态/类型枚举)、Exception/ErrorCode
|
|
748
|
+
- **优先级 3(有则加入)**:MQ Consumer/Producer、@Configuration
|
|
749
|
+
- 这些文件的内容拼接后计算 SHA-1 得到 `last_hash`
|
|
731
750
|
- 确保 Enum/MQ/ErrorCode/Config 的变化能被 hash 检查感知
|
|
732
751
|
|
|
733
|
-
|
|
734
|
-
-
|
|
735
|
-
-
|
|
736
|
-
-
|
|
737
|
-
-
|
|
752
|
+
#### 四、质量评分字段(必填,用于知识库质量报告)
|
|
753
|
+
- **`domain_confidence`**: 本域的置信度评分(0-10),来自 Step 2 置信度评分矩阵
|
|
754
|
+
- **`invariant_count`**: 生成的业务不变量条目数(Section 15)
|
|
755
|
+
- **`glossary_size`**: 领域词汇表条目数(Section 16)
|
|
756
|
+
- **`hidden_knowledge_rate`**: 隐性知识补全率(0-100,来自 Step 4 访谈问卷)
|
|
757
|
+
|
|
758
|
+
#### 五、跨域依赖字段(由 Section 10 回写阶段自动填入)
|
|
759
|
+
- **`upstream_skills`**: 本域依赖的其他域 Skill 列表
|
|
760
|
+
- **`downstream_skills`**: 依赖本域的其他域 Skill 列表
|
|
761
|
+
|
|
762
|
+
**重要提示:** 如果 frontmatter 缺少上述任一防腐字段(特别是 `last_referenced`、`usage_count`、`last_hash`、`key_files`),将导致:
|
|
763
|
+
- 无法自动检测代码变更
|
|
764
|
+
- 无法触发 Skill 更新
|
|
765
|
+
- 无法计算知识衰减
|
|
766
|
+
- 防腐机制完全失效
|
|
738
767
|
|
|
739
768
|
---
|
|
740
769
|
|
|
@@ -756,7 +785,7 @@ last_verified_by: "" # 最后确认人(升为 verified 时填写)
|
|
|
756
785
|
domain_confidence: 0 # 域置信度评分(0-10),来自 Step 2 评分矩阵
|
|
757
786
|
invariant_count: 0 # Section 15 业务不变量条目数
|
|
758
787
|
glossary_size: 0 # Section 16 领域词汇表条目数
|
|
759
|
-
hidden_knowledge_rate: 0 # 隐性知识补全率(0-100),来自 Step
|
|
788
|
+
hidden_knowledge_rate: 0 # 隐性知识补全率(0-100),来自 Step 4 访谈问卷
|
|
760
789
|
upstream_skills: # 本 Skill 在 Section 10 中依赖的其他域 Skill
|
|
761
790
|
- modus-biz-payment
|
|
762
791
|
- modus-biz-user
|