@gate-forge/pack-playwright 0.7.1 → 0.9.0

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 (205) hide show
  1. package/README.md +31 -0
  2. package/dist/constants.d.ts +13 -140
  3. package/dist/constants.d.ts.map +1 -1
  4. package/dist/constants.js +13 -148
  5. package/dist/constants.js.map +1 -1
  6. package/dist/cypress/plugin.d.ts +53 -0
  7. package/dist/cypress/plugin.d.ts.map +1 -0
  8. package/dist/cypress/plugin.js +369 -0
  9. package/dist/cypress/plugin.js.map +1 -0
  10. package/dist/cypress/spec-scan.d.ts +39 -0
  11. package/dist/cypress/spec-scan.d.ts.map +1 -0
  12. package/dist/cypress/spec-scan.js +301 -0
  13. package/dist/cypress/spec-scan.js.map +1 -0
  14. package/dist/diagnosis.d.ts +39 -0
  15. package/dist/diagnosis.d.ts.map +1 -0
  16. package/dist/diagnosis.js +63 -0
  17. package/dist/diagnosis.js.map +1 -0
  18. package/dist/discovery/adapter-projection.d.ts +13 -0
  19. package/dist/discovery/adapter-projection.d.ts.map +1 -0
  20. package/dist/discovery/adapter-projection.js +84 -0
  21. package/dist/discovery/adapter-projection.js.map +1 -0
  22. package/dist/discovery/config-locations.d.ts +5 -0
  23. package/dist/discovery/config-locations.d.ts.map +1 -0
  24. package/dist/discovery/config-locations.js +19 -0
  25. package/dist/discovery/config-locations.js.map +1 -0
  26. package/dist/discovery/cypress-runner-adapter.d.ts +112 -0
  27. package/dist/discovery/cypress-runner-adapter.d.ts.map +1 -0
  28. package/dist/discovery/cypress-runner-adapter.js +501 -0
  29. package/dist/discovery/cypress-runner-adapter.js.map +1 -0
  30. package/dist/discovery/discover.d.ts +53 -1
  31. package/dist/discovery/discover.d.ts.map +1 -1
  32. package/dist/discovery/discover.js +290 -30
  33. package/dist/discovery/discover.js.map +1 -1
  34. package/dist/discovery/git-ignore.d.ts +13 -0
  35. package/dist/discovery/git-ignore.d.ts.map +1 -0
  36. package/dist/discovery/git-ignore.js +62 -0
  37. package/dist/discovery/git-ignore.js.map +1 -0
  38. package/dist/discovery/index.d.ts +10 -0
  39. package/dist/discovery/index.d.ts.map +1 -1
  40. package/dist/discovery/index.js +10 -0
  41. package/dist/discovery/index.js.map +1 -1
  42. package/dist/discovery/playwright-runner-adapter.d.ts +108 -0
  43. package/dist/discovery/playwright-runner-adapter.d.ts.map +1 -0
  44. package/dist/discovery/playwright-runner-adapter.js +185 -0
  45. package/dist/discovery/playwright-runner-adapter.js.map +1 -0
  46. package/dist/discovery/prepare-barrier.d.ts +522 -0
  47. package/dist/discovery/prepare-barrier.d.ts.map +1 -0
  48. package/dist/discovery/prepare-barrier.js +739 -0
  49. package/dist/discovery/prepare-barrier.js.map +1 -0
  50. package/dist/discovery/pytest-adapter.d.ts.map +1 -1
  51. package/dist/discovery/pytest-adapter.js +6 -2
  52. package/dist/discovery/pytest-adapter.js.map +1 -1
  53. package/dist/discovery/pytest-runner-adapter.d.ts +124 -0
  54. package/dist/discovery/pytest-runner-adapter.d.ts.map +1 -0
  55. package/dist/discovery/pytest-runner-adapter.js +454 -0
  56. package/dist/discovery/pytest-runner-adapter.js.map +1 -0
  57. package/dist/discovery/reconcile.d.ts +89 -11
  58. package/dist/discovery/reconcile.d.ts.map +1 -1
  59. package/dist/discovery/reconcile.js +440 -78
  60. package/dist/discovery/reconcile.js.map +1 -1
  61. package/dist/discovery/runner-env.d.ts +88 -2
  62. package/dist/discovery/runner-env.d.ts.map +1 -1
  63. package/dist/discovery/runner-env.js +142 -4
  64. package/dist/discovery/runner-env.js.map +1 -1
  65. package/dist/discovery/runner-file-scope.d.ts +114 -0
  66. package/dist/discovery/runner-file-scope.d.ts.map +1 -0
  67. package/dist/discovery/runner-file-scope.js +638 -0
  68. package/dist/discovery/runner-file-scope.js.map +1 -0
  69. package/dist/discovery/static-discovery.d.ts +49 -3
  70. package/dist/discovery/static-discovery.d.ts.map +1 -1
  71. package/dist/discovery/static-discovery.js +477 -18
  72. package/dist/discovery/static-discovery.js.map +1 -1
  73. package/dist/discovery/supervised-run.d.ts +199 -10
  74. package/dist/discovery/supervised-run.d.ts.map +1 -1
  75. package/dist/discovery/supervised-run.js +350 -39
  76. package/dist/discovery/supervised-run.js.map +1 -1
  77. package/dist/discovery/trusted-config.d.ts +180 -6
  78. package/dist/discovery/trusted-config.d.ts.map +1 -1
  79. package/dist/discovery/trusted-config.js +279 -10
  80. package/dist/discovery/trusted-config.js.map +1 -1
  81. package/dist/discovery/vitest-runner-adapter.d.ts +172 -0
  82. package/dist/discovery/vitest-runner-adapter.d.ts.map +1 -0
  83. package/dist/discovery/vitest-runner-adapter.js +607 -0
  84. package/dist/discovery/vitest-runner-adapter.js.map +1 -0
  85. package/dist/fixture/consumer-runner.d.ts +4 -0
  86. package/dist/fixture/consumer-runner.d.ts.map +1 -0
  87. package/dist/fixture/consumer-runner.js +38 -0
  88. package/dist/fixture/consumer-runner.js.map +1 -0
  89. package/dist/fixture/evidence.d.ts +27 -0
  90. package/dist/fixture/evidence.d.ts.map +1 -1
  91. package/dist/fixture/evidence.js +12 -0
  92. package/dist/fixture/evidence.js.map +1 -1
  93. package/dist/fixture/fixture.d.ts +2 -1
  94. package/dist/fixture/fixture.d.ts.map +1 -1
  95. package/dist/fixture/fixture.js +1 -17
  96. package/dist/fixture/fixture.js.map +1 -1
  97. package/dist/fixture/witness-client.d.ts +6 -174
  98. package/dist/fixture/witness-client.d.ts.map +1 -1
  99. package/dist/fixture/witness-client.js +6 -267
  100. package/dist/fixture/witness-client.js.map +1 -1
  101. package/dist/index.d.ts +9 -6
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +5 -4
  104. package/dist/index.js.map +1 -1
  105. package/dist/json.d.ts +6 -12
  106. package/dist/json.d.ts.map +1 -1
  107. package/dist/json.js +6 -17
  108. package/dist/json.js.map +1 -1
  109. package/dist/reporter/project-graph-reporter.d.ts +121 -0
  110. package/dist/reporter/project-graph-reporter.d.ts.map +1 -0
  111. package/dist/reporter/project-graph-reporter.js +132 -0
  112. package/dist/reporter/project-graph-reporter.js.map +1 -0
  113. package/dist/reporter/reporter.cjs.map +1 -1
  114. package/dist/reporter/reporter.d.ts +93 -4
  115. package/dist/reporter/reporter.d.ts.map +1 -1
  116. package/dist/reporter/reporter.js +174 -18
  117. package/dist/reporter/reporter.js.map +1 -1
  118. package/dist/runner-claims.d.ts +13 -0
  119. package/dist/runner-claims.d.ts.map +1 -0
  120. package/dist/runner-claims.js +46 -0
  121. package/dist/runner-claims.js.map +1 -0
  122. package/dist/runner-resolution.d.ts +3 -0
  123. package/dist/runner-resolution.d.ts.map +1 -0
  124. package/dist/runner-resolution.js +14 -0
  125. package/dist/runner-resolution.js.map +1 -0
  126. package/dist/supervisor/client.d.ts +23 -1
  127. package/dist/supervisor/client.d.ts.map +1 -1
  128. package/dist/supervisor/client.js +49 -0
  129. package/dist/supervisor/client.js.map +1 -1
  130. package/dist/supervisor/drain.d.ts +65 -0
  131. package/dist/supervisor/drain.d.ts.map +1 -1
  132. package/dist/supervisor/drain.js +353 -9
  133. package/dist/supervisor/drain.js.map +1 -1
  134. package/dist/supervisor/index.d.ts +7 -3
  135. package/dist/supervisor/index.d.ts.map +1 -1
  136. package/dist/supervisor/index.js +7 -3
  137. package/dist/supervisor/index.js.map +1 -1
  138. package/dist/supervisor/spool.d.ts +65 -2
  139. package/dist/supervisor/spool.d.ts.map +1 -1
  140. package/dist/supervisor/spool.js +47 -0
  141. package/dist/supervisor/spool.js.map +1 -1
  142. package/dist/surface.d.ts +6 -207
  143. package/dist/surface.d.ts.map +1 -1
  144. package/dist/surface.js +6 -264
  145. package/dist/surface.js.map +1 -1
  146. package/dist/vitest/index.d.ts +23 -0
  147. package/dist/vitest/index.d.ts.map +1 -0
  148. package/dist/vitest/index.js +356 -0
  149. package/dist/vitest/index.js.map +1 -0
  150. package/dist/vitest/reporter.d.ts +83 -0
  151. package/dist/vitest/reporter.d.ts.map +1 -0
  152. package/dist/vitest/reporter.js +211 -0
  153. package/dist/vitest/reporter.js.map +1 -0
  154. package/dist/vitest/worker-slot.d.ts +36 -0
  155. package/dist/vitest/worker-slot.d.ts.map +1 -0
  156. package/dist/vitest/worker-slot.js +51 -0
  157. package/dist/vitest/worker-slot.js.map +1 -0
  158. package/dist/witness/adapter-registry.d.ts +6 -50
  159. package/dist/witness/adapter-registry.d.ts.map +1 -1
  160. package/dist/witness/adapter-registry.js +6 -257
  161. package/dist/witness/adapter-registry.js.map +1 -1
  162. package/dist/witness/behavior-request.d.ts +6 -76
  163. package/dist/witness/behavior-request.d.ts.map +1 -1
  164. package/dist/witness/behavior-request.js +6 -273
  165. package/dist/witness/behavior-request.js.map +1 -1
  166. package/dist/witness/behavior.d.ts +6 -48
  167. package/dist/witness/behavior.d.ts.map +1 -1
  168. package/dist/witness/behavior.js +6 -114
  169. package/dist/witness/behavior.js.map +1 -1
  170. package/dist/witness/bin.d.ts +6 -17
  171. package/dist/witness/bin.d.ts.map +1 -1
  172. package/dist/witness/bin.js +6 -168
  173. package/dist/witness/bin.js.map +1 -1
  174. package/dist/witness/browser.d.ts +14 -206
  175. package/dist/witness/browser.d.ts.map +1 -1
  176. package/dist/witness/browser.js +15 -654
  177. package/dist/witness/browser.js.map +1 -1
  178. package/dist/witness/classifications.d.ts +6 -38
  179. package/dist/witness/classifications.d.ts.map +1 -1
  180. package/dist/witness/classifications.js +6 -83
  181. package/dist/witness/classifications.js.map +1 -1
  182. package/dist/witness/env-attestation.d.ts +6 -94
  183. package/dist/witness/env-attestation.d.ts.map +1 -1
  184. package/dist/witness/env-attestation.js +6 -198
  185. package/dist/witness/env-attestation.js.map +1 -1
  186. package/dist/witness/fixture-provider.d.ts +6 -82
  187. package/dist/witness/fixture-provider.d.ts.map +1 -1
  188. package/dist/witness/fixture-provider.js +6 -105
  189. package/dist/witness/fixture-provider.js.map +1 -1
  190. package/dist/witness/loopback-pins.d.ts +6 -75
  191. package/dist/witness/loopback-pins.d.ts.map +1 -1
  192. package/dist/witness/loopback-pins.js +6 -240
  193. package/dist/witness/loopback-pins.js.map +1 -1
  194. package/dist/witness/server.d.ts +8 -26
  195. package/dist/witness/server.d.ts.map +1 -1
  196. package/dist/witness/server.js +24 -3761
  197. package/dist/witness/server.js.map +1 -1
  198. package/dist/witness/types.d.ts +6 -882
  199. package/dist/witness/types.d.ts.map +1 -1
  200. package/dist/witness/types.js +9 -1
  201. package/dist/witness/types.js.map +1 -1
  202. package/examples/overlay-proof.spec.js +75 -0
  203. package/package.json +12 -3
  204. package/python/gateforge_pytest_plugin.py +462 -0
  205. package/python/__pycache__/gateforge_persistence_intents.cpython-314.pyc +0 -0
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The subset of `paths` git ignores, or null when git cannot answer.
3
+ *
4
+ * Args:
5
+ * cwd: absolute directory the relative paths are resolved against (the scan root).
6
+ * paths: repo-relative posix paths, already filtered to scan candidates.
7
+ *
8
+ * Returns:
9
+ * Set<string> | null: the ignored subset when git answered (possibly
10
+ * empty), or null outside a work tree / when the query was unavailable.
11
+ */
12
+ export declare function gitIgnoredPaths(cwd: string, paths: readonly string[]): Set<string> | null;
13
+ //# sourceMappingURL=git-ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ignore.d.ts","sourceRoot":"","sources":["../../src/discovery/git-ignore.ts"],"names":[],"mappings":"AAiCA;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAkBzF"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Git-ignore awareness for STATIC discovery candidates.
3
+ *
4
+ * The static scanner walks the filesystem with include/exclude globs and
5
+ * pruned build/dep directories only. A path the repository IGNORES —
6
+ * the built, git-ignored bundle a frontend build writes into the tree —
7
+ * is not source the owner runs or intends to change, and the runner can
8
+ * never enumerate a test inside it. Rows from such a file can only ever
9
+ * become `unenumeratedReason` gaps and permanent RUN_INCOMPLETE
10
+ * incompleteness, so an ignored file must never become a static row.
11
+ *
12
+ * The filter asks GIT, in ONE batched call, which of the candidate paths
13
+ * git ignores. Two deliberate properties:
14
+ *
15
+ * - **Untracked is not ignored.** `git check-ignore` without `--no-index`
16
+ * never reports a TRACKED file, so a committed spec that matches an
17
+ * ignore pattern is still scanned (and still fail-closed as
18
+ * unresolved when its shape is unresolvable), while a brand-new
19
+ * uncommitted spec — untracked, not ignored — is still planned.
20
+ * - **Absence of an answer is not an answer.** Outside a work tree
21
+ * (plain fixture directories), or when git is missing, unreadable, or
22
+ * too slow, the helper reports `null` and the caller keeps exactly
23
+ * today's behavior. Git ignore rules are only consulted where they
24
+ * actually exist.
25
+ */
26
+ import { spawnSync } from 'node:child_process';
27
+ /** Hard cap on the batched ignore query's output buffer. */
28
+ const MAX_IGNORE_OUTPUT_BYTES = 64 * 1024 * 1024;
29
+ /** The ignore query's deadline; a slower git answers nothing (today's behavior). */
30
+ const IGNORE_QUERY_TIMEOUT_MS = 20_000;
31
+ /**
32
+ * The subset of `paths` git ignores, or null when git cannot answer.
33
+ *
34
+ * Args:
35
+ * cwd: absolute directory the relative paths are resolved against (the scan root).
36
+ * paths: repo-relative posix paths, already filtered to scan candidates.
37
+ *
38
+ * Returns:
39
+ * Set<string> | null: the ignored subset when git answered (possibly
40
+ * empty), or null outside a work tree / when the query was unavailable.
41
+ */
42
+ export function gitIgnoredPaths(cwd, paths) {
43
+ if (paths.length === 0)
44
+ return new Set();
45
+ const result = spawnSync('git', ['--no-replace-objects', 'check-ignore', '--stdin', '-z'], {
46
+ cwd,
47
+ encoding: 'utf8',
48
+ input: `${paths.join('\0')}\0`,
49
+ maxBuffer: MAX_IGNORE_OUTPUT_BYTES,
50
+ timeout: IGNORE_QUERY_TIMEOUT_MS,
51
+ });
52
+ if (result.error !== undefined)
53
+ return null; // git missing, killed, or timed out
54
+ // 0: at least one path is ignored. 1: none are (status 128: not a
55
+ // repository — "no work tree", which also means no filter).
56
+ if (result.status !== 0 && result.status !== 1)
57
+ return null;
58
+ return new Set((result.stdout ?? '')
59
+ .split('\0')
60
+ .filter((path) => path.length > 0));
61
+ }
62
+ //# sourceMappingURL=git-ignore.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-ignore.js","sourceRoot":"","sources":["../../src/discovery/git-ignore.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAE/C,4DAA4D;AAC5D,MAAM,uBAAuB,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,oFAAoF;AACpF,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAwB;IACnE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,GAAG,EAAE,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,sBAAsB,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;QACzF,GAAG;QACH,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC9B,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,uBAAuB;KACjC,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,CAAC,oCAAoC;IACjF,kEAAkE;IAClE,4DAA4D;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,OAAO,IAAI,GAAG,CACZ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SAClB,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CACrC,CAAC;AACJ,CAAC"}
@@ -3,14 +3,24 @@
3
3
  * phase 2): bounded static scanning, native reconciliation, kind
