openmatrix 0.2.31 → 0.2.33

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.
Files changed (48) hide show
  1. package/README.md +154 -154
  2. package/dist/cli/commands/approve.js +35 -1
  3. package/dist/cli/commands/auto.js +2 -2
  4. package/dist/cli/commands/check-gitignore.js +34 -30
  5. package/dist/cli/commands/check.js +1 -1
  6. package/dist/cli/commands/complete.js +35 -7
  7. package/dist/cli/commands/debug.js +2 -1
  8. package/dist/cli/commands/deploy.js +1 -1
  9. package/dist/cli/commands/install-skills.js +3 -0
  10. package/dist/cli/commands/meeting.js +37 -1
  11. package/dist/cli/commands/report.js +1 -1
  12. package/dist/cli/commands/resume.js +35 -1
  13. package/dist/cli/commands/retry.js +130 -56
  14. package/dist/cli/commands/start.js +1 -1
  15. package/dist/cli/commands/status.js +32 -29
  16. package/dist/cli/commands/step.js +4 -1
  17. package/dist/orchestrator/ai-reviewer.d.ts +5 -0
  18. package/dist/orchestrator/ai-reviewer.js +9 -2
  19. package/dist/orchestrator/context-collector.js +17 -5
  20. package/dist/orchestrator/executor.d.ts +8 -0
  21. package/dist/orchestrator/executor.js +24 -5
  22. package/dist/orchestrator/phase-executor.d.ts +4 -0
  23. package/dist/orchestrator/phase-executor.js +21 -4
  24. package/dist/storage/file-store.js +8 -0
  25. package/dist/storage/state-manager.js +52 -19
  26. package/dist/test/generator.js +113 -113
  27. package/dist/utils/error-handler.d.ts +18 -0
  28. package/dist/utils/error-handler.js +32 -0
  29. package/dist/utils/worktree-sync.js +24 -3
  30. package/package.json +61 -61
  31. package/skills/SKILL.md +53 -53
  32. package/skills/auto.md +410 -413
  33. package/skills/brainstorm.md +19 -12
  34. package/skills/debug.md +694 -691
  35. package/skills/deploy.md +658 -658
  36. package/skills/feature.md +713 -686
  37. package/skills/plan.md +298 -296
  38. package/skills/report.md +9 -5
  39. package/skills/resume.md +292 -287
  40. package/skills/start.md +32 -20
  41. package/skills/status.md +5 -4
  42. package/skills/test.md +875 -875
  43. package/dist/agents/base-agent.d.ts +0 -46
  44. package/dist/agents/base-agent.js +0 -17
  45. package/dist/cli/commands/analyze.d.ts +0 -2
  46. package/dist/cli/commands/analyze.js +0 -50
  47. package/dist/orchestrator/smart-question-analyzer.d.ts +0 -90
  48. package/dist/orchestrator/smart-question-analyzer.js +0 -512
