@kkeve/suite 0.0.1 → 0.0.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.
Files changed (152) hide show
  1. package/README.md +53 -0
  2. package/dist/bin/keve.d.ts +13 -0
  3. package/dist/bin/keve.js +164 -0
  4. package/dist/commands/auth-update.d.ts +16 -0
  5. package/dist/commands/auth-update.js +88 -0
  6. package/dist/commands/clean.d.ts +10 -0
  7. package/dist/commands/clean.js +78 -0
  8. package/dist/commands/config.d.ts +17 -0
  9. package/dist/commands/config.js +99 -0
  10. package/dist/commands/init.d.ts +15 -0
  11. package/dist/commands/init.js +292 -0
  12. package/dist/commands/report.d.ts +12 -0
  13. package/dist/commands/report.js +159 -0
  14. package/dist/commands/run.d.ts +29 -0
  15. package/dist/commands/run.js +417 -0
  16. package/dist/commands/test.d.ts +12 -0
  17. package/dist/commands/test.js +102 -0
  18. package/dist/commands/vitest.d.ts +14 -0
  19. package/dist/commands/vitest.js +166 -0
  20. package/dist/config.d.ts +109 -0
  21. package/dist/config.js +291 -0
  22. package/dist/core/action-log-writer.d.ts +47 -0
  23. package/dist/{tools/write-file.js → core/action-log-writer.js} +42 -26
  24. package/dist/core/auth.d.ts +17 -0
  25. package/dist/core/auth.js +224 -0
  26. package/dist/core/cdp-resolver.d.ts +5 -0
  27. package/dist/core/cdp-resolver.js +93 -0
  28. package/dist/core/generateReport/report.d.ts +19 -0
  29. package/dist/core/generateReport/report.js +91 -0
  30. package/dist/core/generateReport/reportData.d.ts +215 -0
  31. package/dist/core/generateReport/reportData.js +735 -0
  32. package/dist/core/global-setup.d.ts +6 -0
  33. package/dist/core/global-setup.js +113 -0
  34. package/dist/core/keve-aspect.d.ts +54 -0
  35. package/dist/core/keve-aspect.js +52 -0
  36. package/dist/core/keve-decorators.d.ts +51 -0
  37. package/dist/core/keve-decorators.js +95 -0
  38. package/dist/core/keve-registry.d.ts +38 -0
  39. package/dist/core/keve-registry.js +25 -0
  40. package/dist/core/keve-report.d.ts +27 -0
  41. package/dist/core/keve-report.js +357 -0
  42. package/dist/core/keve-test.d.ts +36 -0
  43. package/dist/core/keve-test.js +364 -0
  44. package/dist/core/learned-actions.d.ts +24 -0
  45. package/dist/core/learned-actions.js +65 -0
  46. package/dist/core/pw-config.d.ts +19 -0
  47. package/dist/core/pw-config.js +180 -0
  48. package/dist/index.d.ts +8 -23
  49. package/dist/index.js +36 -43
  50. package/dist/page-agent/agent.d.ts +129 -0
  51. package/dist/page-agent/agent.js +585 -0
  52. package/dist/page-agent/hooks.d.ts +13 -0
  53. package/dist/page-agent/hooks.js +218 -0
  54. package/dist/page-agent/tools.d.ts +29 -0
  55. package/dist/page-agent/tools.js +297 -0
  56. package/doc/README.md +124 -0
  57. package/doc/agents/keve-dev-test-agent.md +140 -0
  58. package/doc/agents/keve-test-agent.md +178 -0
  59. package/doc/asserts//346/265/213/350/257/225/345/220/204/351/230/266/346/256/265/350/257/264/346/230/216.png +0 -0
  60. package/doc/keve-agent-demo.html +370 -0
  61. package/doc/skills/keve-bddcase-gen/SKILL.md +332 -0
  62. package/doc/skills/keve-bddcase-gen/references/test-case-rules.md +91 -0
  63. package/doc/skills/keve-bddcase-gen/references/test-cases-example.md +103 -0
  64. package/doc/skills/keve-component-gen/SKILL.md +255 -0
  65. package/doc/skills/keve-component-gen/references/component-mock-strategy.md +74 -0
  66. package/doc/skills/keve-component-gen/references/component-model-template.md +98 -0
  67. package/doc/skills/keve-component-gen/references/component-test-template.md +100 -0
  68. package/doc/skills/keve-component-gen/references/vue-test-utils-guide.md +91 -0
  69. package/doc/skills/keve-e2e-gen/SKILL.md +179 -0
  70. package/doc/skills/keve-e2e-gen/references/code-analysis-guide.md +208 -0
  71. package/doc/skills/keve-e2e-gen/references/decisions.md +36 -0
  72. package/doc/skills/keve-e2e-gen/references/pom-generation-guide.md +140 -0
  73. package/doc/skills/keve-e2e-gen/references/script-generation-guide.md +236 -0
  74. package/doc/skills/keve-e2e-gen/references/test-auditor-guide.md +189 -0
  75. package/doc/skills/keve-e2e-gen/scripts/extract-components.sh +85 -0
  76. package/doc/skills/keve-e2e-gen/scripts/inject-testids.sh +95 -0
  77. package/doc/skills/keve-static-analysis/SKILL.md +362 -0
  78. package/doc/skills/keve-static-analysis/references/codegraph-analysis-guide.md +108 -0
  79. package/doc/skills/keve-static-analysis/references/git-impact-analysis.md +81 -0
  80. package/doc/skills/keve-static-analysis/references/lint-fix-guide.md +69 -0
  81. package/doc/skills/keve-static-analysis/references/runtime-risk-patterns.md +92 -0
  82. package/doc/skills/keve-static-analysis/references/security-scan-guide.md +32 -0
  83. package/doc/skills/keve-static-analysis/references/ts-error-patterns.md +98 -0
  84. package/doc/skills/keve-static-analysis/references/vue-security-guide.md +72 -0
  85. package/doc/skills/keve-test-eval/SKILL.md +78 -0
  86. package/doc/skills/keve-test-eval/references/common-fix-guide.md +166 -0
  87. package/doc/skills/keve-test-eval/references/confidence-data-guide.md +78 -0
  88. package/doc/skills/keve-test-eval/references/fix-loop-guide.md +67 -0
  89. package/doc/skills/keve-unit-gen/SKILL.md +203 -0
  90. package/doc/skills/keve-unit-gen/references/boundary-conditions.md +78 -0
  91. package/doc/skills/keve-unit-gen/references/unit-mock-strategy.md +71 -0
  92. package/doc/skills/keve-unit-gen/references/unit-test-template.md +105 -0
  93. package/package.json +47 -25
  94. package/dist/agent/factory.d.ts +0 -25
  95. package/dist/agent/factory.js +0 -99
  96. package/dist/agent/index.d.ts +0 -3
  97. package/dist/agent/index.js +0 -7
  98. package/dist/agent/loader.d.ts +0 -22
  99. package/dist/agent/loader.js +0 -117
  100. package/dist/agent/types.d.ts +0 -9
  101. package/dist/agent/types.js +0 -2
  102. package/dist/agent-loop/complete-task.d.ts +0 -28
  103. package/dist/agent-loop/complete-task.js +0 -70
  104. package/dist/agent-loop/index.d.ts +0 -16
  105. package/dist/agent-loop/index.js +0 -26
  106. package/dist/agent-loop/loop.d.ts +0 -42
  107. package/dist/agent-loop/loop.js +0 -282
  108. package/dist/agent-loop/runtime.d.ts +0 -40
  109. package/dist/agent-loop/runtime.js +0 -163
  110. package/dist/agent-loop/types.d.ts +0 -161
  111. package/dist/agent-loop/types.js +0 -105
  112. package/dist/context/index.d.ts +0 -8
  113. package/dist/context/index.js +0 -29
  114. package/dist/context/tokenCalculation.d.ts +0 -55
  115. package/dist/context/tokenCalculation.js +0 -95
  116. package/dist/context/truncation.d.ts +0 -67
  117. package/dist/context/truncation.js +0 -142
  118. package/dist/context/types.d.ts +0 -7
  119. package/dist/context/types.js +0 -27
  120. package/dist/llm/OpenAIClient.d.ts +0 -31
  121. package/dist/llm/OpenAIClient.js +0 -455
  122. package/dist/llm/constants.d.ts +0 -2
  123. package/dist/llm/constants.js +0 -6
  124. package/dist/llm/errors.d.ts +0 -25
  125. package/dist/llm/errors.js +0 -51
  126. package/dist/llm/index.d.ts +0 -49
  127. package/dist/llm/index.js +0 -158
  128. package/dist/llm/types.d.ts +0 -124
  129. package/dist/llm/types.js +0 -2
  130. package/dist/llm/utils.d.ts +0 -29
  131. package/dist/llm/utils.js +0 -284
  132. package/dist/skill/frontmatter-parser.d.ts +0 -50
  133. package/dist/skill/frontmatter-parser.js +0 -152
  134. package/dist/skill/index.d.ts +0 -12
  135. package/dist/skill/index.js +0 -17
  136. package/dist/skill/loader.d.ts +0 -96
  137. package/dist/skill/loader.js +0 -256
  138. package/dist/tools/ask-user.d.ts +0 -8
  139. package/dist/tools/ask-user.js +0 -47
  140. package/dist/tools/bash.d.ts +0 -47
  141. package/dist/tools/bash.js +0 -213
  142. package/dist/tools/edit-file.d.ts +0 -9
  143. package/dist/tools/edit-file.js +0 -76
  144. package/dist/tools/glob.d.ts +0 -8
  145. package/dist/tools/glob.js +0 -101
  146. package/dist/tools/grep.d.ts +0 -10
  147. package/dist/tools/grep.js +0 -76
  148. package/dist/tools/index.d.ts +0 -24
  149. package/dist/tools/index.js +0 -47
  150. package/dist/tools/read-files.d.ts +0 -8
  151. package/dist/tools/read-files.js +0 -81
  152. package/dist/tools/write-file.d.ts +0 -8
