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.
- package/README.md +225 -38
- package/dist/analysis/blob-report.d.ts +15 -0
- package/dist/analysis/blob-report.js +137 -0
- package/dist/analysis/blob-report.js.map +1 -0
- package/dist/analysis/cli.d.ts +7 -0
- package/dist/analysis/cli.js +28 -0
- package/dist/analysis/cli.js.map +1 -0
- package/dist/analysis/schema.d.ts +175 -0
- package/dist/analysis/schema.js +34 -0
- package/dist/analysis/schema.js.map +1 -0
- package/dist/analysis/zip-archive.d.ts +6 -0
- package/dist/analysis/zip-archive.js +193 -0
- package/dist/analysis/zip-archive.js.map +1 -0
- package/dist/artifacts/paths.d.ts +3 -0
- package/dist/artifacts/paths.js +34 -0
- package/dist/artifacts/paths.js.map +1 -0
- package/dist/artifacts/retention.d.ts +1 -0
- package/dist/artifacts/retention.js +80 -0
- package/dist/artifacts/retention.js.map +1 -0
- package/dist/bisect/engine.js +0 -1
- package/dist/bisect/engine.js.map +1 -1
- package/dist/bisect/schema.d.ts +5 -6
- package/dist/bisect/schema.js +1 -2
- package/dist/bisect/schema.js.map +1 -1
- package/dist/bisect/solari-evaluator.js +9 -1
- package/dist/bisect/solari-evaluator.js.map +1 -1
- package/dist/ci/job-summary.d.ts +2 -0
- package/dist/ci/job-summary.js +120 -2
- package/dist/ci/job-summary.js.map +1 -1
- package/dist/ci/select-command.js +1 -1
- package/dist/ci/select-command.js.map +1 -1
- package/dist/ci/summary-command.js +12 -7
- package/dist/ci/summary-command.js.map +1 -1
- package/dist/cli-arguments.d.ts +44 -0
- package/dist/cli-arguments.js +356 -0
- package/dist/cli-arguments.js.map +1 -0
- package/dist/cli-command-help.d.ts +11 -0
- package/dist/cli-command-help.js +211 -0
- package/dist/cli-command-help.js.map +1 -0
- package/dist/cli-help.d.ts +5 -2
- package/dist/cli-help.js +122 -45
- package/dist/cli-help.js.map +1 -1
- package/dist/cli-option-definitions.d.ts +202 -0
- package/dist/cli-option-definitions.js +59 -0
- package/dist/cli-option-definitions.js.map +1 -0
- package/dist/cli.js +100 -100
- package/dist/cli.js.map +1 -1
- package/dist/commands/analyze-summary.d.ts +5 -0
- package/dist/commands/analyze-summary.js +89 -0
- package/dist/commands/analyze-summary.js.map +1 -0
- package/dist/commands/analyze.d.ts +6 -0
- package/dist/commands/analyze.js +128 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/bisect.d.ts +2 -2
- package/dist/commands/bisect.js +32 -3
- package/dist/commands/bisect.js.map +1 -1
- package/dist/commands/diagnose.d.ts +3 -2
- package/dist/commands/diagnose.js +355 -23
- package/dist/commands/diagnose.js.map +1 -1
- package/dist/commands/discover.d.ts +18 -2
- package/dist/commands/discover.js +215 -25
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.js +66 -25
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/investigate.d.ts +3 -2
- package/dist/commands/investigate.js +22 -3
- package/dist/commands/investigate.js.map +1 -1
- package/dist/commands/options.d.ts +123 -16
- package/dist/commands/options.js +24 -2
- package/dist/commands/options.js.map +1 -1
- package/dist/commands/prove.d.ts +2 -2
- package/dist/commands/prove.js +38 -1
- package/dist/commands/prove.js.map +1 -1
- package/dist/commands/repair.d.ts +8 -2
- package/dist/commands/repair.js +32 -9
- package/dist/commands/repair.js.map +1 -1
- package/dist/commands/replay.d.ts +2 -2
- package/dist/commands/replay.js +15 -2
- package/dist/commands/replay.js.map +1 -1
- package/dist/commands/report.d.ts +2 -2
- package/dist/commands/report.js +35 -10
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/scan-summary.d.ts +7 -0
- package/dist/commands/scan-summary.js +175 -0
- package/dist/commands/scan-summary.js.map +1 -0
- package/dist/commands/scan.d.ts +9 -12
- package/dist/commands/scan.js +66 -62
- package/dist/commands/scan.js.map +1 -1
- package/dist/core/plan.js +1 -1
- package/dist/core/plan.js.map +1 -1
- package/dist/diagnosis/checkpoint.d.ts +6 -0
- package/dist/diagnosis/checkpoint.js +46 -0
- package/dist/diagnosis/checkpoint.js.map +1 -0
- package/dist/diagnosis/cli.d.ts +7 -0
- package/dist/diagnosis/cli.js +84 -0
- package/dist/diagnosis/cli.js.map +1 -0
- package/dist/diagnosis/recommendation.d.ts +13 -0
- package/dist/diagnosis/recommendation.js +95 -0
- package/dist/diagnosis/recommendation.js.map +1 -0
- package/dist/diagnosis/run-state.d.ts +52 -0
- package/dist/diagnosis/run-state.js +173 -0
- package/dist/diagnosis/run-state.js.map +1 -0
- package/dist/diagnosis/schema.d.ts +207 -0
- package/dist/diagnosis/schema.js +108 -0
- package/dist/diagnosis/schema.js.map +1 -0
- package/dist/diagnosis/solari-handoff.d.ts +9 -0
- package/dist/diagnosis/solari-handoff.js +40 -0
- package/dist/diagnosis/solari-handoff.js.map +1 -0
- package/dist/diagnosis/summary.d.ts +3 -0
- package/dist/diagnosis/summary.js +115 -0
- package/dist/diagnosis/summary.js.map +1 -0
- package/dist/discovery/auth-cookie.d.ts +19 -0
- package/dist/discovery/auth-cookie.js +26 -0
- package/dist/discovery/auth-cookie.js.map +1 -0
- package/dist/discovery/evaluate.d.ts +35 -2
- package/dist/discovery/evaluate.js +136 -30
- package/dist/discovery/evaluate.js.map +1 -1
- package/dist/discovery/event-loop.d.ts +25 -0
- package/dist/discovery/event-loop.js +84 -0
- package/dist/discovery/event-loop.js.map +1 -0
- package/dist/discovery/minimize.d.ts +61 -1
- package/dist/discovery/minimize.js +179 -7
- package/dist/discovery/minimize.js.map +1 -1
- package/dist/discovery/resource-loading.d.ts +25 -0
- package/dist/discovery/resource-loading.js +84 -0
- package/dist/discovery/resource-loading.js.map +1 -0
- package/dist/discovery/runner-environment.d.ts +26 -0
- package/dist/discovery/runner-environment.js +68 -0
- package/dist/discovery/runner-environment.js.map +1 -0
- package/dist/discovery/startup-event.d.ts +25 -0
- package/dist/discovery/startup-event.js +84 -0
- package/dist/discovery/startup-event.js.map +1 -0
- package/dist/discovery/storage-state.d.ts +26 -0
- package/dist/discovery/storage-state.js +86 -0
- package/dist/discovery/storage-state.js.map +1 -0
- package/dist/discovery/temporal-environment.d.ts +31 -0
- package/dist/discovery/temporal-environment.js +43 -0
- package/dist/discovery/temporal-environment.js.map +1 -0
- package/dist/discovery/visual-environment.d.ts +28 -0
- package/dist/discovery/visual-environment.js +42 -0
- package/dist/discovery/visual-environment.js.map +1 -0
- package/dist/domain/schema.d.ts +840 -20
- package/dist/domain/schema.js +216 -6
- package/dist/domain/schema.js.map +1 -1
- package/dist/faults/browser-context.d.ts +16 -0
- package/dist/faults/browser-context.js +60 -0
- package/dist/faults/browser-context.js.map +1 -0
- package/dist/faults/cookie-header.d.ts +5 -0
- package/dist/faults/cookie-header.js +25 -0
- package/dist/faults/cookie-header.js.map +1 -0
- package/dist/faults/document-bootstrap.d.ts +5 -0
- package/dist/faults/document-bootstrap.js +141 -0
- package/dist/faults/document-bootstrap.js.map +1 -0
- package/dist/faults/install.d.ts +1 -1
- package/dist/faults/install.js +199 -6
- package/dist/faults/install.js.map +1 -1
- package/dist/faults/pattern.d.ts +1 -0
- package/dist/faults/pattern.js +24 -0
- package/dist/faults/pattern.js.map +1 -0
- package/dist/investigator/agent.js +39 -17
- package/dist/investigator/agent.js.map +1 -1
- package/dist/investigator/ledger.d.ts +1 -1
- package/dist/investigator/ledger.js +2 -2
- package/dist/investigator/ledger.js.map +1 -1
- package/dist/investigator/safe-source.d.ts +1 -0
- package/dist/investigator/safe-source.js +12 -3
- package/dist/investigator/safe-source.js.map +1 -1
- package/dist/investigator/schema.d.ts +293 -2
- package/dist/investigator/schema.js +100 -2
- package/dist/investigator/schema.js.map +1 -1
- package/dist/proof/cli.d.ts +7 -0
- package/dist/proof/cli.js +108 -0
- package/dist/proof/cli.js.map +1 -0
- package/dist/proof/preflight.d.ts +4 -0
- package/dist/proof/preflight.js +9 -0
- package/dist/proof/preflight.js.map +1 -0
- package/dist/repair/generator.d.ts +12 -1
- package/dist/repair/generator.js +30 -6
- package/dist/repair/generator.js.map +1 -1
- package/dist/repair/remote-proof-runner.js +6 -10
- package/dist/repair/remote-proof-runner.js.map +1 -1
- package/dist/repair/schema.d.ts +77 -2
- package/dist/repair/schema.js +23 -2
- package/dist/repair/schema.js.map +1 -1
- package/dist/repair/solari-validator.d.ts +2 -0
- package/dist/repair/solari-validator.js +4 -6
- package/dist/repair/solari-validator.js.map +1 -1
- package/dist/repair/summary.d.ts +10 -0
- package/dist/repair/summary.js +58 -0
- package/dist/repair/summary.js.map +1 -0
- package/dist/repair/validator.d.ts +1 -0
- package/dist/repair/validator.js +53 -12
- package/dist/repair/validator.js.map +1 -1
- package/dist/report/bundle.js +16 -37
- package/dist/report/bundle.js.map +1 -1
- package/dist/report/model.js +131 -12
- package/dist/report/model.js.map +1 -1
- package/dist/report/open.d.ts +9 -0
- package/dist/report/open.js +23 -0
- package/dist/report/open.js.map +1 -1
- package/dist/report/report-client.css +2 -0
- package/dist/report/report-client.js +58 -0
- package/dist/report/schema.d.ts +115 -5
- package/dist/report/schema.js +24 -5
- package/dist/report/schema.js.map +1 -1
- package/dist/reproducer/schema.d.ts +89 -4
- package/dist/reproducer/schema.js +3 -4
- package/dist/reproducer/schema.js.map +1 -1
- package/dist/runner/execution-fault.d.ts +10 -0
- package/dist/runner/execution-fault.js +24 -0
- package/dist/runner/execution-fault.js.map +1 -0
- package/dist/runner/fault-proxy.d.ts +7 -0
- package/dist/runner/fault-proxy.js +366 -0
- package/dist/runner/fault-proxy.js.map +1 -0
- package/dist/runner/local.js +2 -2
- package/dist/runner/local.js.map +1 -1
- package/dist/runner/native-scan.d.ts +25 -0
- package/dist/runner/native-scan.js +306 -0
- package/dist/runner/native-scan.js.map +1 -0
- package/dist/runner/playwright-executor.d.ts +3 -0
- package/dist/runner/playwright-executor.js +125 -66
- package/dist/runner/playwright-executor.js.map +1 -1
- package/dist/runner/process-tree.d.ts +7 -0
- package/dist/runner/process-tree.js +62 -0
- package/dist/runner/process-tree.js.map +1 -0
- package/dist/runner/project-bridge.d.ts +7 -0
- package/dist/runner/project-bridge.js +83 -0
- package/dist/runner/project-bridge.js.map +1 -0
- package/dist/runner/trial-reporter.d.ts +7 -0
- package/dist/runner/trial-reporter.js +47 -0
- package/dist/runner/trial-reporter.js.map +1 -0
- package/dist/scan/failure-clusters.d.ts +24 -0
- package/dist/scan/failure-clusters.js +74 -0
- package/dist/scan/failure-clusters.js.map +1 -0
- package/dist/scan/schema.d.ts +170 -0
- package/dist/scan/schema.js +71 -0
- package/dist/scan/schema.js.map +1 -0
- package/dist/solari/executor.d.ts +5 -1
- package/dist/solari/executor.js +25 -17
- package/dist/solari/executor.js.map +1 -1
- package/dist/solari/run-demo.d.ts +13 -1
- package/dist/solari/run-demo.js +35 -16
- package/dist/solari/run-demo.js.map +1 -1
- package/dist/solari/usage.d.ts +8 -2
- package/dist/solari/usage.js +14 -4
- package/dist/solari/usage.js.map +1 -1
- package/dist/ui/boundary.d.ts +17 -0
- package/dist/ui/boundary.js +18 -0
- package/dist/ui/boundary.js.map +1 -0
- package/dist/ui/console.d.ts +4 -0
- package/dist/ui/console.js +11 -0
- package/dist/ui/console.js.map +1 -0
- package/dist/ui/document.d.ts +40 -0
- package/dist/ui/document.js +120 -0
- package/dist/ui/document.js.map +1 -0
- package/dist/ui/format.d.ts +8 -0
- package/dist/ui/format.js +32 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/progress.d.ts +17 -1
- package/dist/ui/progress.js +51 -8
- package/dist/ui/progress.js.map +1 -1
- package/dist/ui/status.d.ts +7 -0
- package/dist/ui/status.js +36 -0
- package/dist/ui/status.js.map +1 -0
- package/dist/ui/style.d.ts +8 -0
- package/dist/ui/style.js +22 -0
- package/dist/ui/style.js.map +1 -0
- package/dist/ui/text.d.ts +17 -0
- package/dist/ui/text.js +123 -0
- package/dist/ui/text.js.map +1 -0
- package/dist/ui/theme.d.ts +23 -0
- package/dist/ui/theme.js +77 -0
- package/dist/ui/theme.js.map +1 -0
- package/dist/ui/trial-progress.d.ts +13 -0
- package/dist/ui/trial-progress.js +42 -0
- package/dist/ui/trial-progress.js.map +1 -0
- package/package.json +14 -19
- package/dist/faults/network-delay.d.ts +0 -5
- package/dist/faults/network-delay.js +0 -34
- package/dist/faults/network-delay.js.map +0 -1
- package/dist/faults/request-failure.d.ts +0 -5
- package/dist/faults/request-failure.js +0 -24
- package/dist/faults/request-failure.js.map +0 -1
- package/dist/playwright.d.ts +0 -3
- package/dist/playwright.js +0 -21
- package/dist/playwright.js.map +0 -1
- package/dist/report/browser-entry.d.ts +0 -2
- package/dist/report/browser-entry.js +0 -15
- package/dist/report/browser-entry.js.map +0 -1
- package/dist/report/components/artifacts.d.ts +0 -4
- package/dist/report/components/artifacts.js +0 -6
- package/dist/report/components/artifacts.js.map +0 -1
- package/dist/report/components/experiments.d.ts +0 -4
- package/dist/report/components/experiments.js +0 -7
- package/dist/report/components/experiments.js.map +0 -1
- package/dist/report/components/hypotheses.d.ts +0 -4
- package/dist/report/components/hypotheses.js +0 -26
- package/dist/report/components/hypotheses.js.map +0 -1
- package/dist/report/components/indicators.d.ts +0 -32
- package/dist/report/components/indicators.js +0 -42
- package/dist/report/components/indicators.js.map +0 -1
- package/dist/report/components/layout.d.ts +0 -29
- package/dist/report/components/layout.js +0 -20
- package/dist/report/components/layout.js.map +0 -1
- package/dist/report/components/proof.d.ts +0 -4
- package/dist/report/components/proof.js +0 -34
- package/dist/report/components/proof.js.map +0 -1
- package/dist/report/components/reproduction.d.ts +0 -4
- package/dist/report/components/reproduction.js +0 -19
- package/dist/report/components/reproduction.js.map +0 -1
- package/dist/report/components/summary.d.ts +0 -4
- package/dist/report/components/summary.js +0 -12
- package/dist/report/components/summary.js.map +0 -1
- package/dist/report/components/verdict.d.ts +0 -4
- package/dist/report/components/verdict.js +0 -27
- package/dist/report/components/verdict.js.map +0 -1
- package/dist/report/report-app.d.ts +0 -6
- package/dist/report/report-app.js +0 -16
- package/dist/report/report-app.js.map +0 -1
- package/dist/report/report-details.css +0 -182
- package/dist/report/report.css +0 -404
package/dist/faults/install.js
CHANGED
|
@@ -1,9 +1,202 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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
|
|
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":"
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/faults/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 === "
|
|
33
|
-
return
|
|
31
|
+
function conditionToFault(condition, pattern, test) {
|
|
32
|
+
if (condition.kind === "baseline") {
|
|
33
|
+
return undefined;
|
|
34
34
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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
|
|
49
|
-
"
|
|
50
|
-
|
|
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
|
|
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
|
-
|
|
116
|
-
|
|
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
|
-
|
|
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":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,IAAI,CAAA;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAI7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAOtD,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAEvD,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACrC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;CACvC,CAAC,CAAA;AAEF,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QAC5B,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;QAC/C,SAAS,EAAE,yBAAyB;KACrC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;CACd,CAAC,CAAA;AAEF,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IACzC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IACzC,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;CAC1C,CAAC,CAAA;AAEF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxD,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC;IACnD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;IACzC,qBAAqB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;CACnE,CAAC,CAAA;AAkCF,SAAS,gBAAgB,
|
|
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":"AAOA,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AAQvD,MAAM,OAAO,mBAAmB;IACrB,YAAY,GAAyB,EAAE,CAAA;IACvC,WAAW,GAAiB,EAAE,CAAA;IACvC,WAAW,CAAoB;IAC/B,sBAAsB,GAAa,EAAE,CAAA;IACrC,uBAAuB,CAAoB;IAE3C,OAAO,CAAC,SAAiB,EAAE,UAAkB;QAC3C,MAAM,UAAU,GAAe;YAC7B,EAAE,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACrC,SAAS;YACT,UAAU;YACV,MAAM,EAAE,UAAU;YAClB,qBAAqB,EAAE,EAAE;YACzB,WAAW,EAAE,EAAE;SAChB,CAAA;QACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QACjC,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,aAAa,CAAC,EAAU;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QAC5E,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,aAAa,CACX,YAAoB,EACpB,SAA8B,EAC9B,MAAwB;QAExB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAChC,MAAM,QAAQ,GAAuB;YACnC,EAAE,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACtC,YAAY;YACZ,SAAS;YACT,MAAM;SACP,CAAA;QACD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAChC,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,MAAM,CACJ,YAAoB,EACpB,MAAgC,EAChC,qBAA+B,EAC/B,WAAmB;QAEnB,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;QAC3E,IAAI,MAAM,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAA;QACpG,CAAC;QACD,IAAI,MAAM,KAAK,UAAU,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,gFAAgF,CAAC,CAAA;QACnG,CAAC;QACD,UAAU,CAAC,MAAM,GAAG,MAAM,CAAA;QAC1B,UAAU,CAAC,qBAAqB,GAAG,qBAAqB,CAAA;QACxD,UAAU,CAAC,WAAW,GAAG,WAAW,CAAA;QACpC,OAAO,UAAU,CAAA;IACnB,CAAC;IAED,QAAQ,CAAC,YAAoB,EAAE,OAAe,EAAE,qBAA+B;QAC7E,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QACnD,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YACtC,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAA;QACtE,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAA;QAC3E,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;QAC7E,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAA;QAC1B,IAAI,CAAC,sBAAsB,GAAG,qBAAqB,CAAA;QACnD,IAAI,CAAC,uBAAuB,GAAG,YAAY,CAAA;IAC7C,CAAC;IAED,WAAW,
|
|
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
|
-
|
|
54
|
-
const
|
|
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":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAE/D,MAAM,gBAAgB,GAAG,EAAE,GAAG,KAAK,CAAA;AACnC,MAAM,iBAAiB,GAAG,CAAC,CAAA;AAC3B,MAAM,yBAAyB,GAAG,iBAAiB,GAAG,CAAC,CAAA;AACvD,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;AAC1E,MAAM,iBAAiB,GAAG,8EAA8E,CAAA;AACxG,MAAM,YAAY,GAAG,+BAA+B,CAAA;AAOpD,SAAS,iBAAiB,CAAC,WAAmB,EAAE,QAAgB;IAC9D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IACjD,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;IACtD,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAA;IACtF,CAAC;IACD,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,WAAmB,EACnB,QAAgB;IAEhB,MAAM,UAAU,GAAG,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;IAC3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAA;IAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,WAAW,CAAC,IAAI,GAAG,gBAAgB,EAAE,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;IAClD,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAA;IAC7F,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,CAAA;AAC7D,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,SAAiB;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAC1E,MAAM,UAAU,GAAG,SAAS,KAAK,KAAK;QACpC,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,MAAM,EAAE,SAAS,CAAC;QAC1C,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,SAAS,KAAK,EAAE,GAAG,SAAS,MAAM,EAAE,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAA;IACtF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrC,OAAO,SAAS,CAAA;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oFAAoF;QACtF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,WAAmB,EACnB,SAAmB;IAEnB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,iBAAiB,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAChC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,SAAQ;QACV,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QACvB,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAChE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpB,KAAK,MAAM,SAAS,IAAI,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAA;YAClE,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAClG,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,QAAgB;IACvE,OAAO,eAAe,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,WAAmB,EACnB,YAAoB,EACpB,mBAA6B;IAE7B,IAAI,mBAAmB,CAAC,MAAM,GAAG,yBAAyB,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CACb,0BAA0B,yBAAyB,mCAAmC,CACvF,CAAA;IACH,CAAC;IACD,OAAO,eAAe,CAAC,WAAW,EAAE,CAAC,YAAY,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAA;AAC7E,CAAC"}
|