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.
- package/dist/cli/commands/test.d.ts +20 -0
- package/dist/cli/commands/test.js +216 -0
- package/dist/cli/index.js +2 -0
- package/dist/test/context-analyzer.d.ts +76 -0
- package/dist/test/context-analyzer.js +778 -0
- package/dist/test/generator.d.ts +17 -0
- package/dist/test/generator.js +403 -0
- package/dist/types/index.d.ts +309 -0
- package/package.json +1 -1
- package/skills/brainstorm.md +61 -22
- package/skills/om.md +53 -45
- package/skills/test.md +719 -0
package/dist/types/index.d.ts
CHANGED
|
@@ -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
package/skills/brainstorm.md
CHANGED
|
@@ -201,9 +201,9 @@ AskUserQuestion: `header: "确认"`, `multiSelect: false`
|
|
|
201
201
|
| 继续 | 设计合理,继续下一部分 |
|
|
202
202
|
| 修改 | 我有调整建议 |
|
|
203
203
|
|
|
204
|
-
## 步骤 6: 总结确认
|
|
204
|
+
## 步骤 6: 总结确认 + 自动路由判断
|
|
205
205
|
|
|
206
|
-
|
|
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
|
-
|
|
|
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:
|
|
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.
|
|
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`
|
|
352
|
+
> **注意**: `quality`、`mode`、`e2eTests` 不在此写入,由对应 Skill 的必选问题决定。
|
|
330
353
|
|
|
331
|
-
4. **⚠️
|
|
354
|
+
4. **⚠️ 必须执行(不可跳过):根据路由调用对应 Skill**
|
|
332
355
|
|
|
333
356
|
```
|
|
334
|
-
Skill 工具:
|
|
357
|
+
Skill 工具:
|
|
358
|
+
- feature → skill = "om:feature"
|
|
359
|
+
- start → skill = "om:start"
|
|
335
360
|
```
|
|
336
361
|
|
|
337
|
-
这不是可选的 —
|
|
338
|
-
`/om:
|
|
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
|
-
|
|
454
|
-
|
|
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 (
|
|
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
|
-
###
|
|
46
|
+
### 判断原则(不明确优先澄清)
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
- 单一改动点(聚焦一个功能/组件/文件)
|
|
50
|
-
- 无架构设计关键词("架构"、"设计"、"从零"、"重构整个")
|
|
51
|
-
- 无多子系统描述
|
|
52
|
-
- 或包含小需求关键词:小需求、小功能、小改动、minor、quick、快速、简单、添加按钮、加个字段、轻量
|
|
48
|
+
**优先级顺序:brainstorm > start > feature**
|
|
53
49
|
|
|
54
|
-
|
|
55
|
-
-
|
|
50
|
+
- **任务不明确时优先头脑风暴**,先澄清再执行
|
|
51
|
+
- **标准流程需要"任务足够明确"**,不是兜底选项
|
|
52
|
+
- **小需求需要用户明确表达轻量意图**,不是短描述就判定
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
60
|
-
-
|
|
54
|
+
**不明确的典型情况:**
|
|
55
|
+
- 实现方案有多种选择(登录方式、认证方案、技术栈)
|
|
56
|
+
- 缺少关键上下文(瓶颈在哪、目标指标、约束条件)
|
|
57
|
+
- 模块边界模糊(涉及哪些组件、数据流向)
|
|
58
|
+
- 需要先设计再执行(架构、数据模型、接口契约)
|
|
61
59
|
|
|
62
|
-
###
|
|
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
|
-
|
|
71
|
+
AI 判断后输出(供 Step 3 使用):
|
|
72
|
+
- `recommendedRoute`: feature | start | brainstorm
|
|
73
|
+
- `recommendReason`: 一句话说明推荐理由
|
|
76
74
|
|
|
77
|
-
|
|
78
|
-
- 中等复杂度(单一功能但需要完整追踪)
|
|
79
|
-
- 包含标准关键词:实现、修复、添加功能、开发(非小改动)
|
|
80
|
-
- 需要质量门禁验证
|
|
75
|
+
**判断示例:**
|
|
81
76
|
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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:
|
|
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
|
-
- 选择 "
|
|
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
|
|
122
|
-
/om
|
|
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
|
|
148
|
-
/om
|
|
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>
|