openmatrix 0.2.18 → 0.2.20

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.
@@ -504,3 +504,312 @@ export interface EnvironmentDetectorConfig {
504
504
  /** 最大建议数量 */
505
505
  maxDeployOptions?: number;
506
506
  }
507
+ /**
508
+ * 测试框架类型
509
+ */
510
+ export type TestFramework = 'vitest' | 'jest' | 'mocha' | 'jasmine' | 'playwright' | 'cypress' | 'selenium' | 'puppeteer' | 'appium' | 'detox' | 'pytest' | 'unittest' | 'junit' | 'testng' | 'xctest' | 'gotest' | 'cargo-test' | 'unknown';
511
+ /**
512
+ * 测试类型
513
+ */
514
+ export type TestType = 'unit' | 'integration' | 'e2e' | 'api' | 'ui' | 'visual' | 'performance' | 'accessibility';
515
+ /**
516
+ * 测试框架检测结果
517
+ */
518
+ export interface TestFrameworkInfo {
519
+ /** 框架类型 */
520
+ framework: TestFramework;
521
+ /** 框架版本 */
522
+ version?: string;
523
+ /** 配置文件路径 */
524
+ configFile?: string;
525
+ /** 是否为主要测试框架 */
526
+ isPrimary: boolean;
527
+ /** 支持的测试类型 */
528
+ supportedTypes: TestType[];
529
+ /** 可用的测试命令 */
530
+ commands: {
531
+ /** 运行所有测试 */
532
+ test: string;
533
+ /** 运行特定测试文件 */
534
+ testFile?: string;
535
+ /** 运行测试并生成覆盖率 */
536
+ testCoverage?: string;
537
+ /** 监听模式 */
538
+ watch?: string;
539
+ /** 更新快照 */
540
+ updateSnapshot?: string;
541
+ };
542
+ }
543
+ /**
544
+ * 测试配置 - 用户确认的测试配置
545
+ */
546
+ export interface TestConfig {
547
+ /** 目标文件或目录 */
548
+ target: string;
549
+ /** 测试类型列表 */
550
+ testTypes: TestType[];
551
+ /** 测试框架(AI 推荐,用户确认) */
552
+ framework: TestFramework;
553
+ /** 是否生成 UI/E2E 测试 */
554
+ includeUI: boolean;
555
+ /** 覆盖率目标 (%) */
556
+ coverageTarget?: number;
557
+ /** 测试文件输出目录 */
558
+ outputDir?: string;
559
+ /** 测试文件命名模式 */
560
+ namingPattern?: string;
561
+ /** 是否包含快照测试 */
562
+ includeSnapshots?: boolean;
563
+ /** 是否包含 Mock 数据 */
564
+ includeMocks?: boolean;
565
+ /** 额外配置选项 */
566
+ extraOptions?: Record<string, unknown>;
567
+ }
568
+ /**
569
+ * 测试用例 - 单个测试用例描述
570
+ */
571
+ export interface TestCase {
572
+ /** 测试用例 ID */
573
+ id: string;
574
+ /** 测试用例名称 */
575
+ name: string;
576
+ /** 测试类型 */
577
+ type: TestType;
578
+ /** 测试描述 */
579
+ description: string;
580
+ /** 测试文件路径(相对于项目根目录) */
581
+ filePath: string;
582
+ /** 被测试的源文件 */
583
+ sourceFile: string;
584
+ /** 被测试的函数/模块/组件 */
585
+ target: string;
586
+ /** 测试优先级 */
587
+ priority: 'P0' | 'P1' | 'P2' | 'P3';
588
+ /** 测试标签 */
589
+ tags?: string[];
590
+ /** 前置条件 */
591
+ preconditions?: string[];
592
+ /** 测试步骤 */
593
+ steps: TestStep[];
594
+ /** 预期结果 */
595
+ expectedResults: string[];
596
+ /** Mock 需求 */
597
+ mockRequirements?: MockRequirement[];
598
+ /** 测试数据 */
599
+ testData?: Record<string, unknown>;
600
+ /** 依赖的其他测试 */
601
+ dependencies?: string[];
602
+ }
603
+ /**
604
+ * 测试步骤
605
+ */
606
+ export interface TestStep {
607
+ /** 步骤序号 */
608
+ step: number;
609
+ /** 步骤描述 */
610
+ action: string;
611
+ /** 输入数据 */
612
+ input?: unknown;
613
+ /** 预期输出 */
614
+ expectedOutput?: unknown;
615
+ }
616
+ /**
617
+ * Mock 需求
618
+ */
619
+ export interface MockRequirement {
620
+ /** Mock 目标类型 */
621
+ type: 'function' | 'module' | 'api' | 'component' | 'service';
622
+ /** Mock 目标名称 */
623
+ target: string;
624
+ /** Mock 行为描述 */
625
+ behavior: string;
626
+ /** 返回值 */
627
+ returnValue?: unknown;
628
+ /** 是否需要验证调用 */
629
+ verifyCalls?: boolean;
630
+ }
631
+ /**
632
+ * 测试风格信息
633
+ */
634
+ export interface TestStyle {
635
+ /** 命名约定: describe/it vs test */
636
+ namingConvention: 'describe-it' | 'test' | 'mixed';
637
+ /** 断言库 */
638
+ assertionLibrary: 'expect' | 'assert' | 'should' | 'chai' | 'unknown';
639
+ /** 是否使用 TypeScript */
640
+ usesTypeScript: boolean;
641
+ /** 是否使用 JSX/TSX */
642
+ usesJSX: boolean;
643
+ /** 测试文件后缀 */
644
+ fileSuffix: string;
645
+ /** 测试文件位置: 同目录 vs 独立目录 */
646
+ fileLocation: 'adjacent' | 'separate';
647
+ }
648
+ /**
649
+ * 前端项目信息
650
+ */
651
+ export interface FrontendInfo {
652
+ /** 是否为前端项目 */
653
+ isFrontend: boolean;
654
+ /** 是否有 UI 组件 */
655
+ hasUIComponents: boolean;
656
+ }
657
+ /**
658
+ * 覆盖率报告
659
+ */
660
+ export interface CoverageReport {
661
+ /** 总覆盖率 */
662
+ total: number;
663
+ /** 各文件覆盖率 */
664
+ files: Array<{
665
+ path: string;
666
+ coverage: number;
667
+ uncoveredLines?: number[];
668
+ }>;
669
+ }
670
+ /**
671
+ * 测试扫描结果 - CLI 输出的原始数据
672
+ * 注意:CLI 只负责收集事实,不做推荐判断
673
+ */
674
+ export interface TestScanResult {
675
+ /** 扫描时间 */
676
+ timestamp: string;
677
+ /** 项目根目录 */
678
+ projectRoot: string;
679
+ /** 扫描目标 */
680
+ target: string;
681
+ /** 检测到的测试框架 */
682
+ frameworks: TestFrameworkInfo[];
683
+ /** 现有测试文件列表 */
684
+ existingTests: ExistingTestFile[];
685
+ /** 源文件列表(未覆盖的) */
686
+ uncoveredSources: UncoveredSourceFile[];
687
+ /** 项目类型 */
688
+ projectType: ProjectType;
689
+ /** 是否为前端项目 */
690
+ isFrontend: boolean;
691
+ /** 是否有 UI 组件 */
692
+ hasUIComponents: boolean;
693
+ /** 测试覆盖率报告(如果存在) */
694
+ coverageReport?: CoverageReport;
695
+ /** 现有测试风格(从现有测试文件推断) */
696
+ testStyle?: TestStyle;
697
+ /** 原始数据摘要 */
698
+ summary: {
699
+ /** 框架数量 */
700
+ frameworkCount: number;
701
+ /** 现有测试文件数量 */
702
+ existingTestCount: number;
703
+ /** 未覆盖源文件数量 */
704
+ uncoveredSourceCount: number;
705
+ /** 是否有测试配置 */
706
+ hasTestConfig: boolean;
707
+ /** 是否有覆盖率配置 */
708
+ hasCoverageConfig: boolean;
709
+ };
710
+ }
711
+ /**
712
+ * 现有测试文件信息
713
+ */
714
+ export interface ExistingTestFile {
715
+ /** 文件路径 */
716
+ path: string;
717
+ /** 测试类型 */
718
+ type: TestType;
719
+ /** 关联的源文件 */
720
+ sourceFile?: string;
721
+ /** 测试用例数量(如果可解析) */
722
+ testCount?: number;
723
+ /** 最后修改时间 */
724
+ lastModified?: string;
725
+ }
726
+ /**
727
+ * 未覆盖的源文件信息
728
+ */
729
+ export interface UncoveredSourceFile {
730
+ /** 文件路径 */
731
+ path: string;
732
+ /** 文件类型 */
733
+ fileType: 'module' | 'component' | 'service' | 'util' | 'class' | 'function' | 'unknown';
734
+ /** 导出的函数/类/组件 */
735
+ exports: string[];
736
+ /** 是否有对应的测试文件 */
737
+ hasTest: boolean;
738
+ /** 建议的测试类型 */
739
+ suggestedTestTypes: TestType[];
740
+ /** 复杂度指标(可选) */
741
+ complexity?: {
742
+ /** 行数 */
743
+ lines: number;
744
+ /** 函数数量 */
745
+ functions: number;
746
+ /** 圈复杂度 */
747
+ cyclomaticComplexity?: number;
748
+ };
749
+ }
750
+ /**
751
+ * 测试生成结果
752
+ */
753
+ export interface TestGenerationResult {
754
+ /** 生成时间 */
755
+ timestamp: string;
756
+ /** 关联的测试配置 */
757
+ config: TestConfig;
758
+ /** 生成的测试文件 */
759
+ files: GeneratedTestFile[];
760
+ /** 生成的测试用例 */
761
+ testCases: TestCase[];
762
+ /** 生成的 Mock 文件 */
763
+ mockFiles?: GeneratedMockFile[];
764
+ /** 生成统计 */
765
+ statistics: {
766
+ /** 测试文件数量 */
767
+ fileCount: number;
768
+ /** 测试用例数量 */
769
+ testCaseCount: number;
770
+ /** 单元测试数量 */
771
+ unitTestCount: number;
772
+ /** 集成测试数量 */
773
+ integrationTestCount: number;
774
+ /** E2E 测试数量 */
775
+ e2eTestCount: number;
776
+ /** Mock 文件数量 */
777
+ mockFileCount: number;
778
+ /** 预估覆盖率提升 */
779
+ estimatedCoverageIncrease?: number;
780
+ };
781
+ /** 运行测试的命令 */
782
+ runCommand: string;
783
+ /** 注意事项 */
784
+ notes?: string[];
785
+ }
786
+ /**
787
+ * 生成的测试文件
788
+ */
789
+ export interface GeneratedTestFile {
790
+ /** 文件路径 */
791
+ path: string;
792
+ /** 文件内容 */
793
+ content: string;
794
+ /** 测试类型 */
795
+ type: TestType;
796
+ /** 关联的源文件 */
797
+ sourceFile: string;
798
+ /** 包含的测试用例 ID 列表 */
799
+ testCaseIds: string[];
800
+ /** 是否覆盖现有文件 */
801
+ overwrites: boolean;
802
+ }
803
+ /**
804
+ * 生成的 Mock 文件
805
+ */
806
+ export interface GeneratedMockFile {
807
+ /** 文件路径 */
808
+ path: string;
809
+ /** 文件内容 */
810
+ content: string;
811
+ /** Mock 类型 */
812
+ type: 'function' | 'module' | 'api' | 'component' | 'service';
813
+ /** 描述 */
814
+ description: string;
815
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openmatrix",
3
- "version": "0.2.18",
3
+ "version": "0.2.20",
4
4
  "description": "AI Agent task orchestration system with Claude Code Skills integration",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -201,9 +201,9 @@ AskUserQuestion: `header: "确认"`, `multiSelect: false`
201
201
  | 继续 | 设计合理,继续下一部分 |
202
202
  | 修改 | 我有调整建议 |
203
203
 
204
- ## 步骤 6: 总结确认
204
+ ## 步骤 6: 总结确认 + 自动路由判断
205
205
 
206
- 所有设计部分确认后,**先在界面展示完整总结**,再用简短 AskUserQuestion 确认:
206
+ 所有设计部分确认后,**先在界面展示完整总结和路由判断**,再让用户确认:
207
207
 
208
208
  **输出总结到界面(普通文本):**
209
209
 
@@ -227,18 +227,30 @@ AskUserQuestion: `header: "确认"`, `multiSelect: false`
227
227
 
228
228
  验收标准
229
229
  - CRUD 接口完整 / 测试覆盖率 > 80%
230
+
231
+ ---
232
+ 路由判断: 标准流程 (start)
233
+ 理由: 澄清后任务明确,需完整追踪和质量门禁
230
234
  ```
231
235
 
232
- **然后让用户选择下一步:**
236
+ **AI 根据澄清结果自动判断路由:**
237
+
238
+ | 判断条件 | 路由 |
239
+ |---------|------|
240
+ | 单一改动点 + 实现路径清晰 | feature |
241
+ | 任务明确 + 需完整追踪 | start |
242
+ | 仍有多方案/需进一步设计 | 继续 brainstorm |
243
+
244
+ **然后让用户确认:**
233
245
 
234
246
  AskUserQuestion: `header: "下一步"`, `multiSelect: false`
235
- **question:** 头脑风暴完成,是否开始执行任务?
247
+ **question:** 头脑风暴完成。AI 判断路由:${route}(${reason})。确认后自动进入对应流程。
236
248
 
237
249
  | label | description |
238
250
  |-------|-------------|
239
- | 开始执行 (推荐) | 写入 tasks-input.json 并调用 /om:start |
251
+ | 确认并执行 (推荐) | 自动调用 /om:${route} |
240
252
  | 继续探索 | 还有问题需要进一步讨论 |
241
- | 仅生成计划 | 生成详细计划但不执行 |
253
+ | 仅生成文档 | 生成设计文档但不执行 |
242
254
 
243
255
  ## 步骤 7: 输出设计文档
244
256
 
@@ -300,9 +312,9 @@ AskUserQuestion: `header: "下一步"`, `multiSelect: false`
300
312
  | 开始执行 (推荐) | 写入 tasks-input.json 并调用 /om:start |
301
313
  | 修改设计 | 需要调整设计方案 |
302
314
 
303
- ## 步骤 8: 写入 tasks-input.json 并调用 /om:start
315
+ ## 步骤 8: 写入任务文件并调用对应 Skill
304
316
 
305
- 用户选择"开始执行"后:
317
+ 用户选择"确认并执行"后:
306
318
 
307
319
  1. **检测状态:**
308
320
  ```bash
@@ -314,7 +326,18 @@ ls .openmatrix/state.json 2>/dev/null
314
326
  openmatrix start --init-only
315
327
  ```
316
328
 
317
- 3. **写入 `.openmatrix/tasks-input.json`:**
329
+ 3. **根据路由判断结果写入不同文件:**
330
+
331
+ **路由为 feature 时**,写入 `.openmatrix/feature-session.json`:
332
+ ```json
333
+ {
334
+ "taskDescription": "任务描述",
335
+ "designNotes": "关键设计要点(可选)",
336
+ "startedAt": "ISO时间戳"
337
+ }
338
+ ```
339
+
340
+ **路由为 start 时**,写入 `.openmatrix/tasks-input.json`:
318
341
  ```json
319
342
  {
320
343
  "title": "任务标题",
@@ -326,16 +349,19 @@ openmatrix start --init-only
326
349
  }
327
350
  ```
328
351
 
329
- > **注意**: `quality`、`mode`、`e2eTests` 不在此写入,由 `/om:start` 的必选问题决定。
352
+ > **注意**: `quality`、`mode`、`e2eTests` 不在此写入,由对应 Skill 的必选问题决定。
330
353
 
331
- 4. **⚠️ 必须执行(不可跳过):使用 Skill 工具调用 `/om:start`**
354
+ 4. **⚠️ 必须执行(不可跳过):根据路由调用对应 Skill**
332
355
 
333
356
  ```
334
- Skill 工具: skill = "om:start"
357
+ Skill 工具:
358
+ - feature → skill = "om:feature"
359
+ - start → skill = "om:start"
335
360
  ```
336
361
 
337
- 这不是可选的 — 如果不调用 `/om:start`,任务不会开始执行。
338
- `/om:start` 会检测到已存在的 `tasks-input.json`,然后询问必选问题(质量等级、E2E、执行模式)。
362
+ 这不是可选的 — 如果不调用对应 Skill,任务不会开始执行。
363
+ - `/om:feature` 会检测已存在的 `feature-session.json`,快速进入执行
364
+ - `/om:start` 会检测已存在的 `tasks-input.json`,询问必选问题(质量等级、E2E、执行模式)
339
365
 
340
366
  </process>
341
367
 
@@ -361,6 +387,14 @@ $ARGUMENTS
361
387
  - **问题要贴合任务** — 不问泛泛的问题,而是针对具体任务深入
362
388
  - **理解目的 > 理解实现** — 先搞清楚为什么做,再讨论怎么做
363
389
 
390
+ ## 路由判断(澄清完成后自动判断)
391
+
392
+ brainstorm 澄清完成后,自动判断下一步路由:
393
+ - **feature**: 单一改动点 + 实现路径清晰 → 写入 feature-session.json,调用 /om:feature
394
+ - **start**: 任务明确但需完整追踪 → 写入 tasks-input.json,调用 /om:start
395
+
396
+ 不再让用户二次选择流程,根据澄清结果直接进入对应执行流程。
397
+
364
398
  ## 领域调研集成
365
399
 
366
400
  - 检测到垂直领域(游戏、支付、区块链等)时,主动建议 `/om:research`
@@ -437,21 +471,26 @@ $ARGUMENTS
437
471
  │ NO
438
472
 
439
473
  ┌─────────────────┐
440
- │ 总结 + 确认
474
+ │ 总结 + 路由判断
475
+ │ (自动判断 │
476
+ │ feature/start)│
441
477
  └────────┬────────┘
442
478
 
479
+ 确认执行?
480
+ │ YES
443
481
 
444
482
  ┌─────────────────┐
445
483
  │ 写入设计文档 │
446
484
  │ (docs/openmatrix/) │
447
485
  └────────┬────────┘
448
486
 
449
- 开始执行
450
-
451
-
452
- ┌─────────────────┐
453
- │ 写入 JSON
454
- │ 调用 /om:start │
455
- └─────────────────┘
487
+ ├──────┬──────────┐
488
+ │ │
489
+ feature start 仅文档
490
+ │ │ │
491
+ ▼ ▼
492
+ ┌─────────┐ ┌─────────┐ 完成
493
+ │/om:feature│ │/om:start │
494
+ └─────────┘ └─────────┘
456
495
  ```
457
496
  </notes>
package/skills/om.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: om
3
- description: "Default entry point for all development tasks. Routes to /om:feature (small), /om:start (standard), or /om:brainstorm (complex) automatically. Triggers on: implement, build, fix, create, refactor, 修复, 实现, 开发, 添加功能, new feature, 小需求, 小功能, 小改动, minor, quick, 快速, 简单, 添加按钮, 加个字段, 轻量. Use for ANY task that produces code changes — don't answer directly, route to OpenMatrix workflow."
3
+ description: "Default entry point for all development tasks. Routes to /om:feature (small), /om:start (standard), or /om:brainstorm (clarify/design) automatically. Triggers on: implement, build, fix, create, refactor, 修复, 实现, 开发, 添加功能, new feature, 小需求, 小功能, 小改动, minor, quick, 快速, 简单, 添加按钮, 加个字段, 轻量. Use for ANY task that produces code changes — don't answer directly, route to OpenMatrix workflow."
4
4
  priority: critical
5
5
  always_load: true
6
6
  ---
@@ -39,52 +39,53 @@ OpenMatrix 默认入口 — 用户无需记忆命令,直接描述任务即可
39
39
 
40
40
  **如果是文件路径,先读取文件内容作为任务描述。**
41
41
 
42
- ## Step 2: AI 评估复杂度(自动路由)
42
+ ## Step 2: AI 语义评估(推荐路由)
43
43
 
44
- **Claude 根据以下条件自动判断路由目标:**
44
+ **Claude 综合分析任务语义,给出推荐路由 + 理由:**
45
45
 
46
- ### 2.1 小需求 → `/om:feature`
46
+ ### 判断原则(不明确优先澄清)
47
47
 
48
- **核心条件(语义判断):**
49
- - 单一改动点(聚焦一个功能/组件/文件)
50
- - 无架构设计关键词("架构"、"设计"、"从零"、"重构整个")
51
- - 无多子系统描述
52
- - 或包含小需求关键词:小需求、小功能、小改动、minor、quick、快速、简单、添加按钮、加个字段、轻量
48
+ **优先级顺序:brainstorm > start > feature**
53
49
 
54
- **辅助参考(非硬性):**
55
- - 描述较短(通常 ≤ 150 字)— 长描述也可能聚焦单一改动
50
+ - **任务不明确时优先头脑风暴**,先澄清再执行
51
+ - **标准流程需要"任务足够明确"**,不是兜底选项
52
+ - **小需求需要用户明确表达轻量意图**,不是短描述就判定
56
53
 
57
- **示例:**
58
- - "给列表页添加搜索按钮" → /om:feature
59
- - "小改动:调整按钮颜色" → /om:feature
60
- - "加个字段存储用户头像" → /om:feature
54
+ **不明确的典型情况:**
55
+ - 实现方案有多种选择(登录方式、认证方案、技术栈)
56
+ - 缺少关键上下文(瓶颈在哪、目标指标、约束条件)
57
+ - 模块边界模糊(涉及哪些组件、数据流向)
58
+ - 需要先设计再执行(架构、数据模型、接口契约)
61
59
 
62
- ### 2.2 复杂任务 → `/om:brainstorm`
60
+ ### 判断维度
63
61
 
64
- **任一满足即路由:**
65
- - 包含复杂关键词:从零搭建、重构整个、迁移、架构设计、多模块、系统
66
- - 多个独立子系统("和"、"同时"、"另外"连接多个大模块)
67
- - 需要技术选型决策
68
- - 涉及非代码产出(文档、设计规范、调研报告)
62
+ | 维度 | feature | start | brainstorm |
63
+ |------|---------|-------|------------|
64
+ | 改动范围 | 单一组件/文件 | 明确模块边界 | 模糊/多模块协同 |
65
+ | 实现路径 | 显而易见 | 清晰可执行 | 需要设计/选型 |
66
+ | 上下文充分度 | 用户已说明足够 | 描述完整清晰 | 缺少关键信息 |
67
+ | 用户意图 | 明确表达"快速/简单" | 未特别强调 | 可能需要澄清 |
69
68
 
70
- **示例:**
71
- - "从零搭建后台管理系统" → /om:brainstorm
72
- - "重构整个认证模块,支持 OAuth 和 SAML" → /om:brainstorm
73
- - "设计微服务架构并实现核心模块" → /om:brainstorm
69
+ ### 推荐输出
74
70
 
75
- ### 2.3 标准任务 `/om:start`
71
+ AI 判断后输出(供 Step 3 使用):
72
+ - `recommendedRoute`: feature | start | brainstorm
73
+ - `recommendReason`: 一句话说明推荐理由
76
74
 
77
- **不符合小需求和复杂任务的,默认路由:**
78
- - 中等复杂度(单一功能但需要完整追踪)
79
- - 包含标准关键词:实现、修复、添加功能、开发(非小改动)
80
- - 需要质量门禁验证
75
+ **判断示例:**
81
76
 
82
- **示例:**
83
- - "实现用户登录功能" → /om:start
84
- - "修复登录页面的样式问题" /om:start
85
- - "添加 API 接口返回用户列表" /om:start
77
+ | 任务描述 | 推荐 | 理由 |
78
+ |---------|------|------|
79
+ | "给列表页添加搜索按钮" | feature | 用户意图明确,改动单一 |
80
+ | "小改动:调整按钮颜色" | feature | 用户表达轻量意图 |
81
+ | "实现用户登录功能" | **brainstorm** | 需澄清:登录方式、认证方案 |
82
+ | "添加 API 接口返回用户列表" | start | 实现路径清晰,无需澄清 |
83
+ | "从零搭建后台管理系统" | brainstorm | 需设计:架构、模块划分 |
84
+ | "重构认证模块支持 OAuth" | brainstorm | 需选型:OAuth provider、迁移策略 |
85
+ | "优化首页加载速度" | **brainstorm** | 缺上下文:瓶颈在哪?目标指标? |
86
+ | "修复登录页样式问题" | start | 问题明确,修复路径清晰 |
86
87
 
87
- ## Step 3: 用户确认路由(带 AI 推荐)
88
+ ## Step 3: 用户确认路由
88
89
 
89
90
  **AI 先判断推荐路由,再让用户确认:**
90
91
 
@@ -95,13 +96,13 @@ AskUserQuestion: `header: "任务流程"`, `multiSelect: false`
95
96
  | label | description |
96
97
  |-------|-------------|
97
98
  | `小需求流程 (推荐)` | 2-5 个任务块,轻量追踪,适合单一改动点 |
98
- | `标准流程` | 完整追踪,质量门禁,适合中等复杂度 |
99
- | `复杂流程` | 先设计后执行,适合架构/重构/多模块 |
99
+ | `标准流程` | 完整追踪,质量门禁,任务明确可直接执行 |
100
+ | `澄清/设计流程` | 先澄清不明确点或设计方案,再执行 |
100
101
 
101
102
  **用户选择后,调用对应 Skill:**
102
103
  - 选择 "小需求流程" → Skill("om:feature", args=任务描述)
103
104
  - 选择 "标准流程" → Skill("om:start", args=任务描述)
104
- - 选择 "复杂流程" → Skill("om:brainstorm", args=任务描述)
105
+ - 选择 "澄清/设计流程" → Skill("om:brainstorm", args=任务描述)
105
106
 
106
107
  ## Step 4: 空输入或 --help
107
108
 
@@ -113,13 +114,14 @@ Usage:
113
114
  /om <task> AI 推荐路由,用户确认后执行
114
115
  /om:feature <task> 小需求快速流程(跳过推荐)
115
116
  /om:start <task> 标准任务流程(跳过推荐)
116
- /om:brainstorm <task> 复杂任务先设计后执行(跳过推荐)
117
+ /om:brainstorm <task> 澄清不明确点或设计方案(跳过推荐)
117
118
  /om:auto <task> 全自动执行
118
119
 
119
120
  Examples:
120
121
  /om 给列表页添加搜索按钮 → AI 推荐小需求流程
121
- /om 实现用户登录功能 → AI 推荐标准流程
122
- /om 从零搭建后台系统 → AI 推荐复杂流程
122
+ /om 添加 API 接口返回用户列表 → AI 推荐标准流程(路径清晰)
123
+ /om 实现用户登录功能 → AI 推荐澄清流程(需确认方案)
124
+ /om 从零搭建后台系统 → AI 推荐设计流程
123
125
 
124
126
  Quality:
125
127
  strict - TDD + 80% coverage
@@ -143,18 +145,24 @@ $ARGUMENTS
143
145
  <examples>
144
146
  /om 给用户列表页添加搜索功能 → AI 推荐小需求流程,用户确认
145
147
  /om 小改动:调整按钮颜色 → AI 推荐小需求流程,用户确认
146
- /om 实现用户登录功能 → AI 推荐标准流程,用户确认
147
- /om 从零搭建后台系统 → AI 推荐复杂流程,用户确认
148
- /om 修复登录页面的样式问题 → AI 推荐标准流程,用户确认
148
+ /om 实现用户登录功能 → AI 推荐澄清流程(需确认方案),用户确认
149
+ /om 添加 API 接口返回用户列表 → AI 推荐标准流程(路径清晰),用户确认
150
+ /om 从零搭建后台系统 → AI 推荐设计流程,用户确认
151
+ /om 优化首页加载速度 → AI 推荐澄清流程(缺少上下文),用户确认
152
+ /om 修复登录页面的样式问题 → AI 推荐标准流程(问题明确),用户确认
149
153
  /om docs/task.md → 读取文件后 AI 推荐,用户确认
150
154
  /om → 显示帮助
151
155
  </examples>
152
156
 
153
157
  <notes>
154
158
  `/om` 是 OpenMatrix 工作的简写。路由流程:
155
- 1. AI 评估任务复杂度,给出推荐路由和原因
159
+ 1. AI 评估任务明确度,不明确时优先推荐澄清/设计
156
160
  2. AskUserQuestion 让用户确认(标注推荐选项)
157
161
  3. 用户选择后调用对应 skill
158
162
 
163
+ **推荐倾向:** 标准流程需要"任务足够明确"才推荐,不明确时先澄清。
164
+
165
+ **brainstorm 后自动路由:** 澄清完成后,AI 根据澄清结果自动判断是 feature 还是 start,不再让用户二次选择。
166
+
159
167
  可用命令: `/om:brainstorm`, `/om:start`, `/om:feature`, `/om:auto`, `/om:status`, `/om:meeting`, `/om:report`, `/om:resume`, `/om:retry`, `/om:research`, `/om:approve`, `/om:check`, `/om:debug`
160
168
  </notes>