@guanlin4924/devflow-pi 0.1.94 → 0.1.96

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 (245) hide show
  1. package/README.md +34 -4
  2. package/node_modules/@playwright/test/LICENSE +202 -0
  3. package/node_modules/@playwright/test/NOTICE +5 -0
  4. package/node_modules/@playwright/test/README.md +318 -0
  5. package/node_modules/@playwright/test/cli.js +19 -0
  6. package/node_modules/@playwright/test/index.d.ts +18 -0
  7. package/node_modules/@playwright/test/index.js +17 -0
  8. package/node_modules/@playwright/test/index.mjs +18 -0
  9. package/node_modules/@playwright/test/package.json +35 -0
  10. package/node_modules/@playwright/test/reporter.d.ts +17 -0
  11. package/node_modules/@playwright/test/reporter.js +17 -0
  12. package/node_modules/@playwright/test/reporter.mjs +17 -0
  13. package/node_modules/playwright/LICENSE +202 -0
  14. package/node_modules/playwright/NOTICE +5 -0
  15. package/node_modules/playwright/README.md +318 -0
  16. package/node_modules/playwright/ThirdPartyNotices.txt +14 -0
  17. package/node_modules/playwright/cli.js +19 -0
  18. package/node_modules/playwright/index.d.ts +17 -0
  19. package/node_modules/playwright/index.js +17 -0
  20. package/node_modules/playwright/index.mjs +18 -0
  21. package/node_modules/playwright/jsx-runtime.js +42 -0
  22. package/node_modules/playwright/jsx-runtime.mjs +21 -0
  23. package/node_modules/playwright/lib/agents/agentParser.js +89 -0
  24. package/node_modules/playwright/lib/agents/copilot-setup-steps.yml +34 -0
  25. package/node_modules/playwright/lib/agents/generateAgents.js +395 -0
  26. package/node_modules/playwright/lib/agents/playwright-test-coverage.prompt.md +31 -0
  27. package/node_modules/playwright/lib/agents/playwright-test-generate.prompt.md +8 -0
  28. package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +88 -0
  29. package/node_modules/playwright/lib/agents/playwright-test-heal.prompt.md +6 -0
  30. package/node_modules/playwright/lib/agents/playwright-test-healer.agent.md +56 -0
  31. package/node_modules/playwright/lib/agents/playwright-test-plan.prompt.md +9 -0
  32. package/node_modules/playwright/lib/agents/playwright-test-planner.agent.md +74 -0
  33. package/node_modules/playwright/lib/cli/reportActions.js +78 -0
  34. package/node_modules/playwright/lib/cli/testActions.js +214 -0
  35. package/node_modules/playwright/lib/common/index.js +2923 -0
  36. package/node_modules/playwright/lib/common/index.js.txt +34 -0
  37. package/node_modules/playwright/lib/errorContext.js +129 -0
  38. package/node_modules/playwright/lib/globals.js +58 -0
  39. package/node_modules/playwright/lib/index.js +815 -0
  40. package/node_modules/playwright/lib/isomorphic.js +260 -0
  41. package/node_modules/playwright/lib/isomorphic.js.txt +9 -0
  42. package/node_modules/playwright/lib/loader/loaderProcessEntry.js +34 -0
  43. package/node_modules/playwright/lib/loader/loaderProcessEntry.js.txt +9 -0
  44. package/node_modules/playwright/lib/matchers/expect.js +13490 -0
  45. package/node_modules/playwright/lib/matchers/expect.js.LICENSE +640 -0
  46. package/node_modules/playwright/lib/matchers/expect.js.txt +67 -0
  47. package/node_modules/playwright/lib/mcp/test/browserBackend.js +135 -0
  48. package/node_modules/playwright/lib/mcp/test/generatorTools.js +122 -0
  49. package/node_modules/playwright/lib/mcp/test/plannerTools.js +150 -0
  50. package/node_modules/playwright/lib/mcp/test/seed.js +82 -0
  51. package/node_modules/playwright/lib/mcp/test/streams.js +44 -0
  52. package/node_modules/playwright/lib/mcp/test/testBackend.js +99 -0
  53. package/node_modules/playwright/lib/mcp/test/testContext.js +306 -0
  54. package/node_modules/playwright/lib/mcp/test/testTool.js +30 -0
  55. package/node_modules/playwright/lib/mcp/test/testTools.js +98 -0
  56. package/node_modules/playwright/lib/package.js +47 -0
  57. package/node_modules/playwright/lib/program.js +241 -0
  58. package/node_modules/playwright/lib/runner/index.js +8527 -0
  59. package/node_modules/playwright/lib/runner/index.js.txt +61 -0
  60. package/node_modules/playwright/lib/transform/babelBundle.js +72274 -0
  61. package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +2384 -0
  62. package/node_modules/playwright/lib/transform/babelBundle.js.txt +325 -0
  63. package/node_modules/playwright/lib/transform/esmLoader.js +8054 -0
  64. package/node_modules/playwright/lib/transform/esmLoader.js.LICENSE +355 -0
  65. package/node_modules/playwright/lib/transform/esmLoader.js.txt +60 -0
  66. package/node_modules/playwright/lib/util.js +373 -0
  67. package/node_modules/playwright/lib/worker/workerProcessEntry.js +1861 -0
  68. package/node_modules/playwright/lib/worker/workerProcessEntry.js.txt +19 -0
  69. package/node_modules/playwright/package.json +55 -0
  70. package/node_modules/playwright/test.d.ts +18 -0
  71. package/node_modules/playwright/test.js +24 -0
  72. package/node_modules/playwright/test.mjs +35 -0
  73. package/node_modules/playwright/types/test.d.ts +11074 -0
  74. package/node_modules/playwright/types/testReporter.d.ts +950 -0
  75. package/node_modules/playwright-core/LICENSE +202 -0
  76. package/node_modules/playwright-core/NOTICE +5 -0
  77. package/node_modules/playwright-core/README.md +3 -0
  78. package/node_modules/playwright-core/ThirdPartyNotices.txt +13 -0
  79. package/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
  80. package/node_modules/playwright-core/bin/install_webkit_wsl.ps1 +33 -0
  81. package/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +42 -0
  82. package/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
  83. package/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
  84. package/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +42 -0
  85. package/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
  86. package/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
  87. package/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +48 -0
  88. package/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
  89. package/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
  90. package/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +48 -0
  91. package/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
  92. package/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
  93. package/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +48 -0
  94. package/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
  95. package/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
  96. package/node_modules/playwright-core/browsers.json +52 -0
  97. package/node_modules/playwright-core/cli.js +21 -0
  98. package/node_modules/playwright-core/index.d.ts +17 -0
  99. package/node_modules/playwright-core/index.js +17 -0
  100. package/node_modules/playwright-core/index.mjs +28 -0
  101. package/node_modules/playwright-core/lib/bootstrap.js +88 -0
  102. package/node_modules/playwright-core/lib/coreBundle.js +75813 -0
  103. package/node_modules/playwright-core/lib/entry/cliDaemon.js +5 -0
  104. package/node_modules/playwright-core/lib/entry/dashboardApp.js +3 -0
  105. package/node_modules/playwright-core/lib/entry/mcp.js +10 -0
  106. package/node_modules/playwright-core/lib/entry/oopBrowserDownload.js +3 -0
  107. package/node_modules/playwright-core/lib/package.js +50 -0
  108. package/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
  109. package/node_modules/playwright-core/lib/server/electron/loader.js +116 -0
  110. package/node_modules/playwright-core/lib/serverRegistry.js +1939 -0
  111. package/node_modules/playwright-core/lib/serverRegistry.js.LICENSE +65 -0
  112. package/node_modules/playwright-core/lib/tools/cli-client/channelSessions.js +141 -0
  113. package/node_modules/playwright-core/lib/tools/cli-client/cli.js +6 -0
  114. package/node_modules/playwright-core/lib/tools/cli-client/help.json +721 -0
  115. package/node_modules/playwright-core/lib/tools/cli-client/minimist.js +128 -0
  116. package/node_modules/playwright-core/lib/tools/cli-client/output.js +351 -0
  117. package/node_modules/playwright-core/lib/tools/cli-client/program.js +418 -0
  118. package/node_modules/playwright-core/lib/tools/cli-client/registry.js +180 -0
  119. package/node_modules/playwright-core/lib/tools/cli-client/session.js +259 -0
  120. package/node_modules/playwright-core/lib/tools/dashboard/appIcon.png +0 -0
  121. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +425 -0
  122. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/element-attributes.md +23 -0
  123. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/playwright-tests.md +39 -0
  124. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/request-mocking.md +87 -0
  125. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +241 -0
  126. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +225 -0
  127. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/storage-state.md +275 -0
  128. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +433 -0
  129. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/tracing.md +139 -0
  130. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +143 -0
  131. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/SKILL.md +136 -0
  132. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/gallery-spec.md +144 -0
  133. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/migration.md +89 -0
  134. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/react.md +69 -0
  135. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/typing.md +173 -0
  136. package/node_modules/playwright-core/lib/tools/skills/playwright-component-testing/references/vue.md +77 -0
  137. package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +174 -0
  138. package/node_modules/playwright-core/lib/tools/utils/extension.js +112 -0
  139. package/node_modules/playwright-core/lib/tools/utils/socketConnection.js +108 -0
  140. package/node_modules/playwright-core/lib/utilsBundle.js +85357 -0
  141. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +1890 -0
  142. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule--QdMvsKi.css +1 -0
  143. package/node_modules/playwright-core/lib/vite/dashboard/assets/codeMirrorModule-CQ8RZGBm.js +32 -0
  144. package/node_modules/playwright-core/lib/vite/dashboard/assets/codicon-DCmgc-ay.ttf +0 -0
  145. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-1bWoP6pv.svg +1 -0
  146. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-beta-k3eOH_eK.svg +1 -0
  147. package/node_modules/playwright-core/lib/vite/dashboard/assets/firefox-nightly-Cp5nfeDT.svg +1 -0
  148. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-AwgwcYie.css +1 -0
  149. package/node_modules/playwright-core/lib/vite/dashboard/assets/index-hRvO4yU2.js +12 -0
  150. package/node_modules/playwright-core/lib/vite/dashboard/assets/safari-na3_-uQk.svg +1 -0
  151. package/node_modules/playwright-core/lib/vite/dashboard/index.html +29 -0
  152. package/node_modules/playwright-core/lib/vite/dashboard/playwright-logo.svg +24 -0
  153. package/node_modules/playwright-core/lib/vite/htmlReport/index.html +16 -0
  154. package/node_modules/playwright-core/lib/vite/htmlReport/report.css +2 -0
  155. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +32 -0
  156. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule--QdMvsKi.css +1 -0
  157. package/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-CVQWJZAA.js +32 -0
  158. package/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
  159. package/node_modules/playwright-core/lib/vite/recorder/assets/index-BZpYJZ-P.css +1 -0
  160. package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +129 -0
  161. package/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
  162. package/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
  163. package/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-BbkfBe3n.js +32 -0
  164. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +182 -0
  165. package/node_modules/playwright-core/lib/vite/traceViewer/assets/urlMatch-L3liM589.js +1 -0
  166. package/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-DywYcAf8.js +7 -0
  167. package/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.-QdMvsKi.css +1 -0
  168. package/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
  169. package/node_modules/playwright-core/lib/vite/traceViewer/defaultSettingsView.Bqk9acqE.css +1 -0
  170. package/node_modules/playwright-core/lib/vite/traceViewer/index.B4cLoZK3.js +1 -0
  171. package/node_modules/playwright-core/lib/vite/traceViewer/index.B_TqY17P.css +1 -0
  172. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +44 -0
  173. package/node_modules/playwright-core/lib/vite/traceViewer/manifest.webmanifest +16 -0
  174. package/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
  175. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.B_Jk1wbt.js +1 -0
  176. package/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +10 -0
  177. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +4 -0
  178. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CU5KtEkS.js +5 -0
  179. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.CyMfwkXJ.css +1 -0
  180. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
  181. package/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.kHJ-D0s7.css +1 -0
  182. package/node_modules/playwright-core/lib/webp_codec.LICENSE +173 -0
  183. package/node_modules/playwright-core/lib/webp_codec.wasm +0 -0
  184. package/node_modules/playwright-core/lib/xdg-open +1267 -0
  185. package/node_modules/playwright-core/package.json +34 -0
  186. package/node_modules/playwright-core/types/protocol.d.ts +24645 -0
  187. package/node_modules/playwright-core/types/structs.d.ts +52 -0
  188. package/node_modules/playwright-core/types/types.d.ts +26632 -0
  189. package/package.json +13 -2
  190. package/plugins/devflow-core/extensions/devflow-core.ts +432 -7
  191. package/plugins/devflow-core/runtime/hooks/hook_common.py +514 -0
  192. package/plugins/devflow-core/runtime/hooks/index_gate.py +47 -16
  193. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/acceptance_test_runner.py +488 -71
  194. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/advance_state.rb +51 -0
  195. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/approval_pins.py +433 -0
  196. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/approval_store.py +137 -0
  197. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_coverage.py +87 -0
  198. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_draft.py +53 -0
  199. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/dsl_v1.py +318 -0
  200. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/environment_profile.py +134 -0
  201. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/execution_contract.rb +1 -0
  202. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/execution_surface.py +138 -0
  203. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/playwright_adapter.py +515 -0
  204. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/tc_hash.py +132 -0
  205. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/test_command_policy.py +102 -8
  206. package/plugins/devflow-core/skills/workflow-orchestrator/scripts/validate_state.rb +13 -0
  207. package/plugins/devflow-core/skills/workflow-orchestrator/templates/feature-development.yaml +13 -34
  208. package/plugins/devflow-core/skills/workflow-pipeline/SKILL.md +3 -1
  209. package/plugins/devflow-core/skills/workflow-pipeline/references/pipeline-flow.md +68 -140
  210. package/plugins/devflow-core/skills/workflow-project-context/scripts/validate_initialization_database.py +1 -1
  211. package/plugins/devflow-implementation/skills/workflow-execute-phase/references/execute-phase.md +3 -1
  212. package/plugins/devflow-intel/extensions/devflow-intel.ts +1 -1
  213. package/plugins/devflow-intel/skills/workflow-code-index/scripts/code_index.py +23 -4
  214. package/plugins/devflow-quality/runtime/playwright/devflow-test-dsl-v1.schema.json +872 -0
  215. package/plugins/devflow-quality/runtime/playwright/playwright.config.mjs +46 -0
  216. package/plugins/devflow-quality/runtime/playwright/reporter.mjs +311 -0
  217. package/plugins/devflow-quality/runtime/playwright/runner.spec.mjs +1308 -0
  218. package/plugins/devflow-quality/runtime/playwright/runtime-manifest.json +11 -0
  219. package/plugins/devflow-quality/skills/workflow-acceptance-test-design/SKILL.md +3 -0
  220. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/SKILL.md +71 -58
  221. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/api-mainflow-rules.md +20 -15
  222. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/codebase-discovery.md +3 -1
  223. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/intermediate-format.md +115 -192
  224. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/mainflow-selection.md +27 -23
  225. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/project-dsl-contract.md +78 -153
  226. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/references/ui-mainflow-rules.md +36 -83
  227. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/compile_dsl.py +497 -556
  228. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/export_legacy_testagent.py +647 -0
  229. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/normalize_case_payloads.py +10 -3
  230. package/plugins/devflow-quality/skills/workflow-generate-mainflow-cases/scripts/validate_case_payloads.py +165 -275
  231. package/plugins/devflow-quality/skills/workflow-human-acceptance/SKILL.md +63 -0
  232. package/plugins/devflow-quality/skills/workflow-release-closeout/SKILL.md +4 -4
  233. package/plugins/devflow-quality/skills/workflow-run-acceptance-tests/SKILL.md +17 -9
  234. package/src/approval-store.ts +340 -0
  235. package/src/cli.ts +10 -0
  236. package/src/constants.ts +1 -1
  237. package/src/doctor.ts +268 -2
  238. package/src/initialization-store.ts +48 -1
  239. package/src/mcp/auth.ts +103 -0
  240. package/src/mcp/core.ts +102 -0
  241. package/src/mcp/server.ts +193 -0
  242. package/src/mcp/types.ts +5 -0
  243. package/src/paths.ts +12 -1
  244. package/src/project-context.ts +24 -1
  245. package/templates/omp/hook-config.json +6 -0