4
4
  * inference, the runner adapters, and the pytest diagnostic adapter.
5
5
  */
6
+ export * from './adapter-projection.js';
6
7
  export * from './static-discovery.js';
8
+ export * from './git-ignore.js';
7
9
  export * from './inference.js';
8
10
  export * from './reconcile.js';
11
+ export * from './prepare-barrier.js';
12
+ export { localPlaywrightCliCandidates } from '../runner-resolution.js';
13
+ export { CONFIG_SEARCH_PRUNED_DIRS, PLAYWRIGHT_CONFIG_NAMES } from './config-locations.js';
9
14
  export * from './pytest-adapter.js';
10
15
  export * from './discover.js';
11
16
  export * from './adapters.js';
12
17
  export * from './supervised-run.js';
13
18
  export * from './trusted-config.js';
14
19
  export * from './runner-env.js';
20
+ export * from './runner-file-scope.js';
15
21
  export * from './surface-doctor.js';
22
+ export * from './playwright-runner-adapter.js';
23
+ export * from './pytest-runner-adapter.js';
24
+ export * from './vitest-runner-adapter.js';
25
+ export * from './cypress-runner-adapter.js';
16
26
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
@@ -3,14 +3,24 @@
3
3
  * phase 2): bounded static scanning, native reconciliation, kind