package/doc/README.md ADDED
@@ -0,0 +1,124 @@
1
+ 标准测试金字塔(Martin Fowler / Mike Cohn 经典模型)
2
+ ▲
3
+ ╱ ╲
4
+ ╱ ╲
5
+ ╱ E2E ╲ ← 少量:跨页面完整用户旅程
6
+ ╱ 测试 ╲ 运行慢、成本高、脆弱
7
+ ╱━━━━━━━━━╲
8
+ ╱ ╲
9
+ ╱ 集成测试 ╲ ← 中量:模块间交互、API 调用
10
+ ╱ (Integration) ╲ 模拟依赖、验证契约
11
+ ╱━━━━━━━━━━━━━━━━━╲
12
+ ╱ ╲
13
+ ╱ 单元测试 ╲ ← 大量:纯函数、工具方法
14
+ ╱ (Unit Test) ╲ 毫秒级、确定性、低成本
15
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━╲
16
+ ╱ ╲
17
+ ╱ 静态分析 (Static) ╲ ← 最底层:TypeScript、ESLint、Prettier
18
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╲ 不运行代码、零成本、实时反馈
19
+
20
+ 原则:越底层越多、越快、越稳定;越顶层越少、越慢、越脆弱。
21
+
22
+
23
+ 前端测试金字塔(细化版)
24
+ 对于前端项目,经典三层太粗,需要细化:
25
+ ▲
26
+ ╱ ╲
27
+ ╱ ╲
28
+ ╱ E2E ╲ ← Playwright/Cypress
29
+ ╱ 测试 ╲ 跨页面用户旅程
30
+ ╱━━━━━━━━━━╲ 5~10 条
31
+ ╱ ╲
32
+ ╱ 视觉回归 ╲ ← 截图对比
33
+ ╱ (Visual) ╲ UI 一致性
34
+ ╱━━━━━━━━━━━━━━━━╲
35
+ ╱ ╲
36
+ ╱ 组件集成测试 ╲ ← Testing Library
37
+ ╱ (Integration) ╲ 组件 + 子组件 + Store
38
+ ╱━━━━━━━━━━━━━━━━━━━━━━╲ 模拟 API、验证交互流
39
+ ╱ ╲
40
+ ╱ 组件单元测试 ╲ ← Vitest + Vue Test Utils
41
+ ╱ (Component Unit) ╲ 孤立组件、mock 依赖
42
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━━━━━╲ Props in → 渲染 out
43
+ ╱ ╲
44
+ ╱ 纯函数单元测试 ╲ ← Vitest
45
+ ╱ (Pure Unit) ╲ utils / hooks / store
46
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╲ 无 DOM 依赖
47
+ ╱ ╲
48
+ ╱ 静态分析 (Static) ╲ ← TypeScript + ESLint
49
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╲ 编译期捕获类型/规范错误
50
+
51
+ Kent C. Dodds 的"测试奖杯"模型
52
+ 前端社区更流行的其实是 Testing Trophy,因为前端 E2E 成本极高,集成测试才是 ROI 最高的层次。
53
+ 🏆
54
+ ╱ ╲
55
+ ╱E2E╲ ← 极少:仅冒烟 / 关键路径
56
+ ╱━━━━━╲ 3~5
57
+ 条
58
+ ╱ ╲
59
+ ╱ 集成测试 ╲ ← 最多:组件集成 + API mock
60
+ ╱ (Integration) ╲ ROI 最高、信心最强
61
+ ╱━━━━━━━━━━━━━━━━╲
62
+ ╱ ╲
63
+ ╱ 单元测试 ╲ ← 补充:纯逻辑、边界条件
64
+ ╱ (Unit) ╲ 快但不验证用户行为
65
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━╲
66
+ ╱ ╲
67
+ ╱ 静态分析 (Static) ╲ ← 基座:零成本捕获大量错误
68
+ ╱━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╲
69
+
70
+ 核心区别:奖杯模型中集成测试最宽(而非单元测试最宽),因为:
71
+ - 单元测试只验证"零件",集成测试验证"装配"
72
+ - 前端 bug 多出在组件协作、API 对接、状态管理,而非纯函数逻辑
73
+ - 集成测试的信心度远高于单元测试(更接近真实使用)
74
+
75
+
76
+ 当前keve-agent生成的那就应该是前端集成测试(Integration Test)
77
+
78
+ 传统 E2E(后端视角):
79
+ 用户浏览器 ──────────────────────────────→ 数据库
80
+ ┃ 前端 API 后端 ┃
81
+ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛
82
+ "端到端" = 从用户操作到数据库落盘,全链路
83
+
84
+ keve-agent 做的测试(前端视角):
85
+ 用户浏览器 ─────────→ 前端 devServer
86
+ ┃ 前端 ┃
87
+ ┗━━━━━━━━━━━━━━━━━━━━━━━━┛
88
+ "端" = 只到前端渲染层,后端是 mock/stub
89
+
90
+
91
+
92
+ ┌────────────────────────────────────────────────────────────────────────┐
93
+ │ 静态分析能力谱(三阶段) │
94
+ ├─────────────┬─────────────────────────────────────────────────────────┤
95
+ │ Phase 1 │ tsc 类型检查 + eslint 规范(P0 必修,自动修复) │
96
+ │ tsc+eslint │ │
97
+ │ │ ✅ 类型不匹配、缺失属性、隐式 any、缺失导入 │
98
+ │ │ ✅ 可空类型误用、未使用变量/参数 │
99
+ │ │ ✅ 缺失依赖项、等号误赋值、console.log │
100
+ │ │ ✅ 缺失返回值、一致性规范(命名/排序) │
101
+ ├─────────────┼─────────────────────────────────────────────────────────┤
102
+ │ Phase 2 │ Code-Graph 关系分析(P1 建议修,只输出不自动改) │
103
+ │ Code-Graph │ │
104
+ │ (Tree-sitter)│ ✅ 循环依赖检测(A→B→C→A) │
105
+ │ │ ✅ 幽灵依赖检测(import 了但 package.json 没声明) │
106
+ │ │ ✅ 死代码检测(无调用者的非导出函数) │
107
+ │ │ ✅ 架构层级违规(utils 不应 import components) │
108
+ │ │ ✅ 变更影响范围(改了函数 X,哪些模块受影响) │
109
+ ├─────────────┼─────────────────────────────────────────────────────────┤
110
+ │ Phase 3 │ Git 变更分析(P2 信息参考,不自动改) │
111
+ │ Git 分析 │ │
112
+ │ │ ✅ 当前 diff 修改了哪些文件/函数 │
113
+ │ │ ✅ 变更影响范围(结合 Phase 2 计算受影响的调用链) │
114
+ │ │ ✅ 热点文件(30天内高频变更 = 不稳定区域) │
115
+ │ │ ✅ 新增文件(可能缺少测试覆盖) │
116
+ ├─────────────┼─────────────────────────────────────────────────────────┤
117
+ │ ❌ 未覆盖 │ 安全漏洞 → keve-static-analysis Phase 4(已规划) │
118
+ │ │ XSS/SQL注入/ReDoS/硬编码敏感信息/npm audit │
119
+ │ │ 运行时风险 → Phase 4(已规划) │
120
+ │ │ 内存泄漏/事件监听器未移除/Promise rejection │
121
+ │ │ 代码克隆 → Code-Graph AST 比对 + AI 模式匹配(可覆盖)│
122
+ │ │ 圈/认知复杂度 → Code-Graph 获取函数体 + AI 计算决策点 │
123
+ │ │ → 大部分未覆盖项可通过 Code-Graph + AI 间接覆盖 │
124
+ └─────────────┴─────────────────────────────────────────────────────────┘
@@ -0,0 +1,140 @@
1
+ ---
2
+ name: keve-dev-test-agent
3
+ description: 开发阶段测试流水线编排代理。协调 static-analysis → unit-gen → component-gen 三技能按序执行,支持阶段检测、断点续跑、覆盖率摘要输出。
4
+ tools:
5
+ - Bash(shell:*)
6
+ - Bash(npx:*)
7
+ - Bash(npm:*)
8
+ - Bash(node:*)
9
+ - Bash(git:*)
10
+ ---
11
+
12
+ # KEVE 开发阶段测试编排代理
13
+
14
+ > 本代理是**薄编排层**,负责:检测起点、创建执行计划、调度技能、输出覆盖率摘要。
15
+ > 不包含技能细节——不做类型修复、不写测试脚本、不做组件分析。
16
+
17
+ ## 触发方式
18
+
19
+ 用户输入 `/keve-dev-test` 指令触发,跳过意图识别直接进入本流程。
20
+
21
+ 适用场景:**开发阶段**,需要快速反馈(秒级),不涉及 E2E 测试。
22
+
23
+ ---
24
+
25
+ ## 整体流程
26
+
27
+ ```
28
+ 1. 阶段检测 → 确定触发模式(dev),创建 test-plan.yaml
29
+ 2. 调度 keve-static-analysis → 修类型/lint 错误
30
+ 3. 调度 keve-unit-gen → 生成单测 + coverage.yaml
31
+ 4. 调度 keve-component-gen → 生成组件模型 + 组件测试 + coverage.yaml
32
+ 5. 输出覆盖率摘要 + 缺口列表
33
+ ```
34
+
35
+ ---
36
+
37
+ ## 阶段检测
38
+
39
+ ### Step 0: 读取或创建 test-plan.yaml
40
+
41
+ 1. **已有 test-plan.yaml**:
42
+ - 读取 `context.trigger` 和各 phase.status
43
+ - 输出:"检测到已有执行计划,当前进度:"
44
+ - 列出各阶段状态(✅ completed / 🔄 in_progress / ⏳ pending / ⏭️ skipped)
45
+ - 询问用户:"从断点继续 / 重新开始?"
46
+
47
+ 2. **无 test-plan.yaml**:
48
+ - 根据 trigger=dev 创建新 test-plan.yaml
49
+ - 输出执行计划,等待用户确认
50
+
51
+ ### 阶段自动检测
52
+
53
+ ```
54
+ if 用户指定 MR ID:
55
+ → 建议使用 /keve-test (keve-test-agent)
56
+ → 确认后继续或切换
57
+
58
+ elif git diff 有未提交变更:
59
+ → 开发阶段 → trigger=dev
60
+
61
+ else:
62
+ → 询问用户意图(开发测试 / MR 提测 / 其他)
63
+ ```
64
+
65
+ ### Dev 模式的 Phase 模板
66
+
67
+ ```yaml
68
+ phases:
69
+ - { id: static, skill: keve-static-analysis, status: pending }
70
+ - { id: unit, skill: keve-unit-gen, status: pending }
71
+ - { id: component, skill: keve-component-gen, status: pending }
72
+ ```
73
+
74
+ ---
75
+
76
+ ## 调度技能
77
+
78
+ | 步骤 | 调度目标 | use_skill 名称 | 输入 | 期望输出 |
79
+ |------|----------|---------------|------|----------|
80
+ | Step 2 | 静态分析 | `keve-static-analysis` | 项目源码 | 0 type error + 0 lint error |
81
+ | Step 3 | 单测生成 | `keve-unit-gen` | src/utils/ + hooks/ | `keve_test_spec/util/__test__/*.test.ts` + `coverage.yaml` |
82
+ | Step 4 | 组件测试生成 | `keve-component-gen` | src/components/ | `keve_test_spec/component/models/*.model.ts` + `__test__/*.test.ts` + `coverage.yaml` |
83
+
84
+ **每个步骤完成后**:
85
+ 1. 更新 test-plan.yaml 中对应 phase 的 status
86
+ 2. 确认产物已生成
87
+ 3. 进入下一步
88
+
89
+ ---
90
+
91
+ ## 断点续跑
92
+
93
+ 如果 test-plan.yaml 中存在 `status = in_progress` 或 `status = pending` 的 phase:
94
+ 1. 找到第一个未完成的 phase
95
+ 2. 从该 phase 开始继续执行
96
+ 3. 跳过已 completed 的 phase
97
+
98
+ ---
99
+
100
+ ## 输出摘要
101
+
102
+ 所有 phase 完成后,输出:
103
+
104
+ ```
105
+ ━━━ KEVE 开发阶段测试报告 ━━━
106
+
107
+ 静态分析: ✅ 通过 (0 type error, 0 lint error)
108
+ 单元测试: ✅ 13/15 函数已覆盖 (87%)
109
+ 组件测试: 🔄 12/20 组件已覆盖 (60%)
110
+
111
+ 覆盖率缺口:
112
+ ❌ src/utils/validator.ts — 未生成测试
113
+ ❌ src/components/ToolManagement.vue — 未生成测试
114
+ ⚠️ src/utils/format.ts:formatCurrency — 缺少 NaN输入 场景
115
+
116
+ 下一步:
117
+ - 运行 npx vitest run --coverage 查看详细覆盖率
118
+ - 修复缺口后重新运行 /keve-dev-test
119
+ ```
120
+
121
+ ---
122
+
123
+ ## 与 keve-test-agent 的关系
124
+
125
+ | 维度 | keve-dev-test-agent | keve-test-agent |
126
+ |------|---------------------|-----------------|
127
+ | 适用阶段 | 开发中 | MR 提测前 |
128
+ | 编排 | static → unit → component | bddcase-gen → e2e-gen → test-eval |
129
+ | 反馈速度 | 秒级 | 分钟级 |
130
+ | 产出 | 覆盖率 + 缺口列表 | E2E 报告 + 评估 |
131
+ | test-plan trigger | dev | mr |
132
+
133
+ ---
134
+
135
+ ## 禁止事项
136
+
137
+ - 不做代码分析、POM 设计、定位器生成
138
+ - 不写测试脚本
139
+ - 不运行 Playwright E2E 测试
140
+ - 不自行决定修复策略(只根据 phase status 决策调度方向)
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: keve-test-agent
3
+ description: KEVE 测试流水线编排代理。用户输入 /keve-test 指令触发,协调 case-generation → script-generation → test-eval 三技能按序执行,并控制修复循环(errorCategory=script → 修复 → 重跑 → 再评估,≤3轮)。
4
+ tools:
5
+ - Bash(shell:*)
6
+ - Bash(npx:*)
7
+ - Bash(npm:*)
8
+ - Bash(node:*)
9
+ - Bash(git:*)
10
+ ---
11
+
12
+ # KEVE 测试流水线编排代理
13
+
14
+ > 本代理是**薄编排层**,只做三件事:检测起点、调度技能、控制循环。
15
+ > 不包含技能细节——不做代码分析、不写 POM/脚本、不定位具体错误、不修改源码。
16
+ > 目录结构参见 keve_test_spec/keve.yaml 顶部注释(Single Source of Truth)
17
+
18
+ ## 触发方式
19
+
20
+ 用户输入 `/keve-test-agent` 指令触发,跳过意图识别直接进入本流程。
21
+
22
+ ---
23
+
24
+ ## 整体流程
25
+
26
+ ```
27
+ 1. 阶段检测 → 确定起点,输出执行计划,等待用户确认
28
+ 2. 调度 keve-bddcase-gen → 生成 test-cases.yaml
29
+ 3. 调度 keve-e2e-gen → 分析代码 + 打标 + 生成 POM + 生成 spec
30
+ 4. 调度 keve-test-eval(传入 taskDir)→ 执行测试 → 读 confidence-data.jsonl 评估
31
+ 5. 根据评估结果决策下一步:
32
+ ├─ 全通过 → 生成最终报告 → 结束
33
+ ├─ errorCategory=env → 向用户确认 → 按确认结果处理
34
+ ├─ errorCategory=assert + thought 提示需求变更 → 更新 test-cases.yaml → 重调度
35
+ ├─ errorCategory=assert + thought 提示应用Bug → 记录 Bug → 继续
36
+ └─ errorCategory=script → 进入修复循环
37
+ 6. 修复循环(script 类,最多 3 轮):
38
+ 调度 script-generation 修复 → 调度 test-eval --last-failed → 再评估 → ≤3 轮
39
+ 7. 止损 → 生成最终报告并标注"无法自动修复"
40
+ ```
41
+
42
+ ---
43
+
44
+ ## 阶段检测
45
+
46
+ ### Step 0: 读取或创建 test-plan.yaml
47
+
48
+ 1. **已有 test-plan.yaml**:
49
+ - 读取 `context.trigger` 和各 phase.status
50
+ - 输出:"检测到已有执行计划,当前进度:"
51
+ - 列出各阶段状态(✅ completed / 🔄 in_progress / ⏳ pending / ⏭️ skipped)
52
+ - 询问用户:"从断点继续 / 重新开始?"
53
+
54
+ 2. **无 test-plan.yaml**:
55
+ - 根据 trigger=mr 创建新 test-plan.yaml
56
+ - MR 模式包含:static → unit → component → e2e-case → e2e-script → eval
57
+ - 开发阶段已完成的 static/unit/component 可标记 skipped
58
+ - 输出执行计划,等待用户确认
59
+
60
+ ### 产物扫描(补充)
61
+
62
+ 首次执行或增量执行前,扫描已有产物确定起点:
63
+
64
+ | 产物 | 检测路径 | 存在时行为 |
65
+ |------|----------|------------|
66
+ | KEVE 配置 | `keve_test_spec/keve-test.config.ts` | → 跳过配置初始化 |
67
+ | 测试用例 | `.keve/{branch}/test-cases.yaml` | → 跳过用例生成 |
68
+ | POM | `keve_test_spec/e2e/poms/*.ts` | → 跳过 POM 生成 |
69
+ | E2E 脚本 | `.keve/{branch}/keve_test_spec/*.spec.ts` | → 跳过脚本生成 |
70
+ | 单测 | `keve_test_spec/util/__test__/*.test.ts` | → 跳过单测生成 |
71
+ | 组件测试 | `keve_test_spec/component/__test__/*.test.ts` | → 跳过组件测试生成 |
72
+ | 执行结果 | `.keve/{branch}/test-artifacts/round-N/` | → 跳过执行 |
73
+
74
+ **检测后动作**:
75
+ 1. 输出执行计划:**"将执行 Phase X, Y, Z"**
76
+ 2. 等待用户确认后开始执行
77
+
78
+ ---
79
+
80
+ ## 调度技能
81
+
82
+ 按顺序调用三个 skill,每个 skill 通过 `use_skill` 加载:
83
+
84
+ | 步骤 | 调度目标 | use_skill 名称 | 输入 | 期望输出 |
85
+ |------|----------|---------------|------|----------|
86
+ | Step 2 | 用例生成 | `keve-bddcase-gen` | 需求文档 + 代码变更 | `.keve/task_xxx/test-cases.yaml` |
87
+ | Step 3 | 脚本生成 | `keve-e2e-gen` | taskDir + 用例定义 | POM + spec(内部严格按 分析→打标→定位器→POM→脚本 顺序执行) |
88
+ | Step 4 | 测试执行 + 评估 | `keve-test-eval` | `taskDir`(任务目录路径) | `confidence-data.jsonl` + 评估推荐 |
89
+
90
+ > 每个步骤完成后确认产物已生成,再进入下一步。
91
+
92
+ ---
93
+
94
+ ## 评估结果决策
95
+
96
+ test-eval 执行后,读 `confidence-data.jsonl`,按 `data` + `errorCategory` 组合决策:
97
+
98
+ | data | errorCategory | 编排层决策 |
99
+ |------|--------------|-----------|
100
+ | 通过 | pass | 无需处理,继续下一批或结束 |
101
+ | 跳过 | env | **必须暂停** → ask_user_questions 确认:修环境/加mock/标记跳过 |
102
+ | 跳过 | script | 进入修复循环 |
103
+ | 不通过 | script | 进入修复循环 |
104
+ | 不通过 | assert | 读 thought:脚本缺陷→修 / 应用Bug→记录 / 需求变更→更新 test-cases.yaml |
105
+ | 待确认 | * | ask_user_questions 确认 |
106
+
107
+ ---
108
+
109
+ ## 修复循环控制
110
+
111
+ 当 confidence-data.jsonl 中存在 `errorCategory=script` 的失败用例时:
112
+
113
+ ```
114
+ 修复循环(最多 3 轮):
115
+
116
+ Round N:
117
+ → 调度 keve-e2e-gen 按 thought 描述修复 POM/spec
118
+ → 调度 keve-test-eval 执行 --last-failed
119
+ → 读新一轮 confidence-data.jsonl
120
+ → script 类用例全部通过 → 记录修复成功 → 结束循环
121
+ → 仍有 script 类 → 进入 Round N+1
122
+ → 达到 3 轮 → 停止循环
123
+ ```
124
+
125
+ **止损条件**:
126
+ - 3 轮修复后通过数无增加 → 停止,标记"无法自动修复"
127
+ - 所有用例正常 + 置信度达标 → 停止,生成最终报告
128
+
129
+ **每轮结果天然隔离**:
130
+ - `$KEVE_TASK_DIR/test-artifacts/round-N/` 独立输出
131
+ - `latest` 符号链接始终指向最新轮次
132
+ - 在 `run-state.yaml` 中记录每轮 fixes
133
+
134
+ ---
135
+
136
+ ## env 类确认
137
+
138
+ 当 confidence-data.jsonl 中存在 `errorCategory=env` 的跳过用例时:
139
+
140
+ **必须暂停,向用户确认**:
141
+
142
+ | 选项 | 说明 | 后续动作 |
143
+ |------|------|----------|
144
+ | 修复环境 | 用户自行修复环境问题 | → 修复后重新调度执行 |
145
+ | 添加 mock | 由 script-generation 在 test-data.ts 中添加 mock 数据 | → 重新调度脚本生成 + 执行 |
146
+ | 标记跳过 | 暂不测试该用例 | → 更新 test-cases.yaml status=skipped → 继续 |
147
+
148
+ ---
149
+
150
+ ## 最终报告
151
+
152
+ 所有用例处理完毕后(无论是否全部通过):
153
+
154
+ ```bash
155
+ # Round N 报告生成
156
+ KEVE_TASK_DIR=.keve/mr-868-temp npx keve report --config=keve_test_spec/keve-test.config.ts
157
+ ```
158
+
159
+ 向用户展示报告路径和通过率摘要。
160
+
161
+ ---
162
+
163
+ ## 禁止事项
164
+
165
+ 本代理**不做**以下事情(由各 skill 负责):
166
+
167
+ - 不做代码分析、POM 设计、定位器生成
168
+ - 不写测试脚本
169
+ - 不分析根因、计算置信度
170
+ - 不生成 HTML 报告
171
+ - 不自行决定修复策略(只根据 errorCategory 和 thought 决策调度方向)
172
+
173
+ 执行命令时的**硬性禁止**:
174
+
175
+ - **禁止添加 `--reporter=list` 或任何 `--reporter=...` CLI 参数** — Playwright 的 `--reporter` 是覆盖式的,会完全替换 config 中定义的 reporter 数组
176
+ - **禁止 `2>&1` 重定向** — 会将 Playwright 的 JSON reporter 输出混入 stdout
177
+
178
+ 本代理**只做**调度决策:什么时候调谁、调几次、什么时候停。