flakelab 0.1.0 → 0.1.2

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 (322) hide show
  1. package/README.md +225 -38
  2. package/dist/analysis/blob-report.d.ts +15 -0
  3. package/dist/analysis/blob-report.js +137 -0
  4. package/dist/analysis/blob-report.js.map +1 -0
  5. package/dist/analysis/cli.d.ts +7 -0
  6. package/dist/analysis/cli.js +28 -0
  7. package/dist/analysis/cli.js.map +1 -0
  8. package/dist/analysis/schema.d.ts +175 -0
  9. package/dist/analysis/schema.js +34 -0
  10. package/dist/analysis/schema.js.map +1 -0
  11. package/dist/analysis/zip-archive.d.ts +6 -0
  12. package/dist/analysis/zip-archive.js +193 -0
  13. package/dist/analysis/zip-archive.js.map +1 -0
  14. package/dist/artifacts/paths.d.ts +3 -0
  15. package/dist/artifacts/paths.js +34 -0
  16. package/dist/artifacts/paths.js.map +1 -0
  17. package/dist/artifacts/retention.d.ts +1 -0
  18. package/dist/artifacts/retention.js +80 -0
  19. package/dist/artifacts/retention.js.map +1 -0
  20. package/dist/bisect/engine.js +0 -1
  21. package/dist/bisect/engine.js.map +1 -1
  22. package/dist/bisect/schema.d.ts +5 -6
  23. package/dist/bisect/schema.js +1 -2
  24. package/dist/bisect/schema.js.map +1 -1
  25. package/dist/bisect/solari-evaluator.js +9 -1
  26. package/dist/bisect/solari-evaluator.js.map +1 -1
  27. package/dist/ci/job-summary.d.ts +2 -0
  28. package/dist/ci/job-summary.js +120 -2
  29. package/dist/ci/job-summary.js.map +1 -1
  30. package/dist/ci/select-command.js +1 -1
  31. package/dist/ci/select-command.js.map +1 -1
  32. package/dist/ci/summary-command.js +12 -7
  33. package/dist/ci/summary-command.js.map +1 -1
  34. package/dist/cli-arguments.d.ts +44 -0
  35. package/dist/cli-arguments.js +356 -0
  36. package/dist/cli-arguments.js.map +1 -0
  37. package/dist/cli-command-help.d.ts +11 -0
  38. package/dist/cli-command-help.js +211 -0
  39. package/dist/cli-command-help.js.map +1 -0
  40. package/dist/cli-help.d.ts +5 -2
  41. package/dist/cli-help.js +122 -45
  42. package/dist/cli-help.js.map +1 -1
  43. package/dist/cli-option-definitions.d.ts +202 -0
  44. package/dist/cli-option-definitions.js +59 -0
  45. package/dist/cli-option-definitions.js.map +1 -0
  46. package/dist/cli.js +100 -100
  47. package/dist/cli.js.map +1 -1
  48. package/dist/commands/analyze-summary.d.ts +5 -0
  49. package/dist/commands/analyze-summary.js +89 -0
  50. package/dist/commands/analyze-summary.js.map +1 -0
  51. package/dist/commands/analyze.d.ts +6 -0
  52. package/dist/commands/analyze.js +128 -0
  53. package/dist/commands/analyze.js.map +1 -0
  54. package/dist/commands/bisect.d.ts +2 -2
  55. package/dist/commands/bisect.js +32 -3
  56. package/dist/commands/bisect.js.map +1 -1
  57. package/dist/commands/diagnose.d.ts +3 -2
  58. package/dist/commands/diagnose.js +355 -23
  59. package/dist/commands/diagnose.js.map +1 -1
  60. package/dist/commands/discover.d.ts +18 -2
  61. package/dist/commands/discover.js +215 -25
  62. package/dist/commands/discover.js.map +1 -1
  63. package/dist/commands/doctor.d.ts +2 -0
  64. package/dist/commands/doctor.js +66 -25
  65. package/dist/commands/doctor.js.map +1 -1
  66. package/dist/commands/investigate.d.ts +3 -2
  67. package/dist/commands/investigate.js +22 -3
  68. package/dist/commands/investigate.js.map +1 -1
  69. package/dist/commands/options.d.ts +123 -16
  70. package/dist/commands/options.js +24 -2
  71. package/dist/commands/options.js.map +1 -1
  72. package/dist/commands/prove.d.ts +2 -2
  73. package/dist/commands/prove.js +38 -1
  74. package/dist/commands/prove.js.map +1 -1
  75. package/dist/commands/repair.d.ts +8 -2
  76. package/dist/commands/repair.js +32 -9
  77. package/dist/commands/repair.js.map +1 -1
  78. package/dist/commands/replay.d.ts +2 -2
  79. package/dist/commands/replay.js +15 -2
  80. package/dist/commands/replay.js.map +1 -1
  81. package/dist/commands/report.d.ts +2 -2
  82. package/dist/commands/report.js +35 -10
  83. package/dist/commands/report.js.map +1 -1
  84. package/dist/commands/scan-summary.d.ts +7 -0
  85. package/dist/commands/scan-summary.js +175 -0
  86. package/dist/commands/scan-summary.js.map +1 -0
  87. package/dist/commands/scan.d.ts +9 -12
  88. package/dist/commands/scan.js +66 -62
  89. package/dist/commands/scan.js.map +1 -1
  90. package/dist/core/plan.js +1 -1
  91. package/dist/core/plan.js.map +1 -1
  92. package/dist/diagnosis/checkpoint.d.ts +6 -0
  93. package/dist/diagnosis/checkpoint.js +46 -0
  94. package/dist/diagnosis/checkpoint.js.map +1 -0
  95. package/dist/diagnosis/cli.d.ts +7 -0
  96. package/dist/diagnosis/cli.js +84 -0
  97. package/dist/diagnosis/cli.js.map +1 -0
  98. package/dist/diagnosis/recommendation.d.ts +13 -0
  99. package/dist/diagnosis/recommendation.js +95 -0
  100. package/dist/diagnosis/recommendation.js.map +1 -0
  101. package/dist/diagnosis/run-state.d.ts +52 -0
  102. package/dist/diagnosis/run-state.js +173 -0
  103. package/dist/diagnosis/run-state.js.map +1 -0
  104. package/dist/diagnosis/schema.d.ts +207 -0
  105. package/dist/diagnosis/schema.js +108 -0
  106. package/dist/diagnosis/schema.js.map +1 -0
  107. package/dist/diagnosis/solari-handoff.d.ts +9 -0
  108. package/dist/diagnosis/solari-handoff.js +40 -0
  109. package/dist/diagnosis/solari-handoff.js.map +1 -0
  110. package/dist/diagnosis/summary.d.ts +3 -0
  111. package/dist/diagnosis/summary.js +115 -0
  112. package/dist/diagnosis/summary.js.map +1 -0
  113. package/dist/discovery/auth-cookie.d.ts +19 -0
  114. package/dist/discovery/auth-cookie.js +26 -0
  115. package/dist/discovery/auth-cookie.js.map +1 -0
  116. package/dist/discovery/evaluate.d.ts +35 -2
  117. package/dist/discovery/evaluate.js +136 -30
  118. package/dist/discovery/evaluate.js.map +1 -1
  119. package/dist/discovery/event-loop.d.ts +25 -0
  120. package/dist/discovery/event-loop.js +84 -0
  121. package/dist/discovery/event-loop.js.map +1 -0
  122. package/dist/discovery/minimize.d.ts +61 -1
  123. package/dist/discovery/minimize.js +179 -7
  124. package/dist/discovery/minimize.js.map +1 -1
  125. package/dist/discovery/resource-loading.d.ts +25 -0
  126. package/dist/discovery/resource-loading.js +84 -0
  127. package/dist/discovery/resource-loading.js.map +1 -0
  128. package/dist/discovery/runner-environment.d.ts +26 -0
  129. package/dist/discovery/runner-environment.js +68 -0
  130. package/dist/discovery/runner-environment.js.map +1 -0
  131. package/dist/discovery/startup-event.d.ts +25 -0
  132. package/dist/discovery/startup-event.js +84 -0
  133. package/dist/discovery/startup-event.js.map +1 -0
  134. package/dist/discovery/storage-state.d.ts +26 -0
  135. package/dist/discovery/storage-state.js +86 -0
  136. package/dist/discovery/storage-state.js.map +1 -0
  137. package/dist/discovery/temporal-environment.d.ts +31 -0
  138. package/dist/discovery/temporal-environment.js +43 -0
  139. package/dist/discovery/temporal-environment.js.map +1 -0
  140. package/dist/discovery/visual-environment.d.ts +28 -0
  141. package/dist/discovery/visual-environment.js +42 -0
  142. package/dist/discovery/visual-environment.js.map +1 -0
  143. package/dist/domain/schema.d.ts +840 -20
  144. package/dist/domain/schema.js +216 -6
  145. package/dist/domain/schema.js.map +1 -1
  146. package/dist/faults/browser-context.d.ts +16 -0
  147. package/dist/faults/browser-context.js +60 -0
  148. package/dist/faults/browser-context.js.map +1 -0
  149. package/dist/faults/cookie-header.d.ts +5 -0
  150. package/dist/faults/cookie-header.js +25 -0
  151. package/dist/faults/cookie-header.js.map +1 -0
  152. package/dist/faults/document-bootstrap.d.ts +5 -0
  153. package/dist/faults/document-bootstrap.js +141 -0
  154. package/dist/faults/document-bootstrap.js.map +1 -0
  155. package/dist/faults/install.d.ts +1 -1
  156. package/dist/faults/install.js +199 -6
  157. package/dist/faults/install.js.map +1 -1
  158. package/dist/faults/pattern.d.ts +1 -0
  159. package/dist/faults/pattern.js +24 -0
  160. package/dist/faults/pattern.js.map +1 -0
  161. package/dist/investigator/agent.js +39 -17
  162. package/dist/investigator/agent.js.map +1 -1
  163. package/dist/investigator/ledger.d.ts +1 -1
  164. package/dist/investigator/ledger.js +2 -2
  165. package/dist/investigator/ledger.js.map +1 -1
  166. package/dist/investigator/safe-source.d.ts +1 -0
  167. package/dist/investigator/safe-source.js +12 -3
  168. package/dist/investigator/safe-source.js.map +1 -1
  169. package/dist/investigator/schema.d.ts +293 -2
  170. package/dist/investigator/schema.js +100 -2
  171. package/dist/investigator/schema.js.map +1 -1
  172. package/dist/proof/cli.d.ts +7 -0
  173. package/dist/proof/cli.js +108 -0
  174. package/dist/proof/cli.js.map +1 -0
  175. package/dist/proof/preflight.d.ts +4 -0
  176. package/dist/proof/preflight.js +9 -0
  177. package/dist/proof/preflight.js.map +1 -0
  178. package/dist/repair/generator.d.ts +12 -1
  179. package/dist/repair/generator.js +30 -6
  180. package/dist/repair/generator.js.map +1 -1
  181. package/dist/repair/remote-proof-runner.js +6 -10
  182. package/dist/repair/remote-proof-runner.js.map +1 -1
  183. package/dist/repair/schema.d.ts +77 -2
  184. package/dist/repair/schema.js +23 -2
  185. package/dist/repair/schema.js.map +1 -1
  186. package/dist/repair/solari-validator.d.ts +2 -0
  187. package/dist/repair/solari-validator.js +4 -6
  188. package/dist/repair/solari-validator.js.map +1 -1
  189. package/dist/repair/summary.d.ts +10 -0
  190. package/dist/repair/summary.js +58 -0
  191. package/dist/repair/summary.js.map +1 -0
  192. package/dist/repair/validator.d.ts +1 -0
  193. package/dist/repair/validator.js +53 -12
  194. package/dist/repair/validator.js.map +1 -1
  195. package/dist/report/bundle.js +16 -37
  196. package/dist/report/bundle.js.map +1 -1
  197. package/dist/report/model.js +131 -12
  198. package/dist/report/model.js.map +1 -1
  199. package/dist/report/open.d.ts +9 -0
  200. package/dist/report/open.js +23 -0
  201. package/dist/report/open.js.map +1 -1
  202. package/dist/report/report-client.css +2 -0
  203. package/dist/report/report-client.js +58 -0
  204. package/dist/report/schema.d.ts +115 -5
  205. package/dist/report/schema.js +24 -5
  206. package/dist/report/schema.js.map +1 -1
  207. package/dist/reproducer/schema.d.ts +89 -4
  208. package/dist/reproducer/schema.js +3 -4
  209. package/dist/reproducer/schema.js.map +1 -1
  210. package/dist/runner/execution-fault.d.ts +10 -0
  211. package/dist/runner/execution-fault.js +24 -0
  212. package/dist/runner/execution-fault.js.map +1 -0
  213. package/dist/runner/fault-proxy.d.ts +7 -0
  214. package/dist/runner/fault-proxy.js +366 -0
  215. package/dist/runner/fault-proxy.js.map +1 -0
  216. package/dist/runner/local.js +2 -2
  217. package/dist/runner/local.js.map +1 -1
  218. package/dist/runner/native-scan.d.ts +25 -0
  219. package/dist/runner/native-scan.js +306 -0
  220. package/dist/runner/native-scan.js.map +1 -0
  221. package/dist/runner/playwright-executor.d.ts +3 -0
  222. package/dist/runner/playwright-executor.js +125 -66
  223. package/dist/runner/playwright-executor.js.map +1 -1
  224. package/dist/runner/process-tree.d.ts +7 -0
  225. package/dist/runner/process-tree.js +62 -0
  226. package/dist/runner/process-tree.js.map +1 -0
  227. package/dist/runner/project-bridge.d.ts +7 -0
  228. package/dist/runner/project-bridge.js +83 -0
  229. package/dist/runner/project-bridge.js.map +1 -0
  230. package/dist/runner/trial-reporter.d.ts +7 -0
  231. package/dist/runner/trial-reporter.js +47 -0
  232. package/dist/runner/trial-reporter.js.map +1 -0
  233. package/dist/scan/failure-clusters.d.ts +24 -0
  234. package/dist/scan/failure-clusters.js +74 -0
  235. package/dist/scan/failure-clusters.js.map +1 -0
  236. package/dist/scan/schema.d.ts +170 -0
  237. package/dist/scan/schema.js +71 -0
  238. package/dist/scan/schema.js.map +1 -0
  239. package/dist/solari/executor.d.ts +5 -1
  240. package/dist/solari/executor.js +25 -17
  241. package/dist/solari/executor.js.map +1 -1
  242. package/dist/solari/run-demo.d.ts +13 -1
  243. package/dist/solari/run-demo.js +35 -16
  244. package/dist/solari/run-demo.js.map +1 -1
  245. package/dist/solari/usage.d.ts +8 -2
  246. package/dist/solari/usage.js +14 -4
  247. package/dist/solari/usage.js.map +1 -1
  248. package/dist/ui/boundary.d.ts +17 -0
  249. package/dist/ui/boundary.js +18 -0
  250. package/dist/ui/boundary.js.map +1 -0
  251. package/dist/ui/console.d.ts +4 -0
  252. package/dist/ui/console.js +11 -0
  253. package/dist/ui/console.js.map +1 -0
  254. package/dist/ui/document.d.ts +40 -0
  255. package/dist/ui/document.js +120 -0
  256. package/dist/ui/document.js.map +1 -0
  257. package/dist/ui/format.d.ts +8 -0
  258. package/dist/ui/format.js +32 -0
  259. package/dist/ui/format.js.map +1 -0
  260. package/dist/ui/progress.d.ts +17 -1
  261. package/dist/ui/progress.js +51 -8
  262. package/dist/ui/progress.js.map +1 -1
  263. package/dist/ui/status.d.ts +7 -0
  264. package/dist/ui/status.js +36 -0
  265. package/dist/ui/status.js.map +1 -0
  266. package/dist/ui/style.d.ts +8 -0
  267. package/dist/ui/style.js +22 -0
  268. package/dist/ui/style.js.map +1 -0
  269. package/dist/ui/text.d.ts +17 -0
  270. package/dist/ui/text.js +123 -0
  271. package/dist/ui/text.js.map +1 -0
  272. package/dist/ui/theme.d.ts +23 -0
  273. package/dist/ui/theme.js +77 -0
  274. package/dist/ui/theme.js.map +1 -0
  275. package/dist/ui/trial-progress.d.ts +13 -0
  276. package/dist/ui/trial-progress.js +42 -0
  277. package/dist/ui/trial-progress.js.map +1 -0
  278. package/package.json +14 -19
  279. package/dist/faults/network-delay.d.ts +0 -5
  280. package/dist/faults/network-delay.js +0 -34
  281. package/dist/faults/network-delay.js.map +0 -1
  282. package/dist/faults/request-failure.d.ts +0 -5
  283. package/dist/faults/request-failure.js +0 -24
  284. package/dist/faults/request-failure.js.map +0 -1
  285. package/dist/playwright.d.ts +0 -3
  286. package/dist/playwright.js +0 -21
  287. package/dist/playwright.js.map +0 -1
  288. package/dist/report/browser-entry.d.ts +0 -2
  289. package/dist/report/browser-entry.js +0 -15
  290. package/dist/report/browser-entry.js.map +0 -1
  291. package/dist/report/components/artifacts.d.ts +0 -4
  292. package/dist/report/components/artifacts.js +0 -6
  293. package/dist/report/components/artifacts.js.map +0 -1
  294. package/dist/report/components/experiments.d.ts +0 -4
  295. package/dist/report/components/experiments.js +0 -7
  296. package/dist/report/components/experiments.js.map +0 -1
  297. package/dist/report/components/hypotheses.d.ts +0 -4
  298. package/dist/report/components/hypotheses.js +0 -26
  299. package/dist/report/components/hypotheses.js.map +0 -1
  300. package/dist/report/components/indicators.d.ts +0 -32
  301. package/dist/report/components/indicators.js +0 -42
  302. package/dist/report/components/indicators.js.map +0 -1
  303. package/dist/report/components/layout.d.ts +0 -29
  304. package/dist/report/components/layout.js +0 -20
  305. package/dist/report/components/layout.js.map +0 -1
  306. package/dist/report/components/proof.d.ts +0 -4
  307. package/dist/report/components/proof.js +0 -34
  308. package/dist/report/components/proof.js.map +0 -1
  309. package/dist/report/components/reproduction.d.ts +0 -4
  310. package/dist/report/components/reproduction.js +0 -19
  311. package/dist/report/components/reproduction.js.map +0 -1
  312. package/dist/report/components/summary.d.ts +0 -4
  313. package/dist/report/components/summary.js +0 -12
  314. package/dist/report/components/summary.js.map +0 -1
  315. package/dist/report/components/verdict.d.ts +0 -4
  316. package/dist/report/components/verdict.js +0 -27
  317. package/dist/report/components/verdict.js.map +0 -1
  318. package/dist/report/report-app.d.ts +0 -6
  319. package/dist/report/report-app.js +0 -16
  320. package/dist/report/report-app.js.map +0 -1
  321. package/dist/report/report-details.css +0 -182
  322. package/dist/report/report.css +0 -404
