@epoint-testtech/ep-stage-skill 0.0.3-alpha.1

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 (151) hide show
  1. package/SKILL.md +27 -0
  2. package/codex-skill/ep-stage/create-project/SKILL.md +59 -0
  3. package/codex-skill/ep-stage/glue-test/SKILL.md +258 -0
  4. package/codex-skill/ep-stage/glue-test/references/crud-pipeline.md +139 -0
  5. package/codex-skill/ep-stage/glue-test/references/gap-review-protocol.md +43 -0
  6. package/codex-skill/ep-stage/glue-test/references/harness-principles.md +46 -0
  7. package/codex-skill/ep-stage/glue-test/scripts/generate-crud-spec.mjs +149 -0
  8. package/codex-skill/ep-stage/glue-testcase/SKILL.md +31 -0
  9. package/codex-skill/ep-stage/glue-testcase/examples/observable-testcase.json +40 -0
  10. package/codex-skill/ep-stage/glue-testcase/references/testcase-schema.md +67 -0
  11. package/codex-skill/ep-stage/recording-to-glue/SKILL.md +27 -0
  12. package/codex-skill/ep-stage/scripts/validate-skill.mjs +73 -0
  13. package/dist/src/capability/coverage-diff.d.ts +34 -0
  14. package/dist/src/capability/coverage-diff.d.ts.map +1 -0
  15. package/dist/src/capability/coverage-diff.js +91 -0
  16. package/dist/src/capability/page-structure.d.ts +31 -0
  17. package/dist/src/capability/page-structure.d.ts.map +1 -0
  18. package/dist/src/capability/page-structure.js +50 -0
  19. package/dist/src/capability/scenario-inference.d.ts +36 -0
  20. package/dist/src/capability/scenario-inference.d.ts.map +1 -0
  21. package/dist/src/capability/scenario-inference.js +114 -0
  22. package/dist/src/cli/generate-crud-contract.d.ts +2 -0
  23. package/dist/src/cli/generate-crud-contract.d.ts.map +1 -0
  24. package/dist/src/cli/generate-crud-contract.js +77 -0
  25. package/dist/src/cli/generate-playwright-tests.d.ts +30 -0
  26. package/dist/src/cli/generate-playwright-tests.d.ts.map +1 -0
  27. package/dist/src/cli/generate-playwright-tests.js +81 -0
  28. package/dist/src/cli/run-gap-pipeline.d.ts +256 -0
  29. package/dist/src/cli/run-gap-pipeline.d.ts.map +1 -0
  30. package/dist/src/cli/run-gap-pipeline.js +1468 -0
  31. package/dist/src/context/stage-context.d.ts +63 -0
  32. package/dist/src/context/stage-context.d.ts.map +1 -0
  33. package/dist/src/context/stage-context.js +297 -0
  34. package/dist/src/contracts/crud-business-module.d.ts +645 -0
  35. package/dist/src/contracts/crud-business-module.d.ts.map +1 -0
  36. package/dist/src/contracts/crud-business-module.js +1 -0
  37. package/dist/src/contracts/gap-inference.d.ts +213 -0
  38. package/dist/src/contracts/gap-inference.d.ts.map +1 -0
  39. package/dist/src/contracts/gap-inference.js +11 -0
  40. package/dist/src/contracts/observable-chain.d.ts +250 -0
  41. package/dist/src/contracts/observable-chain.d.ts.map +1 -0
  42. package/dist/src/contracts/observable-chain.js +1 -0
  43. package/dist/src/extractors/code-list.d.ts +40 -0
  44. package/dist/src/extractors/code-list.d.ts.map +1 -0
  45. package/dist/src/extractors/code-list.js +225 -0
  46. package/dist/src/extractors/html-page.d.ts +67 -0
  47. package/dist/src/extractors/html-page.d.ts.map +1 -0
  48. package/dist/src/extractors/html-page.js +195 -0
  49. package/dist/src/extractors/java-action.d.ts +8 -0
  50. package/dist/src/extractors/java-action.d.ts.map +1 -0
  51. package/dist/src/extractors/java-action.js +53 -0
  52. package/dist/src/extractors/spec-yaml.d.ts +28 -0
  53. package/dist/src/extractors/spec-yaml.d.ts.map +1 -0
  54. package/dist/src/extractors/spec-yaml.js +29 -0
  55. package/dist/src/gap-planner/action-candidates.d.ts +9 -0
  56. package/dist/src/gap-planner/action-candidates.d.ts.map +1 -0
  57. package/dist/src/gap-planner/action-candidates.js +66 -0
  58. package/dist/src/gap-planner/list-gap-workflows.d.ts +17 -0
  59. package/dist/src/gap-planner/list-gap-workflows.d.ts.map +1 -0
  60. package/dist/src/gap-planner/list-gap-workflows.js +47 -0
  61. package/dist/src/gap-planner/plan-agent-workflows.d.ts +26 -0
  62. package/dist/src/gap-planner/plan-agent-workflows.d.ts.map +1 -0
  63. package/dist/src/gap-planner/plan-agent-workflows.js +116 -0
  64. package/dist/src/gap-planner/skeleton-coverage.d.ts +9 -0
  65. package/dist/src/gap-planner/skeleton-coverage.d.ts.map +1 -0
  66. package/dist/src/gap-planner/skeleton-coverage.js +41 -0
  67. package/dist/src/gap-planner/stable-id.d.ts +16 -0
  68. package/dist/src/gap-planner/stable-id.d.ts.map +1 -0
  69. package/dist/src/gap-planner/stable-id.js +19 -0
  70. package/dist/src/generalization/generalization-eval.d.ts +71 -0
  71. package/dist/src/generalization/generalization-eval.d.ts.map +1 -0
  72. package/dist/src/generalization/generalization-eval.js +53 -0
  73. package/dist/src/generators/agent-inferred-workflow-script.d.ts +22 -0
  74. package/dist/src/generators/agent-inferred-workflow-script.d.ts.map +1 -0
  75. package/dist/src/generators/agent-inferred-workflow-script.js +230 -0
  76. package/dist/src/generators/stage-skeleton-script.d.ts +107 -0
  77. package/dist/src/generators/stage-skeleton-script.d.ts.map +1 -0
  78. package/dist/src/generators/stage-skeleton-script.js +607 -0
  79. package/dist/src/index.d.ts +52 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +26 -0
  82. package/dist/src/material/material-inventory.d.ts +92 -0
  83. package/dist/src/material/material-inventory.d.ts.map +1 -0
  84. package/dist/src/material/material-inventory.js +191 -0
  85. package/dist/src/normalizers/crud-contract.d.ts +107 -0
  86. package/dist/src/normalizers/crud-contract.d.ts.map +1 -0
  87. package/dist/src/normalizers/crud-contract.js +1068 -0
  88. package/dist/src/testcase/testcase-generator.d.ts +43 -0
  89. package/dist/src/testcase/testcase-generator.d.ts.map +1 -0
  90. package/dist/src/testcase/testcase-generator.js +152 -0
  91. package/dist/src/testcase/testcase-skeleton.d.ts +91 -0
  92. package/dist/src/testcase/testcase-skeleton.d.ts.map +1 -0
  93. package/dist/src/testcase/testcase-skeleton.js +121 -0
  94. package/dist/src/testcase/testcase-spec-assembly.d.ts +11 -0
  95. package/dist/src/testcase/testcase-spec-assembly.d.ts.map +1 -0
  96. package/dist/src/testcase/testcase-spec-assembly.js +24 -0
  97. package/dist/src/trace/review-summary.d.ts +17 -0
  98. package/dist/src/trace/review-summary.d.ts.map +1 -0
  99. package/dist/src/trace/review-summary.js +34 -0
  100. package/dist/src/trace/trace-writer.d.ts +17 -0
  101. package/dist/src/trace/trace-writer.d.ts.map +1 -0
  102. package/dist/src/trace/trace-writer.js +81 -0
  103. package/dist/test/crud-contract.test.d.ts +2 -0
  104. package/dist/test/crud-contract.test.d.ts.map +1 -0
  105. package/dist/test/crud-contract.test.js +819 -0
  106. package/dist/test/gap-inference.test.d.ts +2 -0
  107. package/dist/test/gap-inference.test.d.ts.map +1 -0
  108. package/dist/test/gap-inference.test.js +597 -0
  109. package/dist/test/generalization.test.d.ts +2 -0
  110. package/dist/test/generalization.test.d.ts.map +1 -0
  111. package/dist/test/generalization.test.js +73 -0
  112. package/dist/test/material-inventory.test.d.ts +2 -0
  113. package/dist/test/material-inventory.test.d.ts.map +1 -0
  114. package/dist/test/material-inventory.test.js +141 -0
  115. package/dist/test/observable-chain.test.d.ts +2 -0
  116. package/dist/test/observable-chain.test.d.ts.map +1 -0
  117. package/dist/test/observable-chain.test.js +123 -0
  118. package/dist/test/observable-pipeline.test.d.ts +2 -0
  119. package/dist/test/observable-pipeline.test.d.ts.map +1 -0
  120. package/dist/test/observable-pipeline.test.js +461 -0
  121. package/dist/test/page-structure.test.d.ts +2 -0
  122. package/dist/test/page-structure.test.d.ts.map +1 -0
  123. package/dist/test/page-structure.test.js +45 -0
  124. package/dist/test/scenario-inference.test.d.ts +2 -0
  125. package/dist/test/scenario-inference.test.d.ts.map +1 -0
  126. package/dist/test/scenario-inference.test.js +73 -0
  127. package/dist/test/stage-context.test.d.ts +2 -0
  128. package/dist/test/stage-context.test.d.ts.map +1 -0
  129. package/dist/test/stage-context.test.js +263 -0
  130. package/dist/test/testcase-generator.test.d.ts +2 -0
  131. package/dist/test/testcase-generator.test.d.ts.map +1 -0
  132. package/dist/test/testcase-generator.test.js +276 -0
  133. package/dist/test/testcase-skeleton.test.d.ts +2 -0
  134. package/dist/test/testcase-skeleton.test.d.ts.map +1 -0
  135. package/dist/test/testcase-skeleton.test.js +185 -0
  136. package/dist/test/testcase-spec-assembly.test.d.ts +2 -0
  137. package/dist/test/testcase-spec-assembly.test.d.ts.map +1 -0
  138. package/dist/test/testcase-spec-assembly.test.js +105 -0
  139. package/dist/vitest.config.d.ts +3 -0
  140. package/dist/vitest.config.d.ts.map +1 -0
  141. package/dist/vitest.config.js +7 -0
  142. package/docs/README.md +134 -0
  143. package/docs/mvp-usage-guide.md +298 -0
  144. package/examples/schemeresource-observable-docs/schemeresource.context.md +20 -0
  145. package/examples/schemeresource.module-hints.json +38 -0
  146. package/examples/schemeresource.observable.code_list.md +37 -0
  147. package/examples/zwplace-observable-docs/zwplace.context.md +16 -0
  148. package/examples/zwplace-placecategory-validation.json +29 -0
  149. package/examples/zwplace.module-hints.json +69 -0
  150. package/examples/zwplace.observable.code_list.md +37 -0
  151. package/package.json +38 -0
