openmatrix 0.1.0 → 0.1.2
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 +397 -512
- package/dist/cli/commands/auto.d.ts +2 -0
- package/dist/cli/commands/auto.js +226 -0
- package/dist/cli/commands/install-skills.d.ts +3 -0
- package/dist/cli/commands/install-skills.js +134 -0
- package/dist/cli/index.js +4 -0
- package/package.json +3 -2
- package/skills/auto.md +218 -0
- package/skills/om.md +124 -0
- package/skills/start.md +153 -21
package/skills/om.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: om
|
|
3
|
+
description: OpenMatrix 默认入口 - 直接输入任务描述即可启动
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<NO-OTHER-SKILLS>
|
|
7
|
+
执行此技能时,不得调用 superpowers、gsd 或其他任务编排相关的技能。OpenMatrix 独立运行,不依赖外部任务编排系统。
|
|
8
|
+
</NO-OTHER-SKILLS>
|
|
9
|
+
|
|
10
|
+
<objective>
|
|
11
|
+
OpenMatrix 的默认入口。用户可以直接输入任务描述,系统会自动启动 /om:start 执行任务编排。
|
|
12
|
+
</objective>
|
|
13
|
+
|
|
14
|
+
<process>
|
|
15
|
+
1. **解析用户输入**
|
|
16
|
+
|
|
17
|
+
用户输入 `$ARGUMENTS` 可能是:
|
|
18
|
+
- 任务描述 (如 "实现用户登录功能")
|
|
19
|
+
- 文件路径 (如 "docs/task.md")
|
|
20
|
+
- 空输入
|
|
21
|
+
|
|
22
|
+
2. **判断输入类型**
|
|
23
|
+
|
|
24
|
+
**如果是任务描述或文件路径**:
|
|
25
|
+
→ 直接调用 `/om:start` 并传递参数
|
|
26
|
+
|
|
27
|
+
**如果是空输入**:
|
|
28
|
+
→ 显示帮助信息
|
|
29
|
+
|
|
30
|
+
3. **自动启动 /om:start**
|
|
31
|
+
|
|
32
|
+
无论用户输入什么,都自动转换为 `/om:start` 调用:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
用户输入: "实现用户登录"
|
|
36
|
+
系统执行: /om:start 实现用户登录
|
|
37
|
+
|
|
38
|
+
用户输入: "docs/task.md"
|
|
39
|
+
系统执行: /om:start docs/task.md
|
|
40
|
+
|
|
41
|
+
用户输入: (空)
|
|
42
|
+
系统显示: 帮助信息
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
4. **帮助信息**
|
|
46
|
+
|
|
47
|
+
如果用户输入为空或输入 `--help`,显示:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
📦 OpenMatrix - AI 任务编排系统
|
|
51
|
+
|
|
52
|
+
用法:
|
|
53
|
+
/om <任务描述> 直接启动任务
|
|
54
|
+
/om:start <任务> 交互式启动 (可选质量级别)
|
|
55
|
+
/om:auto <任务> 全自动执行
|
|
56
|
+
|
|
57
|
+
示例:
|
|
58
|
+
/om 实现用户登录功能
|
|
59
|
+
/om 修复登录页面的样式问题
|
|
60
|
+
/om 添加 API 接口
|
|
61
|
+
|
|
62
|
+
质量级别:
|
|
63
|
+
🚀 strict - TDD + 80%覆盖率 (生产代码)
|
|
64
|
+
⚖️ balanced - 60%覆盖率 (日常开发)
|
|
65
|
+
⚡ fast - 无质量门禁 (快速原型)
|
|
66
|
+
|
|
67
|
+
其他命令:
|
|
68
|
+
/om:status - 查看状态
|
|
69
|
+
/om:meeting - 处理阻塞
|
|
70
|
+
/om:report - 生成报告
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
</process>
|
|
74
|
+
|
|
75
|
+
<arguments>
|
|
76
|
+
$ARGUMENTS
|
|
77
|
+
</arguments>
|
|
78
|
+
|
|
79
|
+
<examples>
|
|
80
|
+
/om 实现用户登录功能 # 自动启动任务编排
|
|
81
|
+
/om 修复登录页面的样式问题 # 直接描述任务
|
|
82
|
+
/om docs/task.md # 从文件读取任务
|
|
83
|
+
/om # 显示帮助
|
|
84
|
+
</examples>
|
|
85
|
+
|
|
86
|
+
<notes>
|
|
87
|
+
## 工作原理
|
|
88
|
+
|
|
89
|
+
```
|
|
90
|
+
用户输入: /om 实现登录
|
|
91
|
+
│
|
|
92
|
+
▼
|
|
93
|
+
┌─────────────────┐
|
|
94
|
+
│ 检测到任务描述 │
|
|
95
|
+
└────────┬────────┘
|
|
96
|
+
│
|
|
97
|
+
▼
|
|
98
|
+
┌─────────────────┐
|
|
99
|
+
│ 自动调用 │
|
|
100
|
+
│ /om:start │
|
|
101
|
+
│ 实现登录 │
|
|
102
|
+
└─────────────────┘
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 与 /om:start 的关系
|
|
106
|
+
|
|
107
|
+
`/om` 是 `/om:start` 的快捷方式:
|
|
108
|
+
- `/om <任务>` ≡ `/om:start <任务>`
|
|
109
|
+
- 用户体验更简洁
|
|
110
|
+
- 功能完全相同
|
|
111
|
+
|
|
112
|
+
## 推荐用法
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
# 快速启动 (推荐)
|
|
116
|
+
/om 实现用户登录
|
|
117
|
+
|
|
118
|
+
# 等价于
|
|
119
|
+
/om:start 实现用户登录
|
|
120
|
+
|
|
121
|
+
# 全自动模式
|
|
122
|
+
/om:auto 实现用户登录
|
|
123
|
+
```
|
|
124
|
+
</notes>
|
package/skills/start.md
CHANGED
|
@@ -12,11 +12,19 @@ description: 启动新的任务执行周期
|
|
|
12
12
|
</objective>
|
|
13
13
|
|
|
14
14
|
<process>
|
|
15
|
-
1.
|
|
15
|
+
1. **检查并初始化 .openmatrix 目录**
|
|
16
|
+
- 检查 `.openmatrix/` 目录是否存在
|
|
17
|
+
- 如果不存在,调用 CLI 初始化:
|
|
18
|
+
```bash
|
|
19
|
+
openmatrix start --init-only
|
|
20
|
+
```
|
|
21
|
+
- 这会创建 `.openmatrix/`、`.openmatrix/tasks/`、`.openmatrix/approvals/` 目录
|
|
22
|
+
|
|
23
|
+
2. **检查当前状态**
|
|
16
24
|
- 读取 `.openmatrix/state.json`
|
|
17
25
|
- 如果 `status === 'running'`,提示用户先完成或暂停
|
|
18
26
|
|
|
19
|
-
|
|
27
|
+
3. **检查 Git 仓库**
|
|
20
28
|
- 检查当前目录是否存在 `.git` 文件夹
|
|
21
29
|
- 如果没有:
|
|
22
30
|
- 询问用户是否初始化 Git 仓库 (使用 AskUserQuestion)
|
|
@@ -25,12 +33,12 @@ description: 启动新的任务执行周期
|
|
|
25
33
|
- 检查是否有远程仓库配置:
|
|
26
34
|
- 如果没有远程仓库,提示用户添加: `git remote add origin <url>`
|
|
27
35
|
|
|
28
|
-
|
|
36
|
+
4. **解析任务输入**
|
|
29
37
|
- 如果 `$ARGUMENTS` 提供文件路径 → 读取文件内容
|
|
30
38
|
- 如果 `$ARGUMENTS` 是任务描述 → 直接使用
|
|
31
39
|
- 如果无参数 → **使用 AskUserQuestion 询问用户要执行的任务**
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
5. **⚠️ 交互式问答 (必须执行)**
|
|
34
42
|
|
|
35
43
|
**重要**: 除非用户明确指定 `--skip-questions`,否则必须执行交互式问答。
|
|
36
44
|
|
|
@@ -156,7 +164,7 @@ description: 启动新的任务执行周期
|
|
|
156
164
|
审批点: plan, merge
|
|
157
165
|
```
|
|
158
166
|
|
|
159
|
-
|
|
167
|
+
7. **执行模式确认** (使用 AskUserQuestion)
|
|
160
168
|
|
|
161
169
|
```typescript
|
|
162
170
|
AskUserQuestion({
|
|
@@ -182,7 +190,7 @@ AskUserQuestion({
|
|
|
182
190
|
})
|
|
183
191
|
```
|
|
184
192
|
|
|
185
|
-
|
|
193
|
+
8. **开始执行** (⚠️ 严格模式)
|
|
186
194
|
|
|
187
195
|
**重要**: 从此步骤开始,除非遇到 meeting 审批或失败,否则**不得暂停询问用户**。
|
|
188
196
|
|
|
@@ -201,8 +209,21 @@ c) **执行循环** (由 Skill 驱动):
|
|
|
201
209
|
while (有待执行任务) {
|
|
202
210
|
1. 读取状态文件获取 SubagentTask
|
|
203
211
|
2. 调用 Agent 工具执行 Subagent
|
|
204
|
-
3. Subagent
|
|
205
|
-
|
|
212
|
+
3. Subagent 完成后,更新状态文件:
|
|
213
|
+
```bash
|
|
214
|
+
openmatrix complete <taskId> --success/--failed
|
|
215
|
+
```
|
|
216
|
+
4. **Git 自动提交** (每个子任务完成后):
|
|
217
|
+
```bash
|
|
218
|
+
git add -A
|
|
219
|
+
git commit -m "feat(task-id): 任务标题
|
|
220
|
+
|
|
221
|
+
- 修改内容1
|
|
222
|
+
- 修改内容2
|
|
223
|
+
|
|
224
|
+
任务ID: TASK-XXX
|
|
225
|
+
RunID: run-XXX"
|
|
226
|
+
```
|
|
206
227
|
5. Phase 验收测试 (verify phase)
|
|
207
228
|
6. **检查是否需要审批**:
|
|
208
229
|
- 如果配置了 auto 模式 (`approvalPoints` 为空):
|
|
@@ -219,15 +240,88 @@ while (有待执行任务) {
|
|
|
219
240
|
├── 任务C 完成 ✓
|
|
220
241
|
└── 任务D 阻塞 → 创建Meeting → **跳过任务,继续执行** ↷
|
|
221
242
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
243
|
+
所有任务执行完成!
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
d) **执行完成后自动处理 Meeting**:
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# 检查是否有 pending 的 Meeting
|
|
250
|
+
openmatrix meeting --list --pending
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**如果有 pending 的 Meeting,立即进入交互式处理**:
|
|
254
|
+
|
|
255
|
+
```
|
|
256
|
+
📋 检测到待处理的 Meeting (2个)
|
|
257
|
+
|
|
258
|
+
┌─────────────────────────────────────────┐
|
|
259
|
+
│ [1] 🔴 TASK-001 - 数据库连接失败 │
|
|
260
|
+
│ 阻塞原因: 无法连接到远程数据库 │
|
|
261
|
+
│ │
|
|
262
|
+
│ [2] 🤔 TASK-003 - API设计决策 │
|
|
263
|
+
│ 问题: 选择 REST 还是 GraphQL │
|
|
264
|
+
└─────────────────────────────────────────┘
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
**使用 AskUserQuestion 逐个处理**:
|
|
268
|
+
|
|
269
|
+
```typescript
|
|
270
|
+
// 1. 先选择要处理的 Meeting
|
|
271
|
+
AskUserQuestion({
|
|
272
|
+
questions: [{
|
|
273
|
+
question: "请选择要处理的 Meeting:",
|
|
274
|
+
header: "Meeting",
|
|
275
|
+
options: [
|
|
276
|
+
{ label: "[1] TASK-001 - 数据库连接失败", description: "阻塞 - 需要信息" },
|
|
277
|
+
{ label: "[2] TASK-003 - API设计决策", description: "决策 - 技术选型" },
|
|
278
|
+
{ label: "全部跳过", description: "标记所有 Meeting 为跳过" }
|
|
279
|
+
],
|
|
280
|
+
multiSelect: false
|
|
281
|
+
}]
|
|
282
|
+
})
|
|
283
|
+
|
|
284
|
+
// 2. 根据类型展示处理选项
|
|
285
|
+
// 阻塞型:
|
|
286
|
+
AskUserQuestion({
|
|
287
|
+
questions: [{
|
|
288
|
+
question: "如何处理此阻塞?",
|
|
289
|
+
header: "处理方式",
|
|
290
|
+
options: [
|
|
291
|
+
{ label: "💡 提供信息", description: "提供解决问题所需的信息后重试" },
|
|
292
|
+
{ label: "⏭️ 跳过任务", description: "标记为可选,继续执行" },
|
|
293
|
+
{ label: "🔄 重试", description: "直接重试此任务" }
|
|
294
|
+
],
|
|
295
|
+
multiSelect: false
|
|
296
|
+
}]
|
|
297
|
+
})
|
|
298
|
+
|
|
299
|
+
// 决策型:
|
|
300
|
+
AskUserQuestion({
|
|
301
|
+
questions: [{
|
|
302
|
+
question: "请做出决策:",
|
|
303
|
+
header: "决策",
|
|
304
|
+
options: [
|
|
305
|
+
{ label: "方案 A", description: "方案A描述" },
|
|
306
|
+
{ label: "方案 B", description: "方案B描述" }
|
|
307
|
+
],
|
|
308
|
+
multiSelect: false
|
|
309
|
+
}]
|
|
310
|
+
})
|
|
311
|
+
```
|
|
226
312
|
|
|
227
|
-
|
|
313
|
+
**处理完成后,如果用户提供了信息或选择重试,重新执行阻塞任务**:
|
|
314
|
+
```bash
|
|
315
|
+
openmatrix meeting APPR-001 --action provide-info --info "..."
|
|
316
|
+
# 或
|
|
317
|
+
openmatrix meeting APPR-001 --action retry
|
|
318
|
+
|
|
319
|
+
# 然后重新执行阻塞的任务
|
|
320
|
+
openmatrix resume TASK-001
|
|
228
321
|
```
|
|
229
322
|
|
|
230
|
-
|
|
323
|
+
**⚠️ 重要**: Meeting 处理是执行流程的一部分,必须在任务结束前完成。不要让用户手动调用 /om:meeting。
|
|
324
|
+
|
|
231
325
|
7. 继续下一个任务
|
|
232
326
|
}
|
|
233
327
|
```
|
|
@@ -263,11 +357,16 @@ Agent({
|
|
|
263
357
|
- 只有遇到 **meeting** 类型的审批时才暂停
|
|
264
358
|
- 其他情况下,让 Agent 完整执行任务并在完成后自动返回结果
|
|
265
359
|
|
|
266
|
-
|
|
360
|
+
9. **执行完成 - 最终 Git 提交**
|
|
267
361
|
|
|
268
|
-
|
|
362
|
+
所有任务完成后,执行最终提交:
|
|
269
363
|
```bash
|
|
270
|
-
|
|
364
|
+
git add -A
|
|
365
|
+
git commit -m "feat: 完成所有任务
|
|
366
|
+
|
|
367
|
+
RunID: run-XXX
|
|
368
|
+
任务数: N
|
|
369
|
+
完成时间: YYYY-MM-DD HH:mm:ss"
|
|
271
370
|
```
|
|
272
371
|
|
|
273
372
|
</process>
|
|
@@ -287,9 +386,11 @@ $ARGUMENTS
|
|
|
287
386
|
|
|
288
387
|
| 级别 | TDD | 覆盖率 | Lint | 安全扫描 | AI验收 | 适用场景 |
|
|
289
388
|
|------|:---:|:------:|:----:|:--------:|:------:|---------|
|
|
290
|
-
| **strict** | ✅ | 80% | ✅ 严格 | ✅ | ✅ | 生产代码、核心功能 |
|
|
291
|
-
| **balanced** | ❌ | 60% | ✅ | ✅ | ✅ | 日常开发 (默认) |
|
|
292
|
-
| **fast** | ❌ |
|
|
389
|
+
| **strict** | ✅ | >80% | ✅ 严格 | ✅ | ✅ | 生产代码、核心功能 |
|
|
390
|
+
| **balanced** | ❌ | >60% | ✅ | ✅ | ✅ | 日常开发 (默认) |
|
|
391
|
+
| **fast** | ❌ | >20% | ❌ | ❌ | ❌ | 快速原型、POC |
|
|
392
|
+
|
|
393
|
+
> strict 可配置为 100%。80% 覆盖核心业务逻辑,100% 成本高收益低。
|
|
293
394
|
|
|
294
395
|
### strict 模式 (推荐生产代码)
|
|
295
396
|
```
|
|
@@ -367,7 +468,38 @@ $ARGUMENTS
|
|
|
367
468
|
┌─────────────────┐
|
|
368
469
|
│ 开始执行 │
|
|
369
470
|
│ (应用质量配置) │
|
|
370
|
-
|
|
471
|
+
└────────┬────────┘
|
|
472
|
+
│
|
|
473
|
+
▼
|
|
474
|
+
┌─────────────────┐
|
|
475
|
+
│ 所有任务完成? │
|
|
476
|
+
└────────┬────────┘
|
|
477
|
+
│
|
|
478
|
+
┌────┴────┐
|
|
479
|
+
│ │
|
|
480
|
+
否 是
|
|
481
|
+
│ │
|
|
482
|
+
▼ ▼
|
|
483
|
+
┌───────┐ ┌─────────────────┐
|
|
484
|
+
│继续执行│ │有 pending │
|
|
485
|
+
└───────┘ │Meeting? │
|
|
486
|
+
└────────┬────────┘
|
|
487
|
+
│
|
|
488
|
+
┌────┴────┐
|
|
489
|
+
│ │
|
|
490
|
+
否 是
|
|
491
|
+
│ │
|
|
492
|
+
▼ ▼
|
|
493
|
+
┌───────┐ ┌─────────────┐
|
|
494
|
+
│ 完成 │ │ 交互式处理 │
|
|
495
|
+
└───────┘ │ Meeting │
|
|
496
|
+
└──────┬──────┘
|
|
497
|
+
│
|
|
498
|
+
▼
|
|
499
|
+
┌─────────────┐
|
|
500
|
+
│ 重新执行 │
|
|
501
|
+
│ 阻塞任务 │
|
|
502
|
+
└─────────────┘
|
|
371
503
|
```
|
|
372
504
|
|
|
373
505
|
## 执行模式对比
|