@@ -0,0 +1,872 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "$id": "urn:devflow:schema:devflow-test-dsl:v1",
4
+ "title": "devflow-test-dsl/v1",
5
+ "description": "Deterministic per-TC execution description interpreted by the Devflow Playwright Runtime. Pure data: no code, shell, module loading, file access, model calls, xpath, or ai_only strategies. Built-in variables: execution_id, namespace.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schema_version",
10
+ "tc_id",
11
+ "tc_sha256",
12
+ "name",
13
+ "variables",
14
+ "data",
15
+ "steps"
16
+ ],
17
+ "properties": {
18
+ "schema_version": {
19
+ "const": "devflow-test-dsl/v1"
20
+ },
21
+ "tc_id": {
22
+ "$ref": "#/$defs/tcId"
23
+ },
24
+ "tc_sha256": {
25
+ "$ref": "#/$defs/sha256"
26
+ },
27
+ "name": {
28
+ "type": "string",
29
+ "minLength": 1,
30
+ "maxLength": 256
31
+ },
32
+ "variables": {
33
+ "type": "object",
34
+ "maxProperties": 128,
35
+ "additionalProperties": false,
36
+ "patternProperties": {
37
+ "^[A-Za-z_][A-Za-z0-9_]{0,63}$": {
38
+ "$ref": "#/$defs/variable"
39
+ }
40
+ }
41
+ },
42
+ "data": {
43
+ "type": "object",
44
+ "additionalProperties": false,
45
+ "required": [
46
+ "namespace",
47
+ "setup",
48
+ "cleanup"
49
+ ],
50
+ "properties": {
51
+ "namespace": {
52
+ "$ref": "#/$defs/text"
53
+ },
54
+ "owner": {
55
+ "$ref": "#/$defs/text"
56
+ },
57
+ "accounts": {
58
+ "type": "array",
59
+ "items": {
60
+ "$ref": "#/$defs/text"
61
+ },
62
+ "maxItems": 32
63
+ },
64
+ "repeatable": {
65
+ "type": "boolean"
66
+ },
67
+ "setup": {
68
+ "type": "array",
69
+ "maxItems": 100,
70
+ "items": {
71
+ "$ref": "#/$defs/apiStep"
72
+ }
73
+ },
74
+ "cleanup": {
75
+ "type": "array",
76
+ "maxItems": 100,
77
+ "items": {
78
+ "$ref": "#/$defs/apiStep"
79
+ }
80
+ }
81
+ }
82
+ },
83
+ "steps": {
84
+ "type": "array",
85
+ "minItems": 1,
86
+ "maxItems": 200,
87
+ "items": {
88
+ "$ref": "#/$defs/step"
89
+ }
90
+ }
91
+ },
92
+ "$defs": {
93
+ "tcId": {
94
+ "type": "string",
95
+ "pattern": "^TC-[0-9]{4,}$"
96
+ },
97
+ "sha256": {
98
+ "type": "string",
99
+ "pattern": "^[0-9a-f]{64}$"
100
+ },
101
+ "stepId": {
102
+ "type": "string",
103
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$"
104
+ },
105
+ "varName": {
106
+ "type": "string",
107
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$"
108
+ },
109
+ "text": {
110
+ "type": "string",
111
+ "minLength": 1,
112
+ "maxLength": 4096,
113
+ "description": "Literal text; may reference variables as ${name}."
114
+ },
115
+ "timeoutMs": {
116
+ "type": "integer",
117
+ "minimum": 100,
118
+ "maximum": 600000
119
+ },
120
+ "indexList": {
121
+ "type": "array",
122
+ "minItems": 1,
123
+ "uniqueItems": true,
124
+ "items": {
125
+ "type": "integer",
126
+ "minimum": 1
127
+ }
128
+ },
129
+ "covers": {
130
+ "type": "object",
131
+ "additionalProperties": false,
132
+ "minProperties": 1,
133
+ "description": "1-based indexes into the frozen TC preconditions/steps arrays; oracle=true only on assertion steps.",
134
+ "properties": {
135
+ "preconditions": {
136
+ "$ref": "#/$defs/indexList"
137
+ },
138
+ "steps": {
139
+ "$ref": "#/$defs/indexList"
140
+ },
141
+ "oracle": {
142
+ "type": "boolean"
143
+ }
144
+ }
145
+ },
146
+ "exactFlag": {
147
+ "type": "boolean"
148
+ },
149
+ "target": {
150
+ "description": "Exactly one locator form. Strict: more than one match fails the step. XPath is not supported.",
151
+ "oneOf": [
152
+ {
153
+ "type": "object",
154
+ "additionalProperties": false,
155
+ "required": [
156
+ "testid"
157
+ ],
158
+ "properties": {
159
+ "testid": {
160
+ "$ref": "#/$defs/text"
161
+ }
162
+ }
163
+ },
164
+ {
165
+ "type": "object",
166
+ "additionalProperties": false,
167
+ "required": [
168
+ "role",
169
+ "name"
170
+ ],
171
+ "properties": {
172
+ "role": {
173
+ "type": "string",
174
+ "pattern": "^[a-z]+$"
175
+ },
176
+ "name": {
177
+ "$ref": "#/$defs/text"
178
+ },
179
+ "exact": {
180
+ "$ref": "#/$defs/exactFlag"
181
+ }
182
+ }
183
+ },
184
+ {
185
+ "type": "object",
186
+ "additionalProperties": false,
187
+ "required": [
188
+ "label"
189
+ ],
190
+ "properties": {
191
+ "label": {
192
+ "$ref": "#/$defs/text"
193
+ },
194
+ "exact": {
195
+ "$ref": "#/$defs/exactFlag"
196
+ }
197
+ }
198
+ },
199
+ {
200
+ "type": "object",
201
+ "additionalProperties": false,
202
+ "required": [
203
+ "placeholder"
204
+ ],
205
+ "properties": {
206
+ "placeholder": {
207
+ "$ref": "#/$defs/text"
208
+ },
209
+ "exact": {
210
+ "$ref": "#/$defs/exactFlag"
211
+ }
212
+ }
213
+ },
214
+ {
215
+ "type": "object",
216
+ "additionalProperties": false,
217
+ "required": [
218
+ "text"
219
+ ],
220
+ "properties": {
221
+ "text": {
222
+ "$ref": "#/$defs/text"
223
+ },
224
+ "exact": {
225
+ "$ref": "#/$defs/exactFlag"
226
+ }
227
+ }
228
+ },
229
+ {
230
+ "type": "object",
231
+ "additionalProperties": false,
232
+ "required": [
233
+ "css"
234
+ ],
235
+ "properties": {
236
+ "css": {
237
+ "$ref": "#/$defs/text"
238
+ }
239
+ }
240
+ }
241
+ ]
242
+ },
243
+ "match": {
244
+ "enum": [
245
+ "exact",
246
+ "contains"
247
+ ]
248
+ },
249
+ "scalar": {
250
+ "type": [
251
+ "string",
252
+ "number",
253
+ "boolean"
254
+ ]
255
+ },
256
+ "jsonPointer": {
257
+ "type": "string",
258
+ "pattern": "^(/([^~/]|~[01])*)*$",
259
+ "maxLength": 1024
260
+ },
261
+ "apiAssertion": {
262
+ "type": "object",
263
+ "additionalProperties": false,
264
+ "required": [
265
+ "pointer",
266
+ "op"
267
+ ],
268
+ "description": "JSON body assertion. exists/not_exists take no value; other ops require value.",
269
+ "properties": {
270
+ "pointer": {
271
+ "$ref": "#/$defs/jsonPointer"
272
+ },
273
+ "op": {
274
+ "enum": [
275
+ "equals",
276
+ "not_equals",
277
+ "contains",
278
+ "exists",
279
+ "not_exists"
280
+ ]
281
+ },
282
+ "value": {}
283
+ }
284
+ },
285
+ "apiStep": {
286
+ "type": "object",
287
+ "additionalProperties": false,
288
+ "required": [
289
+ "id",
290
+ "driver",
291
+ "action",
292
+ "method",
293
+ "url"
294
+ ],
295
+ "description": "Request through the page BrowserContext request (shared cookies). A url starting with '/' resolves against the profile api_base_url (or base_url); absolute URLs must match an api_origins entry. Redirects are not followed automatically. No retry unless declared.",
296
+ "properties": {
297
+ "id": {
298
+ "$ref": "#/$defs/stepId"
299
+ },
300
+ "driver": {
301
+ "const": "api"
302
+ },
303
+ "action": {
304
+ "const": "request"
305
+ },
306
+ "covers": {
307
+ "$ref": "#/$defs/covers"
308
+ },
309
+ "timeout_ms": {
310
+ "$ref": "#/$defs/timeoutMs"
311
+ },
312
+ "method": {
313
+ "enum": [
314
+ "GET",
315
+ "POST",
316
+ "PUT",
317
+ "PATCH",
318
+ "DELETE"
319
+ ]
320
+ },
321
+ "url": {
322
+ "$ref": "#/$defs/text"
323
+ },
324
+ "headers": {
325
+ "type": "object",
326
+ "maxProperties": 64,
327
+ "patternProperties": {
328
+ "^[A-Za-z0-9-]{1,128}$": {
329
+ "$ref": "#/$defs/text"
330
+ }
331
+ },
332
+ "additionalProperties": false
333
+ },
334
+ "query": {
335
+ "type": "object",
336
+ "maxProperties": 64,
337
+ "patternProperties": {
338
+ "^[^\\u0000-\\u001f]{1,256}$": {
339
+ "$ref": "#/$defs/scalar"
340
+ }
341
+ },
342
+ "additionalProperties": false
343
+ },
344
+ "json": {
345
+ "description": "JSON request body; string leaves may reference ${name}."
346
+ },
347
+ "expect_status": {
348
+ "type": "integer",
349
+ "minimum": 100,
350
+ "maximum": 599
351
+ },
352
+ "assertions": {
353
+ "type": "array",
354
+ "minItems": 1,
355
+ "maxItems": 100,
356
+ "items": {
357
+ "$ref": "#/$defs/apiAssertion"
358
+ }
359
+ },
360
+ "extract": {
361
+ "type": "object",
362
+ "maxProperties": 64,
363
+ "additionalProperties": false,
364
+ "patternProperties": {
365
+ "^[A-Za-z_][A-Za-z0-9_]{0,63}$": {
366
+ "type": "object",
367
+ "additionalProperties": false,
368
+ "required": [
369
+ "pointer"
370
+ ],
371
+ "properties": {
372
+ "pointer": {
373
+ "$ref": "#/$defs/jsonPointer"
374
+ },
375
+ "sensitive": {
376
+ "type": "boolean"
377
+ }
378
+ }
379
+ }
380
+ }
381
+ },
382
+ "retry": {
383
+ "type": "object",
384
+ "additionalProperties": false,
385
+ "required": [
386
+ "max_attempts",
387
+ "on"
388
+ ],
389
+ "description": "Only transport failures may be retried; POST/PATCH additionally require idempotent=true.",
390
+ "properties": {
391
+ "max_attempts": {
392
+ "type": "integer",
393
+ "minimum": 2,
394
+ "maximum": 5
395
+ },
396
+ "on": {
397
+ "type": "array",
398
+ "minItems": 1,
399
+ "uniqueItems": true,
400
+ "items": {
401
+ "enum": [
402
+ "connection_error",
403
+ "timeout",
404
+ "rate_limited"
405
+ ]
406
+ }
407
+ }
408
+ }
409
+ },
410
+ "idempotent": {
411
+ "type": "boolean"
412
+ }
413
+ }
414
+ },
415
+ "uiGoto": {
416
+ "type": "object",
417
+ "additionalProperties": false,
418
+ "required": [
419
+ "id",
420
+ "driver",
421
+ "action",
422
+ "url"
423
+ ],
424
+ "properties": {
425
+ "id": {
426
+ "$ref": "#/$defs/stepId"
427
+ },
428
+ "driver": {
429
+ "const": "ui"
430
+ },
431
+ "action": {
432
+ "const": "goto"
433
+ },
434
+ "covers": {
435
+ "$ref": "#/$defs/covers"
436
+ },
437
+ "timeout_ms": {
438
+ "$ref": "#/$defs/timeoutMs"
439
+ },
440
+ "url": {
441
+ "$ref": "#/$defs/text"
442
+ }
443
+ },
444
+ "description": "Navigate; a url starting with '/' resolves against the profile base_url."
445
+ },
446
+ "uiClick": {
447
+ "type": "object",
448
+ "additionalProperties": false,
449
+ "required": [
450
+ "id",
451
+ "driver",
452
+ "action",
453
+ "target"
454
+ ],
455
+ "properties": {
456
+ "id": {
457
+ "$ref": "#/$defs/stepId"
458
+ },
459
+ "driver": {
460
+ "const": "ui"
461
+ },
462
+ "action": {
463
+ "const": "click"
464
+ },
465
+ "covers": {
466
+ "$ref": "#/$defs/covers"
467
+ },
468
+ "timeout_ms": {
469
+ "$ref": "#/$defs/timeoutMs"
470
+ },
471
+ "target": {
472
+ "$ref": "#/$defs/target"
473
+ }
474
+ }
475
+ },
476
+ "uiFill": {
477
+ "type": "object",
478
+ "additionalProperties": false,
479
+ "required": [
480
+ "id",
481
+ "driver",
482
+ "action",
483
+ "target",
484
+ "value"
485
+ ],
486
+ "properties": {
487
+ "id": {
488
+ "$ref": "#/$defs/stepId"
489
+ },
490
+ "driver": {
491
+ "const": "ui"
492
+ },
493
+ "action": {
494
+ "const": "fill"
495
+ },
496
+ "covers": {
497
+ "$ref": "#/$defs/covers"
498
+ },
499
+ "timeout_ms": {
500
+ "$ref": "#/$defs/timeoutMs"
501
+ },
502
+ "target": {
503
+ "$ref": "#/$defs/target"
504
+ },
505
+ "value": {
506
+ "type": "string",
507
+ "maxLength": 4096
508
+ }
509
+ }
510
+ },
511
+ "uiSelect": {
512
+ "type": "object",
513
+ "additionalProperties": false,
514
+ "required": [
515
+ "id",
516
+ "driver",
517
+ "action",
518
+ "target",
519
+ "value"
520
+ ],
521
+ "properties": {
522
+ "id": {
523
+ "$ref": "#/$defs/stepId"
524
+ },
525
+ "driver": {
526
+ "const": "ui"
527
+ },
528
+ "action": {
529
+ "const": "select"
530
+ },
531
+ "covers": {
532
+ "$ref": "#/$defs/covers"
533
+ },
534
+ "timeout_ms": {
535
+ "$ref": "#/$defs/timeoutMs"
536
+ },
537
+ "target": {
538
+ "$ref": "#/$defs/target"
539
+ },
540
+ "value": {
541
+ "oneOf": [
542
+ {
543
+ "$ref": "#/$defs/text"
544
+ },
545
+ {
546
+ "type": "array",
547
+ "minItems": 1,
548
+ "items": {
549
+ "$ref": "#/$defs/text"
550
+ }
551
+ }
552
+ ]
553
+ }
554
+ }
555
+ },
556
+ "uiCheck": {
557
+ "type": "object",
558
+ "additionalProperties": false,
559
+ "required": [
560
+ "id",
561
+ "driver",
562
+ "action",
563
+ "target"
564
+ ],
565
+ "properties": {
566
+ "id": {
567
+ "$ref": "#/$defs/stepId"
568
+ },
569
+ "driver": {
570
+ "const": "ui"
571
+ },
572
+ "action": {
573
+ "const": "check"
574
+ },
575
+ "covers": {
576
+ "$ref": "#/$defs/covers"
577
+ },
578
+ "timeout_ms": {
579
+ "$ref": "#/$defs/timeoutMs"
580
+ },
581
+ "target": {
582
+ "$ref": "#/$defs/target"
583
+ }
584
+ }
585
+ },
586
+ "uiUncheck": {
587
+ "type": "object",
588
+ "additionalProperties": false,
589
+ "required": [
590
+ "id",
591
+ "driver",
592
+ "action",
593
+ "target"
594
+ ],
595
+ "properties": {
596
+ "id": {
597
+ "$ref": "#/$defs/stepId"
598
+ },
599
+ "driver": {
600
+ "const": "ui"
601
+ },
602
+ "action": {
603
+ "const": "uncheck"
604
+ },
605
+ "covers": {
606
+ "$ref": "#/$defs/covers"
607
+ },
608
+ "timeout_ms": {
609
+ "$ref": "#/$defs/timeoutMs"
610
+ },
611
+ "target": {
612
+ "$ref": "#/$defs/target"
613
+ }
614
+ }
615
+ },
616
+ "uiWaitFor": {
617
+ "type": "object",
618
+ "additionalProperties": false,
619
+ "required": [
620
+ "id",
621
+ "driver",
622
+ "action",
623
+ "target",
624
+ "state"
625
+ ],
626
+ "properties": {
627
+ "id": {
628
+ "$ref": "#/$defs/stepId"
629
+ },
630
+ "driver": {
631
+ "const": "ui"
632
+ },
633
+ "action": {
634
+ "const": "wait_for"
635
+ },
636
+ "covers": {
637
+ "$ref": "#/$defs/covers"
638
+ },
639
+ "timeout_ms": {
640
+ "$ref": "#/$defs/timeoutMs"
641
+ },
642
+ "target": {
643
+ "$ref": "#/$defs/target"
644
+ },
645
+ "state": {
646
+ "enum": [
647
+ "visible",
648
+ "hidden",
649
+ "attached",
650
+ "detached"
651
+ ]
652
+ }
653
+ },
654
+ "description": "Condition wait only; fixed sleeps are not expressible."
655
+ },
656
+ "uiAssertVisible": {
657
+ "type": "object",
658
+ "additionalProperties": false,
659
+ "required": [
660
+ "id",
661
+ "driver",
662
+ "action",
663
+ "target"
664
+ ],
665
+ "properties": {
666
+ "id": {
667
+ "$ref": "#/$defs/stepId"
668
+ },
669
+ "driver": {
670
+ "const": "ui"
671
+ },
672
+ "action": {
673
+ "const": "assert_visible"
674
+ },
675
+ "covers": {
676
+ "$ref": "#/$defs/covers"
677
+ },
678
+ "timeout_ms": {
679
+ "$ref": "#/$defs/timeoutMs"
680
+ },
681
+ "target": {
682
+ "$ref": "#/$defs/target"
683
+ }
684
+ }
685
+ },
686
+ "uiAssertText": {
687
+ "type": "object",
688
+ "additionalProperties": false,
689
+ "required": [
690
+ "id",
691
+ "driver",
692
+ "action",
693
+ "target",
694
+ "match",
695
+ "expected"
696
+ ],
697
+ "properties": {
698
+ "id": {
699
+ "$ref": "#/$defs/stepId"
700
+ },
701
+ "driver": {
702
+ "const": "ui"
703
+ },
704
+ "action": {
705
+ "const": "assert_text"
706
+ },
707
+ "covers": {
708
+ "$ref": "#/$defs/covers"
709
+ },
710
+ "timeout_ms": {
711
+ "$ref": "#/$defs/timeoutMs"
712
+ },
713
+ "target": {
714
+ "$ref": "#/$defs/target"
715
+ },
716
+ "match": {
717
+ "$ref": "#/$defs/match"
718
+ },
719
+ "expected": {
720
+ "$ref": "#/$defs/text"
721
+ },
722
+ "normalize_whitespace": {
723
+ "type": "boolean"
724
+ },
725
+ "case_sensitive": {
726
+ "type": "boolean"
727
+ }
728
+ },
729
+ "description": "normalize_whitespace defaults to true, case_sensitive defaults to true."
730
+ },
731
+ "uiAssertUrl": {
732
+ "type": "object",
733
+ "additionalProperties": false,
734
+ "required": [
735
+ "id",
736
+ "driver",
737
+ "action",
738
+ "match",
739
+ "expected"
740
+ ],
741
+ "properties": {
742
+ "id": {
743
+ "$ref": "#/$defs/stepId"
744
+ },
745
+ "driver": {
746
+ "const": "ui"
747
+ },
748
+ "action": {
749
+ "const": "assert_url"
750
+ },
751
+ "covers": {
752
+ "$ref": "#/$defs/covers"
753
+ },
754
+ "timeout_ms": {
755
+ "$ref": "#/$defs/timeoutMs"
756
+ },
757
+ "match": {
758
+ "$ref": "#/$defs/match"
759
+ },
760
+ "expected": {
761
+ "$ref": "#/$defs/text"
762
+ }
763
+ }
764
+ },
765
+ "uiScreenshot": {
766
+ "type": "object",
767
+ "additionalProperties": false,
768
+ "required": [
769
+ "id",
770
+ "driver",
771
+ "action"
772
+ ],
773
+ "properties": {
774
+ "id": {
775
+ "$ref": "#/$defs/stepId"
776
+ },
777
+ "driver": {
778
+ "const": "ui"
779
+ },
780
+ "action": {
781
+ "const": "screenshot"
782
+ },
783
+ "covers": {
784
+ "$ref": "#/$defs/covers"
785
+ },
786
+ "timeout_ms": {
787
+ "$ref": "#/$defs/timeoutMs"
788
+ },
789
+ "name": {
790
+ "type": "string",
791
+ "pattern": "^[A-Za-z0-9_-]{1,64}$"
792
+ },
793
+ "full_page": {
794
+ "type": "boolean"
795
+ }
796
+ }
797
+ },
798
+ "step": {
799
+ "oneOf": [
800
+ {
801
+ "$ref": "#/$defs/uiGoto"
802
+ },
803
+ {
804
+ "$ref": "#/$defs/uiClick"
805
+ },
806
+ {
807
+ "$ref": "#/$defs/uiFill"
808
+ },
809
+ {
810
+ "$ref": "#/$defs/uiSelect"
811
+ },
812
+ {
813
+ "$ref": "#/$defs/uiCheck"
814
+ },
815
+ {
816
+ "$ref": "#/$defs/uiUncheck"
817
+ },
818
+ {
819
+ "$ref": "#/$defs/uiWaitFor"
820
+ },
821
+ {
822
+ "$ref": "#/$defs/uiAssertVisible"
823
+ },
824
+ {
825
+ "$ref": "#/$defs/uiAssertText"
826
+ },
827
+ {
828
+ "$ref": "#/$defs/uiAssertUrl"
829
+ },
830
+ {
831
+ "$ref": "#/$defs/uiScreenshot"
832
+ },
833
+ {
834
+ "$ref": "#/$defs/apiStep"
835
+ }
836
+ ]
837
+ },
838
+ "variable": {
839
+ "oneOf": [
840
+ {
841
+ "type": "object",
842
+ "additionalProperties": false,
843
+ "required": [
844
+ "value"
845
+ ],
846
+ "properties": {
847
+ "value": {
848
+ "$ref": "#/$defs/scalar"
849
+ },
850
+ "sensitive": {
851
+ "type": "boolean"
852
+ }
853
+ }
854
+ },
855
+ {
856
+ "type": "object",
857
+ "additionalProperties": false,
858
+ "required": [
859
+ "secret"
860
+ ],
861
+ "description": "Resolved at run time from the environment profile secret_env key; always sensitive.",
862
+ "properties": {
863
+ "secret": {
864
+ "type": "string",
865
+ "pattern": "^[A-Za-z_][A-Za-z0-9_]{0,63}$"
866
+ }
867
+ }
868
+ }
869
+ ]
870
+ }
871
+ }
872
+ }