@@ -1,9 +1,202 @@
1
- import { installNetworkDelay } from "./network-delay.js";
2
- import { installRequestFailure } from "./request-failure.js";
3
- export async function installFault(page, fault) {
4
- if (fault.kind === "network-delay") {
5
- return installNetworkDelay(page, fault);
1
+ import { randomUUID } from "node:crypto";
2
+ import { setTimeout as delay } from "node:timers/promises";
3
+ import { faultSetSchema } from "../domain/schema.js";
4
+ import { isRunnerExecutionFault } from "../runner/execution-fault.js";
5
+ import { installPageContextFaults, isBrowserContextFault, isImmutableBrowserContextFault, } from "./browser-context.js";
6
+ import { compileUrlPattern } from "./pattern.js";
7
+ import { withoutNamedCookies } from "./cookie-header.js";
8
+ import { documentBootstrapScript, injectDocumentBootstrap, isDocumentBootstrapFault, } from "./document-bootstrap.js";
9
+ function applyResponseMutations(body, faults) {
10
+ return faults.reduce((current, fault) => {
11
+ if (fault.kind === "response-duplication") {
12
+ const duplicate = current.subarray(Math.max(0, current.length - fault.duplicateBytes));
13
+ return Buffer.concat([current, duplicate]);
14
+ }
15
+ if (fault.kind === "response-truncation") {
16
+ return current.subarray(0, Math.max(0, current.length - fault.removeBytes));
17
+ }
18
+ return current;
19
+ }, body);
20
+ }
21
+ function matchingFaults(faults, route) {
22
+ const request = route.request();
23
+ return faults.filter((entry) => {
24
+ if (!entry.expression.test(request.url())) {
25
+ return false;
26
+ }
27
+ if (entry.fault.kind === "resource-loading-delay") {
28
+ return entry.fault.resourceType === request.resourceType();
29
+ }
30
+ if (isBrowserContextFault(entry.fault)) {
31
+ return request.resourceType() === "document";
32
+ }
33
+ return !isDocumentBootstrapFault(entry.fault) || request.resourceType() === "document";
34
+ });
35
+ }
36
+ function responseHoldMs(entries) {
37
+ let total = 0;
38
+ for (const entry of entries) {
39
+ if (entry.fault.kind !== "response-reordering") {
40
+ continue;
41
+ }
42
+ const shouldHold = entry.matches % 2 === 0;
43
+ entry.matches += 1;
44
+ if (shouldHold) {
45
+ total += entry.fault.holdMs;
46
+ }
47
+ }
48
+ return total;
49
+ }
50
+ async function fulfillResponse(route, responseFaults, holdMs, bootstrapScriptPath) {
51
+ const upstream = await route.fetch();
52
+ if (holdMs > 0) {
53
+ await delay(holdMs);
54
+ }
55
+ if (responseFaults.length === 0 && !bootstrapScriptPath) {
56
+ await route.fulfill({ response: upstream });
57
+ return;
58
+ }
59
+ const body = await upstream.body();
60
+ if (body.length > 1_048_576) {
61
+ throw new Error("Response mutation supports response bodies up to 1048576 bytes");
62
+ }
63
+ const withBootstrap = bootstrapScriptPath
64
+ ? injectDocumentBootstrap(body, bootstrapScriptPath)
65
+ : body;
66
+ const mutated = applyResponseMutations(withBootstrap, responseFaults);
67
+ const headers = {
68
+ ...upstream.headers(),
69
+ "content-length": String(mutated.length),
70
+ };
71
+ delete headers["content-encoding"];
72
+ delete headers["transfer-encoding"];
73
+ await route.fulfill({ response: upstream, headers, body: mutated });
74
+ }
75
+ async function withExpiredAuthCookies(route, faults, operation) {
76
+ const cookieNames = faults.flatMap((fault) => fault.kind === "auth-cookie-expiry" ? [fault.cookieName] : []);
77
+ if (cookieNames.length === 0) {
78
+ await operation();
79
+ return;
80
+ }
81
+ const requestHeaders = await route.request().allHeaders();
82
+ const cookieResult = withoutNamedCookies(requestHeaders.cookie, cookieNames);
83
+ if (cookieResult.removedNames.length !== new Set(cookieNames).size) {
84
+ throw new Error("Auth cookie expiry matched a request without every named cookie");
85
+ }
86
+ const context = route.request().frame().page().context();
87
+ const preservedCookies = (await context.cookies()).filter((cookie) => cookieResult.removedNames.includes(cookie.name));
88
+ for (const cookieName of cookieResult.removedNames) {
89
+ await context.clearCookies({ name: cookieName });
90
+ }
91
+ try {
92
+ await operation();
93
+ }
94
+ finally {
95
+ await context.addCookies(preservedCookies);
96
+ }
97
+ }
98
+ function requiresResponseFetch(options) {
99
+ return options.responseFaults.length > 0
100
+ || options.bootstrapFaults.length > 0
101
+ || options.hasReordering;
102
+ }
103
+ async function applyForwardedFaults(route, entries, faults, registerBootstrapScript) {
104
+ const responseFaults = faults.filter((fault) => fault.kind === "response-duplication" || fault.kind === "response-truncation");
105
+ const bootstrapFaults = faults.filter(isDocumentBootstrapFault);
106
+ const holdMs = responseHoldMs(entries);
107
+ const hasReordering = faults.some((fault) => fault.kind === "response-reordering");
108
+ if (!requiresResponseFetch({ bootstrapFaults, hasReordering, responseFaults })) {
109
+ await route.continue();
110
+ return;
111
+ }
112
+ const bootstrapScriptPath = bootstrapFaults.length > 0
113
+ ? registerBootstrapScript(bootstrapFaults)
114
+ : undefined;
115
+ await fulfillResponse(route, responseFaults, holdMs, bootstrapScriptPath);
116
+ }
117
+ async function applyMatchingFaults(route, entries, registerBootstrapScript) {
118
+ const faults = entries.map((entry) => entry.fault);
119
+ const totalDelayMs = faults.reduce((total, fault) => total + (fault.kind === "network-delay" || fault.kind === "resource-loading-delay"
120
+ ? fault.delayMs
121
+ : 0), 0);
122
+ if (totalDelayMs > 0) {
123
+ await delay(totalDelayMs);
124
+ }
125
+ const failure = faults.find((fault) => fault.kind === "request-failure");
126
+ if (failure?.kind === "request-failure") {
127
+ await route.fulfill({
128
+ status: failure.statusCode,
129
+ contentType: "application/json",
130
+ body: '{"error":"flakelab-injected-failure"}',
131
+ });
132
+ return;
133
+ }
134
+ await withExpiredAuthCookies(route, faults, () => applyForwardedFaults(route, entries, faults, registerBootstrapScript));
135
+ }
136
+ export async function installFaults(page, input) {
137
+ const validatedFaults = faultSetSchema.parse(input);
138
+ if (validatedFaults.some(isImmutableBrowserContextFault)) {
139
+ throw new Error("Locale and timezone faults require FlakeLab project-level execution");
140
+ }
141
+ if (validatedFaults.some(isRunnerExecutionFault)) {
142
+ throw new Error("Worker and shared-state faults require FlakeLab project-level execution");
143
+ }
144
+ const faults = validatedFaults.map((fault) => ({
145
+ expression: compileUrlPattern(fault.pattern),
146
+ fault,
147
+ matches: 0,
148
+ }));
149
+ const removePageContextFaults = await installPageContextFaults(page, validatedFaults);
150
+ const bootstrapScriptBase = `/.well-known/flakelab/${randomUUID()}`;
151
+ const bootstrapScripts = new Map();
152
+ let bootstrapScriptIndex = 0;
153
+ const registerBootstrapScript = (bootstrapFaults) => {
154
+ const path = `${bootstrapScriptBase}/${bootstrapScriptIndex}.js`;
155
+ bootstrapScriptIndex += 1;
156
+ bootstrapScripts.set(path, documentBootstrapScript(bootstrapFaults));
157
+ return path;
158
+ };
159
+ const handleRoute = async (route) => {
160
+ const requestUrl = new URL(route.request().url());
161
+ const bootstrapSource = bootstrapScripts.get(requestUrl.pathname);
162
+ if (bootstrapSource) {
163
+ await route.fulfill({
164
+ status: 200,
165
+ contentType: "text/javascript; charset=utf-8",
166
+ body: bootstrapSource,
167
+ });
168
+ return;
169
+ }
170
+ const matching = matchingFaults(faults, route);
171
+ if (matching.length === 0) {
172
+ await route.continue();
173
+ return;
174
+ }
175
+ await applyMatchingFaults(route, matching, registerBootstrapScript);
176
+ };
177
+ const pendingRoutes = new Set();
178
+ const handler = (route) => {
179
+ const pending = handleRoute(route);
180
+ pendingRoutes.add(pending);
181
+ return pending.finally(() => pendingRoutes.delete(pending));
182
+ };
183
+ try {
184
+ await page.route("**/*", handler);
185
+ }
186
+ catch (error) {
187
+ await removePageContextFaults();
188
+ throw error;
6
189
  }
7
- return installRequestFailure(page, fault);
190
+ return async () => {
191
+ await Promise.allSettled([...pendingRoutes]);
192
+ const cleanup = await Promise.allSettled([
193
+ page.unroute("**/*", handler),
194
+ removePageContextFaults(),
195
+ ]);
196
+ bootstrapScripts.clear();
197
+ if (cleanup.some((result) => result.status === "rejected")) {
198
+ throw new Error("FlakeLab could not completely remove direct browser faults");
199
+ }
200
+ };
8
201
  }
9
202
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/faults/install.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAI5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAU,EAAE,KAAY;IACzD,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QACnC,OAAO,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACzC,CAAC;IACD,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;AAC3C,CAAC"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/faults/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAA;AAG1D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AACrE,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,8BAA8B,GAC/B,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,yBAAyB,CAAA;AAUhC,SAAS,sBAAsB,CAAC,IAAY,EAAE,MAAe;IAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE;QACtC,IAAI,KAAK,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAA;YACtF,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YACzC,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;QAC7E,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC,EAAE,IAAI,CAAC,CAAA;AACV,CAAC;AAED,SAAS,cAAc,CAAC,MAAuB,EAAE,KAAY;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;YAC1C,OAAO,KAAK,CAAA;QACd,CAAC;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAClD,OAAO,KAAK,CAAC,KAAK,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,EAAE,CAAA;QAC5D,CAAC;QACD,IAAI,qBAAqB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACvC,OAAO,OAAO,CAAC,YAAY,EAAE,KAAK,UAAU,CAAA;QAC9C,CAAC;QACD,OAAO,CAAC,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,EAAE,KAAK,UAAU,CAAA;IACxF,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,OAAwB;IAC9C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;YAC/C,SAAQ;QACV,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAA;QAC1C,KAAK,CAAC,OAAO,IAAI,CAAC,CAAA;QAClB,IAAI,UAAU,EAAE,CAAC;YACf,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAA;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,KAAY,EACZ,cAAuB,EACvB,MAAc,EACd,mBAA4B;IAE5B,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,CAAA;IACpC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,KAAK,CAAC,MAAM,CAAC,CAAA;IACrB,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;QACxD,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAA;QAC3C,OAAM;IACR,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAClC,IAAI,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAA;IACnF,CAAC;IACD,MAAM,aAAa,GAAG,mBAAmB;QACvC,CAAC,CAAC,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,CAAC;QACpD,CAAC,CAAC,IAAI,CAAA;IACR,MAAM,OAAO,GAAG,sBAAsB,CAAC,aAAa,EAAE,cAAc,CAAC,CAAA;IACrE,MAAM,OAAO,GAA2B;QACtC,GAAG,QAAQ,CAAC,OAAO,EAAE;QACrB,gBAAgB,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACzC,CAAA;IACD,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAClC,OAAO,OAAO,CAAC,mBAAmB,CAAC,CAAA;IACnC,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AACrE,CAAC;AAED,KAAK,UAAU,sBAAsB,CACnC,KAAY,EACZ,MAAe,EACf,SAA8B;IAE9B,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3C,KAAK,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAChE,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,SAAS,EAAE,CAAA;QACjB,OAAM;IACR,CAAC;IACD,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE,CAAA;IACzD,MAAM,YAAY,GAAG,mBAAmB,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAC5E,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,KAAK,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAA;IACpF,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IACxD,MAAM,gBAAgB,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CACnE,YAAY,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAClD,KAAK,MAAM,UAAU,IAAI,YAAY,CAAC,YAAY,EAAE,CAAC;QACnD,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;IAClD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,EAAE,CAAA;IACnB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAA;IAC5C,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,OAI9B;IACC,OAAO,OAAO,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;WACnC,OAAO,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;WAClC,OAAO,CAAC,aAAa,CAAA;AAC5B,CAAC;AAED,KAAK,UAAU,oBAAoB,CACjC,KAAY,EACZ,OAAwB,EACxB,MAAe,EACf,uBAAqE;IAErE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7C,KAAK,CAAC,IAAI,KAAK,sBAAsB,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAA;IAChF,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAA;IAC/D,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACtC,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,qBAAqB,CAAC,CAAA;IAClF,IAAI,CAAC,qBAAqB,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAC/E,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACtB,OAAM;IACR,CAAC;IACD,MAAM,mBAAmB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC;QACpD,CAAC,CAAC,uBAAuB,CAAC,eAAe,CAAC;QAC1C,CAAC,CAAC,SAAS,CAAA;IACb,MAAM,eAAe,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAA;AAC3E,CAAC;AAED,KAAK,UAAU,mBAAmB,CAChC,KAAY,EACZ,OAAwB,EACxB,uBAAqE;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,CACxB,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,KAAK,CAAC,IAAI,KAAK,wBAAwB;QACvE,CAAC,CAAC,KAAK,CAAC,OAAO;QACf,CAAC,CAAC,CAAC,CACN,EACD,CAAC,CACF,CAAA;IACD,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,MAAM,KAAK,CAAC,YAAY,CAAC,CAAA;IAC3B,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAA;IACxE,IAAI,OAAO,EAAE,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACxC,MAAM,KAAK,CAAC,OAAO,CAAC;YAClB,MAAM,EAAE,OAAO,CAAC,UAAU;YAC1B,WAAW,EAAE,kBAAkB;YAC/B,IAAI,EAAE,uCAAuC;SAC9C,CAAC,CAAA;QACF,OAAM;IACR,CAAC;IACD,MAAM,sBAAsB,CAC1B,KAAK,EACL,MAAM,EACN,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,uBAAuB,CAAC,CAC5E,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAU,EAAE,KAAuB;IACrE,MAAM,eAAe,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACnD,IAAI,eAAe,CAAC,IAAI,CAAC,8BAA8B,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,qEAAqE,CAAC,CAAA;IACxF,CAAC;IACD,IAAI,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAA;IAC5F,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAiB,EAAE,CAAC,CAAC;QAC5D,UAAU,EAAE,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC;QAC5C,KAAK;QACL,OAAO,EAAE,CAAC;KACX,CAAC,CAAC,CAAA;IACH,MAAM,uBAAuB,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IACrF,MAAM,mBAAmB,GAAG,yBAAyB,UAAU,EAAE,EAAE,CAAA;IACnE,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAkB,CAAA;IAClD,IAAI,oBAAoB,GAAG,CAAC,CAAA;IAC5B,MAAM,uBAAuB,GAAG,CAAC,eAAyC,EAAU,EAAE;QACpF,MAAM,IAAI,GAAG,GAAG,mBAAmB,IAAI,oBAAoB,KAAK,CAAA;QAChE,oBAAoB,IAAI,CAAC,CAAA;QACzB,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,uBAAuB,CAAC,eAAe,CAAC,CAAC,CAAA;QACpE,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,MAAM,WAAW,GAAG,KAAK,EAAE,KAAY,EAAiB,EAAE;QACxD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAA;QACjD,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAA;QACjE,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,KAAK,CAAC,OAAO,CAAC;gBAClB,MAAM,EAAE,GAAG;gBACX,WAAW,EAAE,gCAAgC;gBAC7C,IAAI,EAAE,eAAe;aACtB,CAAC,CAAA;YACF,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;YACtB,OAAM;QACR,CAAC;QACD,MAAM,mBAAmB,CAAC,KAAK,EAAE,QAAQ,EAAE,uBAAuB,CAAC,CAAA;IACrE,CAAC,CAAA;IACD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAiB,CAAA;IAC9C,MAAM,OAAO,GAAG,CAAC,KAAY,EAAiB,EAAE;QAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAAC,CAAA;QAClC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC1B,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7D,CAAC,CAAA;IACD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,uBAAuB,EAAE,CAAA;QAC/B,MAAM,KAAK,CAAA;IACb,CAAC;IACD,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAA;QAC5C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC;YAC7B,uBAAuB,EAAE;SAC1B,CAAC,CAAA;QACF,gBAAgB,CAAC,KAAK,EAAE,CAAA;QACxB,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC;YAC3D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;QAC/E,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function compileUrlPattern(pattern: string): RegExp;
@@ -0,0 +1,24 @@
1
+ export function compileUrlPattern(pattern) {
2
+ if (/[{}]/u.test(pattern)) {
3
+ throw new Error("Fault patterns currently support *, **, and ? wildcards");
4
+ }
5
+ let expression = "";
6
+ for (let index = 0; index < pattern.length; index += 1) {
7
+ const character = pattern[index];
8
+ if (character === "*" && pattern[index + 1] === "*") {
9
+ expression += ".*";
10
+ index += 1;
11
+ }
12
+ else if (character === "*") {
13
+ expression += "[^/]*";
14
+ }
15
+ else if (character === "?") {
16
+ expression += ".";
17
+ }
18
+ else {
19
+ expression += character.replace(/[\\^$.*+?()[\]|]/gu, "\\$&");
20
+ }
21
+ }
22
+ return new RegExp(`^${expression}$`, "u");
23
+ }
24
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/faults/pattern.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAC/C,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IACD,IAAI,UAAU,GAAG,EAAE,CAAA;IACnB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvD,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAChC,IAAI,SAAS,KAAK,GAAG,IAAI,OAAO,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;YACpD,UAAU,IAAI,IAAI,CAAA;YAClB,KAAK,IAAI,CAAC,CAAA;QACZ,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,UAAU,IAAI,OAAO,CAAA;QACvB,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAC7B,UAAU,IAAI,GAAG,CAAA;QACnB,CAAC;aAAM,CAAC;YACN,UAAU,IAAI,SAAS,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAA;QAC/D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,IAAI,UAAU,GAAG,EAAE,GAAG,CAAC,CAAA;AAC3C,CAAC"}
@@ -28,14 +28,19 @@ const assessmentSchema = z.object({
28
28
  conclusion: z.string().min(30).max(2_000),
29
29
  conclusionEvidenceIds: z.array(z.string().regex(/^E\d+$/u)).min(1),
30
30
  });
31
- function conditionToFault(condition, pattern) {
32
- if (condition.kind === "network-delay") {
33
- return { ...condition, pattern };
31
+ function conditionToFault(condition, pattern, test) {
32
+ if (condition.kind === "baseline") {
33
+ return undefined;
34
34
  }
35
- if (condition.kind === "request-failure") {
36
- return { ...condition, pattern };
37
- }
38
- return undefined;
35
+ const faultPattern = condition.kind === "worker-pressure"
36
+ || condition.kind === "shared-state-interference"
37
+ ? test
38
+ : pattern;
39
+ return { ...condition, pattern: faultPattern };
40
+ }
41
+ function conditionToFaults(condition, pattern, test) {
42
+ const fault = conditionToFault(condition, pattern, test);
43
+ return fault ? [fault] : [];
39
44
  }
40
45
  function estimatedCost(inputTokens, outputTokens, options) {
41
46
  return (inputTokens * options.inputUsdPerMillion
@@ -45,9 +50,21 @@ function planningPrompt(test, sources, maximumDelayMs) {
45
50
  return [
46
51
  "You are planning a causal investigation of a flaky Playwright test.",
47
52
  "Propose two or three competing, falsifiable hypotheses and exactly three experiments.",
48
- "The experiment batch must contain a clean baseline, a network-delay condition, and a",
49
- "request-failure condition. Associate each experiment with the hypothesis it tests by",
50
- `zero-based hypothesisIndex. Network delay cannot exceed ${maximumDelayMs} ms.`,
53
+ "The experiment batch must contain a clean baseline and two different interventions chosen",
54
+ "from network delay, request failure, response truncation, response duplication, and response",
55
+ "reordering, resource loading delay, startup event delay, a bounded event-loop stall, named",
56
+ "auth-cookie expiry, delayed visibility of a named local/session-storage entry, a bounded",
57
+ "wall-clock jump, a BCP 47 locale, an IANA timezone, a bounded viewport, reduced motion,",
58
+ "animation playback speed between 0.1x and 10x, 2-16 parallel workers, and 2-16",
59
+ "overlapping copies of the selected test for shared-state interference.",
60
+ "Reordering holds the first response",
61
+ "in each adjacent matching request pair. Startup event delay postpones application listeners for",
62
+ "DOMContentLoaded or load. Resource loading targets document, script, stylesheet, image, or font.",
63
+ "Never request or include cookie or storage values; only names and keys are allowed.",
64
+ "Clock jumps change Date wall time without changing monotonic timers.",
65
+ "Response truncation and duplication cannot alter more than 1024 bytes. Associate each",
66
+ "experiment with the hypothesis it tests by",
67
+ `zero-based hypothesisIndex. Network, resource loading, startup event delays, and event-loop stall duration cannot exceed ${maximumDelayMs} ms.`,
51
68
  "Do not propose fixes or infer results before experiments run.",
52
69
  `Test path: ${test}`,
53
70
  "Bounded local source context:",
@@ -107,14 +124,19 @@ function validatePlan(plan, options) {
107
124
  if (plan.hypotheses.some((_hypothesis, index) => !coveredHypotheses.has(index))) {
108
125
  throw new Error("Every proposed hypothesis must receive an experiment");
109
126
  }
110
- if (plan.experiments.some((entry) => entry.condition.kind === "network-delay"
127
+ if (plan.experiments.some((entry) => (entry.condition.kind === "network-delay" || entry.condition.kind === "resource-loading-delay"
128
+ || entry.condition.kind === "startup-event-delay"
129
+ || entry.condition.kind === "storage-state-delay")
111
130
  && entry.condition.delayMs > options.maximumDelayMs)) {
112
- throw new Error("Model proposed a network delay above the configured maximum");
131
+ throw new Error("Model proposed a delay above the configured maximum");
132
+ }
133
+ if (plan.experiments.some((entry) => entry.condition.kind === "event-loop-stall"
134
+ && entry.condition.durationMs > options.maximumDelayMs)) {
135
+ throw new Error("Model proposed an event-loop stall above the configured maximum");
113
136
  }
114
137
  const kinds = new Set(plan.experiments.map((entry) => entry.condition.kind));
115
- const requiredKinds = ["baseline", "network-delay", "request-failure"];
116
- if (!requiredKinds.every((kind) => kinds.has(kind))) {
117
- throw new Error("Investigation plan must distinguish baseline, timing, and request failure");
138
+ if (!kinds.has("baseline") || kinds.size !== 3) {
139
+ throw new Error("Investigation plan must contain a baseline and two distinct interventions");
118
140
  }
119
141
  }
120
142
  export async function runInvestigation(options) {
@@ -142,7 +164,7 @@ export async function runInvestigation(options) {
142
164
  });
143
165
  const results = await Promise.all(plan.experiments.map(async (experiment) => evaluateExperiment(options.execute, {
144
166
  concurrency: options.concurrency,
145
- fault: conditionToFault(experiment.condition, options.pattern),
167
+ faults: conditionToFaults(experiment.condition, options.pattern, options.test),
146
168
  minimumFailureRate: options.minimumFailureRate,
147
169
  seed: options.seed,
148
170
  signal,
@@ -188,7 +210,7 @@ export async function runInvestigation(options) {
188
210
  if (cost > budget.maxCostUsd()) {
189
211
  throw new Error(`Investigation cost $${cost.toFixed(4)} exceeded its configured budget`);
190
212
  }
191
- return state.ledger.buildReport(options.test, options.modelId, {
213
+ return state.ledger.buildReport(options.test, options.modelId, sources.map((source) => source.path), {
192
214
  inputTokens,
193
215
  outputTokens,
194
216
  estimatedCostUsd: cost,
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/investigator/agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/investigator/agent.ts"],"names":[],"mappings":"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"}
@@ -12,6 +12,6 @@ export declare class InvestigationLedger {
12
12
  addExperiment(hypothesisId: string, condition: ExperimentCondition, result: ExperimentResult): ExperimentEvidence;
13
13
  assess(hypothesisId: string, status: "rejected" | "confirmed", evidenceExperimentIds: string[], explanation: string): Hypothesis;
14
14
  conclude(hypothesisId: string, summary: string, evidenceExperimentIds: string[]): void;
15
- buildReport(test: string, model: string, usage: UsageSummary): InvestigationReport;
15
+ buildReport(test: string, model: string, sourcePaths: string[], usage: UsageSummary): InvestigationReport;
16
16
  }
17
17
  export {};
@@ -65,7 +65,7 @@ export class InvestigationLedger {
65
65
  this.#conclusionEvidenceIds = evidenceExperimentIds;
66
66
  this.#conclusionHypothesisId = hypothesisId;
67
67
  }
68
- buildReport(test, model, usage) {
68
+ buildReport(test, model, sourcePaths, usage) {
69
69
  if (!this.#conclusion) {
70
70
  throw new Error("Investigator did not record a conclusion");
71
71
  }
@@ -80,9 +80,9 @@ export class InvestigationLedger {
80
80
  throw new Error("Investigator did not reject a competing hypothesis");
81
81
  }
82
82
  return investigationReportSchema.parse({
83
- version: 1,
84
83
  test,
85
84
  model,
85
+ sourcePaths,
86
86
  conclusion: this.#conclusion,
87
87
  conclusionHypothesisId: this.#conclusionHypothesisId,
88
88
  conclusionEvidenceIds: this.#conclusionEvidenceIds,
@@ -1 +1 @@
1
- {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/investigator/ledger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ledger.js","sourceRoot":"","sources":["../../src/investigator/ledger.ts"],"names":[],"mappings":"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"}
@@ -4,3 +4,4 @@ export interface SafeSource {
4
4
  }
5
5
  export declare function readSafeTestSource(projectRoot: string, selector: string): Promise<SafeSource>;
6
6
  export declare function readSafeTestContext(projectRoot: string, selector: string): Promise<SafeSource[]>;
7
+ export declare function readSafeRepairContext(projectRoot: string, selectedTest: string, approvedSourcePaths: string[]): Promise<SafeSource[]>;
@@ -2,6 +2,7 @@ import { readFile, stat } from "node:fs/promises";
2
2
  import { dirname, extname, relative, resolve } from "node:path";
3
3
  const MAX_SOURCE_BYTES = 64 * 1_024;
4
4
  const MAX_CONTEXT_FILES = 8;
5
+ const MAX_APPROVED_SOURCE_FILES = MAX_CONTEXT_FILES - 1;
5
6
  const ALLOWED_EXTENSIONS = new Set([".js", ".jsx", ".mjs", ".ts", ".tsx"]);
6
7
  const SECRET_ASSIGNMENT = /(?:api[_-]?key|authorization|password|secret|token)\s*[:=]\s*["'][^"']{8,}/iu;
7
8
  const LOCAL_IMPORT = /\bfrom\s+["'](\.[^"']+)["']/gu;
@@ -50,9 +51,8 @@ async function existingSourcePath(importer, specifier) {
50
51
  function localImports(content) {
51
52
  return [...content.matchAll(LOCAL_IMPORT)].map((match) => match[1]);
52
53
  }
53
- export async function readSafeTestContext(projectRoot, selector) {
54
- const rootPath = resolveSafeSource(projectRoot, selector);
55
- const queue = [rootPath];
54
+ async function readSafeContext(projectRoot, selectors) {
55
+ const queue = selectors.map((selector) => resolveSafeSource(projectRoot, selector));
56
56
  const visited = new Set();
57
57
  const context = [];
58
58
  while (queue.length > 0 && context.length < MAX_CONTEXT_FILES) {
@@ -76,4 +76,13 @@ export async function readSafeTestContext(projectRoot, selector) {
76
76
  }
77
77
  return context;
78
78
  }
79
+ export function readSafeTestContext(projectRoot, selector) {
80
+ return readSafeContext(projectRoot, [selector]);
81
+ }
82
+ export function readSafeRepairContext(projectRoot, selectedTest, approvedSourcePaths) {
83
+ if (approvedSourcePaths.length > MAX_APPROVED_SOURCE_FILES) {
84
+ throw new Error(`Repair accepts at most ${MAX_APPROVED_SOURCE_FILES} explicitly approved source files`);
85
+ }
86
+ return readSafeContext(projectRoot, [selectedTest, ...approvedSourcePaths]);
87
+ }
79
88
  //# sourceMappingURL=safe-source.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"safe-source.js","sourceRoot":"","sources":["../../src/investigator/safe-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"safe-source.js","sourceRoot":"","sources":["../../src/investigator/safe-source.ts"],"names":[],"mappings":"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"}