mirror of
https://github.com/morluto/rea
synced 2026-10-26 14:25:49 -04:00
0155b89953
* fix(browser): name web-bundle budgets and recover web deadlines Name the existing heap, per-script, and total web-bundle phases, and reject a per-script deadline above the total. Promote capture, CDP command, source-map decode, and source-map fetch deadlines at today's defaults. Name DevTools timeoutMs, and state that discovery, cleanup grace, byte budgets, and Electron hook retention have no runtime override. Refs #5910 Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): apply selected web deadlines to the owning phase Keep HTTP and browser-socket discovery on the fixed discovery deadline so a short command_timeout_ms starts at the handshake. Apply scenario command_timeout_ms to launch startup and the primary connect session, and keep service-worker restoration on the fixed 5000 ms grace. Omit command_timeout_ms from recovery text when the operation does not accept it. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): retain scenario commands that finish after their deadline A timed-out scenario command stays owned so cleanup can close a late browser or context and restore a mutation that lands after the deadline. Child storage replies use that deadline, scenario recovery names command_timeout_ms in the capture JSON, and the session test connection implements beginCleanupGrace. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): keep child command timeouts as the public failure A nested command such as Page.enable that is delivered but never answered was stored as protocol_error, hiding the command name, selected deadline, and recovery. Store the typed timeout and assert that public error. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): keep runtime cleanup on the fixed grace Switch runtime restoration to the cleanup grace before the first send so a short command_timeout_ms cannot fail an otherwise successful observation. Stop advertising command_timeout_ms on list_browser_targets, which never bounds a post-discovery command. Co-authored-by: morluto <morluto@users.noreply.github.com> * test(browser): prove a short command deadline cannot fail runtime cleanup Drive restoration through the runtime fixture. A cleanup command that outlives command_timeout_ms still succeeds, and a stalled restoration names the fixed 5000 ms grace. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): name the effective source-map decode deadline codecBudgetLimitation reported a fixed 20-second deadline after a caller selected decode_timeout_ms. Result and Evidence limitations now name that effective millisecond deadline. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): separate handshake and target-attach deadlines A browser-level Target.attachToTarget no longer shares the WebSocket handshake budget. Blocked service-worker attachment keeps discovery on its fixed deadline and applies command_timeout_ms to the later handshake and attach. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): name the web-bundle resource each runtime exhausts Bun ignores the V8 old-space flag. A Windows Job reports the process commit limit, and other Bun hosts no longer suggest raising max_heap_mb. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): cite the browser-socket discovery message budget WebSocket discovery enforces the 64 MiB protocol budget. Timeout recovery no longer advertises the 8 MiB HTTP document budget. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): bound the blocked service-worker check before discovery The first registration check has its own fixed 10s deadline. Discovery, handshake, and Target.attachToTarget stay on their separate deadlines. Co-authored-by: morluto <morluto@users.noreply.github.com> * fix(browser): name the operand that stopped web-bundle admission Host heap pressure no longer claims the fixed result budget is exhausted. A Windows Bun allocation before the commit limit still names that limit. Co-authored-by: morluto <morluto@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: morluto <morluto@users.noreply.github.com>
122 lines
3.4 KiB
TypeScript
122 lines
3.4 KiB
TypeScript
import { expect, it } from "vitest";
|
|
|
|
import { createBrowserEvidence } from "../../../src/application/BrowserEvidence.js";
|
|
import { CDP_BROWSER_PROVIDER_IDENTITY } from "../../../src/browser/providerIdentities.js";
|
|
import { listBrowserTargetsInputSchema } from "../../../src/domain/browserObservation.js";
|
|
import { browserTargetListSchema } from "../../../src/domain/browserObservationSchemas.js";
|
|
import {
|
|
analyzeWebBundleInputSchema,
|
|
webBundleAnalysisSchema,
|
|
} from "../../../src/domain/webBundleAnalysis.js";
|
|
|
|
const targetList = browserTargetListSchema.parse({
|
|
browser: {
|
|
product: "FakeChrome/1.0",
|
|
protocol_version: "1.3",
|
|
revision: "fake-revision",
|
|
user_agent: "FakeChrome",
|
|
js_version: "13.0",
|
|
},
|
|
targets: [],
|
|
excluded: { disallowed_origin: 0, unsupported_url: 0, non_page: 0 },
|
|
limitations: [],
|
|
});
|
|
|
|
const bundle = webBundleAnalysisSchema.parse({
|
|
capture: {
|
|
target_url: "https://example.test/",
|
|
scripts_observed: 0,
|
|
scripts_analyzed: 0,
|
|
source_artifacts: [],
|
|
},
|
|
observations: {
|
|
chunks: { nodes: [], edges: [] },
|
|
routes: [],
|
|
endpoints: [],
|
|
webmcp_declarations: [],
|
|
source_maps: {
|
|
status: "not_requested",
|
|
requested: 0,
|
|
processed: 0,
|
|
items: [],
|
|
},
|
|
},
|
|
inferences: [],
|
|
unknowns: [],
|
|
completeness: {
|
|
status: "complete",
|
|
parsed_scripts: 0,
|
|
parse_failures: 0,
|
|
visited_ast_nodes: 0,
|
|
},
|
|
limitations: [],
|
|
});
|
|
|
|
it("records an explicit command deadline and omits the default", () => {
|
|
const base = {
|
|
cdp_endpoint: "http://127.0.0.1:9222",
|
|
target_id: "page",
|
|
fetch_source_maps: false,
|
|
};
|
|
const explicit = createBrowserEvidence(
|
|
"analyze_web_bundle",
|
|
analyzeWebBundleInputSchema.parse({
|
|
...base,
|
|
command_timeout_ms: 1_500,
|
|
}),
|
|
bundle,
|
|
CDP_BROWSER_PROVIDER_IDENTITY,
|
|
);
|
|
expect(explicit.parameters.command_timeout_ms).toBe(1_500);
|
|
const omitted = createBrowserEvidence(
|
|
"analyze_web_bundle",
|
|
analyzeWebBundleInputSchema.parse(base),
|
|
bundle,
|
|
CDP_BROWSER_PROVIDER_IDENTITY,
|
|
);
|
|
expect(omitted.parameters).not.toHaveProperty("command_timeout_ms");
|
|
});
|
|
|
|
it("rejects a command deadline on target listing and leaves it out of Evidence", () => {
|
|
expect(
|
|
listBrowserTargetsInputSchema.safeParse({
|
|
cdp_endpoint: "http://127.0.0.1:9222",
|
|
command_timeout_ms: 1_500,
|
|
}).success,
|
|
).toBe(false);
|
|
const evidence = createBrowserEvidence(
|
|
"list_browser_targets",
|
|
listBrowserTargetsInputSchema.parse({
|
|
cdp_endpoint: "http://127.0.0.1:9222",
|
|
}),
|
|
targetList,
|
|
CDP_BROWSER_PROVIDER_IDENTITY,
|
|
);
|
|
expect(evidence.parameters).not.toHaveProperty("command_timeout_ms");
|
|
});
|
|
|
|
it("records an explicit source-map fetch deadline and omits the default", () => {
|
|
const base = {
|
|
cdp_endpoint: "http://127.0.0.1:9222",
|
|
target_id: "page",
|
|
fetch_source_maps: true,
|
|
};
|
|
const explicit = createBrowserEvidence(
|
|
"analyze_web_bundle",
|
|
analyzeWebBundleInputSchema.parse({
|
|
...base,
|
|
source_map_fetch_timeout_ms: 1_500,
|
|
}),
|
|
bundle,
|
|
CDP_BROWSER_PROVIDER_IDENTITY,
|
|
);
|
|
expect(explicit.parameters.source_map_fetch_timeout_ms).toBe(1_500);
|
|
const omitted = createBrowserEvidence(
|
|
"analyze_web_bundle",
|
|
analyzeWebBundleInputSchema.parse(base),
|
|
bundle,
|
|
CDP_BROWSER_PROVIDER_IDENTITY,
|
|
);
|
|
expect(omitted.parameters).not.toHaveProperty("source_map_fetch_timeout_ms");
|
|
});
|