@@ -0,0 +1,213 @@
1
+ /**
2
+ * Gap Inference 契约类型。
3
+ *
4
+ * 定义 gap-planner 识别骨架未覆盖工作流所需的核心数据结构:
5
+ * - ActionCandidate:上游物料识别到的可交互动作
6
+ * - SkeletonCoverage:当前骨架已覆盖的动作集合
7
+ * - AgentInferredWorkflow:经差集和证据判断后需要 Agent 推理补齐的业务工作流
8
+ *
9
+ * @module contracts/gap-inference
10
+ */
11
+ import type { EvidenceRef, PageRole, SlotResolution, SourceRef } from './crud-business-module.js';
12
+ /**
13
+ * 可交互动作的类型。
14
+ */
15
+ export type GapActionType = 'page_button' | 'row_action' | 'dialog_action';
16
+ /**
17
+ * Gap 工作流的状态生命周期。
18
+ *
19
+ * candidate → planned → resolved → generated → passed/failed/needs_review
20
+ * ↘ unresolved
21
+ */
22
+ export type GapWorkflowStatus = 'candidate' | 'planned' | 'resolved' | 'generated' | 'passed' | 'failed' | 'needs_review' | 'unresolved';
23
+ /**
24
+ * 从上游物料识别到的可交互动作。是事实,不代表一定生成测试。
25
+ */
26
+ export type ActionCandidate = {
27
+ /** 稳定唯一标识,由 moduleId + pageId + actionType + label 生成 */
28
+ actionId: string;
29
+ moduleId: string;
30
+ pageId: string;
31
+ pageRole: PageRole | 'unknown';
32
+ actionType: GapActionType;
33
+ label: string;
34
+ locator?: string;
35
+ onclick?: string;
36
+ evidence: EvidenceRef[];
37
+ sourceRefs: SourceRef[];
38
+ };
39
+ /**
40
+ * 当前骨架已覆盖的动作集合。
41
+ */
42
+ export type SkeletonCoverage = {
43
+ coverageId: 'crud-plus-export/v1';
44
+ coveredWorkflows: Array<'crud.create' | 'crud.read' | 'crud.update' | 'crud.delete' | 'export.run'>;
45
+ coveredActionLabels: {
46
+ create?: string[];
47
+ read?: string[];
48
+ update?: string[];
49
+ delete?: string[];
50
+ export?: string[];
51
+ internal?: string[];
52
+ };
53
+ };
54
+ /**
55
+ * 经差集和证据判断后,需要 Agent 推理补齐的业务工作流。
56
+ */
57
+ export type AgentInferredWorkflow = {
58
+ workflowId: string;
59
+ workflowKind: 'custom';
60
+ executionSource: 'agent_inferred';
61
+ status: GapWorkflowStatus;
62
+ /** 为什么测:业务意图 */
63
+ businessIntent: SlotResolution<string>;
64
+ /** 要做哪些动作:元素操作序列 */
65
+ elementActions: SlotResolution<string[]>;
66
+ /** 怎么判断结果:断言预期 */
67
+ assertionExpectation: SlotResolution<string>;
68
+ actionCandidates: ActionCandidate[];
69
+ triggerReason: string;
70
+ evidence: EvidenceRef[];
71
+ reviewReason?: string;
72
+ resolvedRuntime?: {
73
+ locator?: string;
74
+ locatorStrategy?: 'html_static' | 'playwright_snapshot' | 'agent_refined';
75
+ iframeSrcKeyword?: string;
76
+ exploration?: GapExplorationResult;
77
+ pageSnapshotPath?: string;
78
+ generatedSpecFile?: string;
79
+ playwrightTestTitle?: string;
80
+ };
81
+ healerAttempts?: Array<{
82
+ attempt: number;
83
+ failureType: 'element_not_found' | 'timeout' | 'toast_not_found' | 'click_intercepted';
84
+ change: string;
85
+ evidence: EvidenceRef[];
86
+ result: 'retry_passed' | 'retry_failed' | 'needs_review';
87
+ }>;
88
+ };
89
+ /**
90
+ * 运行态信号类型。
91
+ *
92
+ * 描述 gap 按钮点击后真实页面出现的反馈形态,是探索模式判断断言策略的依据。
93
+ *
94
+ * - confirm: 点击后出现确认框(如 MiniUI messagebox 的确认/取消)
95
+ * - alert: 点击后出现提示框(原生 alert 或 mini.alert,常承载 data.msg)
96
+ * - toast: 点击后出现轻提示
97
+ * - dialog: 点击后打开业务弹窗页面
98
+ * - download: 点击后触发文件下载
99
+ * - page_change: 点击后页面 URL 发生跳转
100
+ * - none: 点击后未观测到任何反馈
101
+ * - unknown: 出现了反馈但无法归类
102
+ */
103
+ export type GapSignalType = 'confirm' | 'alert' | 'toast' | 'dialog' | 'download' | 'page_change' | 'none' | 'unknown';
104
+ /**
105
+ * Gap 运行态探索结果。
106
+ *
107
+ * 探索模式(策略 A)在真实页面对单个 gap 按钮做运行时观测后产出的结构化事实,
108
+ * 用于回给人工确认,再决定是否落袋为正式 Custom test。
109
+ *
110
+ * 与 resolve(引导模式补 locator 后直接 append)不同,探索结果只记录“真实发生了什么”,
111
+ * 不直接生成测试断言。`suggested*` 字段是探索器对意图/断言的低置信建议,必须经人工确认。
112
+ *
113
+ * @property workflowId 关联的 gap workflow 标识
114
+ * @property buttonLabel 探索的按钮标签
115
+ * @property locator 真实页面定位到该按钮所用的 locator
116
+ * @property locatorStrategy locator 来源策略
117
+ * @property buttonVisible 按钮是否在真实页面可见
118
+ * @property buttonClickable 按钮是否可点击
119
+ * @property confirmDialogPresent 点击后是否出现确认框
120
+ * @property confirmText 确认框文案(confirmDialogPresent 为 true 时)
121
+ * @property confirmExecuted 探索是否进一步点击了确认框的确认按钮(默认 false,避免触发真实副作用)
122
+ * @property signalType 观测到的运行态信号类型
123
+ * @property observedMessage 观测到的提示文案(alert/toast/dialog 文本)
124
+ * @property pageChanged 点击后页面 URL 是否变化
125
+ * @property downloadTriggered 点击后是否触发下载
126
+ * @property networkResponses 点击动作窗口内观测到的关键网络响应摘要
127
+ * @property suggestedIntent 探索器建议的业务意图(低置信,需人工确认)
128
+ * @property suggestedAssertion 探索器建议的断言文案(低置信,需人工确认)
129
+ * @property confidence 探索结论的置信度
130
+ * @property exploredAt 探索时间戳
131
+ * @property notes 补充观测说明(如未识别的弹层文本快照)
132
+ */
133
+ export type GapExplorationResult = {
134
+ workflowId: string;
135
+ buttonLabel: string;
136
+ locator: string;
137
+ locatorStrategy: 'html_static' | 'playwright_snapshot' | 'agent_refined';
138
+ buttonVisible: boolean;
139
+ buttonClickable: boolean;
140
+ confirmDialogPresent: boolean;
141
+ confirmText?: string;
142
+ confirmExecuted: boolean;
143
+ signalType: GapSignalType;
144
+ observedMessage?: string;
145
+ pageChanged: boolean;
146
+ downloadTriggered: boolean;
147
+ networkResponses?: string[];
148
+ suggestedIntent?: string;
149
+ suggestedAssertion?: string;
150
+ confidence: 'low' | 'medium' | 'high';
151
+ exploredAt: string;
152
+ notes?: string;
153
+ };
154
+ /**
155
+ * 引导模式推理草案。
156
+ *
157
+ * 引导模式(策略 B)下,人工预先给定业务意图与断言预期,runtime 据此在真实页面推理验证,
158
+ * 产出「待人工确认后落袋」的草案——不直接 append。这是引导模式人工确认 gate 的载体:
159
+ * runtime 推理产出草案 → 控制台打印 → 人工对话内确认 → 再落袋。
160
+ *
161
+ * @property workflowId 关联的 gap workflow 标识
162
+ * @property buttonLabel 按钮标签
163
+ * @property guidedIntent 人工给定的业务意图(引导输入)
164
+ * @property guidedAssertion 人工给定的断言预期(引导输入)
165
+ * @property exploration 真实页面运行态观测结果(复用探索器)
166
+ * @property intentSatisfied 真机观测是否满足人工预期
167
+ * @property suggestedGapFinding 当真机与人工预期不符时,建议的功能缺口结论
168
+ * @property confidence 推理结论置信度
169
+ */
170
+ export type GapInferDraft = {
171
+ workflowId: string;
172
+ buttonLabel: string;
173
+ guidedIntent: string;
174
+ guidedAssertion: string;
175
+ exploration: GapExplorationResult;
176
+ intentSatisfied: boolean;
177
+ suggestedGapFinding?: {
178
+ kind: 'feature_incomplete' | 'behavior_mismatch';
179
+ summary: string;
180
+ observed?: string;
181
+ };
182
+ confidence: 'low' | 'medium' | 'high';
183
+ };
184
+ /**
185
+ * Gap 清单条目。
186
+ *
187
+ * 物料钻探后、进入 runtime 推理前,用于在控制台列出每个 gap 供人工筛选——
188
+ * 让人工剔除无需推理的 gap,减少无效推理、命中有效 gap(gap 人工筛选 gate)。
189
+ *
190
+ * @property workflowId gap workflow 标识
191
+ * @property label 按钮标签
192
+ * @property status gap 当前状态
193
+ * @property actionType 动作类型
194
+ * @property pageRole 所在页面角色
195
+ * @property hasIntent 是否已具备业务意图
196
+ * @property hasAssertion 是否已具备断言预期
197
+ * @property suggestedMode 建议进入的 runtime 模式:explore=探索 / infer=引导 / skip=已处理无需推理
198
+ * @property evidenceSummary 证据来源摘要(去重的 evidence kind 列表)
199
+ * @property triggerReason 被判定为 gap 的原因
200
+ */
201
+ export type GapListItem = {
202
+ workflowId: string;
203
+ label: string;
204
+ status: GapWorkflowStatus;
205
+ actionType: GapActionType;
206
+ pageRole: PageRole | 'unknown';
207
+ hasIntent: boolean;
208
+ hasAssertion: boolean;
209
+ suggestedMode: 'explore' | 'infer' | 'skip';
210
+ evidenceSummary: string;
211
+ triggerReason: string;
212
+ };
213
+ //# sourceMappingURL=gap-inference.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gap-inference.d.ts","sourceRoot":"","sources":["../../../src/contracts/gap-inference.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,cAAc,EACd,SAAS,EACV,MAAM,2BAA2B,CAAC;AAEnC;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,aAAa,GAAG,YAAY,GAAG,eAAe,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,SAAS,GACT,UAAU,GACV,WAAW,GACX,QAAQ,GACR,QAAQ,GACR,cAAc,GACd,YAAY,CAAC;AAEjB;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC5B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,UAAU,EAAE,aAAa,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,EAAE,qBAAqB,CAAC;IAClC,gBAAgB,EAAE,KAAK,CACnB,aAAa,GACb,WAAW,GACX,aAAa,GACb,aAAa,GACb,YAAY,CACf,CAAC;IACF,mBAAmB,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,QAAQ,CAAC;IACvB,eAAe,EAAE,gBAAgB,CAAC;IAClC,MAAM,EAAE,iBAAiB,CAAC;IAE1B,gBAAgB;IAChB,cAAc,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IACvC,oBAAoB;IACpB,cAAc,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,kBAAkB;IAClB,oBAAoB,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAE7C,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,eAAe,CAAC,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,eAAe,CAAC,EAAE,aAAa,GAAG,qBAAqB,GAAG,eAAe,CAAC;QAC1E,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,WAAW,CAAC,EAAE,oBAAoB,CAAC;QACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAC9B,CAAC;IAEF,cAAc,CAAC,EAAE,KAAK,CAAC;QACrB,OAAO,EAAE,MAAM,CAAC;QAChB,WAAW,EAAE,mBAAmB,GAAG,SAAS,GAAG,iBAAiB,GAAG,mBAAmB,CAAC;QACvF,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,WAAW,EAAE,CAAC;QACxB,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC;KAC1D,CAAC,CAAC;CACJ,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,GACrB,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,GACR,UAAU,GACV,aAAa,GACb,MAAM,GACN,SAAS,CAAC;AAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,aAAa,GAAG,qBAAqB,GAAG,eAAe,CAAC;IACzE,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,aAAa,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,iBAAiB,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACtC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;;;;;;;;;;;;;GAeG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,oBAAoB,CAAC;IAClC,eAAe,EAAE,OAAO,CAAC;IACzB,mBAAmB,CAAC,EAAE;QACpB,IAAI,EAAE,oBAAoB,GAAG,mBAAmB,CAAC;QACjD,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACvC,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,CAAC;IAC1B,UAAU,EAAE,aAAa,CAAC;IAC1B,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Gap Inference 契约类型。
3
+ *
4
+ * 定义 gap-planner 识别骨架未覆盖工作流所需的核心数据结构:
5
+ * - ActionCandidate:上游物料识别到的可交互动作
6
+ * - SkeletonCoverage:当前骨架已覆盖的动作集合
7
+ * - AgentInferredWorkflow:经差集和证据判断后需要 Agent 推理补齐的业务工作流
8
+ *
9
+ * @module contracts/gap-inference
10
+ */
11
+ export {};
@@ -0,0 +1,250 @@
1
+ /**
2
+ * 可观测胶水链路契约类型。
3
+ *
4
+ * 该契约只描述每个推理阶段的输入、输出、证据和人工确认 gate,
5
+ * 供 trace writer 写出可审阅产物;当前阶段不接入 CLI 或 gap planner。
6
+ */
7
+ import type { Confidence, EvidenceRef } from './crud-business-module.js';
8
+ /**
9
+ * 可观测链路阶段名称。
10
+ */
11
+ export type ObservableStageName = 'context-resolution' | 'material-inventory' | 'evidence-extraction' | 'capability-candidates' | 'scenario-inference' | 'skeleton-capability-model' | 'coverage-diff' | 'testcase-generation' | 'glue-spec-assembly' | 'runtime-gap-inference' | 'playwright-execution' | 'glue-report' | 'generalization-evaluation';
12
+ /**
13
+ * trace 中引用的输入或输出产物。
14
+ *
15
+ * @property kind - 产物类别。
16
+ * @property path - 产物路径。
17
+ * @property description - 可选的人类可读说明。
18
+ */
19
+ export type ObservableArtifactRef = {
20
+ kind: string;
21
+ path: string;
22
+ description?: string;
23
+ };
24
+ /**
25
+ * 推理证据链条目。
26
+ *
27
+ * @property source - 证据来源。
28
+ * @property path - 证据文件或运行态快照路径。
29
+ * @property text - 可审阅的证据摘要。
30
+ */
31
+ export type ReasoningEvidence = {
32
+ source: 'spec' | 'code_list' | 'html' | 'java_action' | 'module_hints' | 'runtime' | 'human';
33
+ path: string;
34
+ text: string;
35
+ };
36
+ /**
37
+ * 可审阅推理摘要。
38
+ *
39
+ * @property conclusion - 当前阶段结论。
40
+ * @property evidenceChain - 人类可读证据链。
41
+ * @property alternatives - 候选解释或候选方案。
42
+ * @property confidence - 复用 CRUD 契约置信度。
43
+ * @property risks - 需要人工确认或后续验证的风险。
44
+ * @property needsHumanReview - 是否必须进入人工审阅。
45
+ */
46
+ export type ReasoningSummary = {
47
+ conclusion: string;
48
+ evidenceChain: ReasoningEvidence[];
49
+ alternatives: string[];
50
+ confidence: Confidence;
51
+ risks: string[];
52
+ needsHumanReview: boolean;
53
+ };
54
+ /**
55
+ * 阶段 gate 结果。
56
+ *
57
+ * @property status - 当前阶段状态。
58
+ * @property reason - 状态原因。
59
+ */
60
+ export type ObservableGate = {
61
+ status: 'not_required';
62
+ reason: string;
63
+ } | {
64
+ status: 'needs_review';
65
+ reason: string;
66
+ } | {
67
+ status: 'confirmed';
68
+ confirmedBy: 'human' | 'policy';
69
+ reason: string;
70
+ } | {
71
+ status: 'corrected';
72
+ reason: string;
73
+ correction: string;
74
+ };
75
+ /**
76
+ * 单个可观测阶段的 trace payload。
77
+ *
78
+ * @property stage - 阶段名称。
79
+ * @property stageLabel - 中文阶段标题。
80
+ * @property inputs - 阶段输入产物。
81
+ * @property outputs - 阶段输出产物。
82
+ * @property deterministicEvidence - 复用既有 EvidenceRef 的确定性结构证据。
83
+ * @property reasoningSummary - 可审阅推理摘要。
84
+ * @property candidateCount - 候选数量。
85
+ * @property unresolvedCount - 未解决项数量。
86
+ * @property gate - 阶段 gate 结果。
87
+ */
88
+ export type ObservableStagePayload = {
89
+ stage: ObservableStageName;
90
+ stageLabel: string;
91
+ inputs: ObservableArtifactRef[];
92
+ outputs: ObservableArtifactRef[];
93
+ deterministicEvidence?: EvidenceRef[];
94
+ reasoningSummary?: ReasoningSummary;
95
+ candidateCount?: number;
96
+ unresolvedCount?: number;
97
+ gate: ObservableGate;
98
+ };
99
+ /**
100
+ * summary.md 中展示的阶段摘要。
101
+ */
102
+ export type ObservableStageSummary = {
103
+ stage: ObservableStageName;
104
+ stageLabel: string;
105
+ status: ObservableGate['status'];
106
+ conclusion: string;
107
+ needsHumanReview: boolean;
108
+ };
109
+ /**
110
+ * trace writer 初始化参数。
111
+ *
112
+ * @property projectDir - 用户项目目录。
113
+ * @property runId - 当前运行批次标识。
114
+ * @property codeListPath - 可选 code_list.md 路径,用于后续审阅定位。
115
+ */
116
+ export type TraceWriterOptions = {
117
+ projectDir: string;
118
+ runId?: string;
119
+ codeListPath: string;
120
+ };
121
+ /**
122
+ * 页面场景类型。
123
+ */
124
+ export type PageScenario = 'crud.single-page' | 'crud.nested' | 'export' | 'report.statistical' | 'custom.business-action' | 'unknown';
125
+ /**
126
+ * 单个场景候选。
127
+ *
128
+ * @property scenario - 场景类型。
129
+ * @property confidence - 复用 CRUD 契约置信度。
130
+ * @property evidenceRefs - 支撑该候选的证据标签。
131
+ * @property matchedSkeletonCapabilities - 命中的骨架能力。
132
+ * @property unresolved - 需人工确认的未决项。
133
+ */
134
+ export type ScenarioCandidate = {
135
+ scenario: PageScenario;
136
+ confidence: Confidence;
137
+ evidenceRefs: string[];
138
+ matchedSkeletonCapabilities: string[];
139
+ unresolved: string[];
140
+ };
141
+ /**
142
+ * 场景推理阶段 trace。
143
+ *
144
+ * @property moduleId - 模块 id。
145
+ * @property candidates - 场景候选列表(按置信排序)。
146
+ * @property gate - 阶段 gate。
147
+ * @property reasoningSummary - 可审阅推理摘要。
148
+ * @property conversationReview - 人工确认/纠偏记录。
149
+ */
150
+ export type ScenarioInferenceTrace = {
151
+ moduleId: string;
152
+ candidates: ScenarioCandidate[];
153
+ gate: ObservableGate;
154
+ reasoningSummary: ReasoningSummary;
155
+ conversationReview?: {
156
+ status: 'confirmed' | 'corrected' | 'skipped';
157
+ humanCorrection?: string;
158
+ rerunRequired: boolean;
159
+ };
160
+ };
161
+ /**
162
+ * coverage diff 中单个动作的分类结果。
163
+ *
164
+ * @property status - 覆盖状态(covered/partially-covered/gap-candidate/unresolved)。
165
+ * @property reason - 分类原因。
166
+ */
167
+ export type CoverageDiffAction = {
168
+ actionId: string;
169
+ label: string;
170
+ pageId: string;
171
+ status: 'covered' | 'partially-covered' | 'gap-candidate' | 'unresolved';
172
+ reason: string;
173
+ };
174
+ /**
175
+ * 嵌套 CRUD 候选的 trace 条目。
176
+ */
177
+ export type NestedCrudCandidateTrace = {
178
+ pageId: string;
179
+ evidence: string[];
180
+ supportedActions: string[];
181
+ unresolvedReason: string;
182
+ };
183
+ /**
184
+ * coverage diff 阶段 trace:组合骨架覆盖、gap 候选、嵌套 CRUD 候选与基线 workflow 对比。
185
+ */
186
+ export type CoverageDiffTrace = {
187
+ moduleId: string;
188
+ skeletonCoverageId: string;
189
+ baseline: {
190
+ plannedWorkflows: string[];
191
+ candidateWorkflows: string[];
192
+ unresolvedWorkflows: string[];
193
+ };
194
+ covered: CoverageDiffAction[];
195
+ partiallyCovered: CoverageDiffAction[];
196
+ gapCandidates: CoverageDiffAction[];
197
+ unresolved: CoverageDiffAction[];
198
+ nestedCrudCandidates: NestedCrudCandidateTrace[];
199
+ comparison: {
200
+ both: string[];
201
+ onlyBaseline: string[];
202
+ onlyGeneralized: string[];
203
+ };
204
+ reasoningSummary: ReasoningSummary;
205
+ };
206
+ /**
207
+ * 单条胶水测试用例。
208
+ *
209
+ * @property reviewStatus - 审阅状态(confirmed/needs_review/blocked)。
210
+ * @property unresolved - 未确认项;未确认项不得直接进入 spec assembly。
211
+ */
212
+ export type GlueTestcase = {
213
+ caseId: string;
214
+ title: string;
215
+ scenario: PageScenario;
216
+ reviewStatus: 'confirmed' | 'needs_review' | 'blocked';
217
+ evidence: string[];
218
+ steps: string[];
219
+ assertions: string[];
220
+ unresolved: string[];
221
+ };
222
+ /**
223
+ * 胶水测试用例文档。
224
+ *
225
+ * @property moduleId - 模块 id。
226
+ * @property moduleName - 模块中文名。
227
+ * @property cases - 用例列表。
228
+ * @property reasoningSummary - 可审阅推理摘要。
229
+ */
230
+ export type GlueTestcaseDocument = {
231
+ moduleId: string;
232
+ moduleName: string;
233
+ cases: GlueTestcase[];
234
+ reasoningSummary: ReasoningSummary;
235
+ };
236
+ /**
237
+ * 运行时页面结构信号:静态结构在运行时是否可见。
238
+ *
239
+ * @property staticPresent - 静态抽取时是否存在。
240
+ * @property runtimeVisible - 运行时是否可见。
241
+ * @property runtimeMismatch - 静态存在但运行时不可见(需人工确认)。
242
+ */
243
+ export type RuntimePageStructureSignal = {
244
+ selector: string;
245
+ staticPresent: boolean;
246
+ runtimeVisible: boolean;
247
+ runtimeMismatch: boolean;
248
+ evidenceText: string;
249
+ };
250
+ //# sourceMappingURL=observable-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable-chain.d.ts","sourceRoot":"","sources":["../../../src/contracts/observable-chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,40 @@
1
+ /**
2
+ * 从 `code_list.md` 钻探出的单条上游物料引用。
3
+ *
4
+ * @property kind - 物料类别(html / java_action / spec / module_hints / other)。
5
+ * @property rawPath - markdown 中以反引号包裹的原始相对路径。
6
+ * @property path - 解析后的绝对路径(按 knowledge-root / code_list 所在目录 / `_docs/` 父目录优先级)。
7
+ * @property exists - 解析后的路径是否真实存在,供下游 material-inventory gate 判定。
8
+ */
9
+ export type ExtractedMaterialRef = {
10
+ kind: 'spec' | 'html' | 'java_action' | 'module_hints' | 'other';
11
+ rawPath: string;
12
+ path: string;
13
+ exists: boolean;
14
+ };
15
+ export type ExtractedCodeListSummary = {
16
+ path: string;
17
+ knowledgeRoot?: string;
18
+ knowledgeRootSource: 'input' | 'code_list' | 'inferred' | 'none';
19
+ menu?: string;
20
+ moduleLabel: string;
21
+ pages: string[];
22
+ methods: string[];
23
+ actionMethods: Record<string, string[]>;
24
+ serviceMethods: string[];
25
+ daoMethods: string[];
26
+ entityFields: string[];
27
+ materialRefs: ExtractedMaterialRef[];
28
+ };
29
+ export type ExtractCodeListSummaryOptions = {
30
+ knowledgeRoot?: string;
31
+ };
32
+ /**
33
+ * 解析 code_list.md 并提取上游物料摘要。
34
+ *
35
+ * @param filePath - code_list.md 文件路径。
36
+ * @param options - 可选的 knowledgeRoot,用于 code_list 不在知识库根目录下时解析物料路径。
37
+ * @returns code_list 摘要。
38
+ */
39
+ export declare function extractCodeListSummary(filePath: string, options?: ExtractCodeListSummaryOptions): ExtractedCodeListSummary;
40
+ //# sourceMappingURL=code-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-list.d.ts","sourceRoot":"","sources":["../../../src/extractors/code-list.ts"],"names":[],"mappings":"AAGA;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,GAAG,cAAc,GAAG,OAAO,CAAC;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,MAAM,CAAC;IACjE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,YAAY,EAAE,oBAAoB,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAoNF;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,6BAAkC,GAC1C,wBAAwB,CAuC1B"}