@epoint-testtech/ep-stage-skill 0.0.4-alpha.1 → 0.0.6

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 (213) hide show
  1. package/SKILL.md +27 -27
  2. package/codex-skill/ep-stage/glue-create-project/SKILL.md +223 -206
  3. package/codex-skill/ep-stage/glue-generate-testcase/SKILL.md +275 -274
  4. package/codex-skill/ep-stage/glue-generate-testcase/examples/observable-testcase.json +40 -40
  5. package/codex-skill/ep-stage/glue-generate-testcase/references/testcase-schema.md +95 -112
  6. package/codex-skill/ep-stage/glue-generate-testcase/references/testcase-tpl.md +72 -72
  7. package/codex-skill/ep-stage/glue-run-test/SKILL.md +295 -289
  8. package/codex-skill/ep-stage/glue-run-test/references/ai-runtime-loop.md +30 -0
  9. package/codex-skill/ep-stage/glue-run-test/references/crud-pipeline.md +132 -145
  10. package/codex-skill/ep-stage/glue-run-test/references/gap-review-protocol.md +44 -43
  11. package/codex-skill/ep-stage/glue-run-test/references/harness-principles.md +46 -46
  12. package/codex-skill/ep-stage/glue-run-test/references/playwright-cli-odav.md +166 -0
  13. package/codex-skill/ep-stage/glue-run-test/scripts/extract-page-elements-eval.mjs +233 -0
  14. package/codex-skill/ep-stage/glue-run-test/scripts/generate-crud-spec.mjs +149 -149
  15. package/codex-skill/ep-stage/page-element-scan/SKILL.md +91 -0
  16. package/codex-skill/ep-stage/page-element-scan/evals/evals.json +37 -0
  17. package/codex-skill/ep-stage/page-element-scan/evals/fixtures/sample-list-page.html +85 -0
  18. package/codex-skill/ep-stage/page-element-scan/references/pagination-controls.md +153 -0
  19. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements-eval.mjs +233 -0
  20. package/codex-skill/ep-stage/page-element-scan/scripts/extract-page-elements.mjs +298 -0
  21. package/codex-skill/ep-stage/page-element-scan/scripts/scan-page.mjs +749 -0
  22. package/codex-skill/ep-stage/recording-to-glue/SKILL.md +28 -28
  23. package/codex-skill/ep-stage/scripts/validate-skill.mjs +98 -95
  24. package/dist/src/cli/generate-testcase.d.ts +17 -51
  25. package/dist/src/cli/generate-testcase.d.ts.map +1 -1
  26. package/dist/src/cli/generate-testcase.js +74 -181
  27. package/dist/src/cli/index.d.ts +3 -2
  28. package/dist/src/cli/index.d.ts.map +1 -1
  29. package/dist/src/cli/index.js +51 -17
  30. package/dist/src/cli/run.d.ts +136 -29
  31. package/dist/src/cli/run.d.ts.map +1 -1
  32. package/dist/src/cli/run.js +507 -65
  33. package/dist/src/cli/spec.d.ts +17 -13
  34. package/dist/src/cli/spec.d.ts.map +1 -1
  35. package/dist/src/cli/spec.js +59 -33
  36. package/dist/src/contracts/crud-business-module.d.ts +6 -0
  37. package/dist/src/contracts/crud-business-module.d.ts.map +1 -1
  38. package/dist/src/contracts/glue-contract-v1.d.ts +98 -0
  39. package/dist/src/contracts/glue-contract-v1.d.ts.map +1 -0
  40. package/dist/src/contracts/glue-contract-v1.js +9 -0
  41. package/dist/src/contracts/observable-chain.d.ts +4 -0
  42. package/dist/src/contracts/observable-chain.d.ts.map +1 -1
  43. package/dist/src/extractors/code-list-json5.d.ts +192 -0
  44. package/dist/src/extractors/code-list-json5.d.ts.map +1 -0
  45. package/dist/src/extractors/code-list-json5.js +91 -0
  46. package/dist/src/extractors/html-page.d.ts +9 -0
  47. package/dist/src/extractors/html-page.d.ts.map +1 -1
  48. package/dist/src/extractors/html-page.js +26 -2
  49. package/dist/src/extractors/prd-extractor.d.ts +70 -0
  50. package/dist/src/extractors/prd-extractor.d.ts.map +1 -0
  51. package/dist/src/extractors/prd-extractor.js +248 -0
  52. package/dist/src/generators/agent-inferred-workflow-script.js +66 -66
  53. package/dist/src/generators/stage-skeleton-script.d.ts +87 -20
  54. package/dist/src/generators/stage-skeleton-script.d.ts.map +1 -1
  55. package/dist/src/generators/stage-skeleton-script.js +647 -238
  56. package/dist/src/index.d.ts +2 -2
  57. package/dist/src/index.d.ts.map +1 -1
  58. package/dist/src/index.js +1 -1
  59. package/dist/src/normalizers/crud-contract.d.ts +3 -0
  60. package/dist/src/normalizers/crud-contract.d.ts.map +1 -1
  61. package/dist/src/normalizers/crud-contract.js +3 -0
  62. package/dist/src/runtime/ai-runtime-trace.d.ts +88 -0
  63. package/dist/src/runtime/ai-runtime-trace.d.ts.map +1 -0
  64. package/dist/src/runtime/ai-runtime-trace.js +119 -0
  65. package/dist/src/testcase/button-interaction-inference.d.ts +37 -0
  66. package/dist/src/testcase/button-interaction-inference.d.ts.map +1 -0
  67. package/dist/src/testcase/button-interaction-inference.js +385 -0
  68. package/dist/src/testcase/contract-testcase-assembler.d.ts +44 -0
  69. package/dist/src/testcase/contract-testcase-assembler.d.ts.map +1 -0
  70. package/dist/src/testcase/contract-testcase-assembler.js +806 -0
  71. package/dist/src/testcase/prd-button-mapper.d.ts +72 -0
  72. package/dist/src/testcase/prd-button-mapper.d.ts.map +1 -0
  73. package/dist/src/testcase/prd-button-mapper.js +148 -0
  74. package/dist/src/testcase/runtime-context.d.ts +9 -0
  75. package/dist/src/testcase/runtime-context.d.ts.map +1 -0
  76. package/dist/src/testcase/runtime-context.js +1 -0
  77. package/dist/src/testcase/test-access.d.ts +38 -0
  78. package/dist/src/testcase/test-access.d.ts.map +1 -0
  79. package/dist/src/testcase/test-access.js +106 -0
  80. package/dist/src/testcase/testcase-execution-fields.d.ts +10 -0
  81. package/dist/src/testcase/testcase-execution-fields.d.ts.map +1 -0
  82. package/dist/src/testcase/testcase-execution-fields.js +1 -0
  83. package/dist/src/testcase/testcase-generator.d.ts.map +1 -1
  84. package/dist/src/testcase/testcase-generator.js +6 -0
  85. package/dist/src/testcase/testcase-markdown.d.ts +11 -0
  86. package/dist/src/testcase/testcase-markdown.d.ts.map +1 -0
  87. package/dist/src/testcase/testcase-markdown.js +181 -0
  88. package/dist/src/testcase/testcase-skeleton.d.ts +4 -0
  89. package/dist/src/testcase/testcase-skeleton.d.ts.map +1 -1
  90. package/dist/src/testcase/testcase-spec-assembly.d.ts +4 -0
  91. package/dist/src/testcase/testcase-spec-assembly.d.ts.map +1 -1
  92. package/dist/src/testcase/testcase-v1-draft.d.ts +58 -0
  93. package/dist/src/testcase/testcase-v1-draft.d.ts.map +1 -0
  94. package/dist/src/testcase/testcase-v1-draft.js +13 -0
  95. package/dist/src/validation/contract.d.ts +14 -0
  96. package/dist/src/validation/contract.d.ts.map +1 -0
  97. package/dist/src/validation/contract.js +132 -0
  98. package/dist/src/validation/credentials.d.ts +7 -2
  99. package/dist/src/validation/credentials.d.ts.map +1 -1
  100. package/dist/src/validation/credentials.js +15 -4
  101. package/dist/src/validation/index.d.ts +1 -0
  102. package/dist/src/validation/index.d.ts.map +1 -1
  103. package/dist/src/validation/index.js +1 -0
  104. package/dist/src/validation/testcase.d.ts +9 -7
  105. package/dist/src/validation/testcase.d.ts.map +1 -1
  106. package/dist/src/validation/testcase.js +181 -34
  107. package/docs/README.md +124 -134
  108. package/docs/mvp-usage-guide.md +298 -298
  109. package/examples/schemeresource-observable-docs/schemeresource.context.md +20 -20
  110. package/examples/schemeresource.module-hints.json +38 -38
  111. package/examples/schemeresource.observable.code_list.md +37 -37
  112. package/examples/zwplace-observable-docs/zwplace.context.md +16 -16
  113. package/examples/zwplace-placecategory-validation.json +29 -29
  114. package/examples/zwplace.module-hints.json +69 -69
  115. package/examples/zwplace.observable.code_list.md +37 -37
  116. package/package.json +2 -2
  117. package/codex-skill/ep-stage/.omc/state/sessions/d636ad35-5fc9-4d5e-85b0-2bcad7d86ee5/pre-tool-advisory-throttle.json +0 -10
  118. package/dist/test/cli/extract-contract.test.d.ts +0 -2
  119. package/dist/test/cli/extract-contract.test.d.ts.map +0 -1
  120. package/dist/test/cli/extract-contract.test.js +0 -32
  121. package/dist/test/cli/generate-testcase-inference.test.d.ts +0 -2
  122. package/dist/test/cli/generate-testcase-inference.test.d.ts.map +0 -1
  123. package/dist/test/cli/generate-testcase-inference.test.js +0 -63
  124. package/dist/test/cli/generate-testcase-paths.test.d.ts +0 -2
  125. package/dist/test/cli/generate-testcase-paths.test.d.ts.map +0 -1
  126. package/dist/test/cli/generate-testcase-paths.test.js +0 -165
  127. package/dist/test/cli/generate-testcase-requirements.test.d.ts +0 -2
  128. package/dist/test/cli/generate-testcase-requirements.test.d.ts.map +0 -1
  129. package/dist/test/cli/generate-testcase-requirements.test.js +0 -229
  130. package/dist/test/cli/generate-testcase.test.d.ts +0 -2
  131. package/dist/test/cli/generate-testcase.test.d.ts.map +0 -1
  132. package/dist/test/cli/generate-testcase.test.js +0 -130
  133. package/dist/test/cli/index.test.d.ts +0 -2
  134. package/dist/test/cli/index.test.d.ts.map +0 -1
  135. package/dist/test/cli/index.test.js +0 -113
  136. package/dist/test/cli/probe.test.d.ts +0 -2
  137. package/dist/test/cli/probe.test.d.ts.map +0 -1
  138. package/dist/test/cli/probe.test.js +0 -31
  139. package/dist/test/cli/run.test.d.ts +0 -2
  140. package/dist/test/cli/run.test.d.ts.map +0 -1
  141. package/dist/test/cli/run.test.js +0 -149
  142. package/dist/test/cli/spec-boundary.test.d.ts +0 -2
  143. package/dist/test/cli/spec-boundary.test.d.ts.map +0 -1
  144. package/dist/test/cli/spec-boundary.test.js +0 -198
  145. package/dist/test/cli/spec.test.d.ts +0 -2
  146. package/dist/test/cli/spec.test.d.ts.map +0 -1
  147. package/dist/test/cli/spec.test.js +0 -196
  148. package/dist/test/code-list.test.d.ts +0 -2
  149. package/dist/test/code-list.test.d.ts.map +0 -1
  150. package/dist/test/code-list.test.js +0 -39
  151. package/dist/test/crud-contract.test.d.ts +0 -2
  152. package/dist/test/crud-contract.test.d.ts.map +0 -1
  153. package/dist/test/crud-contract.test.js +0 -799
  154. package/dist/test/gap-inference.test.d.ts +0 -2
  155. package/dist/test/gap-inference.test.d.ts.map +0 -1
  156. package/dist/test/gap-inference.test.js +0 -597
  157. package/dist/test/generalization.test.d.ts +0 -2
  158. package/dist/test/generalization.test.d.ts.map +0 -1
  159. package/dist/test/generalization.test.js +0 -73
  160. package/dist/test/inference/module-hints-inference.test.d.ts +0 -2
  161. package/dist/test/inference/module-hints-inference.test.d.ts.map +0 -1
  162. package/dist/test/inference/module-hints-inference.test.js +0 -25
  163. package/dist/test/inference/source-analysis.test.d.ts +0 -2
  164. package/dist/test/inference/source-analysis.test.d.ts.map +0 -1
  165. package/dist/test/inference/source-analysis.test.js +0 -23
  166. package/dist/test/material-inventory.test.d.ts +0 -2
  167. package/dist/test/material-inventory.test.d.ts.map +0 -1
  168. package/dist/test/material-inventory.test.js +0 -154
  169. package/dist/test/observable-chain.test.d.ts +0 -2
  170. package/dist/test/observable-chain.test.d.ts.map +0 -1
  171. package/dist/test/observable-chain.test.js +0 -123
  172. package/dist/test/observable-pipeline.test.d.ts +0 -2
  173. package/dist/test/observable-pipeline.test.d.ts.map +0 -1
  174. package/dist/test/observable-pipeline.test.js +0 -470
  175. package/dist/test/page-structure.test.d.ts +0 -2
  176. package/dist/test/page-structure.test.d.ts.map +0 -1
  177. package/dist/test/page-structure.test.js +0 -45
  178. package/dist/test/scenario-inference.test.d.ts +0 -2
  179. package/dist/test/scenario-inference.test.d.ts.map +0 -1
  180. package/dist/test/scenario-inference.test.js +0 -73
  181. package/dist/test/stage-context.test.d.ts +0 -2
  182. package/dist/test/stage-context.test.d.ts.map +0 -1
  183. package/dist/test/stage-context.test.js +0 -395
  184. package/dist/test/testcase-generator.test.d.ts +0 -2
  185. package/dist/test/testcase-generator.test.d.ts.map +0 -1
  186. package/dist/test/testcase-generator.test.js +0 -276
  187. package/dist/test/testcase-skeleton.test.d.ts +0 -2
  188. package/dist/test/testcase-skeleton.test.d.ts.map +0 -1
  189. package/dist/test/testcase-skeleton.test.js +0 -185
  190. package/dist/test/testcase-spec-assembly.test.d.ts +0 -2
  191. package/dist/test/testcase-spec-assembly.test.d.ts.map +0 -1
  192. package/dist/test/testcase-spec-assembly.test.js +0 -105
  193. package/dist/test/util/credentials.test.d.ts +0 -2
  194. package/dist/test/util/credentials.test.d.ts.map +0 -1
  195. package/dist/test/util/credentials.test.js +0 -64
  196. package/dist/test/util/i18n-testcase.test.d.ts +0 -2
  197. package/dist/test/util/i18n-testcase.test.d.ts.map +0 -1
  198. package/dist/test/util/i18n-testcase.test.js +0 -119
  199. package/dist/test/util/softlink.test.d.ts +0 -2
  200. package/dist/test/util/softlink.test.d.ts.map +0 -1
  201. package/dist/test/util/softlink.test.js +0 -82
  202. package/dist/test/validation/credentials.test.d.ts +0 -2
  203. package/dist/test/validation/credentials.test.d.ts.map +0 -1
  204. package/dist/test/validation/credentials.test.js +0 -72
  205. package/dist/test/validation/projects-index.test.d.ts +0 -2
  206. package/dist/test/validation/projects-index.test.d.ts.map +0 -1
  207. package/dist/test/validation/projects-index.test.js +0 -48
  208. package/dist/test/validation/testcase.test.d.ts +0 -2
  209. package/dist/test/validation/testcase.test.d.ts.map +0 -1
  210. package/dist/test/validation/testcase.test.js +0 -129
  211. package/dist/vitest.config.d.ts +0 -3
  212. package/dist/vitest.config.d.ts.map +0 -1
  213. package/dist/vitest.config.js +0 -7
