@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,645 @@
1
+ /**
2
+ * CRUD 业务模块契约类型定义
3
+ *
4
+ * 定义了 crud-business-module/v1 版本契约的所有类型。
5
+ * 该契约用于描述一个业务模块的 CRUD 操作结构,供 Playwright 测试脚本生成器使用。
6
+ *
7
+ * 类型层次结构:
8
+ * - 来源溯源:SourceKind, Confidence, SourceRef, EvidenceKind, EvidenceRef
9
+ * - 槽位解析:SlotAvailability, SlotResolution
10
+ * - 模块策略:ModuleHints
11
+ * - 页面元素:FieldContract, ButtonContract, DialogContract, GridColumnContract, GridActionContract, GridContract
12
+ * - 页面契约:PageRole, PageContract
13
+ * - 数据契约:DataKeyContract
14
+ * - 流程契约:FlowControlRef, OverrideFieldContract, CreateFlowContract, SearchFlowContract, UpdateFlowContract, DeleteFlowContract
15
+ * - 断言契约:AssertionContract, RecordExistenceAssertionContract, ToastMessageAssertionContract
16
+ * - 业务规则:BusinessRuleContract
17
+ * - 未解决槽位:UnresolvedSlot
18
+ * - 模块契约:CrudBusinessModuleContract
19
+ */
20
+ import type { AgentInferredWorkflow } from './gap-inference.js';
21
+ /**
22
+ * 来源类型枚举
23
+ *
24
+ * 标识契约字段的信息来源,用于来源溯源和置信度评估。
25
+ *
26
+ * - spec: spec.yaml 需求规格文档
27
+ * - code_list: code_list.md 代码清单文档
28
+ * - html: 生成式 HTML 页面
29
+ * - java_action: Java Action 源码
30
+ * - scanner_reference: 控件扫描器输出
31
+ * - human_required: 需要人工补充(无法自动提取)
32
+ */
33
+ export type SourceKind = 'spec' | 'code_list' | 'html' | 'java_action' | 'scanner_reference' | 'human_required';
34
+ /**
35
+ * 置信度枚举
36
+ *
37
+ * 标识信息来源的可信程度,用于评估契约字段的可靠性。
38
+ *
39
+ * - high: 高置信度(如 spec.yaml 中明确定义的字段)
40
+ * - medium: 中置信度(如从 Java Action 消息中推断的断言)
41
+ * - low: 低置信度(如占位符或需要人工确认的信息)
42
+ */
43
+ export type Confidence = 'high' | 'medium' | 'low';
44
+ /**
45
+ * 槽位可获取性枚举
46
+ *
47
+ * 标识契约字段的可获取程度,用于判断是否需要人工补充。
48
+ *
49
+ * - auto_extractable: 可从源码自动提取(如 HTML 页面中的字段定义)
50
+ * - derivable: 可从已有信息推导(如通过 hints 策略确定的 dataKey)
51
+ * - human_required: 需要人工补充(如测试策略值)
52
+ * - unsupported: 当前版本不支持(如未实现的功能)
53
+ */
54
+ export type SlotAvailability = 'auto_extractable' | 'derivable' | 'human_required' | 'unsupported';
55
+ /**
56
+ * 来源引用
57
+ *
58
+ * 记录契约字段的信息来源,包含来源类型、文件路径、证据文本和置信度。
59
+ * 用于实现契约的来源溯源和可追溯性。
60
+ *
61
+ * @property kind - 来源类型
62
+ * @property path - 来源文件路径
63
+ * @property evidence - 可选的证据文本(如提取的原始文本)
64
+ * @property confidence - 置信度
65
+ */
66
+ export type SourceRef = {
67
+ kind: SourceKind;
68
+ path: string;
69
+ evidence?: string;
70
+ confidence: Confidence;
71
+ };
72
+ /**
73
+ * 证据类型枚举
74
+ *
75
+ * 标识证据的具体类型,用于精细化的证据链追踪。
76
+ * 支持第二阶段的证据链完整化。
77
+ *
78
+ * - spec_field: spec.yaml 中的字段定义
79
+ * - html_control: HTML 页面中的表单控件
80
+ * - html_button: HTML 页面中的按钮
81
+ * - html_dialog: HTML 页面中的弹窗
82
+ * - grid_column: 表格列
83
+ * - grid_row_action: 表格行操作
84
+ * - java_action_method: Java Action 方法
85
+ * - java_callback_message: Java 回调消息
86
+ * - code_list: 代码清单条目
87
+ * - test_policy_hint: 测试策略提示(来自 ModuleHints)
88
+ */
89
+ export type EvidenceKind = 'spec_field' | 'html_control' | 'html_button' | 'html_dialog' | 'grid_column' | 'grid_row_action' | 'java_action_method' | 'java_callback_message' | 'code_list' | 'test_policy_hint';
90
+ /**
91
+ * 证据引用
92
+ *
93
+ * 记录单个证据的详细信息,用于构建证据链。
94
+ * 支持第二阶段的证据链完整化,当前阶段已定义但尚未在 normalizer 中使用。
95
+ *
96
+ * @property kind - 证据类型
97
+ * @property path - 证据来源文件路径
98
+ * @property locator - 可选的定位器(如 XPath、CSS 选择器)
99
+ * @property evidenceText - 可选的证据文本
100
+ * @property confidence - 置信度
101
+ */
102
+ export type EvidenceRef = {
103
+ kind: EvidenceKind;
104
+ path: string;
105
+ locator?: string;
106
+ evidenceText?: string;
107
+ confidence: Confidence;
108
+ };
109
+ /**
110
+ * 槽位解析结果(泛型)
111
+ *
112
+ * 描述一个槽位的解析状态,支持三种状态:
113
+ * - resolved: 已解析,有确定值
114
+ * - candidate: 候选,有多个可能值
115
+ * - unresolved: 未解析,需要人工补充
116
+ *
117
+ * @property status - 解析状态
118
+ * @property value - 已解析的值(status=resolved 时)
119
+ * @property candidates - 候选值列表(status=candidate 时)
120
+ * @property evidence - 证据列表
121
+ * @property unresolved - 未解析信息(status=unresolved 时)
122
+ */
123
+ export type SlotResolution<T> = {
124
+ status: 'resolved' | 'candidate' | 'unresolved';
125
+ value?: T;
126
+ candidates?: Array<{
127
+ value: T;
128
+ score: number;
129
+ evidence: EvidenceRef[];
130
+ risk?: string;
131
+ }>;
132
+ evidence?: EvidenceRef[];
133
+ unresolved?: {
134
+ reason: string;
135
+ expectedProvider: 'developer' | 'tester' | 'runtime_config';
136
+ suggestedFormat: string;
137
+ };
138
+ };
139
+ /**
140
+ * 模块测试策略提示
141
+ *
142
+ * 由测试人员显式输入的测试策略信息,用于补充无法从源码自动提取的策略值。
143
+ * 这是实现"Prompt Isolation"的核心机制——将测试策略输入与源码结构提取分离。
144
+ *
145
+ * @property pageRoleMap - 可选的页面角色映射(pageId → role)
146
+ * @property dataKey - 数据主键配置
147
+ * @property buttonAliases - 按钮别名映射(支持多语言、多标签匹配)
148
+ * @property autofill - 表单自动填充配置
149
+ * @property deletePolicy - 删除策略
150
+ * @property assertionPolicy - 断言策略
151
+ */
152
+ export type ModuleHints = {
153
+ pageRoleMap?: Record<string, PageRole>;
154
+ dataKey?: {
155
+ selectedField?: string;
156
+ candidateFields?: string[];
157
+ generationStrategy?: DataKeyContract['generationStrategy'];
158
+ };
159
+ searchConditions?: Array<{
160
+ field: string;
161
+ component?: 'input' | 'listbox';
162
+ value?: string;
163
+ seedValue?: string;
164
+ strategy?: DataKeyContract['generationStrategy'];
165
+ updatePrefix?: string;
166
+ createSelections?: Array<{
167
+ field: string;
168
+ label?: string;
169
+ value: string;
170
+ }>;
171
+ }>;
172
+ buttonAliases?: Partial<Record<'create' | 'saveAndClose' | 'search' | 'edit' | 'delete' | 'confirm' | 'export', string[]>>;
173
+ customWorkflows?: Array<{
174
+ label: string;
175
+ actionAlias?: string[];
176
+ expectedIntent?: string;
177
+ expectedAssertion?: string;
178
+ include?: boolean;
179
+ excludeReason?: string;
180
+ }>;
181
+ autofill?: {
182
+ overrideFields?: Array<{
183
+ field: string;
184
+ strategy: DataKeyContract['generationStrategy'];
185
+ value?: string;
186
+ }>;
187
+ };
188
+ deletePolicy?: DeleteExpectedOutcome;
189
+ assertionPolicy?: {
190
+ afterCreate?: 'record_exists' | 'toast_message' | 'both';
191
+ afterUpdate?: 'record_exists' | 'toast_message' | 'both';
192
+ afterDelete?: 'record_not_exists' | 'toast_message' | 'both' | 'human_required';
193
+ };
194
+ };
195
+ /**
196
+ * 模块标识
197
+ *
198
+ * 描述业务模块的基本信息。
199
+ *
200
+ * @property id - 模块唯一标识(如 'zwplace')
201
+ * @property label - 模块显示名称(如 '场所信息管理')
202
+ * @property description - 可选的模块描述
203
+ */
204
+ export type ModuleIdentity = {
205
+ id: string;
206
+ label: string;
207
+ description?: string;
208
+ };
209
+ /**
210
+ * 字段契约
211
+ *
212
+ * 描述表单页面中的一个字段,包含字段名、标签、控件类型、定位器等信息。
213
+ *
214
+ * @property name - 字段名(如 'placename')
215
+ * @property label - 字段标签(如 '场所名称')
216
+ * @property controlType - 控件类型(如 'mini-textbox', 'mini-combobox')
217
+ * @property bind - 可选的数据绑定表达式(如 'dataBean.placename')
218
+ * @property required - 是否必填
219
+ * @property maxLength - 最大长度限制
220
+ * @property locator - 可选的定位器(如 XPath、CSS 选择器)
221
+ * @property availability - 可获取性
222
+ * @property sources - 来源引用数组
223
+ */
224
+ export type FieldContract = {
225
+ name: string;
226
+ label: string;
227
+ controlType: string;
228
+ bind?: string;
229
+ required?: boolean;
230
+ maxLength?: number;
231
+ locator?: string;
232
+ availability: SlotAvailability;
233
+ sources: SourceRef[];
234
+ };
235
+ /**
236
+ * 按钮契约
237
+ *
238
+ * 描述页面中的一个按钮,包含按钮 ID、标签、定位器等信息。
239
+ *
240
+ * @property id - 按钮 ID(如 'mini-button-1')
241
+ * @property label - 按钮标签(如 '新增场所信息管理')
242
+ * @property onclick - 可选的 onclick 方法表达式
243
+ * @property locator - 可选的定位器
244
+ * @property availability - 可获取性
245
+ * @property sources - 来源引用数组
246
+ */
247
+ export type ButtonContract = {
248
+ id: string;
249
+ label: string;
250
+ onclick?: string;
251
+ locator?: string;
252
+ availability: SlotAvailability;
253
+ sources: SourceRef[];
254
+ };
255
+ /**
256
+ * 弹窗契约
257
+ *
258
+ * 描述页面中的一个弹窗,包含触发条件、标题、目标页面等信息。
259
+ *
260
+ * @property trigger - 触发条件(如 'epoint.openTopDialog(...)')
261
+ * @property title - 弹窗标题
262
+ * @property pageId - 目标页面 ID
263
+ * @property pagePath - 目标页面路径
264
+ * @property availability - 可获取性
265
+ * @property sources - 来源引用数组
266
+ */
267
+ export type DialogContract = {
268
+ trigger: string;
269
+ title: string;
270
+ pageId: string;
271
+ pagePath: string;
272
+ availability: SlotAvailability;
273
+ sources: SourceRef[];
274
+ };
275
+ /**
276
+ * 表格列契约
277
+ *
278
+ * 描述数据表格中的一列,包含字段名、表头文本、列类型等信息。
279
+ *
280
+ * @property field - 字段名
281
+ * @property headerText - 表头文本
282
+ * @property columnType - 列类型(如 'data', 'checkcolumn', 'indexcolumn', 'actioncolumn')
283
+ * @property sources - 来源引用数组
284
+ */
285
+ export type GridColumnContract = {
286
+ field: string;
287
+ headerText: string;
288
+ columnType: string;
289
+ sources: SourceRef[];
290
+ };
291
+ /**
292
+ * 表格行操作契约
293
+ *
294
+ * 描述数据表格中的一行操作(如"修改"、"查看"按钮)。
295
+ *
296
+ * @property label - 操作标签(如 '修改')
297
+ * @property onclick - 可选的 onclick 方法表达式
298
+ * @property locator - 操作定位器
299
+ * @property availability - 可获取性
300
+ * @property sources - 来源引用数组
301
+ */
302
+ export type GridActionContract = {
303
+ label: string;
304
+ onclick?: string;
305
+ locator: string;
306
+ availability: SlotAvailability;
307
+ sources: SourceRef[];
308
+ };
309
+ /**
310
+ * 表格契约
311
+ *
312
+ * 描述页面中的数据表格,支持精细分类:
313
+ * - columns: 数据列(业务字段列)
314
+ * - selectionColumn: 选择列(如 checkbox 列)
315
+ * - indexColumn: 序号列
316
+ * - rowActions: 行操作(如修改、查看按钮)
317
+ *
318
+ * @property id - 表格 ID
319
+ * @property columns - 数据列数组
320
+ * @property selectionColumn - 可选的选择列
321
+ * @property indexColumn - 可选的序号列
322
+ * @property rowActions - 可选的行操作数组
323
+ * @property availability - 可获取性
324
+ * @property sources - 来源引用数组
325
+ */
326
+ export type GridContract = {
327
+ id: string;
328
+ columns: GridColumnContract[];
329
+ selectionColumn?: GridColumnContract;
330
+ indexColumn?: GridColumnContract;
331
+ rowActions?: GridActionContract[];
332
+ availability: SlotAvailability;
333
+ sources: SourceRef[];
334
+ };
335
+ /**
336
+ * 页面角色类型
337
+ *
338
+ * 描述页面在 CRUD 流程中的角色。
339
+ *
340
+ * - list: 列表页面
341
+ * - add: 新增页面
342
+ * - edit: 编辑页面
343
+ * - detail: 详情页面
344
+ */
345
+ export type PageRole = 'list' | 'add' | 'edit' | 'detail';
346
+ /**
347
+ * 页面契约(泛型)
348
+ *
349
+ * 描述一个 CRUD 页面的完整结构,包含字段、按钮、表格、弹窗等元素。
350
+ *
351
+ * @property role - 页面角色
352
+ * @property pageId - 页面标识符
353
+ * @property pagePath - 页面路径
354
+ * @property title - 页面标题
355
+ * @property iframeSrcKeyword - iframe 源关键字(用于定位嵌套 iframe)
356
+ * @property fields - 字段契约数组
357
+ * @property buttons - 按钮契约数组
358
+ * @property grids - 表格契约数组
359
+ * @property dialogs - 弹窗契约数组
360
+ * @property sources - 来源引用数组
361
+ */
362
+ export type PageContract<TRole extends PageRole = PageRole> = {
363
+ role: TRole;
364
+ pageId: string;
365
+ title: string;
366
+ iframeSrcKeyword: string;
367
+ fields: FieldContract[];
368
+ buttons: ButtonContract[];
369
+ grids: GridContract[];
370
+ dialogs: DialogContract[];
371
+ sources: SourceRef[];
372
+ };
373
+ /**
374
+ * 数据主键契约
375
+ *
376
+ * 描述测试数据的关键标识字段,用于在 CRUD 流程中追踪数据。
377
+ *
378
+ * @property field - 字段名(如 'placename')
379
+ * @property label - 字段标签(如 '场所名称')
380
+ * @property availability - 可获取性
381
+ * @property generationStrategy - 数据生成策略
382
+ * - timestamp_prefix: 带时间戳前缀(如 'test-placename-1717140000000')
383
+ * - fixed_value: 固定值
384
+ * - external_data_pool: 外部数据池
385
+ * - human_required: 需要人工指定
386
+ * @property sources - 来源引用数组
387
+ */
388
+ export type DataKeyContract = {
389
+ field: string;
390
+ label: string;
391
+ availability: SlotAvailability;
392
+ generationStrategy: 'timestamp_prefix' | 'fixed_value' | 'external_data_pool' | 'human_required';
393
+ sources: SourceRef[];
394
+ };
395
+ /**
396
+ * 搜索条件契约
397
+ *
398
+ * 描述列表页搜索条件及其测试策略值。字段结构来自页面物料,
399
+ * listbox 的测试值来自 hints,避免生成器猜测业务枚举。
400
+ */
401
+ export type SearchConditionContract = {
402
+ field: string;
403
+ label: string;
404
+ component: 'input' | 'listbox';
405
+ value?: string;
406
+ seedValue?: string;
407
+ generationStrategy?: DataKeyContract['generationStrategy'];
408
+ updatePrefix?: string;
409
+ createSelections?: Array<{
410
+ field: string;
411
+ label: string;
412
+ value: string;
413
+ }>;
414
+ sources: SourceRef[];
415
+ };
416
+ /**
417
+ * 流程控制引用
418
+ *
419
+ * 描述流程中的一个交互控件(如按钮、输入框)。
420
+ *
421
+ * @property pageRole - 控件所在的页面角色
422
+ * @property label - 可选的控件标签
423
+ * @property field - 可选的字段名
424
+ * @property locator - 可选的定位器
425
+ * @property sources - 来源引用数组
426
+ */
427
+ export type FlowControlRef = {
428
+ pageRole: PageRole;
429
+ label?: string;
430
+ field?: string;
431
+ locator?: string;
432
+ sources: SourceRef[];
433
+ };
434
+ /**
435
+ * 覆盖字段契约
436
+ *
437
+ * 描述表单自动填充后需要二次覆盖的字段。
438
+ * 用于保证测试数据的可控性和可追溯性。
439
+ *
440
+ * @property pageRole - 字段所在的页面角色
441
+ * @property field - 字段名
442
+ * @property strategy - 数据生成策略
443
+ * @property value - 可选的固定值
444
+ * @property sources - 来源引用数组
445
+ */
446
+ export type OverrideFieldContract = {
447
+ pageRole: PageRole;
448
+ field: string;
449
+ strategy: DataKeyContract['generationStrategy'];
450
+ value?: string;
451
+ sources: SourceRef[];
452
+ };
453
+ /**
454
+ * 创建流程契约
455
+ *
456
+ * 描述新增操作的完整流程,包含入口按钮、目标页面、保存按钮和需要覆盖的字段。
457
+ *
458
+ * @property entryButton - 入口按钮(列表页上的"新增"按钮)
459
+ * @property targetPageId - 目标页面 ID(新增页面)
460
+ * @property saveButton - 保存按钮(新增页上的"保存并关闭"按钮)
461
+ * @property overrideFields - 需要覆盖的字段数组
462
+ */
463
+ export type CreateFlowContract = {
464
+ entryButton: FlowControlRef;
465
+ targetPageId: string;
466
+ saveButton: FlowControlRef;
467
+ overrideFields: OverrideFieldContract[];
468
+ };
469
+ /**
470
+ * 搜索流程契约
471
+ *
472
+ * 描述搜索操作的完整流程,包含搜索字段、提交控件和结果表格。
473
+ *
474
+ * @property searchField - 搜索字段
475
+ * @property submitControl - 提交控件(搜索按钮)
476
+ * @property resultGrid - 结果表格 ID
477
+ */
478
+ export type SearchFlowContract = {
479
+ searchField: FlowControlRef;
480
+ submitControl: FlowControlRef;
481
+ resultGrid: string;
482
+ };
483
+ /**
484
+ * 更新流程契约
485
+ *
486
+ * 描述更新操作的完整流程,包含入口操作、目标页面、更新字段和保存按钮。
487
+ *
488
+ * @property entryAction - 入口操作(列表页上的"修改"行操作)
489
+ * @property targetPageId - 目标页面 ID(编辑页面)
490
+ * @property updateField - 更新字段(与 dataKey 匹配的编辑页字段)
491
+ * @property saveButton - 保存按钮(编辑页上的"保存并关闭"按钮)
492
+ */
493
+ export type UpdateFlowContract = {
494
+ entryAction: FlowControlRef;
495
+ targetPageId: string;
496
+ updateField: FlowControlRef;
497
+ saveButton: FlowControlRef;
498
+ };
499
+ /**
500
+ * 删除预期结果类型
501
+ *
502
+ * 描述删除操作的预期结果,用于生成删除测试的断言。
503
+ *
504
+ * - success_delete: 成功删除(验证记录不存在)
505
+ * - blocked_by_business_rule: 业务规则阻止删除(验证 toast 消息)
506
+ * - prepare_deletable_draft_then_delete: 准备可删除草稿后删除(映射为 human_required)
507
+ * - human_required: 需要人工验证
508
+ */
509
+ export type DeleteExpectedOutcome = 'success_delete' | 'blocked_by_business_rule' | 'prepare_deletable_draft_then_delete' | 'human_required';
510
+ /**
511
+ * 删除流程契约
512
+ *
513
+ * 描述删除操作的完整流程,包含入口按钮、预期结果和可选的确认控件。
514
+ *
515
+ * @property entryButton - 入口按钮(列表页上的"删除选定"按钮)
516
+ * @property expectedOutcome - 预期结果
517
+ * @property confirmControl - 可选的确认控件(如"确定"按钮)
518
+ */
519
+ export type DeleteFlowContract = {
520
+ entryButton: FlowControlRef;
521
+ expectedOutcome: DeleteExpectedOutcome;
522
+ confirmControl?: FlowControlRef;
523
+ };
524
+ /**
525
+ * 断言契约基础类型
526
+ *
527
+ * 所有断言契约的公共属性。
528
+ *
529
+ * @property id - 断言唯一标识
530
+ * @property availability - 可获取性
531
+ * @property sources - 来源引用数组
532
+ */
533
+ type AssertionContractBase = {
534
+ id: string;
535
+ availability: SlotAvailability;
536
+ sources: SourceRef[];
537
+ };
538
+ /**
539
+ * 记录存在性断言契约
540
+ *
541
+ * 断言记录的存在性(存在或不存在)。
542
+ *
543
+ * @property type - 断言类型('record_exists' 或 'record_not_exists')
544
+ * @property field - 检查的字段名
545
+ * @property expectedCount - 期望的记录数(1 表示存在,0 表示不存在)
546
+ */
547
+ export type RecordExistenceAssertionContract = AssertionContractBase & {
548
+ type: 'record_exists' | 'record_not_exists';
549
+ field: string;
550
+ expectedCount: number;
551
+ expectedMessage?: never;
552
+ };
553
+ /**
554
+ * Toast 消息断言契约
555
+ *
556
+ * 断言页面上出现的 toast 消息。
557
+ *
558
+ * @property type - 断言类型('toast_message')
559
+ * @property expectedMessage - 期望的 toast 消息文本
560
+ */
561
+ export type ToastMessageAssertionContract = AssertionContractBase & {
562
+ type: 'toast_message';
563
+ expectedMessage: string;
564
+ field?: never;
565
+ expectedCount?: never;
566
+ };
567
+ /**
568
+ * 断言契约联合类型
569
+ *
570
+ * 支持两种断言类型:记录存在性断言和 toast 消息断言。
571
+ */
572
+ export type AssertionContract = RecordExistenceAssertionContract | ToastMessageAssertionContract;
573
+ /**
574
+ * 业务规则契约
575
+ *
576
+ * 描述业务模块中的业务规则,用于测试验证。
577
+ *
578
+ * @property id - 规则唯一标识
579
+ * @property description - 规则描述
580
+ * @property availability - 可获取性
581
+ * @property sources - 来源引用数组
582
+ */
583
+ export type BusinessRuleContract = {
584
+ id: string;
585
+ description: string;
586
+ availability: SlotAvailability;
587
+ sources: SourceRef[];
588
+ };
589
+ /**
590
+ * 未解决槽位
591
+ *
592
+ * 描述契约中缺失的测试策略信息,需要人工补充。
593
+ *
594
+ * @property slotId - 槽位标识(如 'dataKey.selectedField')
595
+ * @property reason - 缺失原因说明
596
+ * @property requiredBy - 依赖该槽位的契约字段列表
597
+ * @property expectedProvider - 应由谁补充(tester/developer/runtime_config)
598
+ * @property suggestedFormat - 建议的 JSON 格式
599
+ */
600
+ export type UnresolvedSlot = {
601
+ slotId: string;
602
+ reason: string;
603
+ requiredBy: string[];
604
+ expectedProvider: 'developer' | 'tester' | 'runtime_config';
605
+ suggestedFormat: string;
606
+ };
607
+ /**
608
+ * CRUD 业务模块契约(顶层类型)
609
+ *
610
+ * 描述一个业务模块的完整 CRUD 操作结构,供 Playwright 测试脚本生成器使用。
611
+ * 这是 crud-business-module/v1 版本的核心契约类型。
612
+ *
613
+ * @property contractVersion - 契约版本(固定为 'crud-business-module/v1')
614
+ * @property module - 模块标识
615
+ * @property pages - 页面契约映射(list/add/edit/detail)
616
+ * @property dataKey - 数据主键契约
617
+ * @property flows - 流程契约映射(create/search/update/delete)
618
+ * @property assertions - 断言契约数组
619
+ * @property businessRules - 业务规则契约数组
620
+ * @property unresolvedSlots - 未解决槽位数组
621
+ */
622
+ export type CrudBusinessModuleContract = {
623
+ contractVersion: 'crud-business-module/v1';
624
+ module: ModuleIdentity;
625
+ pages: {
626
+ list: PageContract<'list'>;
627
+ add?: PageContract<'add'>;
628
+ edit?: PageContract<'edit'>;
629
+ detail?: PageContract<'detail'>;
630
+ };
631
+ dataKey: DataKeyContract;
632
+ searchConditions?: SearchConditionContract[];
633
+ flows: {
634
+ create?: CreateFlowContract;
635
+ search?: SearchFlowContract;
636
+ update?: UpdateFlowContract;
637
+ delete?: DeleteFlowContract;
638
+ };
639
+ assertions: AssertionContract[];
640
+ businessRules: BusinessRuleContract[];
641
+ unresolvedSlots: UnresolvedSlot[];
642
+ agentInferredWorkflows?: AgentInferredWorkflow[];
643
+ };
644
+ export {};
645
+ //# sourceMappingURL=crud-business-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crud-business-module.d.ts","sourceRoot":"","sources":["../../../src/contracts/crud-business-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};