openmatrix 0.2.15 → 0.2.17
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 +83 -1
- package/dist/agents/agent-runner.d.ts +4 -0
- package/dist/agents/agent-runner.js +86 -0
- package/dist/cli/commands/brainstorm.d.ts +2 -2
- package/dist/cli/commands/brainstorm.js +2 -8
- package/dist/cli/commands/deploy.d.ts +16 -0
- package/dist/cli/commands/deploy.js +205 -0
- package/dist/cli/index.js +2 -2
- package/dist/orchestrator/answer-mapper.d.ts +0 -8
- package/dist/orchestrator/answer-mapper.js +1 -27
- package/dist/orchestrator/environment-detector.d.ts +51 -0
- package/dist/orchestrator/environment-detector.js +1110 -0
- package/dist/orchestrator/executor.d.ts +32 -2
- package/dist/orchestrator/executor.js +119 -1
- package/dist/orchestrator/meeting-manager.d.ts +16 -1
- package/dist/orchestrator/meeting-manager.js +113 -0
- package/dist/orchestrator/phase-executor.d.ts +1 -0
- package/dist/orchestrator/phase-executor.js +3 -0
- package/dist/orchestrator/smart-question-analyzer.js +38 -10
- package/dist/orchestrator/task-planner.js +19 -7
- package/dist/types/index.d.ts +194 -1
- package/package.json +2 -1
- package/skills/auto.md +64 -3
- package/skills/debug.md +168 -33
- package/skills/deploy.md +338 -0
- package/skills/feature.md +165 -53
- package/skills/resume.md +260 -68
- package/skills/start.md +66 -3
package/skills/deploy.md
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: om:deploy
|
|
3
|
+
description: "智能部署助手:分析项目+系统环境 → 推荐最可行方案 → 执行部署 → 生成一键脚本。Triggers on: deploy, 部署, 发布, docker, kubernetes, 环境搭建, 开发环境, make, taskfile, pm2"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<NO-OTHER-SKILLS>
|
|
7
|
+
执行此技能时,不得调用 superpowers、gsd 或其他任务编排相关的技能。
|
|
8
|
+
</NO-OTHER-SKILLS>
|
|
9
|
+
|
|
10
|
+
<objective>
|
|
11
|
+
智能部署助手:自动分析项目文件和系统环境 → 推荐当前环境下最可行的部署方案 → 用户确认后执行 → 生成可复用的一键脚本。
|
|
12
|
+
</objective>
|
|
13
|
+
|
|
14
|
+
<process>
|
|
15
|
+
|
|
16
|
+
## Step 1: 分析项目文件
|
|
17
|
+
|
|
18
|
+
直接读取项目文件,不调用 CLI:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# 项目配置文件
|
|
22
|
+
ls -la Dockerfile docker-compose.yml docker-compose.yaml Makefile Taskfile.yml Taskfile.yaml 2>/dev/null
|
|
23
|
+
ls -la k8s/ helm/ .github/workflows/ 2>/dev/null
|
|
24
|
+
cat package.json 2>/dev/null
|
|
25
|
+
cat go.mod 2>/dev/null
|
|
26
|
+
cat Cargo.toml 2>/dev/null
|
|
27
|
+
cat requirements.txt pyproject.toml 2>/dev/null
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
提取关键信息:
|
|
31
|
+
- 项目类型(Node.js/Go/Python/Rust/Java 等)
|
|
32
|
+
- 已有部署配置(Dockerfile、docker-compose、Makefile、k8s 等)
|
|
33
|
+
- package.json 中的 scripts(build/start/deploy 等)
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Step 2: 检测系统环境
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 检测已安装的工具
|
|
41
|
+
docker --version 2>/dev/null && echo "docker:ok" || echo "docker:missing"
|
|
42
|
+
docker-compose --version 2>/dev/null && echo "docker-compose:ok" || echo "docker-compose:missing"
|
|
43
|
+
kubectl version --client 2>/dev/null && echo "kubectl:ok" || echo "kubectl:missing"
|
|
44
|
+
make --version 2>/dev/null && echo "make:ok" || echo "make:missing"
|
|
45
|
+
task --version 2>/dev/null && echo "task:ok" || echo "task:missing"
|
|
46
|
+
pm2 --version 2>/dev/null && echo "pm2:ok" || echo "pm2:missing"
|
|
47
|
+
node --version 2>/dev/null && echo "node:ok" || echo "node:missing"
|
|
48
|
+
|
|
49
|
+
# 操作系统
|
|
50
|
+
uname -s 2>/dev/null || echo "Windows"
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## Step 3: AI 分析并展示环境报告
|
|
56
|
+
|
|
57
|
+
基于收集到的信息,直接输出分析报告(不用 AskUserQuestion):
|
|
58
|
+
|
|
59
|
+
```markdown
|
|
60
|
+
## 🔍 环境分析报告
|
|
61
|
+
|
|
62
|
+
**项目**: [名称] ([类型])
|
|
63
|
+
**操作系统**: [Linux/macOS/Windows]
|
|
64
|
+
|
|
65
|
+
### 已检测到的部署配置
|
|
66
|
+
- ✅ Dockerfile
|
|
67
|
+
- ✅ docker-compose.yml
|
|
68
|
+
- ❌ Makefile(未找到)
|
|
69
|
+
|
|
70
|
+
### 已安装的工具
|
|
71
|
+
- ✅ Docker 24.0.5
|
|
72
|
+
- ✅ make 4.3
|
|
73
|
+
- ❌ task(未安装)
|
|
74
|
+
- ❌ pm2(未安装)
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Step 4: 推荐部署方案(带理由)
|
|
80
|
+
|
|
81
|
+
AI 根据"项目配置 × 已安装工具"交叉分析,用 AskUserQuestion 展示推荐方案:
|
|
82
|
+
|
|
83
|
+
**推荐逻辑(AI 自行判断,不是硬编码):**
|
|
84
|
+
- 有 Dockerfile + docker 已安装 → Docker 是最直接的选择
|
|
85
|
+
- 有 docker-compose + 多服务 → Docker Compose 更合适
|
|
86
|
+
- 有 k8s 配置 + kubectl 已安装 → Kubernetes
|
|
87
|
+
- 有 Makefile + make 已安装 → 直接用 make
|
|
88
|
+
- Node.js + pm2 已安装 → PM2 轻量方案
|
|
89
|
+
- 什么都没有 → AI 根据项目类型推荐创建配置
|
|
90
|
+
|
|
91
|
+
```
|
|
92
|
+
AskUserQuestion:
|
|
93
|
+
header: "部署方案"
|
|
94
|
+
question: "基于你的环境分析,推荐以下方案(已标注推荐原因):"
|
|
95
|
+
|
|
96
|
+
options:
|
|
97
|
+
- label: "Docker (推荐)"
|
|
98
|
+
description: "已有 Dockerfile + Docker 已安装,直接可用,环境隔离好"
|
|
99
|
+
- label: "Docker Compose"
|
|
100
|
+
description: "检测到 docker-compose.yml,适合多服务编排"
|
|
101
|
+
- label: "Make"
|
|
102
|
+
description: "已有 Makefile + make 已安装,运行 make deploy"
|
|
103
|
+
- label: "npm scripts"
|
|
104
|
+
description: "无需额外工具,直接用 package.json 中的 scripts"
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## Step 5: 确认部署环境
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
AskUserQuestion:
|
|
113
|
+
header: "目标环境"
|
|
114
|
+
question: "部署到哪个环境?"
|
|
115
|
+
|
|
116
|
+
options:
|
|
117
|
+
- label: "本地开发 (推荐)"
|
|
118
|
+
description: "快速启动,用于开发调试"
|
|
119
|
+
- label: "测试环境"
|
|
120
|
+
description: "模拟生产配置,用于验证"
|
|
121
|
+
- label: "生产环境"
|
|
122
|
+
description: "需要完整配置和安全检查"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Step 6: 执行部署
|
|
128
|
+
|
|
129
|
+
根据用户选择,AI 执行对应命令:
|
|
130
|
+
|
|
131
|
+
**Docker 本地:**
|
|
132
|
+
```bash
|
|
133
|
+
docker build -t <project-name> .
|
|
134
|
+
docker run -d -p <port>:<port> --name <project-name> <project-name>
|
|
135
|
+
docker ps | grep <project-name>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Docker Compose:**
|
|
139
|
+
```bash
|
|
140
|
+
docker-compose up -d --build
|
|
141
|
+
docker-compose ps
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Make:**
|
|
145
|
+
```bash
|
|
146
|
+
make deploy
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
**npm scripts:**
|
|
150
|
+
```bash
|
|
151
|
+
npm run build
|
|
152
|
+
npm run start
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
执行后验证:
|
|
156
|
+
```bash
|
|
157
|
+
# 检查服务是否正常运行
|
|
158
|
+
docker ps 2>/dev/null | grep <name>
|
|
159
|
+
curl -s http://localhost:<port>/health 2>/dev/null || echo "服务已启动"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
输出执行结果,告知用户服务状态。
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Step 7: 询问是否生成一键脚本
|
|
167
|
+
|
|
168
|
+
```
|
|
169
|
+
AskUserQuestion:
|
|
170
|
+
header: "一键脚本"
|
|
171
|
+
question: "部署完成!是否生成一键脚本方便后续开发调试?"
|
|
172
|
+
|
|
173
|
+
options:
|
|
174
|
+
- label: "生成 Taskfile.yml (推荐)"
|
|
175
|
+
description: "task 已安装 / 现代化工具,YAML 格式简洁,跨平台"
|
|
176
|
+
- label: "生成 Makefile"
|
|
177
|
+
description: "make 已安装 / 经典工具,已有 Makefile 时保持一致"
|
|
178
|
+
- label: "添加到 npm scripts"
|
|
179
|
+
description: "Node.js 项目,无需额外工具"
|
|
180
|
+
- label: "不需要"
|
|
181
|
+
description: "已有足够配置"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Step 8: 生成一键脚本
|
|
187
|
+
|
|
188
|
+
根据用户选择和项目实际情况,用 Write 工具生成脚本。
|
|
189
|
+
|
|
190
|
+
**Taskfile.yml 示例(根据实际项目定制):**
|
|
191
|
+
```yaml
|
|
192
|
+
version: '3'
|
|
193
|
+
|
|
194
|
+
vars:
|
|
195
|
+
APP: '{{.APP | default "app"}}'
|
|
196
|
+
PORT: '{{.PORT | default "3000"}}'
|
|
197
|
+
|
|
198
|
+
tasks:
|
|
199
|
+
setup:
|
|
200
|
+
desc: 安装依赖
|
|
201
|
+
cmds:
|
|
202
|
+
- npm install
|
|
203
|
+
|
|
204
|
+
build:
|
|
205
|
+
desc: 构建项目
|
|
206
|
+
cmds:
|
|
207
|
+
- npm run build
|
|
208
|
+
|
|
209
|
+
test:
|
|
210
|
+
desc: 运行测试
|
|
211
|
+
cmds:
|
|
212
|
+
- npm test
|
|
213
|
+
|
|
214
|
+
dev:
|
|
215
|
+
desc: 本地开发(热重载)
|
|
216
|
+
cmds:
|
|
217
|
+
- npm run dev
|
|
218
|
+
|
|
219
|
+
deploy:local:
|
|
220
|
+
desc: 本地 Docker 部署
|
|
221
|
+
cmds:
|
|
222
|
+
- docker build -t {{.APP}} .
|
|
223
|
+
- docker run -d -p {{.PORT}}:{{.PORT}} --name {{.APP}} {{.APP}}
|
|
224
|
+
- echo "✅ 服务已启动 http://localhost:{{.PORT}}"
|
|
225
|
+
|
|
226
|
+
deploy:prod:
|
|
227
|
+
desc: 生产部署
|
|
228
|
+
cmds:
|
|
229
|
+
- docker build -t {{.APP}}:{{.VERSION}} .
|
|
230
|
+
- docker push {{.REGISTRY}}/{{.APP}}:{{.VERSION}}
|
|
231
|
+
|
|
232
|
+
logs:
|
|
233
|
+
desc: 查看日志
|
|
234
|
+
cmds:
|
|
235
|
+
- docker logs -f {{.APP}}
|
|
236
|
+
|
|
237
|
+
stop:
|
|
238
|
+
desc: 停止服务
|
|
239
|
+
cmds:
|
|
240
|
+
- docker stop {{.APP}} && docker rm {{.APP}}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
**Makefile 示例(根据实际项目定制):**
|
|
244
|
+
```makefile
|
|
245
|
+
APP ?= app
|
|
246
|
+
PORT ?= 3000
|
|
247
|
+
|
|
248
|
+
.PHONY: setup build test dev deploy-local deploy-prod logs stop
|
|
249
|
+
|
|
250
|
+
setup:
|
|
251
|
+
npm install
|
|
252
|
+
|
|
253
|
+
build:
|
|
254
|
+
npm run build
|
|
255
|
+
|
|
256
|
+
test:
|
|
257
|
+
npm test
|
|
258
|
+
|
|
259
|
+
dev:
|
|
260
|
+
npm run dev
|
|
261
|
+
|
|
262
|
+
deploy-local:
|
|
263
|
+
docker build -t $(APP) .
|
|
264
|
+
docker run -d -p $(PORT):$(PORT) --name $(APP) $(APP)
|
|
265
|
+
@echo "✅ 服务已启动 http://localhost:$(PORT)"
|
|
266
|
+
|
|
267
|
+
deploy-prod:
|
|
268
|
+
docker build -t $(APP):$(VERSION) .
|
|
269
|
+
docker push $(REGISTRY)/$(APP):$(VERSION)
|
|
270
|
+
|
|
271
|
+
logs:
|
|
272
|
+
docker logs -f $(APP)
|
|
273
|
+
|
|
274
|
+
stop:
|
|
275
|
+
docker stop $(APP) && docker rm $(APP)
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
---
|
|
279
|
+
|
|
280
|
+
## Step 9: 输出总结
|
|
281
|
+
|
|
282
|
+
```markdown
|
|
283
|
+
## ✅ 部署完成
|
|
284
|
+
|
|
285
|
+
**方案**: Docker 本地部署
|
|
286
|
+
**环境**: 本地开发
|
|
287
|
+
**脚本**: 已生成 Taskfile.yml
|
|
288
|
+
|
|
289
|
+
### 常用命令
|
|
290
|
+
- `task dev` — 本地开发
|
|
291
|
+
- `task deploy:local` — Docker 本地部署
|
|
292
|
+
- `task deploy:prod` — 生产部署
|
|
293
|
+
- `task logs` — 查看日志
|
|
294
|
+
- `task stop` — 停止服务
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
</process>
|
|
298
|
+
|
|
299
|
+
<arguments>
|
|
300
|
+
$ARGUMENTS
|
|
301
|
+
</arguments>
|
|
302
|
+
|
|
303
|
+
<examples>
|
|
304
|
+
/om:deploy # 自动分析 → 推荐方案 → 执行 → 生成脚本
|
|
305
|
+
/om:deploy local # 直接指定本地环境
|
|
306
|
+
/om:deploy prod # 直接指定生产环境
|
|
307
|
+
</examples>
|
|
308
|
+
|
|
309
|
+
<notes>
|
|
310
|
+
## 核心原则
|
|
311
|
+
|
|
312
|
+
1. **AI 是分析者**:读取真实文件和系统状态,不靠硬编码规则推断
|
|
313
|
+
2. **AI 是执行者**:用户确认后直接运行命令,不只是给建议
|
|
314
|
+
3. **推荐最可行的**:基于"当前系统已有什么工具",不是"理论上最好的"
|
|
315
|
+
4. **产出可复用脚本**:最终生成 Taskfile/Makefile,方便后续开发调试
|
|
316
|
+
|
|
317
|
+
## 推荐决策依据(AI 自行判断)
|
|
318
|
+
|
|
319
|
+
| 项目配置 | 系统工具 | 推荐方案 |
|
|
320
|
+
|---------|---------|---------|
|
|
321
|
+
| 有 Dockerfile | docker 已安装 | Docker |
|
|
322
|
+
| 有 docker-compose | docker-compose 已安装 | Docker Compose |
|
|
323
|
+
| 有 k8s/ | kubectl 已安装 | Kubernetes |
|
|
324
|
+
| 有 Makefile | make 已安装 | Make |
|
|
325
|
+
| Node.js | pm2 已安装 | PM2 |
|
|
326
|
+
| Node.js | 无特殊工具 | npm scripts |
|
|
327
|
+
| 无任何配置 | docker 已安装 | 生成 Dockerfile |
|
|
328
|
+
| 无任何配置 | 无工具 | npm scripts / shell 脚本 |
|
|
329
|
+
|
|
330
|
+
## 脚本工具选择依据
|
|
331
|
+
|
|
332
|
+
| 条件 | 推荐 |
|
|
333
|
+
|------|------|
|
|
334
|
+
| task 已安装 | Taskfile.yml |
|
|
335
|
+
| make 已安装 / 已有 Makefile | Makefile |
|
|
336
|
+
| Node.js 项目 / 无工具 | npm scripts |
|
|
337
|
+
| Windows + 无工具 | package.json scripts |
|
|
338
|
+
</notes>
|
package/skills/feature.md
CHANGED
|
@@ -20,6 +20,7 @@ priority: high
|
|
|
20
20
|
## 执行顺序 - 必须严格按此顺序,不得跳过
|
|
21
21
|
|
|
22
22
|
```
|
|
23
|
+
Step 0: Git 前置检查与持久化初始化(必须执行)
|
|
23
24
|
Step 1: 接收任务输入(参数、文件、或询问用户)
|
|
24
25
|
Step 2: AI 自动判断任务边界(不符合条件才询问切换)
|
|
25
26
|
Step 3: 收集项目上下文(技术栈、目录结构、CLAUDE.md)
|
|
@@ -45,6 +46,39 @@ Step 11: 输出执行摘要并清理
|
|
|
45
46
|
|
|
46
47
|
<process>
|
|
47
48
|
|
|
49
|
+
## Step 0: Git 前置检查与持久化初始化(必须执行)
|
|
50
|
+
|
|
51
|
+
**检查 Git 仓库:**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
ls -la .git 2>/dev/null || echo "NOT_INITIALIZED"
|
|
55
|
+
git status --porcelain
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
| 检查结果 | 处理 |
|
|
59
|
+
|---------|------|
|
|
60
|
+
| `NOT_INITIALIZED` | AskUserQuestion 是否初始化 git |
|
|
61
|
+
| 有未提交文件 | AskUserQuestion 处理方式(暂存/忽略/取消) |
|
|
62
|
+
| 干净 | 继续执行 |
|
|
63
|
+
|
|
64
|
+
**初始化持久化状态:**
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
mkdir -p .openmatrix
|
|
68
|
+
cat > .openmatrix/feature-session.json << 'EOF'
|
|
69
|
+
{
|
|
70
|
+
"sessionId": "FEATURE-$(date +%Y%m%d%H%M%S)",
|
|
71
|
+
"status": "running",
|
|
72
|
+
"tasks": [],
|
|
73
|
+
"currentTaskIndex": 0,
|
|
74
|
+
"quality": null,
|
|
75
|
+
"failureCount": {}
|
|
76
|
+
}
|
|
77
|
+
EOF
|
|
78
|
+
echo '' > .openmatrix/feature-context.md
|
|
79
|
+
echo '' > .openmatrix/feature-progress.md
|
|
80
|
+
```
|
|
81
|
+
|
|
48
82
|
## Step 1: 接收任务输入
|
|
49
83
|
|
|
50
84
|
**检查 `$ARGUMENTS`:**
|
|
@@ -96,35 +130,33 @@ AskUserQuestion: `header: "任务复杂度"`, `multiSelect: false`
|
|
|
96
130
|
| 切换到 /om:start | 使用完整流程 |
|
|
97
131
|
| 继续用 /om:feature | 强制使用轻量流程(可能无法完整追踪) |
|
|
98
132
|
|
|
99
|
-
## Step 3:
|
|
133
|
+
## Step 3: 收集项目上下文并写入文件
|
|
100
134
|
|
|
101
|
-
|
|
135
|
+
**收集并写入上下文文件:**
|
|
102
136
|
|
|
103
137
|
```bash
|
|
104
|
-
|
|
105
|
-
cat package.json | grep -E '"(react|vue|angular|next|express|fastify|koa|typeorm|prisma|sequelize|mongoose|jest|vitest|playwright|cypress)"' || echo "未检测到常见框架"
|
|
138
|
+
mkdir -p .openmatrix
|
|
106
139
|
|
|
107
|
-
#
|
|
108
|
-
|
|
140
|
+
# 写入上下文文件头
|
|
141
|
+
echo "# 项目上下文" > .openmatrix/feature-context.md
|
|
142
|
+
echo "" >> .openmatrix/feature-context.md
|
|
109
143
|
|
|
110
|
-
#
|
|
111
|
-
|
|
112
|
-
|
|
144
|
+
# 收集技术栈并写入文件
|
|
145
|
+
echo "## 技术栈" >> .openmatrix/feature-context.md
|
|
146
|
+
cat package.json 2>/dev/null | grep -E '"(react|vue|angular|next|express|fastify|koa|typeorm|prisma|sequelize|mongoose|jest|vitest|playwright|cypress)"' >> .openmatrix/feature-context.md || echo "未检测到常见框架" >> .openmatrix/feature-context.md
|
|
147
|
+
echo "" >> .openmatrix/feature-context.md
|
|
113
148
|
|
|
114
|
-
|
|
149
|
+
# 收集目录结构并写入文件
|
|
150
|
+
echo "## 目录结构" >> .openmatrix/feature-context.md
|
|
151
|
+
find . -maxdepth 2 -type d -not -path '*/node_modules/*' -not -path '*/.git/*' -not -path '*/dist/*' -not -path '*/.openmatrix/*' 2>/dev/null | head -30 >> .openmatrix/feature-context.md
|
|
152
|
+
echo "" >> .openmatrix/feature-context.md
|
|
115
153
|
|
|
154
|
+
# 读取 CLAUDE.md 并写入文件
|
|
155
|
+
echo "## 项目规范(来自 CLAUDE.md)" >> .openmatrix/feature-context.md
|
|
156
|
+
cat CLAUDE.md 2>/dev/null | head -50 >> .openmatrix/feature-context.md || echo "无 CLAUDE.md" >> .openmatrix/feature-context.md
|
|
116
157
|
```
|
|
117
|
-
## 项目上下文
|
|
118
|
-
|
|
119
|
-
### 技术栈
|
|
120
|
-
${从 package.json 提取的关键依赖}
|
|
121
158
|
|
|
122
|
-
|
|
123
|
-
${顶层目录结构}
|
|
124
|
-
|
|
125
|
-
### 项目规范(来自 CLAUDE.md)
|
|
126
|
-
${CLAUDE.md 前 50 行,包含构建/测试命令、架构概述、开发约定}
|
|
127
|
-
```
|
|
159
|
+
上下文已写入 `.openmatrix/feature-context.md`,后续 Agent 会读取此文件。
|
|
128
160
|
|
|
129
161
|
## Step 4: AI 拆分为 2-5 个小任务块
|
|
130
162
|
|
|
@@ -191,7 +223,7 @@ TodoWrite({
|
|
|
191
223
|
})
|
|
192
224
|
```
|
|
193
225
|
|
|
194
|
-
|
|
226
|
+
状态同时在会话和 `.openmatrix/feature-session.json` 中管理。
|
|
195
227
|
|
|
196
228
|
## Step 6: 问答确认
|
|
197
229
|
|
|
@@ -199,18 +231,29 @@ TodoWrite({
|
|
|
199
231
|
|
|
200
232
|
**6.1 质量等级(必选)**
|
|
201
233
|
|
|
234
|
+
根据任务描述,Claude 直接推断推荐的质量等级,并在问题中标注推荐项:
|
|
235
|
+
|
|
236
|
+
- Bug 修复 / 重构 → 推荐 `balanced`
|
|
237
|
+
- 原型 / demo / 快速验证 → 推荐 `fast`
|
|
238
|
+
- 新功能 / 生产代码 / 涉及测试 → 推荐 `strict`
|
|
239
|
+
- 文档 / skill 文件 → 推荐 `fast`
|
|
240
|
+
|
|
202
241
|
AskUserQuestion: `header: "质量等级"`, `multiSelect: false`
|
|
203
242
|
|
|
204
|
-
**question:**
|
|
243
|
+
**question:** 选择质量等级(Claude 推荐:${inferredQuality},原因:${inferReason})
|
|
205
244
|
|
|
206
245
|
| label | description |
|
|
207
246
|
|-------|-------------|
|
|
208
247
|
| `strict` | TDD + >80%覆盖率 + 严格Lint + 安全扫描 — 生产级代码 |
|
|
209
|
-
| `balanced
|
|
248
|
+
| `balanced` | >60%覆盖率 + Lint + 安全扫描 — 日常开发 |
|
|
210
249
|
| `fast` | 无质量门禁 — 快速原型/验证 |
|
|
211
250
|
|
|
212
251
|
**6.2 E2E 测试(仅 strict/balanced)**
|
|
213
252
|
|
|
253
|
+
根据任务描述推断:若任务涉及前端页面/UI/Web,询问;否则默认跳过(不需要)。
|
|
254
|
+
|
|
255
|
+
如需询问:
|
|
256
|
+
|
|
214
257
|
AskUserQuestion: `header: "E2E 测试"`, `multiSelect: false`
|
|
215
258
|
|
|
216
259
|
**question:** 是否需要端到端 (E2E) 测试?(适用于 Web/Mobile/GUI 项目)
|
|
@@ -241,7 +284,56 @@ AskUserQuestion: `header: "确认计划"`, `multiSelect: false`
|
|
|
241
284
|
TodoWrite({ todos: [...] }) // 当前任务标记 in_progress
|
|
242
285
|
```
|
|
243
286
|
|
|
244
|
-
**7.2
|
|
287
|
+
**7.2 歧义检测与处理**
|
|
288
|
+
|
|
289
|
+
Agent 输出中可能包含歧义报告:
|
|
290
|
+
|
|
291
|
+
当 Agent 输出包含以下标记时,表示检测到歧义:
|
|
292
|
+
```
|
|
293
|
+
<AMBIGUITY_REPORT>
|
|
294
|
+
{
|
|
295
|
+
"ambiguities": [
|
|
296
|
+
{
|
|
297
|
+
"type": "missing_info" | "conflicting_req" | "unclear_scope" | "tech_choice" | "edge_case",
|
|
298
|
+
"severity": "critical" | "high" | "medium" | "low",
|
|
299
|
+
"description": "歧义描述",
|
|
300
|
+
"suggestions": ["建议1", "建议2"]
|
|
301
|
+
}
|
|
302
|
+
],
|
|
303
|
+
"overallSeverity": "critical" | "high" | "medium" | "low"
|
|
304
|
+
}
|
|
305
|
+
</AMBIGUITY_REPORT>
|
|
306
|
+
```
|
|
307
|
+
|
|
308
|
+
**5 种歧义类型说明:**
|
|
309
|
+
|
|
310
|
+
| 类型 | 说明 | 示例 |
|
|
311
|
+
|------|------|------|
|
|
312
|
+
| `missing_info` | 缺失关键信息 | "未指定数据库类型" |
|
|
313
|
+
| `conflicting_req` | 需求冲突 | "既要高性能又要低成本" |
|
|
314
|
+
| `unclear_scope` | 范围不清晰 | "是否包含历史数据处理?" |
|
|
315
|
+
| `tech_choice` | 技术选型歧义 | "用 REST 还是 GraphQL?" |
|
|
316
|
+
| `edge_case` | 边界情况未定义 | "超过限制时如何处理?" |
|
|
317
|
+
|
|
318
|
+
**歧义处理策略(轻量模式):**
|
|
319
|
+
|
|
320
|
+
| 严重程度 | 处理方式 |
|
|
321
|
+
|---------|---------|
|
|
322
|
+
| **Critical/High** | AskUserQuestion 立即确认 |
|
|
323
|
+
| **Medium/Low** | 写入进度文件,继续执行 |
|
|
324
|
+
|
|
325
|
+
**AskUserQuestion 处理(仅 Critical/High):**
|
|
326
|
+
|
|
327
|
+
AskUserQuestion: `header: "歧义确认"`, `multiSelect: false`
|
|
328
|
+
**question:** 检测到 ${severity} 级歧义:${description}。请确认处理方式
|
|
329
|
+
|
|
330
|
+
| label | description |
|
|
331
|
+
|-------|-------------|
|
|
332
|
+
| 提供信息 | 回答歧义相关问题,继续执行 |
|
|
333
|
+
| 跳过任务块 | 标记当前任务块为可选,继续执行下一个 |
|
|
334
|
+
| 修改方案 | 根据歧义调整方案后继续 |
|
|
335
|
+
|
|
336
|
+
**7.3 调用 Agent 执行**
|
|
245
337
|
|
|
246
338
|
```typescript
|
|
247
339
|
Agent({
|
|
@@ -249,6 +341,12 @@ Agent({
|
|
|
249
341
|
description: task.content,
|
|
250
342
|
prompt: `你是实现专家。执行以下任务块。
|
|
251
343
|
|
|
344
|
+
## 项目上下文(请读取文件)
|
|
345
|
+
请先读取 .openmatrix/feature-context.md 了解项目上下文。
|
|
346
|
+
|
|
347
|
+
## 前序任务结果(请读取文件)
|
|
348
|
+
请读取 .openmatrix/feature-progress.md 了解前序 Agent 的决策和发现。
|
|
349
|
+
|
|
252
350
|
## 整体任务
|
|
253
351
|
${taskDescription}
|
|
254
352
|
|
|
@@ -258,11 +356,6 @@ ${taskDescription}
|
|
|
258
356
|
- 质量等级:${quality}
|
|
259
357
|
- 前置任务完成状态:${previousTasksStatus}
|
|
260
358
|
|
|
261
|
-
${projectContext}
|
|
262
|
-
|
|
263
|
-
${agentMemory ? `## 前序任务结果(跨 Agent 上下文)
|
|
264
|
-
${agentMemory}` : ''}
|
|
265
|
-
|
|
266
359
|
## 质量要求
|
|
267
360
|
${quality === 'strict' ? `
|
|
268
361
|
- 必须使用 TDD:先写测试,再写实现
|
|
@@ -307,17 +400,19 @@ ${quality === 'strict' ? `
|
|
|
307
400
|
})
|
|
308
401
|
```
|
|
309
402
|
|
|
310
|
-
**7.3 等待 Agent
|
|
403
|
+
**7.3 等待 Agent 完成,写入进度文件**
|
|
311
404
|
|
|
312
|
-
Agent
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
${
|
|
405
|
+
Agent 完成后,将输出中的关键决策和建议写入 `.openmatrix/feature-progress.md` 文件:
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
# Agent 完成后,追加写入进度文件
|
|
409
|
+
echo "" >> .openmatrix/feature-progress.md
|
|
410
|
+
echo "## 任务 N: ${task.content}" >> .openmatrix/feature-progress.md
|
|
411
|
+
echo "${agentOutput}" >> .openmatrix/feature-progress.md
|
|
412
|
+
echo "" >> .openmatrix/feature-progress.md
|
|
318
413
|
```
|
|
319
414
|
|
|
320
|
-
这样后续 Agent
|
|
415
|
+
这样后续 Agent 能通过读取文件获取前序 Agent 的决策和发现。
|
|
321
416
|
|
|
322
417
|
## Step 8: 验证(按质量等级)
|
|
323
418
|
|
|
@@ -329,10 +424,14 @@ ${agentOutput}
|
|
|
329
424
|
|
|
330
425
|
| 质量等级 | 验证命令 |
|
|
331
426
|
|---------|---------|
|
|
332
|
-
| `strict` | `npm test -- --run && npm run lint && npm run test:coverage` |
|
|
333
|
-
| `balanced` | `npm test -- --run && npm run lint` |
|
|
427
|
+
| `strict` | `npm test -- --run && npm run lint && npm run test:coverage && npm audit --audit-level=moderate` |
|
|
428
|
+
| `balanced` | `npm test -- --run && npm run lint && npm audit --audit-level=moderate` |
|
|
334
429
|
| `fast` | 跳过验证 |
|
|
335
430
|
|
|
431
|
+
**覆盖率阈值检查说明:**
|
|
432
|
+
- strict 模式要求 >80% 覆盖率,`npm run test:coverage` 命令应输出覆盖率报告
|
|
433
|
+
- balanced 模式要求 >60% 覆盖率,建议定期检查覆盖率报告
|
|
434
|
+
|
|
336
435
|
**8.2 E2E 验证(如果用户选择)**
|
|
337
436
|
- 功能测试:`npm run test:e2e`
|
|
338
437
|
- 视觉验证:启动 Playwright 截图对比
|
|
@@ -366,8 +465,14 @@ fi
|
|
|
366
465
|
|
|
367
466
|
**⛔ 验证通过后必须立即提交,不得积累多个任务块**
|
|
368
467
|
|
|
468
|
+
**只提交本次任务修改的文件(而非 `git add -A`):**
|
|
469
|
+
|
|
369
470
|
```bash
|
|
370
|
-
|
|
471
|
+
# 获取本次任务修改的文件列表(从 Agent 输出中提取)
|
|
472
|
+
git status --porcelain
|
|
473
|
+
|
|
474
|
+
# 只提交任务涉及的文件
|
|
475
|
+
git add ${modifiedFiles}
|
|
371
476
|
git commit -m "$(cat <<'EOF'
|
|
372
477
|
feat(feature): ${originalTask} - ${currentChunk}
|
|
373
478
|
|
|
@@ -420,8 +525,8 @@ ${decisions}
|
|
|
420
525
|
|
|
421
526
|
**清理操作:**
|
|
422
527
|
- TodoWrite 所有任务保持 completed 状态
|
|
423
|
-
-
|
|
424
|
-
-
|
|
528
|
+
- 持久化文件可选择保留或手动清理
|
|
529
|
+
- 任务完成后状态标记为 `completed`
|
|
425
530
|
|
|
426
531
|
</process>
|
|
427
532
|
|
|
@@ -474,12 +579,12 @@ $ARGUMENTS
|
|
|
474
579
|
|
|
475
580
|
## 与其他指令的区别
|
|
476
581
|
|
|
477
|
-
| 指令 | 适用场景 | 任务文件 | 问答 | 验证 |
|
|
478
|
-
|
|
479
|
-
| `/om:feature` | 小需求(≤100字,单一功能) | ❌ | 质量+E2E | 按等级 |
|
|
480
|
-
| `/om:start` | 标准任务 | ✅ | 质量+E2E+模式 | 按等级 |
|
|
481
|
-
| `/om:brainstorm` | 复杂任务 | ✅ | 设计问答 | 按等级 |
|
|
482
|
-
| `/om:auto` | 全自动执行 | ✅ | 无 | 按等级 |
|
|
582
|
+
| 指令 | 适用场景 | 任务文件 | 问答 | 验证 | 持久化 |
|
|
583
|
+
|-----|---------|:-------:|:----:|:----:|:-----:|
|
|
584
|
+
| `/om:feature` | 小需求(≤100字,单一功能) | ❌ | 质量+E2E | 按等级 | 必须 |
|
|
585
|
+
| `/om:start` | 标准任务 | ✅ | 质量+E2E+模式 | 按等级 | 必须 |
|
|
586
|
+
| `/om:brainstorm` | 复杂任务 | ✅ | 设计问答 | 按等级 | 必须 |
|
|
587
|
+
| `/om:auto` | 全自动执行 | ✅ | 无 | 按等级 | 必须 |
|
|
483
588
|
|
|
484
589
|
## 路由触发条件
|
|
485
590
|
|
|
@@ -492,13 +597,14 @@ $ARGUMENTS
|
|
|
492
597
|
## 错误处理流程
|
|
493
598
|
|
|
494
599
|
```
|
|
495
|
-
验证失败 → 停止执行 → 展示错误详情 → 提示用户修复 →
|
|
600
|
+
验证失败 → 停止执行 → 展示错误详情 → 提示用户修复 → 使用 /om:resume 恢复
|
|
496
601
|
```
|
|
497
602
|
|
|
498
603
|
| 错误 | 处理 |
|
|
499
604
|
|-----|-----|
|
|
500
605
|
| 测试失败 | 停止,提示用户修复 |
|
|
501
606
|
| Lint 错误 | 停止,提示用户修复 |
|
|
607
|
+
| 安全扫描失败 | 停止,提示用户修复 |
|
|
502
608
|
| Agent 超时 | 询问重试或跳过 |
|
|
503
609
|
| Git 失败 | 提示手动处理 |
|
|
504
610
|
|
|
@@ -534,8 +640,14 @@ type: feat/fix/test/refactor/docs
|
|
|
534
640
|
|
|
535
641
|
## 恢复执行
|
|
536
642
|
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
643
|
+
如果验证失败需要修复:
|
|
644
|
+
|
|
645
|
+
使用 `/om:resume` 继续执行(自动检测 `.openmatrix/feature-session.json` 或 `state.json`)
|
|
646
|
+
|
|
647
|
+
## 挡久化文件说明
|
|
648
|
+
|
|
649
|
+
执行过程中产生以下文件:
|
|
650
|
+
- `.openmatrix/feature-session.json` - 会话状态(任务列表、当前索引、质量等级)
|
|
651
|
+
- `.openmatrix/feature-context.md` - 项目上下文
|
|
652
|
+
- `.openmatrix/feature-progress.md` - Agent 执行进度
|
|
541
653
|
</notes>
|