package/docs/README.md CHANGED
@@ -1,134 +1,124 @@
1
- # @epoint-testtech/ep-stage-skill
2
-
3
- > 胶水编码链路 Agent Skill — 解析上游物料,按契约生成可执行测试脚本
4
-
5
- ## 定位
6
-
7
- `ep-stage-skill` 是 **ep-stage 生态的 AI 驱动层**,作为 Agent Skill 嵌入胶水编码链路。它解析上游物料(PRD、code_list、HTML、Java Action),根据槽位信息契约按图索骥,获取槽位信息后组装 `stage-create --mode glue` 创建的骨架项目中的代码骨架,最终生成可以真实执行的 Playwright 测试脚本。
8
-
9
- ## 外发形式
10
-
11
- AI Agent 可发现的 Skill 入口(Claude Code 扫 `.claude/skills/`、Codex 扫 `.agents/skills/`,均 symlink 到包内源):
12
-
13
- ```text
14
- .claude/skills/{glue-create-project, glue-generate-testcase, glue-run-test, recording-to-glue}
15
- .agents/skills/{glue-create-project, glue-generate-testcase, glue-run-test, recording-to-glue}
16
- → packages/ep-stage-skill/codex-skill/ep-stage/<skill>/
17
- ```
18
-
19
- ## 链路
20
-
21
- ```text
22
- 上游物料(PRD / code_list / HTML / Java Action)
23
- -> 解析上游物料,提取 crud-business-module/v1 契约
24
- -> 根据槽位信息契约按图索骥,获取槽位信息
25
- -> 组装 stage-create glue 骨架项目中的代码骨架
26
- -> 生成 CrudFlowSlots spec
27
- -> 落袋到 stage-create 脚手架项目
28
- ```
29
-
30
- ## CLI
31
-
32
- ```bash
33
- # 可观测默认入口(推荐)
34
- pnpm --filter @epoint-testtech/ep-stage-skill run:gap-pipeline -- \
35
- --code-list <code_list.md>
36
-
37
- # 生成契约
38
- pnpm --filter @epoint-testtech/ep-stage-skill generate:crud-contract -- \
39
- --module-id <模块ID> \
40
- --docs <上游文档目录> \
41
- --code-list <code_list.md> \
42
- --webapp <前端 HTML 目录> \
43
- --java-actions <Java Action 目录> \
44
- --hints packages/ep-stage-skill/examples/<module>.module-hints.json \
45
- --out output/<module>.crud.contract.json
46
-
47
- # 生成测试脚本
48
- pnpm --filter @epoint-testtech/ep-stage-skill generate:playwright-tests -- \
49
- --contract output/<module>.crud.contract.json \
50
- --out <glue项目>/src/tests/<name>.spec.ts \
51
- --menu "一级菜单>二级菜单" \
52
- --testcase <glue项目>/testcases/<module>.glue-testcase.json
53
- ```
54
-
55
- `run:gap-pipeline` 的默认业务输入收口到 `code_list.md`。建议在该文件中声明:
56
-
57
- ```md
58
- knowledgeRoot: /abs/path/to/knowledge-project/xxx
59
- menu: 一级菜单>二级菜单
60
-
61
- `_docs/.../spec.yaml`
62
- `src/main/webapp/.../*.html`
63
- `src/main/java/.../*Action.java`
64
- `_docs/.../*.module-hints.json`
65
- ```
66
-
67
- 说明:
68
-
69
- - `knowledgeRoot`:上游物料根目录,用于解析 `code_list.md` 中的相对路径。
70
- - `menu` / `menuPath`:系统菜单路由,不是文件路径;缺失时链路会生成候选菜单并停在人工确认 gate。
71
- - `--docs` / `--webapp` / `--java-actions` / `--hints` / `--menu` / `--project-dir`:仍保留,但定位为开发调试覆盖参数。
72
-
73
- 当前验收主线只锚定 `zwplace`,其唯一上游扎口是:
74
-
75
- ```text
76
- knowledge-project/epoint-web-v9.5.2/_docs/code_list.md
77
- ```
78
-
79
- 由于主仓 `knowledge-project` 只读,仓内另提供一个“模拟交互补齐后回写”的**可写镜像**:
80
-
81
- ```text
82
- packages/ep-stage-skill/examples/zwplace.observable.code_list.md
83
- ```
84
-
85
- 这个镜像不修改主仓只读 `knowledge-project/.../_docs/code_list.md`,而是把 `knowledgeRoot`、`menu`、文档物料和
86
- `ModuleHints` 写入单独的可写 `code_list.md`,用于默认入口验证、交互补齐回写验证,以及只读真相源无法直接落盘时的 e2e 联调。
87
-
88
- 不要把脚手架项目中带出的说明信息当作上游本源;当前 skill 的默认入口和业务真相源仍然是 `code_list.md`。
89
-
90
- 如果后续要验证“不同系统的普通 CRUD 泛化”,应直接由用户补充第二个真实业务样本的 `code_list.md`,再复用同一条 `run:gap-pipeline -- --code-list <path>` 链路;不要把脚手架项目中的说明信息当作第二个业务样本。
91
-
92
- 当前 `run:gap-pipeline` TTY 环境下已支持对默认入口缺失字段做轻量交互补齐:
93
-
94
- - `material-inventory` gate:补 `knowledgeRoot`、`moduleId`、`webappDir`、`javaActionsDir`、`hintsPath`、`menu`
95
- - `menu` gate:补 `menu`
96
-
97
- 若目标 `code_list.md` 是可写文件,补齐结果会按当前格式回写;若目标位于主仓只读
98
- `knowledge-project/...`,补齐结果只对本次运行生效,不会写回受保护物料。
99
-
100
- 真实系统 E2E 约束:
101
-
102
- - 禁止无头模式作为真实系统验收方式;真实系统验证必须使用 `--headless false`。
103
- - 必须通过 `packages/ep-stage-skill/codex-skill/ep-stage` 对应 skill / `run:gap-pipeline` 入口执行,不接受绕开 skill 的自由式 Playwright 回放作为当前验收证据。
104
- - 运行过程中需要人为观察页面、登录、弹窗和业务副作用;trace / report 负责补证,不替代人工观察。
105
-
106
- 当链路已走到 Playwright / glue-report 尾段但真实系统环境不可用时,`playwright-execution` trace 会把失败归类为
107
- `environment_unavailable`,并尽量补充 `.env` 中 `LOGIN_SYSTEM_URL` 的轻量环境预检证据(例如 `curl -I: Empty reply from server`),
108
- 避免把登录环境空响应误判成 stage-glue 代码缺陷。
109
-
110
- ## 开发
111
-
112
- ```bash
113
- pnpm build
114
- pnpm test
115
- pnpm typecheck
116
- ```
117
-
118
- ## Gap Inference
119
-
120
- `ep-stage-skill` 会先生成 CRUD + Export 可覆盖范围,再对当前模块的页面按钮、行操作和弹窗动作做 coverage diff。
121
-
122
- - CRUD + Export 已覆盖动作不会进入 gap。
123
- - 只有按钮文本不足以生成测试。
124
- - `ModuleHints.customWorkflows` 可以补充自定义工作流的业务意图和断言预期。
125
- - 真实页面定位补证由 `e2e/glue-code-mvp` 的 gap-executor 试点 runner 执行。
126
-
127
- ## 生态关系
128
-
129
- ```text
130
- ep-stage-skill(AI 驱动 / 解析 + 组装)
131
- ├── 消费 stage-core(定位器、自动填充)
132
- ├── 消费 stage-create glue 骨架(skeletons)
133
- └── 产出测试脚本 → 落袋到 stage-create 项目
134
- ```
1
+ # @epoint-testtech/ep-stage-skill
2
+
3
+ > ep-stage 胶水编码 Skill 与 CLI 从 `code_list.json5` 生成用例、契约、脚本任务并驱动执行闭环
4
+
5
+ ## 定位
6
+
7
+ `ep-stage-skill` 是 **ep-stage 生态的 AI 驱动层**。它同时提供:
8
+
9
+ - 面向 Claude Code / Codex 的 Skill 文案与执行剧本。
10
+ - 面向确定性处理的 TypeScript CLI。
11
+ - 上游物料抽取、契约生成、用例装配、spec 组装、AI Runtime 任务准备和执行报告衔接能力。
12
+
13
+ 当前正式用户链路以三个 Skill 为入口:
14
+
15
+ ```text
16
+ /glue-create-project -> /glue-generate-testcase -> /glue-run-test
17
+ ```
18
+
19
+ ## Skill 外发形式
20
+
21
+ AI Agent 可发现的 Skill 入口通过双目录 symlink 暴露:
22
+
23
+ ```text
24
+ .claude/skills/{glue-create-project, glue-generate-testcase, glue-run-test, recording-to-glue}
25
+ .agents/skills/{glue-create-project, glue-generate-testcase, glue-run-test, recording-to-glue}
26
+ -> packages/ep-stage-skill/codex-skill/ep-stage/<skill>/
27
+ ```
28
+
29
+ 用户行为文案以 `packages/ep-stage-skill/codex-skill/ep-stage/*/SKILL.md` 为准。
30
+
31
+ ## 当前链路
32
+
33
+ ```text
34
+ 需求目录/_docs/code_list.json5
35
+ -> testcase 子命令解析物料、提取契约、生成 testcase
36
+ -> testcase.json5 + testcase.md + credentials.template.json5 + .ep-stage/contract.json5
37
+ -> spec / prepare-tasks 子命令组装 glue 骨架并生成 AI Runtime tasks
38
+ -> Agent 使用真实页面 O-D-A-V 产出 ai-snippets.json5
39
+ -> run 子命令合并 resolved snippet 并执行完整 spec
40
+ -> glue-report / repair-report
41
+ ```
42
+
43
+ ## CLI 子命令
44
+
45
+ ```bash
46
+ # 生成用例、契约、审阅视图和凭据模板
47
+ pnpm --filter @epoint-testtech/ep-stage-skill cli -- testcase \
48
+ --code-list <需求目录/_docs/code_list.json5> \
49
+ --tests-dir <glue项目>/src/tests/<需求名> \
50
+ --requirement-dir <需求目录/_docs> \
51
+ --project-dir <glue项目> \
52
+ --direct-url <待测列表页直达 URL>
53
+
54
+ # 基于 testcase.json5 + contract.json5 生成初始 glue spec
55
+ pnpm --filter @epoint-testtech/ep-stage-skill cli -- spec \
56
+ --testcase <glue项目>/src/tests/<需求名>/testcase.json5 \
57
+ --out <glue项目>/src/tests/<需求名>/crud.spec.ts
58
+
59
+ # 准备执行任务:缺 spec 时自动补组装 glue 骨架,并输出 AI Runtime tasks
60
+ pnpm --filter @epoint-testtech/ep-stage-skill cli -- prepare-tasks \
61
+ --testcase <glue项目>/src/tests/<需求名>/testcase.json5
62
+
63
+ # 合并 Agent 产出的 ai-snippets.json5 并执行完整 spec
64
+ pnpm --filter @epoint-testtech/ep-stage-skill cli -- run \
65
+ --testcase <glue项目>/src/tests/<需求名>/testcase.json5 \
66
+ --ai-snippets <glue项目>/src/tests/<需求名>/.ep-stage/ai-snippets.json5 \
67
+ --headless false
68
+ ```
69
+
70
+ > 正常用户不需要直接运行这些命令;Skill 会按步骤包装调用。开发调试时可用 `pnpm --filter @epoint-testtech/ep-stage-skill cli -- <subcommand>` 直接验证 CLI 行为。
71
+
72
+ ## 输入与产物
73
+
74
+ ### 输入
75
+
76
+ `testcase` 子命令的正式输入是需求目录下的:
77
+
78
+ ```text
79
+ _docs/code_list.json5
80
+ ```
81
+
82
+ `code_list.json5` 只记录上游研发对需求和出码产物的结构化总结,不应写入测试执行结果、最终 Playwright locator、账号密码或运行态页面观察。
83
+
84
+ ### 产物
85
+
86
+ | 产物 | 说明 |
87
+ |------|------|
88
+ | `testcase.json5` | 用例事实源,后续 `/glue-run-test` 的入口 |
89
+ | `testcase.md` | 人工审阅视图,每次重跑会按 `testcase.json5` 重新渲染 |
90
+ | `credentials.template.json5` | 凭据模板 |
91
+ | `credentials.json5` | 实际测试凭据,由人工填写或交互生成,通常不提交 |
92
+ | `.ep-stage/contract.json5` | 下游消费契约,记录可信槽位、证据和未解析项 |
93
+ | `.ep-stage/inference-trace.json` | 用例生成过程账本 |
94
+ | `.ep-stage/ai-runtime-trace.json5` | run 阶段任务和结果账本 |
95
+ | `.ep-stage/ai-snippets.json5` | Agent Runtime 产出的 resolved snippets |
96
+ | `.ep-stage/repair-runs/<round>/repair-report.md` | 执行失败时的修补建议 |
97
+
98
+ ## 关键约束
99
+
100
+ - `code_list.json5` 是上游输入,不反灌测试契约、运行结果或账号密码。
101
+ - `contract.json5` 中每个非平凡字段都应有来源;无法确认的字段进入 `unresolvedSlots`。
102
+ - 生成策略只使用 `glue` / `ai`;阻断场景用 `coverageStatus: blocked` 表达。
103
+ - `glue-run-test` 不重新钻探上游物料,只消费 `testcase.json5` `.ep-stage/contract.json5`。
104
+ - AI Runtime 只合并 `status="resolved"` 的 snippet;缺 resolved 结果时停止并写 `needs_review`,不追加占位代码。
105
+ - 真实系统执行必须使用有界面模式,便于人工观察运行态推理和业务副作用。
106
+
107
+ ## 开发
108
+
109
+ ```bash
110
+ pnpm build
111
+ pnpm test
112
+ pnpm typecheck
113
+ ```
114
+
115
+ ## 生态关系
116
+
117
+ ```text
118
+ ep-stage-skill(Skill + CLI)
119
+ ├── 消费 stage-create glue 模板项目
120
+ ├── 消费 stage-core 基础能力
121
+ ├── 读取需求目录 _docs/code_list.json5
122
+ ├── 产出 testcase / contract / trace / spec / snippets
123
+ └── 驱动 glue-report 与 repair-report 闭环
124
+ ```