package/skills/deploy.md CHANGED
@@ -1,658 +1,658 @@
1
- ---
2
- name: om:deploy
3
- description: "Triggers on DEPLOYMENT intent: user wants to deploy, publish, set up environments, or create deployment scripts. DO NOT trigger on: development tasks, status checks, or debugging."
4
- ---
5
-
6
- <INTENT-JUDGMENT>
7
- ## 意图判断指南
8
-
9
- **AI 应根据用户语义判断意图:**
10
-
11
- ### 触发信号(部署意图)
12
-
13
- - 用户想部署/发布项目
14
- - 需要配置 Docker/Kubernetes
15
- - 环境搭建需求
16
- - 生成部署脚本
17
- - 发布到生产环境
18
-
19
- ### 不触发信号
20
-
21
- | 用户意图 | 应调用 |
22
- |---------|--------|
23
- | 实现功能 | /om:start |
24
- | 修复 bug | /om:debug 或 /om:start |
25
- | 查看状态 | /om:status |
26
-
27
- ### 示例判断
28
-
29
- | 用户消息 | 判断 | 结果 |
30
- |---------|------|------|
31
- | "部署到服务器" | 部署意图 | 触发 ✓ |
32
- | "用 Docker 运行" | 环境配置意图 | 触发 ✓ |
33
- | "发布 npm 包" | 发布意图 | 触发 ✓ |
34
- | "实现 API 接口" | 开发意图 | /om:start |
35
- | "为什么部署失败" | 调查意图 | /om:debug |
36
- </INTENT-JUDGMENT>
37
-
38
- <NO-OTHER-SKILLS>
39
- 本 skill 与其他任务编排技能功能重叠,请勿同时使用。
40
- </NO-OTHER-SKILLS>
41
-
42
- <objective>
43
- 智能部署助手:自动分析项目文件和系统环境 → 推荐当前环境下最可行的部署方案 → 用户确认后执行 → 生成可复用的一键脚本。
44
- </objective>
45
-
46
- <process>
47
-
48
- ## Step 1: 读取历史部署配置
49
-
50
- ```bash
51
- cat .openmatrix/deploy-config.json 2>/dev/null || echo "NO_HISTORY"
52
- ```
53
-
54
- **如果有历史配置:**
55
- - 对比上次记录的关键文件和当前实际文件
56
- - 判断是否有变更
57
-
58
- ```bash
59
- # 对比关键文件是否存在变化
60
- ls -la Dockerfile docker-compose.yml Makefile Taskfile.yml 2>/dev/null
61
- cat package.json 2>/dev/null | grep -E '"(deploy|start|build)"'
62
- ```
63
-
64
- **变更检测结果:**
65
- | 状态 | 处理 |
66
- |------|------|
67
- | 无历史配置 | 正常流程(分析+询问) |
68
- | 无变更 | 直接使用上次配置,仅确认一次 |
69
- | 有变更 | 重新分析并询问 |
70
-
71
- ---
72
-
73
- ## Step 2: 分析项目文件
74
-
75
- 直接读取项目文件,不调用 CLI:
76
-
77
- ```bash
78
- # 项目配置文件
79
- ls -la Dockerfile docker-compose.yml docker-compose.yaml Makefile Taskfile.yml Taskfile.yaml 2>/dev/null
80
- ls -la k8s/ helm/ .github/workflows/ 2>/dev/null
81
- cat package.json 2>/dev/null
82
- cat go.mod 2>/dev/null
83
- cat Cargo.toml 2>/dev/null
84
- cat requirements.txt pyproject.toml 2>/dev/null
85
- ```
86
-
87
- 提取关键信息:
88
- - 项目类型(Node.js/Go/Python/Rust/Java 等)
89
- - 已有部署配置(Dockerfile、docker-compose、Makefile、k8s 等)
90
- - package.json 中的 scripts(build/start/deploy 等)
91
-
92
- ---
93
-
94
- ## Step 2.1: 检测并优化依赖源
95
-
96
- 检测项目使用的包管理器和镜像源,如果是国外慢源则建议替换为国内镜像:
97
-
98
- ```bash
99
- # npm/yarn/pnpm 源
100
- npm config get registry 2>/dev/null
101
- cat .npmrc 2>/dev/null
102
- cat .yarnrc 2>/dev/null
103
- cat .yarnrc.yml 2>/dev/null
104
-
105
- # pip 源
106
- cat pip.conf 2>/dev/null
107
- pip config get global.index-url 2>/dev/null
108
-
109
- # Docker 镜像源
110
- cat /etc/docker/daemon.json 2>/dev/null
111
- cat ~/.docker/daemon.json 2>/dev/null
112
-
113
- # Go 代理
114
- go env GOPROXY 2>/dev/null
115
-
116
- # Rust 源
117
- cat ~/.cargo/config.toml 2>/dev/null
118
-
119
- # Gradle/Maven 源
120
- cat build.gradle 2>/dev/null | grep -i "repositories" -A 5
121
- cat pom.xml 2>/dev/null | grep -i "mirror" -A 5
122
- ```
123
-
124
- **AI 分析源速度,如果检测到国外源,建议替换:**
125
-
126
- | 包管理器 | 国外源 | 国内镜像 |
127
- |---------|--------|---------|
128
- | npm/yarn/pnpm | registry.npmjs.org | https://registry.npmmirror.com |
129
- | pip | pypi.org | https://pypi.tuna.tsinghua.edu.cn/simple |
130
- | Docker | docker.io | mirror.ccs.tencentyun.com |
131
- | Go | proxy.golang.org | https://goproxy.cn,direct |
132
- | Rust/Cargo | crates.io | https://rsproxy.cn/crates.io-index |
133
- | Gradle/Maven | repo.maven.apache.org | https://maven.aliyun.com/repository/public |
134
-
135
- **如果检测到慢源,输出建议并询问:**
136
-
137
- ```
138
- AskUserQuestion:
139
- header: "镜像源"
140
- question: "检测到 npm 使用官方源(registry.npmjs.org),国内访问较慢。是否切换到国内镜像?"
141
-
142
- options:
143
- - label: "切换到淘宝镜像 (推荐)"
144
- description: "npmmirror.com,国内速度快,同步延迟 < 10 分钟"
145
- - label: "保持不变"
146
- description: "当前源可用,不需要切换"
147
- - label: "使用其他镜像"
148
- description: "指定自定义镜像地址"
149
- ```
150
-
151
- **用户确认后执行切换:**
152
- ```bash
153
- # npm
154
- npm config set registry https://registry.npmmirror.com
155
-
156
- # pip
157
- pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
158
-
159
- # Go
160
- go env -w GOPROXY=https://goproxy.cn,direct
161
-
162
- # Dockerfile 中的 apt 源(如果有)
163
- # AI 读取 Dockerfile,将 archive.ubuntu.com 替换为 mirrors.aliyun.com
164
- ```
165
-
166
- ---
167
-
168
- ## Step 3: 检测系统环境
169
-
170
- ```bash
171
- # 检测已安装的工具
172
- docker --version 2>/dev/null && echo "docker:ok" || echo "docker:missing"
173
- docker-compose --version 2>/dev/null && echo "docker-compose:ok" || echo "docker-compose:missing"
174
- kubectl version --client 2>/dev/null && echo "kubectl:ok" || echo "kubectl:missing"
175
- make --version 2>/dev/null && echo "make:ok" || echo "make:missing"
176
- task --version 2>/dev/null && echo "task:ok" || echo "task:missing"
177
- pm2 --version 2>/dev/null && echo "pm2:ok" || echo "pm2:missing"
178
- node --version 2>/dev/null && echo "node:ok" || echo "node:missing"
179
-
180
- # 操作系统
181
- uname -s 2>/dev/null || echo "Windows"
182
- ```
183
-
184
- ---
185
-
186
- ## Step 4: AI 分析并展示环境报告
187
-
188
- 基于收集到的信息,直接输出分析报告(不用 AskUserQuestion):
189
-
190
- ```markdown
191
- ## 🔍 环境分析报告
192
-
193
- **项目**: [名称] ([类型])
194
- **操作系统**: [Linux/macOS/Windows]
195
-
196
- ### 已检测到的部署配置
197
- - ✅ Dockerfile
198
- - ✅ docker-compose.yml
199
- - ❌ Makefile(未找到)
200
-
201
- ### 已安装的工具
202
- - ✅ Docker 24.0.5
203
- - ✅ make 4.3
204
- - ❌ task(未安装)
205
- - ❌ pm2(未安装)
206
- ```
207
-
208
- ---
209
-
210
- ## Step 5: 推荐部署方案(带理由)
211
-
212
- AI 根据"项目配置 × 已安装工具"交叉分析,用 AskUserQuestion 展示推荐方案:
213
-
214
- **推荐逻辑(AI 自行判断,不是硬编码):**
215
- - 有 Dockerfile + docker 已安装 → Docker 是最直接的选择
216
- - 有 docker-compose + 多服务 → Docker Compose 更合适
217
- - 有 k8s 配置 + kubectl 已安装 → Kubernetes
218
- - 有 Makefile + make 已安装 → 直接用 make
219
- - Node.js + pm2 已安装 → PM2 轻量方案
220
- - 什么都没有 → AI 根据项目类型推荐创建配置
221
-
222
- ```
223
- AskUserQuestion:
224
- header: "部署方案"
225
- question: "基于你的环境分析,推荐以下方案(已标注推荐原因):"
226
-
227
- options:
228
- - label: "Docker (推荐)"
229
- description: "已有 Dockerfile + Docker 已安装,直接可用,环境隔离好"
230
- - label: "Docker Compose"
231
- description: "检测到 docker-compose.yml,适合多服务编排"
232
- - label: "Make"
233
- description: "已有 Makefile + make 已安装,运行 make deploy"
234
- - label: "npm scripts"
235
- description: "无需额外工具,直接用 package.json 中的 scripts"
236
- ```
237
-
238
- ---
239
-
240
- ## Step 6: 确认部署环境
241
-
242
- ```
243
- AskUserQuestion:
244
- header: "目标环境"
245
- question: "部署到哪个环境?"
246
-
247
- options:
248
- - label: "本地开发 (推荐)"
249
- description: "快速启动,用于开发调试"
250
- - label: "测试环境"
251
- description: "模拟生产配置,用于验证"
252
- - label: "生产环境"
253
- description: "需要完整配置和安全检查"
254
- ```
255
-
256
- ---
257
-
258
- ## Step 6.1: 生成部署任务清单
259
-
260
- 根据前面的分析和用户选择,将所有部署步骤写入 TodoWrite,逐条执行:
261
-
262
- **示例(Docker 本地部署 + 源优化 + 脚本生成):**
263
-
264
- ```typescript
265
- TodoWrite({
266
- todos: [
267
- { content: "切换 npm 源到淘宝镜像", activeForm: "正在切换 npm 镜像源", status: "pending" },
268
- { content: "构建 Docker 镜像", activeForm: "正在构建 Docker 镜像", status: "pending" },
269
- { content: "启动容器", activeForm: "正在启动容器", status: "pending" },
270
- { content: "验证部署:容器状态", activeForm: "正在检查容器状态", status: "pending" },
271
- { content: "验证部署:端口监听", activeForm: "正在检查端口", status: "pending" },
272
- { content: "验证部署:HTTP 连通", activeForm: "正在验证 HTTP 连通性", status: "pending" },
273
- { content: "生成 Taskfile.yml 一键脚本", activeForm: "正在生成一键脚本", status: "pending" },
274
- { content: "保存部署配置", activeForm: "正在保存部署配置", status: "pending" }
275
- ]
276
- })
277
- ```
278
-
279
- **任务清单根据实际情况动态生成:**
280
- - 需要切换源 → 加入源切换任务
281
- - 需要生成 Dockerfile → 加入生成任务
282
- - 多服务 → 每个服务一条任务
283
- - 选择生成脚本 → 加入脚本生成任务
284
-
285
- **执行规则:**
286
- - 每次只执行一条,完成后立即标记 completed
287
- - 失败时停止,输出错误信息
288
- - 用户可以看到整体进度
289
-
290
- ---
291
-
292
- ## Step 7: 执行部署
293
-
294
- 根据用户选择,AI 执行对应命令:
295
-
296
- **Docker 本地:**
297
- ```bash
298
- docker build -t <project-name> .
299
- docker run -d -p <port>:<port> --name <project-name> <project-name>
300
- ```
301
-
302
- **Docker Compose:**
303
- ```bash
304
- docker-compose up -d --build
305
- ```
306
-
307
- **Make:**
308
- ```bash
309
- make deploy
310
- ```
311
-
312
- **npm scripts:**
313
- ```bash
314
- npm run build
315
- npm run start &
316
- ```
317
-
318
- ---
319
-
320
- ## Step 7.1: 自动验证部署结果
321
-
322
- 执行部署后,AI 自动执行以下验证(按顺序,全部通过才算成功):
323
-
324
- **1. 检查容器/进程状态:**
325
- ```bash
326
- # Docker
327
- docker ps --format "{{.Names}}\t{{.Status}}" | grep <project-name>
328
-
329
- # Docker Compose
330
- docker-compose ps
331
-
332
- # PM2
333
- pm2 list
334
-
335
- # 进程检查
336
- ps aux | grep <project-name>
337
- ```
338
-
339
- **2. 检查端口是否在监听:**
340
- ```bash
341
- # Linux/Mac
342
- lsof -i :<port> 2>/dev/null || netstat -tlnp 2>/dev/null | grep <port>
343
-
344
- # Windows
345
- netstat -ano | findstr :<port>
346
- ```
347
-
348
- **3. HTTP 连通性验证(核心验证):**
349
- ```bash
350
- # 等待服务启动(最多重试 5 次,每次间隔 2 秒)
351
- for i in 1 2 3 4 5; do
352
- STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:<port>/ 2>/dev/null)
353
- if [ "$STATUS" -ge 200 ] && [ "$STATUS" -lt 400 ]; then
354
- echo "HTTP $STATUS OK"
355
- break
356
- fi
357
- sleep 2
358
- done
359
-
360
- # 获取响应内容摘要
361
- curl -s http://localhost:<port>/ 2>/dev/null | head -20
362
- ```
363
-
364
- **4. 健康检查端点(如果存在):**
365
- ```bash
366
- curl -s http://localhost:<port>/health 2>/dev/null
367
- curl -s http://localhost:<port>/api/health 2>/dev/null
368
- curl -s http://localhost:<port>/healthz 2>/dev/null
369
- ```
370
-
371
- **5. 浏览器可访问性验证(Web 项目):**
372
-
373
- 如果是 Web 项目,使用 Playwright 工具打开浏览器验证页面是否正常加载:
374
- ```
375
- browser_navigate: http://localhost:<port>/
376
- browser_snapshot: 检查页面是否正常渲染
377
- browser_take_screenshot: 截图保存验证结果
378
- browser_close
379
- ```
380
-
381
- 如果无法使用浏览器工具,输出可访问的 URL 供用户手动验证:
382
- ```
383
- 🌐 请在浏览器中访问: http://localhost:<port>/
384
- ```
385
-
386
- **6. 日志检查(任何验证失败时):**
387
- ```bash
388
- # Docker 日志
389
- docker logs <project-name> --tail 50
390
-
391
- # PM2 日志
392
- pm2 logs <project-name> --lines 50
393
- ```
394
-
395
- ---
396
-
397
- ## Step 7.2: 输出验证报告
398
-
399
- AI 根据验证结果输出状态报告:
400
-
401
- **验证成功:**
402
- ```markdown
403
- ## ✅ 部署验证报告
404
-
405
- **服务状态**: 运行中 (Up 2 minutes)
406
- **端口**: 3000 已监听
407
- **HTTP 连通**: http://localhost:3000/ → 200 OK
408
- **健康检查**: /health → 200 OK
409
-
410
- ### 验证清单
411
- - ✅ 容器/进程正常运行
412
- - ✅ 端口 3000 已监听
413
- - ✅ HTTP 请求返回 200
414
- - ✅ 页面可正常访问
415
-
416
- ### 访问地址
417
- 🌐 http://localhost:3000/
418
-
419
- ### 快捷命令
420
- - 查看日志: docker logs -f <project-name>
421
- - 停止服务: docker stop <project-name>
422
- - 重启服务: docker restart <project-name>
423
- ```
424
-
425
- **验证失败:**
426
- ```markdown
427
- ## ❌ 部署验证失败
428
-
429
- **问题**: 容器启动后立即退出
430
- **状态**: Exited (1)
431
-
432
- ### 错误日志(最近 20 行)
433
- <显示 docker logs 输出>
434
-
435
- ### 建议修复
436
- 1. 检查 Dockerfile 配置
437
- 2. 检查启动命令是否正确
438
- 3. 查看完整日志: docker logs <project-name>
439
- ```
440
-
441
- 验证失败时,询问用户是否要查看完整日志或尝试修复。
442
-
443
- ---
444
-
445
- ## Step 8: 询问是否生成一键脚本
446
-
447
- ```
448
- AskUserQuestion:
449
- header: "一键脚本"
450
- question: "部署完成!是否生成一键脚本方便后续开发调试?"
451
-
452
- options:
453
- - label: "生成 Taskfile.yml (推荐)"
454
- description: "task 已安装 / 现代化工具,YAML 格式简洁,跨平台"
455
- - label: "生成 Makefile"
456
- description: "make 已安装 / 经典工具,已有 Makefile 时保持一致"
457
- - label: "添加到 npm scripts"
458
- description: "Node.js 项目,无需额外工具"
459
- - label: "不需要"
460
- description: "已有足够配置"
461
- ```
462
-
463
- ---
464
-
465
- ## Step 9: 生成一键脚本
466
-
467
- 根据用户选择和项目实际情况,用 Write 工具生成脚本。
468
-
469
- **Taskfile.yml 示例(根据实际项目定制):**
470
- ```yaml
471
- version: '3'
472
-
473
- vars:
474
- APP: '{{.APP | default "app"}}'
475
- PORT: '{{.PORT | default "3000"}}'
476
-
477
- tasks:
478
- setup:
479
- desc: 安装依赖
480
- cmds:
481
- - npm install
482
-
483
- build:
484
- desc: 构建项目
485
- cmds:
486
- - npm run build
487
-
488
- test:
489
- desc: 运行测试
490
- cmds:
491
- - npm test
492
-
493
- dev:
494
- desc: 本地开发(热重载)
495
- cmds:
496
- - npm run dev
497
-
498
- deploy:local:
499
- desc: 本地 Docker 部署
500
- cmds:
501
- - docker build -t {{.APP}} .
502
- - docker run -d -p {{.PORT}}:{{.PORT}} --name {{.APP}} {{.APP}}
503
- - echo "✅ 服务已启动 http://localhost:{{.PORT}}"
504
-
505
- deploy:prod:
506
- desc: 生产部署
507
- cmds:
508
- - docker build -t {{.APP}}:{{.VERSION}} .
509
- - docker push {{.REGISTRY}}/{{.APP}}:{{.VERSION}}
510
-
511
- logs:
512
- desc: 查看日志
513
- cmds:
514
- - docker logs -f {{.APP}}
515
-
516
- stop:
517
- desc: 停止服务
518
- cmds:
519
- - docker stop {{.APP}} && docker rm {{.APP}}
520
- ```
521
-
522
- **Makefile 示例(根据实际项目定制):**
523
- ```makefile
524
- APP ?= app
525
- PORT ?= 3000
526
-
527
- .PHONY: setup build test dev deploy-local deploy-prod logs stop
528
-
529
- setup:
530
- npm install
531
-
532
- build:
533
- npm run build
534
-
535
- test:
536
- npm test
537
-
538
- dev:
539
- npm run dev
540
-
541
- deploy-local:
542
- docker build -t $(APP) .
543
- docker run -d -p $(PORT):$(PORT) --name $(APP) $(APP)
544
- @echo "✅ 服务已启动 http://localhost:$(PORT)"
545
-
546
- deploy-prod:
547
- docker build -t $(APP):$(VERSION) .
548
- docker push $(REGISTRY)/$(APP):$(VERSION)
549
-
550
- logs:
551
- docker logs -f $(APP)
552
-
553
- stop:
554
- docker stop $(APP) && docker rm $(APP)
555
- ```
556
-
557
- ---
558
-
559
- ## Step 10: 保存部署配置
560
-
561
- 将用户选择的部署方式保存到 `.openmatrix/deploy-config.json`:
562
-
563
- ```json
564
- {
565
- "deployMethod": "docker",
566
- "envType": "local",
567
- "scriptTool": "taskfile",
568
- "lastDetectedFiles": {
569
- "Dockerfile": true,
570
- "docker-compose.yml": false,
571
- "Makefile": false,
572
- "package.json": true
573
- },
574
- "lastDetectedTools": {
575
- "docker": "24.0.5",
576
- "make": "4.3",
577
- "task": null
578
- },
579
- "timestamp": "2026-04-22T15:00:00Z"
580
- }
581
- ```
582
-
583
- 下次运行时,对比 `lastDetectedFiles` 和当前实际文件状态,判断是否需要重新询问。
584
-
585
- ---
586
-
587
- ## Step 11: 输出总结
588
-
589
- ```markdown
590
- ## ✅ 部署完成
591
-
592
- **方案**: Docker 本地部署
593
- **环境**: 本地开发
594
- **脚本**: 已生成 Taskfile.yml
595
-
596
- ### 常用命令
597
- - `task dev` — 本地开发
598
- - `task deploy:local` — Docker 本地部署
599
- - `task deploy:prod` — 生产部署
600
- - `task logs` — 查看日志
601
- - `task stop` — 停止服务
602
- ```
603
-
604
- </process>
605
-
606
- <arguments>
607
- $ARGUMENTS
608
- </arguments>
609
-
610
- <examples>
611
- /om:deploy # 自动分析 → 推荐方案 → 执行 → 生成脚本
612
- /om:deploy local # 直接指定本地环境
613
- /om:deploy prod # 直接指定生产环境
614
- </examples>
615
-
616
- <notes>
617
- ## 核心原则
618
-
619
- 1. **AI 是分析者**:读取真实文件和系统状态,不靠硬编码规则推断
620
- 2. **AI 是执行者**:用户确认后直接运行命令,不只是给建议
621
- 3. **推荐最可行的**:基于"当前系统已有什么工具",不是"理论上最好的"
622
- 4. **产出可复用脚本**:最终生成 Taskfile/Makefile,方便后续开发调试
623
- 5. **记录上次选择**:保存部署配置,下次未变化时直接复用,减少重复询问
624
-
625
- ## 历史配置复用
626
-
627
- `.openmatrix/deploy-config.json` 存储上次部署选择:
628
- - 对比 `lastDetectedFiles` 和当前文件状态
629
- - 状态一致 → 直接使用上次配置,仅确认一次
630
- - 状态变化 → 重新分析并询问
631
-
632
- 变更检测:
633
- - Dockerfile/docker-compose.yml/Makefile 新增或删除
634
- - package.json scripts 变化
635
- - 系统工具安装状态变化
636
-
637
- ## 推荐决策依据(AI 自行判断)
638
-
639
- | 项目配置 | 系统工具 | 推荐方案 |
640
- |---------|---------|---------|
641
- | 有 Dockerfile | docker 已安装 | Docker |
642
- | 有 docker-compose | docker-compose 已安装 | Docker Compose |
643
- | 有 k8s/ | kubectl 已安装 | Kubernetes |
644
- | 有 Makefile | make 已安装 | Make |
645
- | Node.js | pm2 已安装 | PM2 |
646
- | Node.js | 无特殊工具 | npm scripts |
647
- | 无任何配置 | docker 已安装 | 生成 Dockerfile |
648
- | 无任何配置 | 无工具 | npm scripts / shell 脚本 |
649
-
650
- ## 脚本工具选择依据
651
-
652
- | 条件 | 推荐 |
653
- |------|------|
654
- | task 已安装 | Taskfile.yml |
655
- | make 已安装 / 已有 Makefile | Makefile |
656
- | Node.js 项目 / 无工具 | npm scripts |
657
- | Windows + 无工具 | package.json scripts |
658
- </notes>
1
+ ---
2
+ name: om:deploy
3
+ description: "Triggers on DEPLOYMENT intent: user wants to deploy, publish, set up environments, or create deployment scripts. DO NOT trigger on: development tasks, status checks, or debugging."
4
+ ---
5
+
6
+ <INTENT-JUDGMENT>
7
+ ## 意图判断指南
8
+
9
+ **AI 应根据用户语义判断意图:**
10
+
11
+ ### 触发信号(部署意图)
12
+
13
+ - 用户想部署/发布项目
14
+ - 需要配置 Docker/Kubernetes
15
+ - 环境搭建需求
16
+ - 生成部署脚本
17
+ - 发布到生产环境
18
+
19
+ ### 不触发信号
20
+
21
+ | 用户意图 | 应调用 |
22
+ |---------|--------|
23
+ | 实现功能 | /om:start |
24
+ | 修复 bug | /om:debug 或 /om:start |
25
+ | 查看状态 | /om:status |
26
+
27
+ ### 示例判断
28
+
29
+ | 用户消息 | 判断 | 结果 |
30
+ |---------|------|------|
31
+ | "部署到服务器" | 部署意图 | 触发 ✓ |
32
+ | "用 Docker 运行" | 环境配置意图 | 触发 ✓ |
33
+ | "发布 npm 包" | 发布意图 | 触发 ✓ |
34
+ | "实现 API 接口" | 开发意图 | /om:start |
35
+ | "为什么部署失败" | 调查意图 | /om:debug |
36
+ </INTENT-JUDGMENT>
37
+
38
+ <NO-OTHER-SKILLS>
39
+ 本 skill 与其他任务编排技能功能重叠,请勿同时使用。
40
+ </NO-OTHER-SKILLS>
41
+
42
+ <objective>
43
+ 智能部署助手:自动分析项目文件和系统环境 → 推荐当前环境下最可行的部署方案 → 用户确认后执行 → 生成可复用的一键脚本。
44
+ </objective>
45
+
46
+ <process>
47
+
48
+ ## Step 1: 读取历史部署配置
49
+
50
+ ```bash
51
+ cat .openmatrix/deploy-config.json 2>/dev/null || echo "NO_HISTORY"
52
+ ```
53
+
54
+ **如果有历史配置:**
55
+ - 对比上次记录的关键文件和当前实际文件
56
+ - 判断是否有变更
57
+
58
+ ```bash
59
+ # 对比关键文件是否存在变化
60
+ ls -la Dockerfile docker-compose.yml Makefile Taskfile.yml 2>/dev/null
61
+ cat package.json 2>/dev/null | grep -E '"(deploy|start|build)"'
62
+ ```
63
+
64
+ **变更检测结果:**
65
+ | 状态 | 处理 |
66
+ |------|------|
67
+ | 无历史配置 | 正常流程(分析+询问) |
68
+ | 无变更 | 直接使用上次配置,仅确认一次 |
69
+ | 有变更 | 重新分析并询问 |
70
+
71
+ ---
72
+
73
+ ## Step 2: 分析项目文件
74
+
75
+ 直接读取项目文件,不调用 CLI:
76
+
77
+ ```bash
78
+ # 项目配置文件
79
+ ls -la Dockerfile docker-compose.yml docker-compose.yaml Makefile Taskfile.yml Taskfile.yaml 2>/dev/null
80
+ ls -la k8s/ helm/ .github/workflows/ 2>/dev/null
81
+ cat package.json 2>/dev/null
82
+ cat go.mod 2>/dev/null
83
+ cat Cargo.toml 2>/dev/null
84
+ cat requirements.txt pyproject.toml 2>/dev/null
85
+ ```
86
+
87
+ 提取关键信息:
88
+ - 项目类型(Node.js/Go/Python/Rust/Java 等)
89
+ - 已有部署配置(Dockerfile、docker-compose、Makefile、k8s 等)
90
+ - package.json 中的 scripts(build/start/deploy 等)
91
+
92
+ ---
93
+
94
+ ## Step 2.1: 检测并优化依赖源
95
+
96
+ 检测项目使用的包管理器和镜像源,如果是国外慢源则建议替换为国内镜像:
97
+
98
+ ```bash
99
+ # npm/yarn/pnpm 源
100
+ npm config get registry 2>/dev/null
101
+ cat .npmrc 2>/dev/null
102
+ cat .yarnrc 2>/dev/null
103
+ cat .yarnrc.yml 2>/dev/null
104
+
105
+ # pip 源
106
+ cat pip.conf 2>/dev/null
107
+ pip config get global.index-url 2>/dev/null
108
+
109
+ # Docker 镜像源
110
+ cat /etc/docker/daemon.json 2>/dev/null
111
+ cat ~/.docker/daemon.json 2>/dev/null
112
+
113
+ # Go 代理
114
+ go env GOPROXY 2>/dev/null
115
+
116
+ # Rust 源
117
+ cat ~/.cargo/config.toml 2>/dev/null
118
+
119
+ # Gradle/Maven 源
120
+ cat build.gradle 2>/dev/null | grep -i "repositories" -A 5
121
+ cat pom.xml 2>/dev/null | grep -i "mirror" -A 5
122
+ ```
123
+
124
+ **AI 分析源速度,如果检测到国外源,建议替换:**
125
+
126
+ | 包管理器 | 国外源 | 国内镜像 |
127
+ |---------|--------|---------|
128
+ | npm/yarn/pnpm | registry.npmjs.org | https://registry.npmmirror.com |
129
+ | pip | pypi.org | https://pypi.tuna.tsinghua.edu.cn/simple |
130
+ | Docker | docker.io | mirror.ccs.tencentyun.com |
131
+ | Go | proxy.golang.org | https://goproxy.cn,direct |
132
+ | Rust/Cargo | crates.io | https://rsproxy.cn/crates.io-index |
133
+ | Gradle/Maven | repo.maven.apache.org | https://maven.aliyun.com/repository/public |
134
+
135
+ **如果检测到慢源,输出建议并询问:**
136
+
137
+ ```
138
+ AskUserQuestion:
139
+ header: "镜像源"
140
+ question: "检测到 npm 使用官方源(registry.npmjs.org),国内访问较慢。是否切换到国内镜像?"
141
+
142
+ options:
143
+ - label: "切换到淘宝镜像 (推荐)"
144
+ description: "npmmirror.com,国内速度快,同步延迟 < 10 分钟"
145
+ - label: "保持不变"
146
+ description: "当前源可用,不需要切换"
147
+ - label: "使用其他镜像"
148
+ description: "指定自定义镜像地址"
149
+ ```
150
+
151
+ **用户确认后执行切换:**
152
+ ```bash
153
+ # npm
154
+ npm config set registry https://registry.npmmirror.com
155
+
156
+ # pip
157
+ pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
158
+
159
+ # Go
160
+ go env -w GOPROXY=https://goproxy.cn,direct
161
+
162
+ # Dockerfile 中的 apt 源(如果有)
163
+ # AI 读取 Dockerfile,将 archive.ubuntu.com 替换为 mirrors.aliyun.com
164
+ ```
165
+
166
+ ---
167
+
168
+ ## Step 3: 检测系统环境
169
+
170
+ ```bash
171
+ # 检测已安装的工具
172
+ docker --version 2>/dev/null && echo "docker:ok" || echo "docker:missing"
173
+ docker-compose --version 2>/dev/null && echo "docker-compose:ok" || echo "docker-compose:missing"
174
+ kubectl version --client 2>/dev/null && echo "kubectl:ok" || echo "kubectl:missing"
175
+ make --version 2>/dev/null && echo "make:ok" || echo "make:missing"
176
+ task --version 2>/dev/null && echo "task:ok" || echo "task:missing"
177
+ pm2 --version 2>/dev/null && echo "pm2:ok" || echo "pm2:missing"
178
+ node --version 2>/dev/null && echo "node:ok" || echo "node:missing"
179
+
180
+ # 操作系统
181
+ uname -s 2>/dev/null || echo "Windows"
182
+ ```
183
+
184
+ ---
185
+
186
+ ## Step 4: AI 分析并展示环境报告
187
+
188
+ 基于收集到的信息,直接输出分析报告(不用 AskUserQuestion):
189
+
190
+ ```markdown
191
+ ## 🔍 环境分析报告
192
+
193
+ **项目**: [名称] ([类型])
194
+ **操作系统**: [Linux/macOS/Windows]
195
+
196
+ ### 已检测到的部署配置
197
+ - ✅ Dockerfile
198
+ - ✅ docker-compose.yml
199
+ - ❌ Makefile(未找到)
200
+
201
+ ### 已安装的工具
202
+ - ✅ Docker 24.0.5
203
+ - ✅ make 4.3
204
+ - ❌ task(未安装)
205
+ - ❌ pm2(未安装)
206
+ ```
207
+
208
+ ---
209
+
210
+ ## Step 5: 推荐部署方案(带理由)
211
+
212
+ AI 根据"项目配置 × 已安装工具"交叉分析,用 AskUserQuestion 展示推荐方案:
213
+
214
+ **推荐逻辑(AI 自行判断,不是硬编码):**
215
+ - 有 Dockerfile + docker 已安装 → Docker 是最直接的选择
216
+ - 有 docker-compose + 多服务 → Docker Compose 更合适
217
+ - 有 k8s 配置 + kubectl 已安装 → Kubernetes
218
+ - 有 Makefile + make 已安装 → 直接用 make
219
+ - Node.js + pm2 已安装 → PM2 轻量方案
220
+ - 什么都没有 → AI 根据项目类型推荐创建配置
221
+
222
+ ```
223
+ AskUserQuestion:
224
+ header: "部署方案"
225
+ question: "基于你的环境分析,推荐以下方案(已标注推荐原因):"
226
+
227
+ options:
228
+ - label: "Docker (推荐)"
229
+ description: "已有 Dockerfile + Docker 已安装,直接可用,环境隔离好"
230
+ - label: "Docker Compose"
231
+ description: "检测到 docker-compose.yml,适合多服务编排"
232
+ - label: "Make"
233
+ description: "已有 Makefile + make 已安装,运行 make deploy"
234
+ - label: "npm scripts"
235
+ description: "无需额外工具,直接用 package.json 中的 scripts"
236
+ ```
237
+
238
+ ---
239
+
240
+ ## Step 6: 确认部署环境
241
+
242
+ ```
243
+ AskUserQuestion:
244
+ header: "目标环境"
245
+ question: "部署到哪个环境?"
246
+
247
+ options:
248
+ - label: "本地开发 (推荐)"
249
+ description: "快速启动,用于开发调试"
250
+ - label: "测试环境"
251
+ description: "模拟生产配置,用于验证"
252
+ - label: "生产环境"
253
+ description: "需要完整配置和安全检查"
254
+ ```
255
+
256
+ ---
257
+
258
+ ## Step 6.1: 生成部署任务清单
259
+
260
+ 根据前面的分析和用户选择,将所有部署步骤写入 TodoWrite,逐条执行:
261
+
262
+ **示例(Docker 本地部署 + 源优化 + 脚本生成):**
263
+
264
+ ```typescript
265
+ TodoWrite({
266
+ todos: [
267
+ { content: "切换 npm 源到淘宝镜像", activeForm: "正在切换 npm 镜像源", status: "pending" },
268
+ { content: "构建 Docker 镜像", activeForm: "正在构建 Docker 镜像", status: "pending" },
269
+ { content: "启动容器", activeForm: "正在启动容器", status: "pending" },
270
+ { content: "验证部署:容器状态", activeForm: "正在检查容器状态", status: "pending" },
271
+ { content: "验证部署:端口监听", activeForm: "正在检查端口", status: "pending" },
272
+ { content: "验证部署:HTTP 连通", activeForm: "正在验证 HTTP 连通性", status: "pending" },
273
+ { content: "生成 Taskfile.yml 一键脚本", activeForm: "正在生成一键脚本", status: "pending" },
274
+ { content: "保存部署配置", activeForm: "正在保存部署配置", status: "pending" }
275
+ ]
276
+ })
277
+ ```
278
+
279
+ **任务清单根据实际情况动态生成:**
280
+ - 需要切换源 → 加入源切换任务
281
+ - 需要生成 Dockerfile → 加入生成任务
282
+ - 多服务 → 每个服务一条任务
283
+ - 选择生成脚本 → 加入脚本生成任务
284
+
285
+ **执行规则:**
286
+ - 每次只执行一条,完成后立即标记 completed
287
+ - 失败时停止,输出错误信息
288
+ - 用户可以看到整体进度
289
+
290
+ ---
291
+
292
+ ## Step 7: 执行部署
293
+
294
+ 根据用户选择,AI 执行对应命令:
295
+
296
+ **Docker 本地:**
297
+ ```bash
298
+ docker build -t <project-name> .
299
+ docker run -d -p <port>:<port> --name <project-name> <project-name>
300
+ ```
301
+
302
+ **Docker Compose:**
303
+ ```bash
304
+ docker-compose up -d --build
305
+ ```
306
+
307
+ **Make:**
308
+ ```bash
309
+ make deploy
310
+ ```
311
+
312
+ **npm scripts:**
313
+ ```bash
314
+ npm run build
315
+ npm run start &
316
+ ```
317
+
318
+ ---
319
+
320
+ ## Step 7.1: 自动验证部署结果
321
+
322
+ 执行部署后,AI 自动执行以下验证(按顺序,全部通过才算成功):
323
+
324
+ **1. 检查容器/进程状态:**
325
+ ```bash
326
+ # Docker
327
+ docker ps --format "{{.Names}}\t{{.Status}}" | grep <project-name>
328
+
329
+ # Docker Compose
330
+ docker-compose ps
331
+
332
+ # PM2
333
+ pm2 list
334
+
335
+ # 进程检查
336
+ ps aux | grep <project-name>
337
+ ```
338
+
339
+ **2. 检查端口是否在监听:**
340
+ ```bash
341
+ # Linux/Mac
342
+ lsof -i :<port> 2>/dev/null || netstat -tlnp 2>/dev/null | grep <port>
343
+
344
+ # Windows
345
+ netstat -ano | findstr :<port>
346
+ ```
347
+
348
+ **3. HTTP 连通性验证(核心验证):**
349
+ ```bash
350
+ # 等待服务启动(最多重试 5 次,每次间隔 2 秒)
351
+ for i in 1 2 3 4 5; do
352
+ STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:<port>/ 2>/dev/null)
353
+ if [ "$STATUS" -ge 200 ] && [ "$STATUS" -lt 400 ]; then
354
+ echo "HTTP $STATUS OK"
355
+ break
356
+ fi
357
+ sleep 2
358
+ done
359
+
360
+ # 获取响应内容摘要
361
+ curl -s http://localhost:<port>/ 2>/dev/null | head -20
362
+ ```
363
+
364
+ **4. 健康检查端点(如果存在):**
365
+ ```bash
366
+ curl -s http://localhost:<port>/health 2>/dev/null
367
+ curl -s http://localhost:<port>/api/health 2>/dev/null
368
+ curl -s http://localhost:<port>/healthz 2>/dev/null
369
+ ```
370
+
371
+ **5. 浏览器可访问性验证(Web 项目):**
372
+
373
+ 如果是 Web 项目,使用 Playwright 工具打开浏览器验证页面是否正常加载:
374
+ ```
375
+ browser_navigate: http://localhost:<port>/
376
+ browser_snapshot: 检查页面是否正常渲染
377
+ browser_take_screenshot: 截图保存验证结果
378
+ browser_close
379
+ ```
380
+
381
+ 如果无法使用浏览器工具,输出可访问的 URL 供用户手动验证:
382
+ ```
383
+ 🌐 请在浏览器中访问: http://localhost:<port>/
384
+ ```
385
+
386
+ **6. 日志检查(任何验证失败时):**
387
+ ```bash
388
+ # Docker 日志
389
+ docker logs <project-name> --tail 50
390
+
391
+ # PM2 日志
392
+ pm2 logs <project-name> --lines 50
393
+ ```
394
+
395
+ ---
396
+
397
+ ## Step 7.2: 输出验证报告
398
+
399
+ AI 根据验证结果输出状态报告:
400
+
401
+ **验证成功:**
402
+ ```markdown
403
+ ## ✅ 部署验证报告
404
+
405
+ **服务状态**: 运行中 (Up 2 minutes)
406
+ **端口**: 3000 已监听
407
+ **HTTP 连通**: http://localhost:3000/ → 200 OK
408
+ **健康检查**: /health → 200 OK
409
+
410
+ ### 验证清单
411
+ - ✅ 容器/进程正常运行
412
+ - ✅ 端口 3000 已监听
413
+ - ✅ HTTP 请求返回 200
414
+ - ✅ 页面可正常访问
415
+
416
+ ### 访问地址
417
+ 🌐 http://localhost:3000/
418
+
419
+ ### 快捷命令
420
+ - 查看日志: docker logs -f <project-name>
421
+ - 停止服务: docker stop <project-name>
422
+ - 重启服务: docker restart <project-name>
423
+ ```
424
+
425
+ **验证失败:**
426
+ ```markdown
427
+ ## ❌ 部署验证失败
428
+
429
+ **问题**: 容器启动后立即退出
430
+ **状态**: Exited (1)
431
+
432
+ ### 错误日志(最近 20 行)
433
+ <显示 docker logs 输出>
434
+
435
+ ### 建议修复
436
+ 1. 检查 Dockerfile 配置
437
+ 2. 检查启动命令是否正确
438
+ 3. 查看完整日志: docker logs <project-name>
439
+ ```
440
+
441
+ 验证失败时,询问用户是否要查看完整日志或尝试修复。
442
+
443
+ ---
444
+
445
+ ## Step 8: 询问是否生成一键脚本
446
+
447
+ ```
448
+ AskUserQuestion:
449
+ header: "一键脚本"
450
+ question: "部署完成!是否生成一键脚本方便后续开发调试?"
451
+
452
+ options:
453
+ - label: "生成 Taskfile.yml (推荐)"
454
+ description: "task 已安装 / 现代化工具,YAML 格式简洁,跨平台"
455
+ - label: "生成 Makefile"
456
+ description: "make 已安装 / 经典工具,已有 Makefile 时保持一致"
457
+ - label: "添加到 npm scripts"
458
+ description: "Node.js 项目,无需额外工具"
459
+ - label: "不需要"
460
+ description: "已有足够配置"
461
+ ```
462
+
463
+ ---
464
+
465
+ ## Step 9: 生成一键脚本
466
+
467
+ 根据用户选择和项目实际情况,用 Write 工具生成脚本。
468
+
469
+ **Taskfile.yml 示例(根据实际项目定制):**
470
+ ```yaml
471
+ version: '3'
472
+
473
+ vars:
474
+ APP: '{{.APP | default "app"}}'
475
+ PORT: '{{.PORT | default "3000"}}'
476
+
477
+ tasks:
478
+ setup:
479
+ desc: 安装依赖
480
+ cmds:
481
+ - npm install
482
+
483
+ build:
484
+ desc: 构建项目
485
+ cmds:
486
+ - npm run build
487
+
488
+ test:
489
+ desc: 运行测试
490
+ cmds:
491
+ - npm test
492
+
493
+ dev:
494
+ desc: 本地开发(热重载)
495
+ cmds:
496
+ - npm run dev
497
+
498
+ deploy:local:
499
+ desc: 本地 Docker 部署
500
+ cmds:
501
+ - docker build -t {{.APP}} .
502
+ - docker run -d -p {{.PORT}}:{{.PORT}} --name {{.APP}} {{.APP}}
503
+ - echo "✅ 服务已启动 http://localhost:{{.PORT}}"
504
+
505
+ deploy:prod:
506
+ desc: 生产部署
507
+ cmds:
508
+ - docker build -t {{.APP}}:{{.VERSION}} .
509
+ - docker push {{.REGISTRY}}/{{.APP}}:{{.VERSION}}
510
+
511
+ logs:
512
+ desc: 查看日志
513
+ cmds:
514
+ - docker logs -f {{.APP}}
515
+
516
+ stop:
517
+ desc: 停止服务
518
+ cmds:
519
+ - docker stop {{.APP}} && docker rm {{.APP}}
520
+ ```
521
+
522
+ **Makefile 示例(根据实际项目定制):**
523
+ ```makefile
524
+ APP ?= app
525
+ PORT ?= 3000
526
+
527
+ .PHONY: setup build test dev deploy-local deploy-prod logs stop
528
+
529
+ setup:
530
+ npm install
531
+
532
+ build:
533
+ npm run build
534
+
535
+ test:
536
+ npm test
537
+
538
+ dev:
539
+ npm run dev
540
+
541
+ deploy-local:
542
+ docker build -t $(APP) .
543
+ docker run -d -p $(PORT):$(PORT) --name $(APP) $(APP)
544
+ @echo "✅ 服务已启动 http://localhost:$(PORT)"
545
+
546
+ deploy-prod:
547
+ docker build -t $(APP):$(VERSION) .
548
+ docker push $(REGISTRY)/$(APP):$(VERSION)
549
+
550
+ logs:
551
+ docker logs -f $(APP)
552
+
553
+ stop:
554
+ docker stop $(APP) && docker rm $(APP)
555
+ ```
556
+
557
+ ---
558
+
559
+ ## Step 10: 保存部署配置
560
+
561
+ 将用户选择的部署方式保存到 `.openmatrix/deploy-config.json`:
562
+
563
+ ```json
564
+ {
565
+ "deployMethod": "docker",
566
+ "envType": "local",
567
+ "scriptTool": "taskfile",
568
+ "lastDetectedFiles": {
569
+ "Dockerfile": true,
570
+ "docker-compose.yml": false,
571
+ "Makefile": false,
572
+ "package.json": true
573
+ },
574
+ "lastDetectedTools": {
575
+ "docker": "24.0.5",
576
+ "make": "4.3",
577
+ "task": null
578
+ },
579
+ "timestamp": "2026-04-22T15:00:00Z"
580
+ }
581
+ ```
582
+
583
+ 下次运行时,对比 `lastDetectedFiles` 和当前实际文件状态,判断是否需要重新询问。
584
+
585
+ ---
586
+
587
+ ## Step 11: 输出总结
588
+
589
+ ```markdown
590
+ ## ✅ 部署完成
591
+
592
+ **方案**: Docker 本地部署
593
+ **环境**: 本地开发
594
+ **脚本**: 已生成 Taskfile.yml
595
+
596
+ ### 常用命令
597
+ - `task dev` — 本地开发
598
+ - `task deploy:local` — Docker 本地部署
599
+ - `task deploy:prod` — 生产部署
600
+ - `task logs` — 查看日志
601
+ - `task stop` — 停止服务
602
+ ```
603
+
604
+ </process>
605
+
606
+ <arguments>
607
+ $ARGUMENTS
608
+ </arguments>
609
+
610
+ <examples>
611
+ /om:deploy # 自动分析 → 推荐方案 → 执行 → 生成脚本
612
+ /om:deploy local # 直接指定本地环境
613
+ /om:deploy prod # 直接指定生产环境
614
+ </examples>
615
+
616
+ <notes>
617
+ ## 核心原则
618
+
619
+ 1. **AI 是分析者**:读取真实文件和系统状态,不靠硬编码规则推断
620
+ 2. **AI 是执行者**:用户确认后直接运行命令,不只是给建议
621
+ 3. **推荐最可行的**:基于"当前系统已有什么工具",不是"理论上最好的"
622
+ 4. **产出可复用脚本**:最终生成 Taskfile/Makefile,方便后续开发调试
623
+ 5. **记录上次选择**:保存部署配置,下次未变化时直接复用,减少重复询问
624
+
625
+ ## 历史配置复用
626
+
627
+ `.openmatrix/deploy-config.json` 存储上次部署选择:
628
+ - 对比 `lastDetectedFiles` 和当前文件状态
629
+ - 状态一致 → 直接使用上次配置,仅确认一次
630
+ - 状态变化 → 重新分析并询问
631
+
632
+ 变更检测:
633
+ - Dockerfile/docker-compose.yml/Makefile 新增或删除
634
+ - package.json scripts 变化
635
+ - 系统工具安装状态变化
636
+
637
+ ## 推荐决策依据(AI 自行判断)
638
+
639
+ | 项目配置 | 系统工具 | 推荐方案 |
640
+ |---------|---------|---------|
641
+ | 有 Dockerfile | docker 已安装 | Docker |
642
+ | 有 docker-compose | docker-compose 已安装 | Docker Compose |
643
+ | 有 k8s/ | kubectl 已安装 | Kubernetes |
644
+ | 有 Makefile | make 已安装 | Make |
645
+ | Node.js | pm2 已安装 | PM2 |
646
+ | Node.js | 无特殊工具 | npm scripts |
647
+ | 无任何配置 | docker 已安装 | 生成 Dockerfile |
648
+ | 无任何配置 | 无工具 | npm scripts / shell 脚本 |
649
+
650
+ ## 脚本工具选择依据
651
+
652
+ | 条件 | 推荐 |
653
+ |------|------|
654
+ | task 已安装 | Taskfile.yml |
655
+ | make 已安装 / 已有 Makefile | Makefile |
656
+ | Node.js 项目 / 无工具 | npm scripts |
657
+ | Windows + 无工具 | package.json scripts |
658
+ </notes>