@modus-ai/modus 0.2.4 → 0.2.6
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 +100 -42
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +9 -8
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/global.js +1 -1
- package/dist/commands/global.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +37 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/status.js +2 -2
- package/dist/generators/claude.d.ts.map +1 -1
- package/dist/generators/claude.js +1 -37
- package/dist/generators/claude.js.map +1 -1
- package/dist/generators/codebuddy.d.ts.map +1 -1
- package/dist/generators/codebuddy.js +3 -1
- package/dist/generators/codebuddy.js.map +1 -1
- package/dist/generators/codex.d.ts +10 -0
- package/dist/generators/codex.d.ts.map +1 -0
- package/dist/generators/codex.js +178 -0
- package/dist/generators/codex.js.map +1 -0
- package/dist/generators/copilot.d.ts.map +1 -1
- package/dist/generators/copilot.js +0 -1
- package/dist/generators/copilot.js.map +1 -1
- package/dist/generators/cursor.d.ts.map +1 -1
- package/dist/generators/cursor.js +36 -7
- package/dist/generators/cursor.js.map +1 -1
- package/dist/generators/custom.d.ts +55 -0
- package/dist/generators/custom.d.ts.map +1 -0
- package/dist/generators/custom.js +166 -0
- package/dist/generators/custom.js.map +1 -0
- package/dist/generators/index.d.ts +1 -0
- package/dist/generators/index.d.ts.map +1 -1
- package/dist/generators/index.js +10 -0
- package/dist/generators/index.js.map +1 -1
- package/dist/utils/config.d.ts +38 -1
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +10 -2
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/file-system.d.ts.map +1 -1
- package/dist/utils/file-system.js +2 -1
- package/dist/utils/file-system.js.map +1 -1
- package/package.json +1 -1
- package/schemas/harness-schema.yaml +178 -53
- package/schemas/knowledge-schema.yaml +111 -1
- package/templates/agents/modus-analyst.md +1 -1
- package/templates/behavior-guard.md +165 -0
- package/templates/commands/auto.md +61 -25
- package/templates/commands/commit.md +63 -0
- package/templates/commands/harness.md +97 -30
- package/templates/commands/init.md +43 -10
- package/templates/commands/modus.md +55 -28
- package/templates/commands/plan.md +60 -18
- package/templates/commands/spec.md +69 -25
- package/templates/commands/upgrade.md +54 -0
- package/templates/commands/vibe.md +56 -6
- package/templates/knowledge-catalog.md +74 -32
- package/templates/skills/modus-agents/analyst/SKILL.md +18 -3
- package/templates/skills/modus-agents/deployer/SKILL.md +114 -62
- package/templates/skills/modus-agents/designer/SKILL.md +104 -92
- package/templates/skills/modus-agents/developer/SKILL.md +107 -66
- package/templates/skills/modus-agents/perf-auditor/SKILL.md +98 -61
- package/templates/skills/modus-agents/reviewer/SKILL.md +61 -11
- package/templates/skills/modus-agents/security-auditor/SKILL.md +111 -67
- package/templates/skills/modus-agents/skill-creator/SKILL.md +30 -12
- package/templates/skills/modus-agents/tester/SKILL.md +100 -54
- package/templates/skills/modus-auto/SKILL.md +581 -109
- package/templates/skills/modus-design-brief/SKILL.md +45 -19
- package/templates/skills/modus-harness/SKILL.md +150 -85
- package/templates/skills/modus-init/SKILL.md +1145 -319
- package/templates/skills/modus-plan/SKILL.md +125 -48
- package/templates/skills/modus-platform/SKILL.md +271 -0
- package/templates/skills/modus-spec/SKILL.md +175 -331
- package/templates/skills/modus-vibe/SKILL.md +256 -55
|
@@ -1,37 +1,81 @@
|
|
|
1
|
-
# /modus:spec
|
|
1
|
+
# /modus:spec — 规范驱动开发(OpenSpec 行为规格)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**用途:** 在 `/plan` 基础上增加行为规格(delta specs),用 GIVEN/WHEN/THEN 明确系统「WHAT」,规格可测试,归档时自动检测冲突并合并到主规格库(Source of Truth)。适用于有接口契约变更、需要可测试验收标准的场景。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
**借鉴自:** OpenSpec 规范 + Gherkin BDD(Cucumber)的 Feature/Scenario 格式
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 参数说明
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
```
|
|
10
|
+
/modus:spec [需求描述] [参数]
|
|
11
|
+
|
|
12
|
+
--help 显示完整帮助(中文)
|
|
13
|
+
--story <tapd-url> 关联 TAPD Story(自动填写背景,写入 HANDOFF story_id)
|
|
14
|
+
--project <name> 指定项目(多项目 workspace 使用)
|
|
15
|
+
--lite 轻量模式:跳过 design-brief,仅生成 delta-specs + tasks
|
|
16
|
+
--delta 仅生成 delta-specs.md(不生成 design 和 tasks)
|
|
17
|
+
--testcase 归档前同步生成 QA 测试用例文件(testcases.md,JUnit 5 骨架)
|
|
18
|
+
--verify 归档前执行三维验证(完整性/正确性/一致性)
|
|
19
|
+
--resume <name> 从断点继续(读取 .modus-state.yaml)
|
|
20
|
+
--no-archive 跳过归档到主规格库(适合实验性变更)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 使用示例
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
/modus:spec 新增歌曲批量审批功能
|
|
27
|
+
/modus:spec --story https://tapd.cn/.../stories/view/123 艺人等级评定
|
|
28
|
+
/modus:spec --lite 优化版权查询索引
|
|
29
|
+
/modus:spec --testcase 修改支付超时时间从 30 分钟改为 15 分钟
|
|
30
|
+
/modus:spec --verify --story https://tapd.cn/.../123 电子签约批量重签
|
|
31
|
+
/modus:spec --resume batch-approve 继续上次中断的规格
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 与 `/modus:plan` 的区别
|
|
10
35
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
5. Ask user whether to archive:
|
|
20
|
-
- Delta specs merged into `modus/specs/` (source of truth)
|
|
21
|
-
- Change folder moved to `modus/changes/archive/{YYYY-MM-DD}-{name}/`
|
|
22
|
-
6. **Post-update Skills**: write back new business rules and contracts
|
|
36
|
+
| 维度 | `/modus:plan` | `/modus:spec` |
|
|
37
|
+
|------|--------------|----------------|
|
|
38
|
+
| 产出物 | 单一 `plan.md` | `delta-specs.md` + `design.md` + `tasks.md` |
|
|
39
|
+
| 目录 | `modus/plans/{name}/` | `modus/changes/{name}/` |
|
|
40
|
+
| 行为规格 | 无 | 有(ADDED/MODIFIED/REMOVED + GIVEN/WHEN/THEN) |
|
|
41
|
+
| 验收标准 | 无 | 有(可测试 Scenario) |
|
|
42
|
+
| 冲突检测 | 无 | 有(MODIFIED/REMOVED 目标必须存在于主库) |
|
|
43
|
+
| 归档目标 | `modus/plans/archive/` | 合并到 `modus/specs/{domain}/spec.md` |
|
|
23
44
|
|
|
24
|
-
## Delta
|
|
45
|
+
## Delta Specs 格式(Gherkin 风格)
|
|
25
46
|
|
|
26
|
-
|
|
27
|
-
|
|
47
|
+
```markdown
|
|
48
|
+
Feature: 批量审批订单
|
|
28
49
|
|
|
29
|
-
##
|
|
50
|
+
## ADDED Requirements
|
|
51
|
+
|
|
52
|
+
### Scenario: Happy Path
|
|
53
|
+
Given 用户已登录且拥有审批权限
|
|
54
|
+
When 提交包含 ≥1 条订单 ID 的批量审批请求
|
|
55
|
+
Then 所有订单状态变更为 APPROVED,返回成功数量
|
|
56
|
+
|
|
57
|
+
### Scenario: 超出上限
|
|
58
|
+
Given 请求包含 > 50 条订单 ID
|
|
59
|
+
When 提交批量审批请求
|
|
60
|
+
Then 系统返回 400 错误:"批量操作上限 50 条"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
## 产出物
|
|
30
64
|
|
|
31
65
|
```
|
|
32
66
|
modus/changes/{name}/
|
|
33
|
-
├──
|
|
34
|
-
├──
|
|
35
|
-
├──
|
|
36
|
-
|
|
67
|
+
├── .modus-state.yaml — 状态文件(支持断点续跑)
|
|
68
|
+
├── proposal.md — 意图与范围
|
|
69
|
+
├── specs/{domain}/spec.md — delta specs(ADDED/MODIFIED/REMOVED)
|
|
70
|
+
├── design.md — 技术方案
|
|
71
|
+
├── design-brief.md — 精确实现指南(Full 模式)
|
|
72
|
+
├── tasks.md — 实现清单(追踪到 Scenario)
|
|
73
|
+
└── testcases.md — QA 用例(--testcase 时生成)
|
|
74
|
+
|
|
75
|
+
归档后:modus/changes/archive/{date}-{name}/
|
|
76
|
+
主规格库:modus/specs/{domain}/spec.md(历次归档合并)
|
|
37
77
|
```
|
|
78
|
+
|
|
79
|
+
## 执行此命令
|
|
80
|
+
|
|
81
|
+
读取并执行 `.codebuddy/skills/modus-spec/SKILL.md` 中的完整流程。
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# /modus:upgrade — 框架版本升级
|
|
2
|
+
|
|
3
|
+
**用途:** 检测 Modus 框架新版本,自动执行目录结构迁移和 Skill 格式升级,保持项目与最新规范一致。
|
|
4
|
+
|
|
5
|
+
## 参数说明
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
/modus:upgrade [参数]
|
|
9
|
+
|
|
10
|
+
--help 显示完整帮助(中文)
|
|
11
|
+
--check 仅检查当前版本和最新版本,不执行升级
|
|
12
|
+
--dry-run 预览将修改哪些文件,不实际写入
|
|
13
|
+
--changelog 显示从当前版本到最新版的变更日志
|
|
14
|
+
--target <version> 升级到指定版本(默认最新稳定版)
|
|
15
|
+
--project <name> 仅升级指定项目的 Skill 文件(多项目时)
|
|
16
|
+
--migrate-only 仅执行文件结构迁移,不更新框架 Skill 模板
|
|
17
|
+
--backup-dir <path> 指定备份目录(默认 modus/backup/{date}/)
|
|
18
|
+
--force 强制升级(即使版本一致,用于修复损坏的文件)
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 使用示例
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
/modus:upgrade # 检查并执行升级到最新版
|
|
25
|
+
/modus:upgrade --check # 仅检查当前和最新版本
|
|
26
|
+
/modus:upgrade --dry-run # 预览升级变更,不实际修改
|
|
27
|
+
/modus:upgrade --changelog # 查看版本变更说明
|
|
28
|
+
/modus:upgrade --target 3.2.0 # 升级到指定版本
|
|
29
|
+
/modus:upgrade --migrate-only # 仅迁移目录结构,不更新模板
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## 版本迁移说明
|
|
33
|
+
|
|
34
|
+
| 版本 | 主要变更 |
|
|
35
|
+
|------|---------|
|
|
36
|
+
| v3.2.0 | 跨 Skill 路径全面统一到 `modus/knowledge/biz-*/`;步骤编号规范化(禁止小数步骤);modus-analyst 产出路径更正到 `modus/stories/{id}/harness/`;modus-plan 双路径产出规则(Story 模式 vs 独立模式) |
|
|
37
|
+
| v3.1.0 | 知识库路径迁移:`.codebuddy/skills/modus-biz-*` → `modus/knowledge/biz-*`;新增工作区顶层路由 `modus/workspace-catalog.md`;HANDOFF 协议升级到 schema v1.1 |
|
|
38
|
+
| v3.0.0 | 多项目工作区支持(modus-workspace.yaml);引用式适配(不复制知识) |
|
|
39
|
+
| v2.x | 初始版本 |
|
|
40
|
+
|
|
41
|
+
## 升级流程
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
① 读取本地 modus/config.yaml 的 modus_version 字段
|
|
45
|
+
② 对比目标版本,展示差异摘要
|
|
46
|
+
③ 询问确认(--force 时跳过)
|
|
47
|
+
④ 备份现有文件到 modus/backup/{date}/
|
|
48
|
+
⑤ 执行迁移:文件结构调整 + Skill 格式更新
|
|
49
|
+
⑥ 输出迁移完成报告
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## 执行此命令
|
|
53
|
+
|
|
54
|
+
读取并执行 `.codebuddy/skills/modus-upgrade/SKILL.md` 中的完整流程。
|
|
@@ -1,12 +1,24 @@
|
|
|
1
|
-
# /modus:vibe
|
|
1
|
+
# /modus:vibe — 上下文感知编码(氛围编程)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**用途:** 执行日常编码任务前,自动加载相关业务 Skill,让 AI 以「懂项目的开发者」身份工作,而非冷启动。适合 Bug 修复、小功能迭代、代码重构等日常任务。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> Context-aware vibe coding. Intelligently loads relevant business Skills, auto-syncs stale knowledge, and applies rule-driven clarification before coding so AI works as a knowledgeable project member.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## 参数说明
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
```
|
|
10
|
+
/modus:vibe [需求描述] [参数]
|
|
11
|
+
|
|
12
|
+
--help 显示完整帮助(中文)
|
|
13
|
+
--domain <name> 强制加载指定业务域(跳过自动匹配,如 --domain biz-track)
|
|
14
|
+
--project <name> 指定项目(多项目 workspace 使用)
|
|
15
|
+
--context <file> 额外加载指定文件作为上下文(相对路径)
|
|
16
|
+
--no-skill 跳过 Skill 加载,直接用原始代码上下文(不推荐)
|
|
17
|
+
--verbose 显示 Skill 加载过程和 token 预估
|
|
18
|
+
--dry-run 仅展示将加载的 Skill 和文件,不执行编码
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 执行流程(概览)
|
|
10
22
|
|
|
11
23
|
1. Read `modus/config.yaml` for hard constraints (constitution)
|
|
12
24
|
2. Load `modus/knowledge-catalog.md` (Level 1, ~200 tokens)
|
|
@@ -16,7 +28,45 @@ Read and follow the skill at `.codebuddy/skills/modus-vibe/SKILL.md` to execute
|
|
|
16
28
|
6. Load matched Skill files as context (Level 2, ~3000 tokens each)
|
|
17
29
|
7. **Adaptive Design Brief**: Simple tasks → 3-section inline brief; Medium/Complex → full 9-section brief
|
|
18
30
|
8. Execute the coding task with business context (Level 3 on-demand file reads)
|
|
19
|
-
9. **
|
|
31
|
+
9. **Buffer new knowledge** (silent): if new knowledge discovered (new enums, pitfalls, rule changes), append to `modus/sessions/pending-knowledge.yaml`; show one-line `[缓冲 {N} 条新知识 → 将在 /modus:commit 时沉淀到 Skill]`; if nothing new, stay silent. **Do NOT write to Skill files directly** — run `/modus:commit` to persist buffered knowledge.
|
|
20
32
|
10. Append session log to `modus/sessions/vibe-log.md`
|
|
21
33
|
|
|
22
34
|
**Degraded mode** (no business Skills): proceed without domain context, note quality may be lower, show `[降级模式:无业务上下文,建议先运行 /modus:init]`.
|
|
35
|
+
|
|
36
|
+
## 使用示例
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
/modus:vibe 给歌曲列表接口加一个按状态筛选的功能
|
|
40
|
+
/modus:vibe 订单支付回调逻辑有个 NPE,帮我排查
|
|
41
|
+
/modus:vibe --domain biz-track 重构歌曲同步的重试机制
|
|
42
|
+
/modus:vibe --verbose 分析专辑发行流程的性能瓶颈
|
|
43
|
+
/modus:vibe --dry-run 优化版权审核的并发处理
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 知识加载策略(渐进三级)
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Level 1(必须,~200 tokens)
|
|
50
|
+
读 modus/knowledge-catalog.md
|
|
51
|
+
→ 了解可用知识域,匹配当前任务相关域
|
|
52
|
+
|
|
53
|
+
Level 2(按需,~3000 tokens/个)
|
|
54
|
+
仅读与任务语义匹配的 modus/knowledge/biz-*/SKILL.md
|
|
55
|
+
→ 不相关的域不加载,节省 ~59% token
|
|
56
|
+
|
|
57
|
+
Level 3(执行时,无上限)
|
|
58
|
+
从 Skill 的 key_files 索引按需读取实际代码文件
|
|
59
|
+
→ 绝不预先全量读取
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## 无业务 Skill 时的兜底
|
|
63
|
+
|
|
64
|
+
```
|
|
65
|
+
⚠️ 未找到业务知识库!建议先运行:/modus:init
|
|
66
|
+
A. 现在运行快速初始化
|
|
67
|
+
B. 继续(无业务上下文,结果质量可能降低)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 执行此命令
|
|
71
|
+
|
|
72
|
+
读取并执行 `.codebuddy/skills/modus-vibe/SKILL.md` 中的完整流程。
|
|
@@ -1,53 +1,95 @@
|
|
|
1
|
-
# Modus 知识全景目录
|
|
1
|
+
# Modus 知识全景目录 — {project-name}
|
|
2
2
|
# 所有 Modus 命令启动时先读此文件(Level 1 加载,~200 tokens)
|
|
3
|
-
#
|
|
3
|
+
# 框架版本:3.1.0 | 知识库路径:{project}/modus/knowledge/**(Single Source of Truth)
|
|
4
|
+
# 多平台适配:CLAUDE.md / AGENTS.md / .cursor/rules/ 均为引用式,修改请直接编辑 modus/knowledge/ 下的文件
|
|
4
5
|
#
|
|
5
|
-
#
|
|
6
|
-
#
|
|
6
|
+
# 路由层级:
|
|
7
|
+
# workspace → modus/workspace-catalog.md(顶层,~100 tokens)
|
|
8
|
+
# project → 本文件(~200 tokens)
|
|
9
|
+
# domain → modus/knowledge/biz-*/SKILL.md(~3000 tokens/个,按需加载)
|
|
10
|
+
# 按需再读完整 SKILL.md(Level 2,~3000 tokens/个)
|
|
11
|
+
# 或直接读 Skill 引用的实际代码文件(Level 3,按需)
|
|
7
12
|
|
|
8
13
|
updated: {YYYY-MM-DD}
|
|
9
14
|
|
|
15
|
+
## 全局行为守卫 (Layer 0-G)
|
|
16
|
+
# 所有命令 Step 0 加载,优先级:低于 constitution.hard_rules,高于 Skill 建议
|
|
17
|
+
- **behavior-guard**: `modus/behavior-guard.md` — 五条全局行为约束
|
|
18
|
+
(Think Before Coding · Simplicity First · Surgical Changes · Goal-Driven Execution · Token Budget Guard)
|
|
19
|
+
[由 /modus:init 生成,不随项目代码变化,手动维护]
|
|
20
|
+
|
|
10
21
|
## 团队约定 (Layer 0-T)
|
|
11
|
-
- **
|
|
22
|
+
- **_conventions**: {规范描述} [maturity: draft] 更新: {日期}
|
|
23
|
+
- 路径:`{project}/modus/knowledge/_conventions/SKILL.md`
|
|
12
24
|
|
|
13
25
|
## 技术知识 (Layer 1)
|
|
14
|
-
- **
|
|
26
|
+
- **_tech-wiki**: {技术栈描述} [maturity: draft] 更新: {日期}
|
|
27
|
+
- 路径:`{project}/modus/knowledge/_tech-wiki/SKILL.md`
|
|
15
28
|
|
|
16
29
|
## 业务知识 (Layer 2)
|
|
17
30
|
<!-- 由 /modus:init 生成,由各模式工作流自动更新 -->
|
|
18
|
-
- **
|
|
31
|
+
- **biz-{domain}**: {中文域名} — {核心职责一句话} [maturity: draft] 最近引用: {日期}
|
|
32
|
+
- 路径:`{project}/modus/knowledge/biz-{domain}/SKILL.md`
|
|
33
|
+
|
|
34
|
+
## 域依赖图 (Dependency Graph)
|
|
35
|
+
<!--
|
|
36
|
+
格式:{下游域} --> {上游域1}, {上游域2}
|
|
37
|
+
含义:下游域的 Skill 中 upstream_skills 声明了对上游域的依赖。
|
|
38
|
+
当上游域 hash 变更时,下游域的 stale_cascade 自动置为 true(在 ⚠️ 标注处可见)。
|
|
39
|
+
由 /modus:init 自动生成,可手动补充跨域调用关系。
|
|
40
|
+
-->
|
|
41
|
+
<!-- example:
|
|
42
|
+
payment --> order, user
|
|
43
|
+
notification --> order, payment
|
|
44
|
+
report --> order, payment, user
|
|
45
|
+
-->
|
|
46
|
+
<!-- 当前依赖关系(/modus:init 扫描后填入):
|
|
47
|
+
{待填入}
|
|
48
|
+
-->
|
|
19
49
|
|
|
20
50
|
## 渐进加载说明
|
|
51
|
+
|
|
21
52
|
启动任意 Modus 命令时的加载顺序:
|
|
22
|
-
Level 1(必须,~200 tokens):
|
|
23
|
-
Level 2(按需,~3000 tokens
|
|
24
|
-
Level 3(按需,无上限):
|
|
53
|
+
Level 1(必须,~200 tokens): 读本文件,了解有哪些知识可用
|
|
54
|
+
Level 2(按需,~3000 tokens): 根据任务匹配相关域,读对应 SKILL.md
|
|
55
|
+
Level 3(按需,无上限): 执行任务时读 Skill 引用的实际代码文件
|
|
25
56
|
|
|
26
57
|
目标:不相关的 Skill 不加载,大幅降低 token 消耗。
|
|
27
58
|
|
|
28
|
-
##
|
|
59
|
+
## 框架命令(快速参考)
|
|
60
|
+
- **modus:init** `--help` `--enhance [domain]` `--enhance-all` `--migrate` `--dry-run` `--force` `--platform [list]` `--no-sync` `--verbose` `--reset-maturity` `--project [name]`
|
|
61
|
+
- **modus:vibe** `--help` `--domain [name]` `--project [name]` `--context [file]` `--no-skill` `--verbose` `--dry-run`
|
|
62
|
+
- **modus:plan** `--help` `--story [url]` `--design` `--quick` `--enhance` `--no-build` `--resume [name]` `--complexity [level]` `--project [name]`
|
|
63
|
+
- **modus:spec** `--help` `--story [url]` `--lite` `--delta` `--testcase` `--verify` `--resume [name]` `--no-archive` `--project [name]`
|
|
64
|
+
- **modus:auto** `--help` `--force [mode]` `--no-confirm` `--show-scores` `--project [name]`
|
|
65
|
+
- **modus:harness** `--help` `--story [url]` `--skip [agents]` `--loop1-only` `--resume` `--dry-run` `--force-rebuild-skill` `--no-deploy` `--max-loop2 [n]` `--notify [channel]` `--project [name]`
|
|
66
|
+
- **modus:upgrade** `--help` `--check` `--dry-run` `--changelog` `--target [version]` `--project [name]`
|
|
67
|
+
|
|
68
|
+
## Skill status 生命周期
|
|
29
69
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
70
|
+
| status | 含义 | 升级方式 |
|
|
71
|
+
|-----------|-------------------------|-----------------------------------|
|
|
72
|
+
| draft | 初始生成,未经验证 | 运行 /modus:verify 且满足四项条件 |
|
|
73
|
+
| verified | 经至少 1 次真实使用验证 | usage_count ≥ 2 且不同工作流 |
|
|
74
|
+
| proven | 经 ≥2 个不同工作流验证 | - |
|
|
75
|
+
| stale | hash 不匹配或衰减超期 | 运行 /modus:refresh 后回到 draft |
|
|
76
|
+
| archived | 域已废弃,不再维护 | -(禁止引用) |
|
|
36
77
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- stale
|
|
78
|
+
## 衰减规则(活跃度感知,基于 last_referenced + usage_count)
|
|
79
|
+
|
|
80
|
+
衰减阈值根据 usage_count 动态调整:
|
|
81
|
+
- 活跃域(usage_count ≥ 10):verified → stale 12个月 / proven → verified 24个月
|
|
82
|
+
- 正常域(usage_count 3-9):verified → stale 6个月 / proven → verified 12个月
|
|
83
|
+
- 冷门域(usage_count ≤ 2):verified → stale 3个月 / proven → verified 6个月
|
|
84
|
+
- stale + 超过 stale_after_days 天 → archived(需人工二次确认)
|
|
85
|
+
|
|
86
|
+
## 防腐机制核心字段
|
|
41
87
|
|
|
42
|
-
### 防腐机制核心字段
|
|
43
88
|
每个 Skill frontmatter 必须包含以下字段,缺一不可:
|
|
44
|
-
- **last_referenced**:
|
|
45
|
-
- **usage_count**:
|
|
46
|
-
- **last_hash**:
|
|
47
|
-
- **
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
-
|
|
51
|
-
- 无法触发 Skill 更新
|
|
52
|
-
- 无法计算知识衰减
|
|
53
|
-
- 防腐机制完全失效
|
|
89
|
+
- **last_referenced**: 最后引用时间(每次被命令加载时更新)
|
|
90
|
+
- **usage_count**: 使用次数(每次完成真实开发任务后 +1)
|
|
91
|
+
- **last_hash**: 全局 SHA-1(对每个文件单独计算 SHA-1,将「路径:SHA-1」对按文件路径字母序排序后拼接,再整体计算 SHA-1,禁止内容直接拼接);引用时快速比对,不一致则展开 file_hashes 逐文件定位
|
|
92
|
+
- **file_hashes**: 文件级 hash map(`{路径: SHA-1}`);全局 hash 不一致时使用,精准输出变更文件清单
|
|
93
|
+
- **key_files**: 关键源文件列表(最多 20 个,用于 hash 计算)
|
|
94
|
+
|
|
95
|
+
详细说明见:modus/templates/skills/modus-init/SKILL.md「防腐机制总览」章节
|
|
@@ -9,7 +9,7 @@ disable: false
|
|
|
9
9
|
|
|
10
10
|
**调用方:** Harness Orchestrator(`modus-harness`)
|
|
11
11
|
**输入:** TAPD Story URL + 相关业务 Skill 内容
|
|
12
|
-
**产出物:** `modus/
|
|
12
|
+
**产出物:** `modus/stories/{story-id}/harness/01-analysis.md`
|
|
13
13
|
|
|
14
14
|
## 职责
|
|
15
15
|
|
|
@@ -23,7 +23,7 @@ disable: false
|
|
|
23
23
|
|
|
24
24
|
1. 从 TAPD Story URL 获取需求内容(标题、描述、验收标准)
|
|
25
25
|
2. 读取 Orchestrator 传入的相关业务 Skill 文件
|
|
26
|
-
3.
|
|
26
|
+
3. 使用 Orchestrator 传入的 constitution 内容(来自 `{project}/modus/config.yaml`,无需独立读取)
|
|
27
27
|
|
|
28
28
|
### Step 2:业务分析
|
|
29
29
|
|
|
@@ -95,7 +95,19 @@ disable: false
|
|
|
95
95
|
## 产出物格式(01-analysis.md)
|
|
96
96
|
|
|
97
97
|
```markdown
|
|
98
|
-
|
|
98
|
+
---
|
|
99
|
+
schema_version: "1.1"
|
|
100
|
+
agent: "01-analysis"
|
|
101
|
+
run_id: "{YYYYMMDD}-{story_id_prefix}"
|
|
102
|
+
story_id: "{story-id}"
|
|
103
|
+
task_id: ""
|
|
104
|
+
domains: ["{domain1}", "{domain2}"]
|
|
105
|
+
gate_status: "{passed|failed}"
|
|
106
|
+
artifact_status: "complete"
|
|
107
|
+
issues: []
|
|
108
|
+
skill_refs:
|
|
109
|
+
- "modus-biz-{domain}@{version}"
|
|
110
|
+
---
|
|
99
111
|
|
|
100
112
|
## 基本信息
|
|
101
113
|
- Story ID: {id}
|
|
@@ -140,3 +152,6 @@ disable: false
|
|
|
140
152
|
- 每个风险点必须附带处理建议
|
|
141
153
|
- Sprint 计划必须可直接指导 SubAgent 02 开发,不能含糊
|
|
142
154
|
- 验收标准必须可测试(能直接写成测试用例)
|
|
155
|
+
- **HANDOFF 块必须位于文件最顶部(YAML frontmatter 形式,`---...---`)**,`gate_status` 字段不可省略
|
|
156
|
+
- `gate_status` 赋值规则:分析完整且无重大歧义 → `passed`;存在无法确认的关键信息 → `failed`(Orchestrator 会重入本 SubAgent)
|
|
157
|
+
- `risk_level` 取值:有事务/并发/数据迁移风险 → `high`;有接口变更但逻辑清晰 → `medium`;纯新增无破坏 → `low`
|
|
@@ -1,108 +1,160 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: modus-deployer
|
|
3
|
-
description: Use this skill when the Harness orchestrator needs to verify deployment after code review passes
|
|
4
|
-
allowed-tools: Read, Write, Glob, Bash
|
|
3
|
+
description: Use this skill when the Harness orchestrator needs to verify deployment after code review passes. Monitors CI/CD pipeline status, validates service health across gray environments (dev→uat→pre→prd), runs P0 smoke tests, monitors error logs for 30 minutes after go-live, pauses for human confirmation before prd. Generates 07-deploy-status.md with HANDOFF block. Triggered by modus-harness after Gate C passes.
|
|
4
|
+
allowed-tools: Read, Write, Glob, Bash
|
|
5
5
|
disable: false
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
# modus-deployer(部署发布 SubAgent)
|
|
9
9
|
|
|
10
10
|
**调用方:** Harness Orchestrator(Gate C 通过后触发)
|
|
11
|
-
**输入:** `
|
|
11
|
+
**输入:** `02-sprint-contract.md` + `modus/config.yaml` 的 harness.environments 配置
|
|
12
12
|
**产出物:** `modus/plans/active/{story-id}/07-deploy-status.md`
|
|
13
13
|
|
|
14
14
|
## 职责
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
验证代码从 CI 到逐级灰度环境的部署过程,执行 P0 接口冒烟测试,监控上线后错误日志,prd 环境等待人工确认后才执行。
|
|
17
17
|
|
|
18
18
|
---
|
|
19
19
|
|
|
20
20
|
## 执行流程
|
|
21
21
|
|
|
22
|
-
### Step 1
|
|
22
|
+
### Step 1:读取部署配置
|
|
23
23
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
读取 `modus/config.yaml`:
|
|
25
|
+
```yaml
|
|
26
|
+
harness:
|
|
27
|
+
buildCommand: "mvn clean compile -q"
|
|
28
|
+
environments: [dev, uat, pre] # prd 单独人工确认
|
|
29
|
+
tapdProjectId: "{TAPD项目ID}"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
读取 `02-sprint-contract.md` 的 `changed_files`,确认本次变更的模块范围。
|
|
33
|
+
|
|
34
|
+
### Step 2:CI 状态轮询
|
|
35
|
+
|
|
36
|
+
检查 CI/CD 流水线(如有 API/CLI 访问权限):
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
# 轮询 CI 状态(每 30 秒检查一次,超时 10 分钟)
|
|
40
|
+
# 根据项目 CI 工具配置具体命令
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**若 CI 失败:**
|
|
44
|
+
```
|
|
45
|
+
❌ CI 失败,Harness 无法继续部署验证。
|
|
46
|
+
请检查:{CI 失败的 job 和错误摘要}
|
|
47
|
+
修复后重新运行 /modus:harness(断点续跑)。
|
|
48
|
+
⏸️ 等待用户处理。
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Step 3:逐环境灰度验证
|
|
52
|
+
|
|
53
|
+
按 `harness.environments` 顺序逐级验证(dev → uat → pre):
|
|
54
|
+
|
|
55
|
+
**每个环境的验证步骤:**
|
|
56
|
+
|
|
57
|
+
1. **服务健康检查:** 确认服务实例正常启动(健康检查接口返回 200)
|
|
58
|
+
2. **P0 冒烟测试:** 执行核心接口的基本功能验证(从 01-analysis.md 验收标准选取最关键的 1-3 个场景)
|
|
59
|
+
3. **错误日志监控:** 检查部署后 5 分钟内是否有新增 ERROR 日志(基线对比)
|
|
27
60
|
|
|
28
|
-
|
|
61
|
+
**冒烟测试规范:**
|
|
62
|
+
```bash
|
|
63
|
+
# 从 01-analysis.md 的验收标准提取 P0 场景
|
|
64
|
+
# 使用 curl / HTTP 客户端执行请求
|
|
65
|
+
# 验证响应码和关键字段
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**环境验证通过条件:**
|
|
69
|
+
- 健康检查接口返回 200
|
|
70
|
+
- P0 冒烟测试全部通过
|
|
71
|
+
- 5 分钟内新增 ERROR 日志数 ≤ 基线的 110%(允许少量噪音)
|
|
29
72
|
|
|
30
|
-
|
|
31
|
-
- 构建是否通过
|
|
32
|
-
- 单元测试是否通过
|
|
33
|
-
- 代码扫描是否通过
|
|
73
|
+
**环境验证失败 → 立即停止,上报 Orchestrator 等待人工介入。**
|
|
34
74
|
|
|
35
|
-
|
|
75
|
+
### Step 4:⏸️ prd 人工确认
|
|
36
76
|
|
|
37
|
-
|
|
77
|
+
pre 环境验证通过后,暂停等待人工确认:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
✅ pre 环境验证通过
|
|
81
|
+
冒烟测试: {N}/{N} 通过
|
|
82
|
+
错误日志: 无新增 ERROR
|
|
38
83
|
|
|
39
|
-
|
|
84
|
+
⏸️ prd 部署等待人工确认:
|
|
85
|
+
|
|
86
|
+
变更摘要:
|
|
87
|
+
- 涉及模块: {模块列表}
|
|
88
|
+
- 变更文件: {N} 个
|
|
89
|
+
- 已验证环境: dev ✅ | uat ✅ | pre ✅
|
|
90
|
+
|
|
91
|
+
是否继续部署到 prd?[Y/n]
|
|
92
|
+
```
|
|
40
93
|
|
|
41
|
-
|
|
42
|
-
1. 检查服务健康状态(health check 接口)
|
|
43
|
-
2. 执行 P0 冒烟测试(来自 `01-analysis.md` 的验收 Scenario)
|
|
44
|
-
3. 查询近 15 分钟 ERROR 日志数量,与上线前基线对比
|
|
94
|
+
等待用户确认后继续。
|
|
45
95
|
|
|
46
|
-
### Step
|
|
96
|
+
### Step 5:prd 上线监控(仅在用户确认后执行)
|
|
97
|
+
|
|
98
|
+
prd 部署后监控 30 分钟:
|
|
99
|
+
- 每 5 分钟检查一次 ERROR 日志数量
|
|
100
|
+
- 若 ERROR 数量显著增加(> 基线 150%),立即告警并暂停
|
|
101
|
+
|
|
102
|
+
### Step 6:写入部署状态报告
|
|
47
103
|
|
|
48
104
|
---
|
|
49
105
|
|
|
50
106
|
## 产出物格式(07-deploy-status.md)
|
|
51
107
|
|
|
52
108
|
```markdown
|
|
53
|
-
|
|
109
|
+
<!--HANDOFF
|
|
110
|
+
agent: "07-deployer"
|
|
111
|
+
story_id: "{story-id}"
|
|
112
|
+
gate_status: "{passed|failed|pending_prd}"
|
|
113
|
+
environments_passed: ["{dev}", "{uat}", "{pre}"]
|
|
114
|
+
prd_status: "{deployed|pending|skipped}"
|
|
115
|
+
-->
|
|
116
|
+
|
|
117
|
+
# 部署状态报告 — {Story 标题}
|
|
54
118
|
|
|
55
|
-
##
|
|
56
|
-
- Story ID: {id}
|
|
119
|
+
## 部署摘要
|
|
57
120
|
- 部署时间: {YYYY-MM-DD HH:mm}
|
|
58
|
-
-
|
|
121
|
+
- 触发版本: {commit hash 或构建号}
|
|
122
|
+
- 最终状态: {✅ 全部通过 / ❌ 失败 / ⏸️ 等待 prd}
|
|
59
123
|
|
|
60
|
-
##
|
|
61
|
-
| 阶段 | 状态 | 耗时 |
|
|
62
|
-
|------|------|------|
|
|
63
|
-
| 构建 | ✅ | {N}s |
|
|
64
|
-
| 单元测试 | ✅ | {N}s |
|
|
65
|
-
| 代码扫描 | ✅ | {N}s |
|
|
124
|
+
## 环境验证结果
|
|
66
125
|
|
|
67
|
-
|
|
126
|
+
| 环境 | 健康检查 | 冒烟测试 | ERROR日志 | 结论 |
|
|
127
|
+
|-----|---------|---------|---------|-----|
|
|
128
|
+
| dev | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
|
|
129
|
+
| uat | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
|
|
130
|
+
| pre | ✅ | ✅ N/N | 无新增 | ✅ 通过 |
|
|
131
|
+
| prd | ⏸️ 待确认 | — | — | ⏸️ 等待人工 |
|
|
68
132
|
|
|
69
|
-
|
|
70
|
-
- 服务状态: ✅ 健康
|
|
71
|
-
- 冒烟测试: {N}/{N} 通过
|
|
72
|
-
- ERROR 日志: 上线前 {N}/h → 上线后 {N}/h({变化})
|
|
133
|
+
## 冒烟测试详情
|
|
73
134
|
|
|
74
|
-
###
|
|
75
|
-
-
|
|
76
|
-
-
|
|
135
|
+
### P0 场景:{场景名}
|
|
136
|
+
- 请求: `{HTTP Method} {path}`
|
|
137
|
+
- 响应: HTTP 200,{关键字段验证}
|
|
138
|
+
- 结果: ✅ 通过
|
|
77
139
|
|
|
78
|
-
|
|
79
|
-
- 服务状态: ✅ 健康
|
|
80
|
-
- 冒烟测试: {N}/{N} 通过
|
|
81
|
-
- ERROR 日志: 上线前 {N}/h → 上线后 {N}/h
|
|
140
|
+
## prd 监控日志(上线后 30 分钟)
|
|
82
141
|
|
|
83
|
-
|
|
84
|
-
⏸️ 等待人工确认部署
|
|
142
|
+
{prd 部署后补充}
|
|
85
143
|
|
|
86
|
-
|
|
87
|
-
- [ ] pre 环境验证通过
|
|
88
|
-
- [ ] 业务方确认冒烟通过
|
|
89
|
-
- [ ] 运维确认资源充足
|
|
144
|
+
## 部署注意事项
|
|
90
145
|
|
|
91
|
-
|
|
92
|
-
| 场景 | 接口 | 状态 |
|
|
93
|
-
|------|------|------|
|
|
94
|
-
| {验收场景1} | POST /api/v1/{path} | ✅ |
|
|
95
|
-
| {验收场景2} | GET /api/v1/{path} | ✅ |
|
|
96
|
-
|
|
97
|
-
## 结论
|
|
98
|
-
{✅ 灰度验证通过,可推进 prd 部署}
|
|
99
|
-
{❌ 灰度验证失败: {失败原因}}
|
|
146
|
+
{记录部署过程中发现的特殊情况,供知识沉淀使用}
|
|
100
147
|
```
|
|
101
148
|
|
|
149
|
+
**`gate_status` 赋值规则:**
|
|
150
|
+
- `passed`:所有非 prd 环境通过,prd 也已完成且监控正常
|
|
151
|
+
- `pending_prd`:non-prd 通过,prd 等待人工确认(正常状态)
|
|
152
|
+
- `failed`:任一环境验证失败或 prd 上线后出现 ERROR 激增
|
|
153
|
+
|
|
102
154
|
---
|
|
103
155
|
|
|
104
|
-
##
|
|
156
|
+
## 质量标准
|
|
105
157
|
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
158
|
+
- 冒烟测试场景必须来自 01-analysis.md 的验收标准,不得自行编造
|
|
159
|
+
- prd 环境**必须等待人工确认**,不得自动部署
|
|
160
|
+
- **HANDOFF 块必须位于文件最顶部**,Orchestrator 读取 `prd_status` 决定是否进入 ARCHIVE 阶段
|