4
4
  * inference, the runner adapters, and the pytest diagnostic adapter.
5
5
  */
6
+ export * from './adapter-projection.js';
6
7
  export * from './static-discovery.js';
8
+ export * from './git-ignore.js';
7
9
  export * from './inference.js';
8
10
  export * from './reconcile.js';
11
+ export * from './prepare-barrier.js';
12
+ export { localPlaywrightCliCandidates } from '../runner-resolution.js';
13
+ export { CONFIG_SEARCH_PRUNED_DIRS, PLAYWRIGHT_CONFIG_NAMES } from './config-locations.js';
9
14
  export * from './pytest-adapter.js';
10
15
  export * from './discover.js';
11
16
  export * from './adapters.js';
12
17
  export * from './supervised-run.js';
13
18
  export * from './trusted-config.js';
14
19
  export * from './runner-env.js';
20
+ export * from './runner-file-scope.js';
15
21
  export * from './surface-doctor.js';
22
+ export * from './playwright-runner-adapter.js';
23
+ export * from './pytest-runner-adapter.js';
24
+ export * from './vitest-runner-adapter.js';
25
+ export * from './cypress-runner-adapter.js';
16
26
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/discovery/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAC3F,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * The Playwright runner adapter behind the runner-neutral
3
+ * `RunnerAdapter` contract (plan 2026-09-25 phase 0).
4
+ *
5
+ * This is NOT a rewrite of the Playwright path: every call lands on the
6
+ * code the supervised run already used (`discoverTestCatalog`,
7
+ * `executeSupervisedPlaywright`, `parseOutcomesText`). Its job is to
8
+ * state the four jobs — enumerate, tag, execute, parse — in the shape
9
+ * every other runner will use, so the contract suite has something
10
+ * honest to grade (phase 0 acceptance: "the contract suite runs against
11
+ * the current Playwright path and passes").
12
+ *
13
+ * Compatibility: nothing here is on the supervised-run path. The
14
+ * existing `PlaywrightAdapter` (discovery/adapters.ts) keeps serving the
15
+ * CLI unchanged; this adapter is the contract-shaped view of the same
16
+ * machinery.
17
+ */
18
+ import { type GateforgeConfig } from '@gate-forge/core';
19
+ import type { RunnerExecutionEnvelope } from '@gate-forge/core';
20
+ import type { RunnerAdapter, RunnerChildEnv, RunnerChildEnvContext, RunnerEnumeration, RunnerExecuteRequest, RunnerRawResults, RunnerSessionTag } from '@gate-forge/witness/adapter';
21
+ import { type DiscoverOptions } from './discover.js';
22
+ import { type SupervisedRunOptions } from './supervised-run.js';
23
+ /**
24
+ * Per-test session variables a runner adapter publishes to the test.
25
+ *
26
+ * These are the values the trusted CLI resolves for ONE supervisor-
27
+ * opened session and hands to that test alone. They are new env NAMES
28
+ * (additive — the frozen Playwright child allowlist is untouched, so an
29
+ * existing Playwright user's run env is byte-identical); the Playwright
30
+ * fixture itself receives the same values through the supervisor's
31
+ * session-resolve response rather than through the environment.
32
+ */
33
+ export declare const ENV_SESSION_ID = "GATEFORGE_SESSION_ID";
34
+ export declare const ENV_SESSION_TOKEN = "GATEFORGE_SESSION_TOKEN";
35
+ export declare const ENV_SESSION_PROXY_URL = "GATEFORGE_SESSION_PROXY_URL";
36
+ /** The variables that carry ONE test's identity to its traffic. */
37
+ export declare const PLAYWRIGHT_IDENTITY_ENV: readonly string[];
38
+ /** Options the Playwright runner adapter accepts. */
39
+ export interface PlaywrightRunnerAdapterOptions {
40
+ /** Discovery knobs (native list availability, timeouts). */
41
+ discover?: Omit<DiscoverOptions, 'cwd' | 'config'>;
42
+ /** Pre-loaded config; absent means load `<cwd>/.gateforge.yml`. */
43
+ config?: GateforgeConfig;
44
+ /** Supervised-run knobs (runner command override, timeout). */
45
+ run?: SupervisedRunOptions;
46
+ }
47
+ /** Playwright behind the runner-neutral contract. */
48
+ export declare class PlaywrightRunnerAdapter implements RunnerAdapter {
49
+ private readonly options;
50
+ readonly runner = "playwright";
51
+ readonly capabilities: {
52
+ readonly inventory: "available";
53
+ readonly resolveInstances: "available";
54
+ readonly execute: "available";
55
+ };
56
+ constructor(options?: PlaywrightRunnerAdapterOptions);
57
+ /**
58
+ * Job 1: the expected set, fixed BEFORE the run (static scan
59
+ * reconciled against the native list).
60
+ *
61
+ * Args:
62
+ * cwd: absolute repo root the playwright configuration lives under.
63
+ *
64
+ * Returns:
65
+ * Promise<RunnerEnumeration>: the enumerated tests, or an
66
+ * `unavailable` verdict. A project with no configured tests is
67
+ * `unavailable`, never an empty `discovered` list: nothing executed
68
+ * proves nothing.
69
+ */
70
+ enumerate(cwd: string): Promise<RunnerEnumeration>;
71
+ /**
72
+ * Job 2: the per-test tag. Playwright's channel is the session proxy
73
+ * origin: the fixture resolves the supervisor-opened session for the
74
+ * current test and routes the page through that origin, so every
75
+ * exchange — absolute paths included — is attributed to THAT session.
76
+ *
77
+ * Args:
78
+ * session: the test being tagged.
79
+ * context: run-scoped, non-secret witness wiring.
80
+ *
81
+ * Returns:
82
+ * RunnerChildEnv: the run identity plus the session-scoped tag.
83
+ */
84
+ childEnv(_session: RunnerSessionTag, context: RunnerChildEnvContext): RunnerChildEnv;
85
+ /**
86
+ * Job 3: the supervised run (unchanged machinery, contract shape).
87
+ *
88
+ * Args:
89
+ * request: the exact selection, run identity, and wall-clock bound.
90
+ *
91
+ * Returns:
92
+ * Promise<RunnerExecutionEnvelope>: the structured outcome envelope.
93
+ */
94
+ execute(request: RunnerExecuteRequest): Promise<RunnerExecutionEnvelope>;
95
+ /**
96
+ * Job 4: the gateforge reporter's runner-outcomes document, through
97
+ * the SAME validation and mapping the supervised run uses.
98
+ *
99
+ * Args:
100
+ * raw: the outcomes document JSON text plus the runner exit status.
101
+ *
102
+ * Returns:
103
+ * RunnerExecutionEnvelope: reporter input, never a verdict. An
104
+ * unreadable or malformed document is `complete: false`.
105
+ */
106
+ parseResults(raw: RunnerRawResults): RunnerExecutionEnvelope;
107
+ }
108
+ //# sourceMappingURL=playwright-runner-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-runner-adapter.d.ts","sourceRoot":"","sources":["../../src/discovery/playwright-runner-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EAAkD,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhH;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,yBAAyB,CAAC;AACrD,eAAO,MAAM,iBAAiB,4BAA4B,CAAC;AAC3D,eAAO,MAAM,qBAAqB,gCAAgC,CAAC;AAEnE,mEAAmE;AACnE,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAIpD,CAAC;AAEF,qDAAqD;AACrD,MAAM,WAAW,8BAA8B;IAC7C,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAC;IACnD,mEAAmE;IACnE,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,+DAA+D;IAC/D,GAAG,CAAC,EAAE,oBAAoB,CAAC;CAC5B;AAED,qDAAqD;AACrD,qBAAa,uBAAwB,YAAW,aAAa;IAS/C,OAAO,CAAC,QAAQ,CAAC,OAAO;IARpC,QAAQ,CAAC,MAAM,gBAAgB;IAE/B,QAAQ,CAAC,YAAY;;;;MAIV;gBAEkB,OAAO,GAAE,8BAAmC;IAEzE;;;;;;;;;;;;OAYG;IACG,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAmDxD;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,qBAAqB,GAAG,cAAc;IAiBpF;;;;;;;;OAQG;IACG,OAAO,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAkB9E;;;;;;;;;;OAUG;IACH,YAAY,CAAC,GAAG,EAAE,gBAAgB,GAAG,uBAAuB;CAG7D"}
@@ -0,0 +1,185 @@
1
+ /**
2
+ * The Playwright runner adapter behind the runner-neutral
3
+ * `RunnerAdapter` contract (plan 2026-09-25 phase 0).
4
+ *
5
+ * This is NOT a rewrite of the Playwright path: every call lands on the
6
+ * code the supervised run already used (`discoverTestCatalog`,
7
+ * `executeSupervisedPlaywright`, `parseOutcomesText`). Its job is to
8
+ * state the four jobs — enumerate, tag, execute, parse — in the shape
9
+ * every other runner will use, so the contract suite has something
10
+ * honest to grade (phase 0 acceptance: "the contract suite runs against
11
+ * the current Playwright path and passes").
12
+ *
13
+ * Compatibility: nothing here is on the supervised-run path. The
14
+ * existing `PlaywrightAdapter` (discovery/adapters.ts) keeps serving the
15
+ * CLI unchanged; this adapter is the contract-shaped view of the same
16
+ * machinery.
17
+ */
18
+ import { loadConfig } from '@gate-forge/core';
19
+ import { ENV_APP_BASE_URL, ENV_RUN_TOKEN, ENV_WITNESS_URL } from '../constants.js';
20
+ import { discoverTestCatalog } from './discover.js';
21
+ import { executeSupervisedPlaywright, parseOutcomesText } from './supervised-run.js';
22
+ /**
23
+ * Per-test session variables a runner adapter publishes to the test.
24
+ *
25
+ * These are the values the trusted CLI resolves for ONE supervisor-
26
+ * opened session and hands to that test alone. They are new env NAMES
27
+ * (additive — the frozen Playwright child allowlist is untouched, so an
28
+ * existing Playwright user's run env is byte-identical); the Playwright
29
+ * fixture itself receives the same values through the supervisor's
30
+ * session-resolve response rather than through the environment.
31
+ */
32
+ export const ENV_SESSION_ID = 'GATEFORGE_SESSION_ID';
33
+ export const ENV_SESSION_TOKEN = 'GATEFORGE_SESSION_TOKEN';
34
+ export const ENV_SESSION_PROXY_URL = 'GATEFORGE_SESSION_PROXY_URL';
35
+ /** The variables that carry ONE test's identity to its traffic. */
36
+ export const PLAYWRIGHT_IDENTITY_ENV = [
37
+ ENV_SESSION_ID,
38
+ ENV_SESSION_TOKEN,
39
+ ENV_SESSION_PROXY_URL,
40
+ ];
41
+ /** Playwright behind the runner-neutral contract. */
42
+ export class PlaywrightRunnerAdapter {
43
+ options;
44
+ runner = 'playwright';
45
+ capabilities = {
46
+ inventory: 'available',
47
+ resolveInstances: 'available',
48
+ execute: 'available',
49
+ };
50
+ constructor(options = {}) {
51
+ this.options = options;
52
+ }
53
+ /**
54
+ * Job 1: the expected set, fixed BEFORE the run (static scan
55
+ * reconciled against the native list).
56
+ *
57
+ * Args:
58
+ * cwd: absolute repo root the playwright configuration lives under.
59
+ *
60
+ * Returns:
61
+ * Promise<RunnerEnumeration>: the enumerated tests, or an
62
+ * `unavailable` verdict. A project with no configured tests is
63
+ * `unavailable`, never an empty `discovered` list: nothing executed
64
+ * proves nothing.
65
+ */
66
+ async enumerate(cwd) {
67
+ let config;
68
+ try {
69
+ config = this.options.config ?? loadConfig(`${cwd}/.gateforge.yml`);
70
+ }
71
+ catch (error) {
72
+ return {
73
+ status: 'unavailable',
74
+ detail: `playwright enumeration could not load the gateforge config: ${describeError(error)}`,
75
+ tests: [],
76
+ };
77
+ }
78
+ let catalog;
79
+ try {
80
+ const discovered = await discoverTestCatalog({ cwd, config, ...this.options.discover });
81
+ catalog = discovered.catalog;
82
+ }
83
+ catch (error) {
84
+ return {
85
+ status: 'unavailable',
86
+ detail: `playwright enumeration failed: ${describeError(error)}`,
87
+ tests: [],
88
+ };
89
+ }
90
+ const tests = catalog.entries
91
+ .filter((entry) => entry.runner === 'playwright')
92
+ .map((entry) => ({
93
+ logicalKey: entry.logicalKey,
94
+ project: entry.project,
95
+ file: entry.file,
96
+ titlePath: entry.titlePath,
97
+ blockingAnnotations: [
98
+ ...new Set(entry.suppressionSignals
99
+ .filter((signal) => signal.kind === 'only' || signal.kind === 'skip' || signal.kind === 'fixme')
100
+ .map((signal) => signal.kind)),
101
+ ].sort(),
102
+ // The native reporter's own instance id (the same value the
103
+ // supervised registration path uses).
104
+ frameworkId: entry.parameterIdentity ?? undefined,
105
+ }))
106
+ .sort((a, b) => (a.logicalKey < b.logicalKey ? -1 : a.logicalKey > b.logicalKey ? 1 : 0));
107
+ if (tests.length === 0) {
108
+ return {
109
+ status: 'unavailable',
110
+ detail: `playwright enumeration found no tests under ${cwd} — a zero-test run never proves coverage`,
111
+ tests: [],
112
+ };
113
+ }
114
+ return { status: 'discovered', detail: `enumerated ${String(tests.length)} playwright test(s)`, tests };
115
+ }
116
+ /**
117
+ * Job 2: the per-test tag. Playwright's channel is the session proxy
118
+ * origin: the fixture resolves the supervisor-opened session for the
119
+ * current test and routes the page through that origin, so every
120
+ * exchange — absolute paths included — is attributed to THAT session.
121
+ *
122
+ * Args:
123
+ * session: the test being tagged.
124
+ * context: run-scoped, non-secret witness wiring.
125
+ *
126
+ * Returns:
127
+ * RunnerChildEnv: the run identity plus the session-scoped tag.
128
+ */
129
+ childEnv(_session, context) {
130
+ return {
131
+ vars: {
132
+ [ENV_WITNESS_URL]: context.witnessUrl,
133
+ [ENV_RUN_TOKEN]: context.runToken,
134
+ [ENV_APP_BASE_URL]: context.appBaseUrl,
135
+ [ENV_SESSION_ID]: context.sessionId,
136
+ [ENV_SESSION_TOKEN]: context.sessionToken,
137
+ [ENV_SESSION_PROXY_URL]: context.sessionProxyUrl,
138
+ },
139
+ tagChannel: 'session-proxy',
140
+ identityVars: PLAYWRIGHT_IDENTITY_ENV,
141
+ mechanism: 'gateforge playwright fixture resolves the supervisor session for the running test and routes its page through the per-test session proxy origin',
142
+ };
143
+ }
144
+ /**
145
+ * Job 3: the supervised run (unchanged machinery, contract shape).
146
+ *
147
+ * Args:
148
+ * request: the exact selection, run identity, and wall-clock bound.
149
+ *
150
+ * Returns:
151
+ * Promise<RunnerExecutionEnvelope>: the structured outcome envelope.
152
+ */
153
+ async execute(request) {
154
+ return executeSupervisedPlaywright({ logicalKeys: request.logicalKeys }, { stateDir: request.stateDir, runId: request.runId, vars: {} }, {
155
+ cwd: request.cwd,
156
+ timeoutMs: request.timeoutMs,
157
+ // The project selection is part of the identity join key: a run
158
+ // that does not select the enumerated projects reports outcomes
159
+ // under different identities than the expected set was fixed
160
+ // with, and supervision (correctly) calls them unplanned.
161
+ ...(request.testLocations !== undefined ? { testLocations: request.testLocations } : {}),
162
+ ...(request.projects !== undefined ? { projects: request.projects } : {}),
163
+ ...this.options.run,
164
+ });
165
+ }
166
+ /**
167
+ * Job 4: the gateforge reporter's runner-outcomes document, through
168
+ * the SAME validation and mapping the supervised run uses.
169
+ *
170
+ * Args:
171
+ * raw: the outcomes document JSON text plus the runner exit status.
172
+ *
173
+ * Returns:
174
+ * RunnerExecutionEnvelope: reporter input, never a verdict. An
175
+ * unreadable or malformed document is `complete: false`.
176
+ */
177
+ parseResults(raw) {
178
+ return parseOutcomesText(raw.report, raw.processExit);
179
+ }
180
+ }
181
+ /** Single-line message of an unknown thrown value. */
182
+ function describeError(error) {
183
+ return error instanceof Error ? error.message : String(error);
184
+ }
185
+ //# sourceMappingURL=playwright-runner-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwright-runner-adapter.js","sourceRoot":"","sources":["../../src/discovery/playwright-runner-adapter.ts"],"names":[],"mappings":"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"}