@descryy/runtime-browser 0.4.7 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -96,6 +96,7 @@
96
96
  * is unmeasured and explicitly out of scope for this change, same as the
97
97
  * RT-PENDING note that proved this gap already said.
98
98
  */
99
+ import type { Response } from "playwright-core";
99
100
  import type { Collector } from "@descryy/runtime-contracts";
100
101
  import type { StackTraceParser } from "@descryy/runtime-backend-observation";
101
102
  import type { BrowserSession } from "./browser-session.ts";
@@ -125,5 +126,21 @@ export interface BrowserNetworkCollectorOptions {
125
126
  */
126
127
  readonly stackTraceParser?: StackTraceParser;
127
128
  }
129
+ /**
130
+ * RT-261: `response.text()` used to be read whole regardless of size -- a
131
+ * multi-hundred-MB JSON export landed in Descry's own memory in one shot.
132
+ * Starting value, not a measurement.
133
+ */
134
+ export declare const MAX_RESPONSE_BODY_BYTES: number;
135
+ export interface CapturedResponseBody {
136
+ /** The body text, or a bounded prefix of it when it exceeded the cap; null when not captured at all (wrong content-type, cap exceeded before any read, or the read itself failed). */
137
+ readonly body: string | null;
138
+ /** True when the real body was larger than `MAX_RESPONSE_BODY_BYTES` -- whether or not `body` still carries a truncated prefix of it. */
139
+ readonly bodyTruncated: boolean;
140
+ /** The real size in bytes, when known -- from `content-length` (never-read case) or measured after reading; null when neither is available. */
141
+ readonly bodyByteLength: number | null;
142
+ }
143
+ /** Exported for direct unit testing (RT-261) -- exercising the cap does not need a real browser response, just something shaped like one. */
144
+ export declare function captureResponseBody(response: Response, headers: Readonly<Record<string, string>>): Promise<CapturedResponseBody>;
128
145
  export declare function createBrowserNetworkCollector(options: BrowserNetworkCollectorOptions): Collector;
129
146
  //# sourceMappingURL=browser-network-collector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-network-collector.d.ts","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAqG,MAAM,4BAA4B,CAAC;AAE/J,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AA6ED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,SAAS,CA4mBhG"}
1
+ {"version":3,"file":"browser-network-collector.d.ts","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGG;AAEH,OAAO,KAAK,EAAW,QAAQ,EAAoC,MAAM,iBAAiB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAqG,MAAM,4BAA4B,CAAC;AAE/J,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAM3D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAyED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAElD,MAAM,WAAW,oBAAoB;IACnC,sLAAsL;IACtL,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,yIAAyI;IACzI,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,+IAA+I;IAC/I,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAWD,6IAA6I;AAC7I,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAuBtI;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,8BAA8B,GAAG,SAAS,CAknBhG"}
@@ -110,7 +110,9 @@ const CAPABILITIES = {
110
110
  consoleObservation: notThisCollectorsJob("console/page-error observation"),
111
111
  networkObservation: {
112
112
  availability: "degraded",
113
- reason: "response bodies are captured for JSON/text content types only; binary, streamed, or already-consumed bodies are not available. " +
113
+ reason: "response bodies are captured for JSON/text content types only, up to 256 KB (RT-261) -- a larger body is either never read " +
114
+ "(content-length announced it) or read and cut afterward (content-length was absent/understated), and either way the real size " +
115
+ "is still recorded (bodyByteLength) and the cut disclosed (bodyTruncated). Binary, streamed, or already-consumed bodies are not available. " +
114
116
  "WebSocket connections (RT-225) are observed for connection attempt, connection failure and close, but not per-message frame " +
115
117
  "traffic (framesent/framereceived, not captured), and a close cannot be told apart as normal vs. abnormal -- Playwright's public " +
116
118
  "WebSocket API exposes no close code or reason, measured directly rather than assumed. EventSource/SSE traffic is ordinary browser " +
@@ -162,11 +164,43 @@ const CAPABILITIES_WITH_STACKS = {
162
164
  },
163
165
  };
164
166
  const BODY_CAPTURABLE_CONTENT_TYPE = /^(application\/json|text\/)/i;
165
- async function captureResponseBody(response, headers) {
167
+ /**
168
+ * RT-261: `response.text()` used to be read whole regardless of size -- a
169
+ * multi-hundred-MB JSON export landed in Descry's own memory in one shot.
170
+ * Starting value, not a measurement.
171
+ */
172
+ export const MAX_RESPONSE_BODY_BYTES = 256 * 1024;
173
+ const NOT_CAPTURED = { body: null, bodyTruncated: false, bodyByteLength: null };
174
+ function parseContentLength(headers) {
175
+ const raw = headers["content-length"];
176
+ if (raw === undefined)
177
+ return null;
178
+ const parsed = Number.parseInt(raw, 10);
179
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;
180
+ }
181
+ /** Exported for direct unit testing (RT-261) -- exercising the cap does not need a real browser response, just something shaped like one. */
182
+ export async function captureResponseBody(response, headers) {
166
183
  const contentType = headers["content-type"] ?? "";
167
184
  if (!BODY_CAPTURABLE_CONTENT_TYPE.test(contentType))
168
- return null;
169
- return response.text().catch(() => null);
185
+ return NOT_CAPTURED;
186
+ // content-length lets a huge body be skipped WITHOUT reading it at all --
187
+ // the whole point of the cap. Playwright still has to buffer the response
188
+ // internally to serve .text(), but this collector's own memory never sees it.
189
+ const declaredLength = parseContentLength(headers);
190
+ if (declaredLength !== null && declaredLength > MAX_RESPONSE_BODY_BYTES) {
191
+ return { body: null, bodyTruncated: true, bodyByteLength: declaredLength };
192
+ }
193
+ const text = await response.text().catch(() => null);
194
+ if (text === null)
195
+ return NOT_CAPTURED;
196
+ const byteLength = Buffer.byteLength(text, "utf8");
197
+ if (byteLength <= MAX_RESPONSE_BODY_BYTES) {
198
+ return { body: text, bodyTruncated: false, bodyByteLength: byteLength };
199
+ }
200
+ // content-length was absent or understated -- cut here instead, after the
201
+ // fact, and disclose the real measured size rather than the claimed one.
202
+ const kept = Buffer.from(text, "utf8").subarray(0, MAX_RESPONSE_BODY_BYTES).toString("utf8");
203
+ return { body: kept, bodyTruncated: true, bodyByteLength: byteLength };
170
204
  }
171
205
  export function createBrowserNetworkCollector(options) {
172
206
  const { session } = options;
@@ -412,7 +446,7 @@ export function createBrowserNetworkCollector(options) {
412
446
  requestId: fromResponse.requestId !== null ? "response-headers" : fromRequest.requestId !== null ? "request-headers" : null,
413
447
  };
414
448
  const status = response.status();
415
- const body = await captureResponseBody(response, headers);
449
+ const { body, bodyTruncated, bodyByteLength } = await captureResponseBody(response, headers);
416
450
  const basePayload = {
417
451
  status,
418
452
  // B3: a real response arrived, so this is "answered" regardless of
@@ -424,6 +458,12 @@ export function createBrowserNetworkCollector(options) {
424
458
  url: response.url(),
425
459
  headers,
426
460
  body,
461
+ // RT-261: additive. `body` may now be null or a truncated prefix
462
+ // because the real body exceeded MAX_RESPONSE_BODY_BYTES --
463
+ // bodyTruncated/bodyByteLength say so rather than leaving a null/short
464
+ // body indistinguishable from "the response really was empty/short".
465
+ bodyTruncated,
466
+ bodyByteLength,
427
467
  timing: request.timing(),
428
468
  browserSessionId: session.sessionId,
429
469
  correlationOrigin,
@@ -1 +1 @@
1
- {"version":3,"file":"browser-network-collector.js","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-network-collector.js","sourceRoot":"","sources":["../src/browser-network-collector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Recording: turns a HUMAN's own interactions with an already-open page into
3
+ * an ordered, timestamped stream a host can hand straight to a scenario
4
+ * builder -- the descry-core follow-up this package owes
5
+ * (`documents/decisions-inbox/DEC-NEXT-browser-recording-primitive.md`,
6
+ * `descry-core`'s `packages/mcp/src/browser/driver.ts`:
7
+ * `BrowserPageSession.startRecording`/`stopRecording`). Nothing here writes
8
+ * anything or drives the page itself -- the opposite direction from
9
+ * `BrowserActionCollector`, which *commands* the page and reports what it
10
+ * did. This collector only listens.
11
+ *
12
+ * Four kinds of interaction, matching the port's own `BrowserActionKind`
13
+ * vocabulary so the host can forward a captured event as a
14
+ * `PerformedTarget`/`PerformedStep` with no translation of the action name
15
+ * itself:
16
+ * - `click`, on the same interactive-element set `playwright-driver.ts`'s
17
+ * own `INTERACTIVE` constant already uses for a snapshot
18
+ * (`a, button, input, select, textarea, [role], [onclick], summary`) --
19
+ * clicking a checkbox or radio is captured here, not by the `change`
20
+ * listener below (see that listener's own comment on why).
21
+ * - `fill`, for a text field's value once it is COMMITTED -- the native
22
+ * `change` event, which a text `<input>`/`<textarea>` fires on blur only
23
+ * when its value actually changed since focus. Not `input`: capturing
24
+ * every keystroke would record a value no scenario replay wants (a
25
+ * partially-typed string), and `fill`, not `type`, because a recording
26
+ * only ever knows a field's final value, never the keystroke sequence
27
+ * that produced it -- the same distinction `browser-action-collector.ts`
28
+ * draws between its two text verbs, resolved here the only way it can be.
29
+ * - `select`, for a `<select>`'s `change` event -- its own branch, not the
30
+ * text-field one, because "a chooser's value changed" and "a field's text
31
+ * was committed" are different facts (mirrors `BrowserActionCollector
32
+ * .select()`).
33
+ * - `navigate`, for a real top-level (main-frame) navigation, observed
34
+ * directly off Playwright's own `framenavigated` rather than through the
35
+ * page-side script -- the frame that navigated *is* the fact, and asking
36
+ * the page to report its own navigation would miss the first instant of
37
+ * the new document.
38
+ *
39
+ * **Passwords never leave the page.** A field this collector's page-side
40
+ * script recognises as a password field (`type="password"`, or
41
+ * `autocomplete="current-password"`/`"new-password"`) reports `secret: true`
42
+ * and never reads `.value` into the payload it sends across the binding at
43
+ * all -- not captured-then-redacted, never captured. `text` on the resulting
44
+ * `RecordedInteraction` is `null` whenever `secret` is `true`; assembling the
45
+ * actual `${credential:NAME}` placeholder is the host's job
46
+ * (`recordedSecretCredentialName`/`recordedSecretPlaceholder`,
47
+ * `descry-core`'s `driver.ts`) because only the host knows this session's
48
+ * running count of secrets recorded so far -- the ordinal that keeps two
49
+ * distinct password fields from colliding onto the same credential name.
50
+ *
51
+ * **Selector preference** reuses the identical tiered rule
52
+ * `playwright-driver.ts`'s own `computeSelector` already applies for a
53
+ * snapshot element: a `data-testid`/`data-test` hook first, then a
54
+ * non-generated `id`, then a named form control, then an
55
+ * aria-labelled-and-roled element, then a bounded structural path anchored at
56
+ * the nearest ancestor carrying one of the above -- each tier accepted only
57
+ * when it is unique in the element's own root (`document`, or the open
58
+ * shadow root it lives in). It is restated here, not imported, for the same
59
+ * reason `driver.ts` restates `PerformedTarget` rather than importing a
60
+ * scenario type: the string below is serialised into the page verbatim
61
+ * (`page.addInitScript`/`page.evaluate`), and a page-side script cannot
62
+ * import a Node module.
63
+ *
64
+ * **Listener lifecycle.** `page.exposeFunction` and `page.addInitScript` are
65
+ * each installed at most once per collector instance (lazily, on the first
66
+ * `start()`) -- Playwright refuses a second `exposeFunction` under the same
67
+ * name, and a second `addInitScript` would double-register the in-page
68
+ * listeners on every navigation after that. Because `addInitScript` "doesn't
69
+ * reach an already-loaded document" (the same contract every other probe in
70
+ * this package documents -- `frontend-initiator-capture.ts`,
71
+ * `identity-grounding`'s probes), `start()` ALSO runs the identical
72
+ * installer directly via `page.evaluate` against whatever document is
73
+ * current right now, idempotently (a `window` marker skips a second
74
+ * install), so a recording that starts mid-session on an already-open page
75
+ * is not silently missing its first document's events.
76
+ *
77
+ * A capturing session can therefore be started and stopped more than once
78
+ * without re-installing anything: `start()`/`stop()` do not attach or detach
79
+ * the page-side listeners themselves (Playwright exposes no way to
80
+ * un-expose a function or un-register an init script), they gate a
81
+ * `capturing` flag the Node-side binding handler checks before pushing to
82
+ * the buffer -- the identical "an unattached listener produces nothing"
83
+ * discipline `descry-core`'s fake driver already documents for its own
84
+ * `recordHuman*` methods. The one exception is the `framenavigated`
85
+ * listener, which genuinely is `page.on`/`page.off` in `start()`/`stop()`,
86
+ * matching `BrowserConsoleCollector`'s own precedent, because Playwright
87
+ * offers a real way to detach it.
88
+ */
89
+ import type { BrowserSession } from "./browser-session.ts";
90
+ /** The element actually acted on -- role, accessible name, a selector when one is addressable. Mirrors the port's own `PerformedTarget` field-for-field so a host can forward this unmodified. */
91
+ export interface RecordedTarget {
92
+ readonly role: string;
93
+ readonly name: string;
94
+ /** Null when no candidate was unique in this element's own root -- the same "no guessed selector" rule every other selector computation in this repo follows. */
95
+ readonly selector: string | null;
96
+ }
97
+ /** One human-driven interaction, in the order it was observed. */
98
+ export interface RecordedInteraction {
99
+ readonly action: "click" | "fill" | "select" | "navigate";
100
+ /** The element acted on. Null for `navigate`, which acts on the page, not an element. */
101
+ readonly target: RecordedTarget | null;
102
+ /** Where a `navigate` went. Null for every other action. */
103
+ readonly url: string | null;
104
+ /** The committed value, for `fill`/`select`. Null for `click`/`navigate`, and ALWAYS null when `secret` is true -- see this module's header. */
105
+ readonly text: string | null;
106
+ /** True only for a `fill` whose source field this collector's page-side script recognised as a password field. When true, `text` is null and was never populated from the field's real value in the first place. */
107
+ readonly secret: boolean;
108
+ readonly at: string;
109
+ }
110
+ export interface BrowserRecordingCollectorOptions {
111
+ readonly session: BrowserSession;
112
+ }
113
+ export interface BrowserRecordingCollector {
114
+ /** Starts (or resumes) capturing. Throws if the session's page has already crashed or closed, or if this collector is already capturing -- call `stop()` first. */
115
+ start(): Promise<void>;
116
+ /** Stops capturing and returns every interaction captured since `start()`, in order. Throws if this collector is not currently capturing. */
117
+ stop(): Promise<readonly RecordedInteraction[]>;
118
+ }
119
+ export declare function createBrowserRecordingCollector(options: BrowserRecordingCollectorOptions): BrowserRecordingCollector;
120
+ //# sourceMappingURL=browser-recording-collector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-recording-collector.d.ts","sourceRoot":"","sources":["../src/browser-recording-collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuFG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,kMAAkM;AAClM,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,iKAAiK;IACjK,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,kEAAkE;AAClE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC1D,yFAAyF;IACzF,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI,CAAC;IACvC,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gJAAgJ;IAChJ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,oNAAoN;IACpN,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,MAAM,WAAW,yBAAyB;IACxC,mKAAmK;IACnK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,6IAA6I;IAC7I,IAAI,IAAI,OAAO,CAAC,SAAS,mBAAmB,EAAE,CAAC,CAAC;CACjD;AAqOD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,gCAAgC,GAAG,yBAAyB,CAuEpH"}
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Recording: turns a HUMAN's own interactions with an already-open page into
3
+ * an ordered, timestamped stream a host can hand straight to a scenario
4
+ * builder -- the descry-core follow-up this package owes
5
+ * (`documents/decisions-inbox/DEC-NEXT-browser-recording-primitive.md`,
6
+ * `descry-core`'s `packages/mcp/src/browser/driver.ts`:
7
+ * `BrowserPageSession.startRecording`/`stopRecording`). Nothing here writes
8
+ * anything or drives the page itself -- the opposite direction from
9
+ * `BrowserActionCollector`, which *commands* the page and reports what it
10
+ * did. This collector only listens.
11
+ *
12
+ * Four kinds of interaction, matching the port's own `BrowserActionKind`
13
+ * vocabulary so the host can forward a captured event as a
14
+ * `PerformedTarget`/`PerformedStep` with no translation of the action name
15
+ * itself:
16
+ * - `click`, on the same interactive-element set `playwright-driver.ts`'s
17
+ * own `INTERACTIVE` constant already uses for a snapshot
18
+ * (`a, button, input, select, textarea, [role], [onclick], summary`) --
19
+ * clicking a checkbox or radio is captured here, not by the `change`
20
+ * listener below (see that listener's own comment on why).
21
+ * - `fill`, for a text field's value once it is COMMITTED -- the native
22
+ * `change` event, which a text `<input>`/`<textarea>` fires on blur only
23
+ * when its value actually changed since focus. Not `input`: capturing
24
+ * every keystroke would record a value no scenario replay wants (a
25
+ * partially-typed string), and `fill`, not `type`, because a recording
26
+ * only ever knows a field's final value, never the keystroke sequence
27
+ * that produced it -- the same distinction `browser-action-collector.ts`
28
+ * draws between its two text verbs, resolved here the only way it can be.
29
+ * - `select`, for a `<select>`'s `change` event -- its own branch, not the
30
+ * text-field one, because "a chooser's value changed" and "a field's text
31
+ * was committed" are different facts (mirrors `BrowserActionCollector
32
+ * .select()`).
33
+ * - `navigate`, for a real top-level (main-frame) navigation, observed
34
+ * directly off Playwright's own `framenavigated` rather than through the
35
+ * page-side script -- the frame that navigated *is* the fact, and asking
36
+ * the page to report its own navigation would miss the first instant of
37
+ * the new document.
38
+ *
39
+ * **Passwords never leave the page.** A field this collector's page-side
40
+ * script recognises as a password field (`type="password"`, or
41
+ * `autocomplete="current-password"`/`"new-password"`) reports `secret: true`
42
+ * and never reads `.value` into the payload it sends across the binding at
43
+ * all -- not captured-then-redacted, never captured. `text` on the resulting
44
+ * `RecordedInteraction` is `null` whenever `secret` is `true`; assembling the
45
+ * actual `${credential:NAME}` placeholder is the host's job
46
+ * (`recordedSecretCredentialName`/`recordedSecretPlaceholder`,
47
+ * `descry-core`'s `driver.ts`) because only the host knows this session's
48
+ * running count of secrets recorded so far -- the ordinal that keeps two
49
+ * distinct password fields from colliding onto the same credential name.
50
+ *
51
+ * **Selector preference** reuses the identical tiered rule
52
+ * `playwright-driver.ts`'s own `computeSelector` already applies for a
53
+ * snapshot element: a `data-testid`/`data-test` hook first, then a
54
+ * non-generated `id`, then a named form control, then an
55
+ * aria-labelled-and-roled element, then a bounded structural path anchored at
56
+ * the nearest ancestor carrying one of the above -- each tier accepted only
57
+ * when it is unique in the element's own root (`document`, or the open
58
+ * shadow root it lives in). It is restated here, not imported, for the same
59
+ * reason `driver.ts` restates `PerformedTarget` rather than importing a
60
+ * scenario type: the string below is serialised into the page verbatim
61
+ * (`page.addInitScript`/`page.evaluate`), and a page-side script cannot
62
+ * import a Node module.
63
+ *
64
+ * **Listener lifecycle.** `page.exposeFunction` and `page.addInitScript` are
65
+ * each installed at most once per collector instance (lazily, on the first
66
+ * `start()`) -- Playwright refuses a second `exposeFunction` under the same
67
+ * name, and a second `addInitScript` would double-register the in-page
68
+ * listeners on every navigation after that. Because `addInitScript` "doesn't
69
+ * reach an already-loaded document" (the same contract every other probe in
70
+ * this package documents -- `frontend-initiator-capture.ts`,
71
+ * `identity-grounding`'s probes), `start()` ALSO runs the identical
72
+ * installer directly via `page.evaluate` against whatever document is
73
+ * current right now, idempotently (a `window` marker skips a second
74
+ * install), so a recording that starts mid-session on an already-open page
75
+ * is not silently missing its first document's events.
76
+ *
77
+ * A capturing session can therefore be started and stopped more than once
78
+ * without re-installing anything: `start()`/`stop()` do not attach or detach
79
+ * the page-side listeners themselves (Playwright exposes no way to
80
+ * un-expose a function or un-register an init script), they gate a
81
+ * `capturing` flag the Node-side binding handler checks before pushing to
82
+ * the buffer -- the identical "an unattached listener produces nothing"
83
+ * discipline `descry-core`'s fake driver already documents for its own
84
+ * `recordHuman*` methods. The one exception is the `framenavigated`
85
+ * listener, which genuinely is `page.on`/`page.off` in `start()`/`stop()`,
86
+ * matching `BrowserConsoleCollector`'s own precedent, because Playwright
87
+ * offers a real way to detach it.
88
+ */
89
+ const RECORDING_BINDING_NAME = "__descryRecordInteraction";
90
+ /** The same interactive-element set `playwright-driver.ts`'s `INTERACTIVE` constant already scopes a snapshot to -- kept identical so a click this collector captures is always one a snapshot-based replay could also have resolved. */
91
+ const INTERACTIVE_SELECTOR = "a, button, input, select, textarea, [role], [onclick], summary";
92
+ /**
93
+ * Serialised and run inside the page (`page.addInitScript`/`page.evaluate`)
94
+ * -- closes over nothing in this module. Idempotent: re-running it against a
95
+ * document that already has the listeners installed (the `window` marker)
96
+ * is a deliberate no-op, so calling it once via `addInitScript`'s
97
+ * registration and once more directly via `page.evaluate` at `start()` time
98
+ * (for the document already open when recording starts) never double-fires
99
+ * an event.
100
+ */
101
+ function installerScriptSource() {
102
+ return `(() => {
103
+ const MARKER = "__descryRecordingInstalled";
104
+ if (window[MARKER] === true) return;
105
+ const bind = window[${JSON.stringify(RECORDING_BINDING_NAME)}];
106
+ if (typeof bind !== "function") return;
107
+ window[MARKER] = true;
108
+
109
+ const GENERATED_ID = /[0-9a-f]{8}|:r[0-9a-z]+:|^\\s*$/i;
110
+ const FORM_CONTROLS = ["input", "select", "textarea", "button"];
111
+ const TEXT_INPUT_TYPES = ["", "text", "email", "tel", "url", "search", "number", "password"];
112
+
113
+ function escapeAttrValue(value) {
114
+ return value.replace(/\\\\/g, "\\\\\\\\").replace(/"/g, '\\\\"');
115
+ }
116
+
117
+ function rootOf(el) {
118
+ return typeof el.getRootNode === "function" ? el.getRootNode() : el.ownerDocument;
119
+ }
120
+
121
+ function isUnique(root, candidate) {
122
+ try {
123
+ return root.querySelectorAll(candidate).length === 1;
124
+ } catch (e) {
125
+ return false;
126
+ }
127
+ }
128
+
129
+ function stableHookSelector(node) {
130
+ const testId = node.getAttribute("data-testid");
131
+ if (testId && testId.trim() !== "") return '[data-testid="' + escapeAttrValue(testId) + '"]';
132
+ const testAttr = node.getAttribute("data-test");
133
+ if (testAttr && testAttr.trim() !== "") return '[data-test="' + escapeAttrValue(testAttr) + '"]';
134
+ const id = node.getAttribute("id");
135
+ if (id && !GENERATED_ID.test(id)) return '[id="' + escapeAttrValue(id) + '"]';
136
+ return null;
137
+ }
138
+
139
+ function nthOfTypeSegment(node, parent) {
140
+ const tag = node.tagName.toLowerCase();
141
+ const siblings = parent.querySelectorAll(":scope > " + tag);
142
+ if (siblings.length <= 1) return tag;
143
+ for (let i = 0; i < siblings.length; i += 1) {
144
+ if (siblings[i] === node) return tag + ":nth-of-type(" + (i + 1) + ")";
145
+ }
146
+ return tag;
147
+ }
148
+
149
+ function structuralPath(target, root) {
150
+ const segments = [];
151
+ let node = target;
152
+ for (let depth = 0; depth < 6; depth += 1) {
153
+ const parent = node.parentElement;
154
+ if (!parent) return null;
155
+ segments.unshift(nthOfTypeSegment(node, parent));
156
+ const hook = stableHookSelector(parent);
157
+ if (hook) {
158
+ const candidate = hook + " > " + segments.join(" > ");
159
+ return isUnique(root, candidate) ? candidate : null;
160
+ }
161
+ node = parent;
162
+ }
163
+ return null;
164
+ }
165
+
166
+ function computeSelector(target) {
167
+ const root = rootOf(target);
168
+ const testId = target.getAttribute("data-testid");
169
+ if (testId && testId.trim() !== "") {
170
+ const candidate = '[data-testid="' + escapeAttrValue(testId) + '"]';
171
+ if (isUnique(root, candidate)) return candidate;
172
+ }
173
+ const testAttr = target.getAttribute("data-test");
174
+ if (testAttr && testAttr.trim() !== "") {
175
+ const candidate = '[data-test="' + escapeAttrValue(testAttr) + '"]';
176
+ if (isUnique(root, candidate)) return candidate;
177
+ }
178
+ const id = target.getAttribute("id");
179
+ if (id && !GENERATED_ID.test(id)) {
180
+ const candidate = '[id="' + escapeAttrValue(id) + '"]';
181
+ if (isUnique(root, candidate)) return candidate;
182
+ }
183
+ const tag = target.tagName.toLowerCase();
184
+ const name = target.getAttribute("name");
185
+ if (name && name.trim() !== "" && FORM_CONTROLS.indexOf(tag) !== -1) {
186
+ const candidate = tag + '[name="' + escapeAttrValue(name) + '"]';
187
+ if (isUnique(root, candidate)) return candidate;
188
+ }
189
+ const explicitRole = target.getAttribute("role");
190
+ const ariaLabel = target.getAttribute("aria-label");
191
+ if (explicitRole && ariaLabel && ariaLabel.trim() !== "") {
192
+ const candidate = '[role="' + escapeAttrValue(explicitRole) + '"][aria-label="' + escapeAttrValue(ariaLabel) + '"]';
193
+ if (isUnique(root, candidate)) return candidate;
194
+ }
195
+ return structuralPath(target, root);
196
+ }
197
+
198
+ function derivedRole(el) {
199
+ const tag = el.tagName.toLowerCase();
200
+ const explicit = el.getAttribute("role");
201
+ if (explicit) return explicit;
202
+ const type = (el.getAttribute("type") || "").toLowerCase();
203
+ if (tag === "a") return "link";
204
+ if (tag === "button") return "button";
205
+ if (tag === "textarea") return "textbox";
206
+ if (tag === "summary") return "button";
207
+ if (tag === "select") {
208
+ const multiple = el.getAttribute("multiple") !== null;
209
+ const size = Number(el.getAttribute("size") || "1");
210
+ return multiple || size > 1 ? "listbox" : "combobox";
211
+ }
212
+ if (tag !== "input") return tag;
213
+ switch (type) {
214
+ case "button":
215
+ case "submit":
216
+ case "reset":
217
+ case "image":
218
+ return "button";
219
+ case "checkbox":
220
+ return "checkbox";
221
+ case "radio":
222
+ return "radio";
223
+ case "range":
224
+ return "slider";
225
+ case "number":
226
+ return "spinbutton";
227
+ case "search":
228
+ return "searchbox";
229
+ default:
230
+ return "textbox";
231
+ }
232
+ }
233
+
234
+ function derivedName(el) {
235
+ const tag = el.tagName.toLowerCase();
236
+ const type = (el.getAttribute("type") || "").toLowerCase();
237
+ const aria = el.getAttribute("aria-label");
238
+ if (aria && aria.trim() !== "") return aria;
239
+ if (tag !== "select") {
240
+ const inner = (el.innerText || "").trim();
241
+ if (inner !== "") return inner;
242
+ const text = (el.textContent || "").trim();
243
+ if (text !== "") return text;
244
+ }
245
+ if (tag === "input" && (type === "button" || type === "submit" || type === "reset")) {
246
+ const value = el.getAttribute("value");
247
+ if (value && value.trim() !== "") return value.trim();
248
+ }
249
+ return el.getAttribute("placeholder") || el.getAttribute("title") || el.getAttribute("name") || "";
250
+ }
251
+
252
+ function isPasswordField(el) {
253
+ if (el.tagName.toLowerCase() !== "input") return false;
254
+ const type = (el.getAttribute("type") || "").toLowerCase();
255
+ if (type === "password") return true;
256
+ const autocomplete = (el.getAttribute("autocomplete") || "").toLowerCase();
257
+ return autocomplete === "current-password" || autocomplete === "new-password";
258
+ }
259
+
260
+ function describeTarget(el) {
261
+ return { role: derivedRole(el), name: derivedName(el).slice(0, 200), selector: computeSelector(el) };
262
+ }
263
+
264
+ document.addEventListener(
265
+ "click",
266
+ function (ev) {
267
+ const el = ev.target && typeof ev.target.closest === "function" ? ev.target.closest(${JSON.stringify(INTERACTIVE_SELECTOR)}) : null;
268
+ if (!el) return;
269
+ const described = describeTarget(el);
270
+ bind({ action: "click", role: described.role, name: described.name, selector: described.selector, value: null, secret: false }).catch(function () {});
271
+ },
272
+ true,
273
+ );
274
+
275
+ document.addEventListener(
276
+ "change",
277
+ function (ev) {
278
+ const el = ev.target;
279
+ if (!el || !el.tagName) return;
280
+ const tag = el.tagName.toLowerCase();
281
+ if (tag === "select") {
282
+ const described = describeTarget(el);
283
+ const value = el.multiple ? Array.prototype.map.call(el.selectedOptions, function (o) { return o.value; }).join(",") : el.value;
284
+ bind({ action: "select", role: described.role, name: described.name, selector: described.selector, value: value, secret: false }).catch(function () {});
285
+ return;
286
+ }
287
+ if (tag === "input" || tag === "textarea") {
288
+ const type = (el.getAttribute("type") || "").toLowerCase();
289
+ // Only a text-shaped control's committed value is a "fill" -- a checkbox/radio's
290
+ // own change is a state toggle, not a value entered, and is already reported by
291
+ // the click listener above (the click that toggled it matches INTERACTIVE too).
292
+ if (tag === "input" && TEXT_INPUT_TYPES.indexOf(type) === -1) return;
293
+ const secret = isPasswordField(el);
294
+ const described = describeTarget(el);
295
+ // The whole point: a password field's real value is never read into this payload at all.
296
+ bind({ action: "fill", role: described.role, name: described.name, selector: described.selector, value: secret ? null : el.value, secret: secret }).catch(function () {});
297
+ }
298
+ },
299
+ true,
300
+ );
301
+ })();`;
302
+ }
303
+ export function createBrowserRecordingCollector(options) {
304
+ const { session } = options;
305
+ const page = session.page;
306
+ let capturing = false;
307
+ let buffer = [];
308
+ let bindingInstalled = false;
309
+ function onRecordedInteraction(payload) {
310
+ if (!capturing)
311
+ return; // an unattached listener producing nothing -- see this module's header.
312
+ buffer.push({
313
+ action: payload.action,
314
+ target: { role: payload.role, name: payload.name, selector: payload.selector },
315
+ url: null,
316
+ text: payload.secret ? null : payload.value,
317
+ secret: payload.secret,
318
+ at: new Date().toISOString(),
319
+ });
320
+ }
321
+ function onFrameNavigated(frame) {
322
+ if (!capturing)
323
+ return;
324
+ if (frame !== page.mainFrame())
325
+ return; // "top-level" -- an iframe's own navigation is not this session's page moving.
326
+ buffer.push({ action: "navigate", target: null, url: frame.url(), text: null, secret: false, at: new Date().toISOString() });
327
+ }
328
+ async function ensureInstalled() {
329
+ if (!bindingInstalled) {
330
+ // Playwright refuses a second `exposeFunction` under the same name and would
331
+ // double-register in-page listeners on a second `addInitScript` -- both installed
332
+ // at most once per collector instance, ever.
333
+ await page.exposeFunction(RECORDING_BINDING_NAME, onRecordedInteraction);
334
+ await page.addInitScript({ content: installerScriptSource() });
335
+ bindingInstalled = true;
336
+ }
337
+ // `addInitScript` only reaches documents navigated to AFTER it is registered -- this
338
+ // session may already be sitting on a page when recording starts, so the identical,
339
+ // idempotent installer also runs directly against whatever document is current now.
340
+ await page.evaluate(installerScriptSource()).catch(() => {
341
+ // No accessible document to evaluate against right now (e.g. mid-navigation). Not
342
+ // fatal: `addInitScript` still covers every document from here forward, so a
343
+ // human's first observable interaction is only missed if it happens in the exact
344
+ // instant no document is present to click or type into.
345
+ });
346
+ }
347
+ return {
348
+ async start() {
349
+ if (!session.isUsable()) {
350
+ throw new Error(`browser session ${session.sessionId}: the page has already crashed or closed.`);
351
+ }
352
+ if (capturing) {
353
+ throw new Error(`browser session ${session.sessionId}: already recording. Call stop() before starting again.`);
354
+ }
355
+ await ensureInstalled();
356
+ buffer = [];
357
+ capturing = true;
358
+ page.on("framenavigated", onFrameNavigated);
359
+ },
360
+ async stop() {
361
+ if (!capturing) {
362
+ throw new Error(`browser session ${session.sessionId}: not currently recording. Call start() first.`);
363
+ }
364
+ page.off("framenavigated", onFrameNavigated);
365
+ capturing = false;
366
+ const captured = buffer;
367
+ buffer = [];
368
+ return captured;
369
+ },
370
+ };
371
+ }
372
+ //# sourceMappingURL=browser-recording-collector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser-recording-collector.js","sourceRoot":"","sources":["../src/browser-recording-collector.ts"],"names":[],"mappings":"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"}
@@ -232,4 +232,73 @@ export declare class BrowserUnavailableError extends Error {
232
232
  */
233
233
  export declare function launchBrowserSessionOrRefuse(options?: BrowserSessionOptions): Promise<BrowserSessionLaunch>;
234
234
  export declare function launchBrowserSession(options?: BrowserSessionOptions): Promise<BrowserSession>;
235
+ /**
236
+ * RT-264 — browser reuse. Build A's own lane (`documents/plans/product-improvement`,
237
+ * lane 5) named the cost this replaces: every `browser_start_session` used to pay a
238
+ * fresh `chromium.launch()` (measured, on other Chromium-launching paths in this
239
+ * codebase, as the dominant cost over a warm context) even though most of what a
240
+ * session needs — its own cookies, storage, cache and page — lives at the *context*
241
+ * level, not the *browser* level. One `SharedBrowserManager` launches Chromium once,
242
+ * lazily, and hands every `acquireSession()` caller a fresh `BrowserContext` off that
243
+ * one process, exactly as isolated from every other live context as before (Playwright
244
+ * contexts don't share cookies/storage/cache with one another — see the isolation test
245
+ * this ships alongside, `browser-session-reuse.test.ts`).
246
+ *
247
+ * **Isolation verified, not yet wired.** The isolation test (Build B step 7) has run:
248
+ * green against this manager, red against a mutation sharing one context. It is still
249
+ * not the live path for `browser_start_session` in `@descryy/mcp`'s
250
+ * `playwright-driver.ts`, and its speed/memory benefit is unmeasured (RT-264).
251
+ *
252
+ * What this manager owns, precisely:
253
+ * - Lazy launch: the shared `Browser` does not exist until the first `acquireSession()`.
254
+ * - Reuse: every later call gets a fresh context+page off the same `Browser`, via
255
+ * `createSessionFromBrowser` — the identical context-construction code the
256
+ * solo-launch path above uses, so reuse changes nothing about how a context is
257
+ * built, seeded or torn down at the context level.
258
+ * - Context-only close: a session's own `close()` (returned as part of `BrowserSession`)
259
+ * closes its context and releases its slot; it never touches the shared `Browser`.
260
+ * - Crash/disconnect: a `disconnected` event on the shared `Browser` nulls out this
261
+ * manager's held reference. The *next* `acquireSession()` notices the browser is gone
262
+ * and relaunches, reporting `relaunchedBrowser: true` so the caller can disclose it
263
+ * (rule 7) — a live session already holding a context on the dead browser is not
264
+ * rescued; it fails on its own next call, the same as any other browser crash.
265
+ * - Idle shutdown: once `liveSessionCount()` returns to zero, an idle timer starts; the
266
+ * shared browser is closed if it is still at zero when the timer fires. Any
267
+ * `acquireSession()` in between cancels the timer.
268
+ */
269
+ export declare const SHARED_BROWSER_IDLE_TIMEOUT_MS: number;
270
+ export interface SharedBrowserAcquireResult {
271
+ readonly launched: true;
272
+ readonly session: BrowserSession;
273
+ /**
274
+ * True exactly when this call had to (re)launch the shared browser process itself —
275
+ * first use ever, or after a prior crash/disconnect — rather than hand out a context
276
+ * in one already running. A caller (`playwright-driver.ts`) should disclose this the
277
+ * same way it discloses any other honest-degradation fact (rule 7): it is the signal
278
+ * that this particular open paid the full launch cost anyway.
279
+ */
280
+ readonly relaunchedBrowser: boolean;
281
+ }
282
+ export type SharedBrowserAcquireOutcome = SharedBrowserAcquireResult | ({
283
+ readonly launched: false;
284
+ } & ChromiumUnavailable);
285
+ export interface SharedBrowserManager {
286
+ /**
287
+ * Lazily launches the one shared Chromium process on first call; every later call
288
+ * reuses it and hands back a fresh context + page. Concurrent calls while the
289
+ * browser is still launching share that one launch rather than racing two.
290
+ */
291
+ acquireSession(options?: BrowserSessionOptions): Promise<SharedBrowserAcquireOutcome>;
292
+ /** Contexts acquired via this manager and not yet closed. */
293
+ liveSessionCount(): number;
294
+ /**
295
+ * Closes the shared browser now, regardless of live session count. Test/shutdown use
296
+ * only — a session still holding a context on it is not asked to close first; its own
297
+ * next call simply fails, same as any other browser crash.
298
+ */
299
+ dispose(): Promise<void>;
300
+ }
301
+ /** See the module doc above this constant — NOT SHIPPABLE until the isolation test
302
+ * (`browser-session-reuse.test.ts`) has actually been run and is green. */
303
+ export declare function createSharedBrowserManager(idleTimeoutMs?: number): SharedBrowserManager;
235
304
  //# sourceMappingURL=browser-session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-session.d.ts","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAA+C,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAMzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAEvE;;;;GAIG;AACH;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,uBAAuB;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC/C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,mFAAmF;IACnF,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzD,sDAAsD;IACtD,QAAQ,CAAC,gBAAgB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC9D;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,qBAAqB,GAAG,oBAAoB,GAAG;IAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAA;CAAE,CAAC;AAElG;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC;;;;;;;;OAQG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,2JAA2J;IAC3J,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,IAAI,OAAO,CAAC;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,aAAa,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAC5C;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C;;;;;;;;;;;;;;;OAeG;IACH,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;CAClF;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,gIAAgI;IAChI,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;CACzC;AAED,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAC7D,CAAC;IAAE,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAA;CAAE,GAAG,mBAAmB,CAAC,CAAC;AAE1D,MAAM,MAAM,oBAAoB,GAC5B;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CAAE,GAC7D,CAAC;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG,mBAAmB,CAAC,CAAC;AAEzD,eAAO,MAAM,uBAAuB,oCAAoC,CAAC;AAEzE;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,oBAAoB,CAYhE;AAED,oLAAoL;AACpL,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;gBAE5B,WAAW,EAAE,mBAAmB;CAO7C;AAED;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAOrH;AAED,wBAAsB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,cAAc,CAAC,CAOvG;AA6ND;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,8BAA8B,QAAgB,CAAC;AAM5D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC;;;;;;OAMG;IACH,QAAQ,CAAC,iBAAiB,EAAE,OAAO,CAAC;CACrC;AAED,MAAM,MAAM,2BAA2B,GAAG,0BAA0B,GAAG,CAAC;IAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAA;CAAE,GAAG,mBAAmB,CAAC,CAAC;AAE5H,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;IACtF,6DAA6D;IAC7D,gBAAgB,IAAI,MAAM,CAAC;IAC3B;;;;OAIG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;4EAC4E;AAC5E,wBAAgB,0BAA0B,CAAC,aAAa,GAAE,MAAuC,GAAG,oBAAoB,CA2FvH"}
@@ -72,6 +72,24 @@ export async function launchBrowserSession(options = {}) {
72
72
  }
73
73
  async function launchWithExecutable(options, executablePath) {
74
74
  const browser = await chromium.launch({ headless: options.headless ?? true, executablePath });
75
+ return createSessionFromBrowser(browser, options, async () => {
76
+ await browser.close();
77
+ });
78
+ }
79
+ /**
80
+ * The context/page half of a session's launch, factored out of
81
+ * `launchWithExecutable` (RT-264) so the fresh-browser-per-session path above and the
82
+ * shared-browser path below (`createSharedBrowserManager`) run the exact same context
83
+ * creation, auth seeding, video wiring and crash tracking -- reuse changes *which*
84
+ * `Browser` a context comes from and what happens when the context closes, never how
85
+ * the context itself is built.
86
+ *
87
+ * `afterContextClosed` is that seam: the solo path closes the browser along with its
88
+ * one context (old behaviour, unchanged); the shared path instead releases this
89
+ * context's slot back to the manager and leaves the browser running for the next
90
+ * caller.
91
+ */
92
+ async function createSessionFromBrowser(browser, options, afterContextClosed) {
75
93
  const sessionId = randomUUID();
76
94
  // session-scoped temp dir, never caller-supplied (see BrowserConfiguration.recordVideo).
77
95
  // created before newContext(): Playwright's recordVideo.dir must exist and be known at context-creation time.
@@ -121,7 +139,7 @@ async function launchWithExecutable(options, executablePath) {
121
139
  isUsable: () => !crashed && !page.isClosed(),
122
140
  async close() {
123
141
  await context.close();
124
- await browser.close();
142
+ await afterContextClosed();
125
143
  },
126
144
  async saveStorageState(path) {
127
145
  if (page.isClosed()) {
@@ -256,4 +274,131 @@ function originOf(url) {
256
274
  function lowerCased(headers) {
257
275
  return Object.fromEntries(Object.entries(headers).map(([name, value]) => [name.toLowerCase(), value]));
258
276
  }
277
+ /**
278
+ * RT-264 — browser reuse. Build A's own lane (`documents/plans/product-improvement`,
279
+ * lane 5) named the cost this replaces: every `browser_start_session` used to pay a
280
+ * fresh `chromium.launch()` (measured, on other Chromium-launching paths in this
281
+ * codebase, as the dominant cost over a warm context) even though most of what a
282
+ * session needs — its own cookies, storage, cache and page — lives at the *context*
283
+ * level, not the *browser* level. One `SharedBrowserManager` launches Chromium once,
284
+ * lazily, and hands every `acquireSession()` caller a fresh `BrowserContext` off that
285
+ * one process, exactly as isolated from every other live context as before (Playwright
286
+ * contexts don't share cookies/storage/cache with one another — see the isolation test
287
+ * this ships alongside, `browser-session-reuse.test.ts`).
288
+ *
289
+ * **Isolation verified, not yet wired.** The isolation test (Build B step 7) has run:
290
+ * green against this manager, red against a mutation sharing one context. It is still
291
+ * not the live path for `browser_start_session` in `@descryy/mcp`'s
292
+ * `playwright-driver.ts`, and its speed/memory benefit is unmeasured (RT-264).
293
+ *
294
+ * What this manager owns, precisely:
295
+ * - Lazy launch: the shared `Browser` does not exist until the first `acquireSession()`.
296
+ * - Reuse: every later call gets a fresh context+page off the same `Browser`, via
297
+ * `createSessionFromBrowser` — the identical context-construction code the
298
+ * solo-launch path above uses, so reuse changes nothing about how a context is
299
+ * built, seeded or torn down at the context level.
300
+ * - Context-only close: a session's own `close()` (returned as part of `BrowserSession`)
301
+ * closes its context and releases its slot; it never touches the shared `Browser`.
302
+ * - Crash/disconnect: a `disconnected` event on the shared `Browser` nulls out this
303
+ * manager's held reference. The *next* `acquireSession()` notices the browser is gone
304
+ * and relaunches, reporting `relaunchedBrowser: true` so the caller can disclose it
305
+ * (rule 7) — a live session already holding a context on the dead browser is not
306
+ * rescued; it fails on its own next call, the same as any other browser crash.
307
+ * - Idle shutdown: once `liveSessionCount()` returns to zero, an idle timer starts; the
308
+ * shared browser is closed if it is still at zero when the timer fires. Any
309
+ * `acquireSession()` in between cancels the timer.
310
+ */
311
+ export const SHARED_BROWSER_IDLE_TIMEOUT_MS = 5 * 60 * 1000; // starting value, not a measurement -- see RT-264. Chosen to match
312
+ /** See the module doc above this constant — NOT SHIPPABLE until the isolation test
313
+ * (`browser-session-reuse.test.ts`) has actually been run and is green. */
314
+ export function createSharedBrowserManager(idleTimeoutMs = SHARED_BROWSER_IDLE_TIMEOUT_MS) {
315
+ let browser = null;
316
+ let launchInFlight = null;
317
+ let liveCount = 0;
318
+ let idleTimer = null;
319
+ function cancelIdleTimer() {
320
+ if (idleTimer !== null) {
321
+ clearTimeout(idleTimer);
322
+ idleTimer = null;
323
+ }
324
+ }
325
+ function armIdleTimerIfIdle() {
326
+ cancelIdleTimer();
327
+ idleTimer = setTimeout(() => {
328
+ // Re-checked at fire time, not assumed from when the timer was armed -- an
329
+ // acquireSession() in between already cancelled this timer via
330
+ // cancelIdleTimer(), so reaching here with liveCount still 0 means the
331
+ // browser really has sat idle for the whole window.
332
+ if (liveCount === 0 && browser !== null) {
333
+ const toClose = browser;
334
+ browser = null;
335
+ void toClose.close().catch(() => { });
336
+ }
337
+ }, idleTimeoutMs);
338
+ }
339
+ async function ensureBrowser() {
340
+ if (browser !== null)
341
+ return { ok: true, browser, relaunched: false };
342
+ if (launchInFlight === null) {
343
+ launchInFlight = (async () => {
344
+ const chromiumBinary = resolveChromiumExecutable();
345
+ if (!chromiumBinary.available) {
346
+ const { available: _available, ...unavailable } = chromiumBinary;
347
+ return { ok: false, ...unavailable };
348
+ }
349
+ const launched = await chromium.launch({ headless: true, executablePath: chromiumBinary.executablePath });
350
+ // The shared browser process itself dying (not one page/context) -- noticed
351
+ // here so the NEXT acquireSession() relaunches rather than resolving a dead
352
+ // handle. Nulling `browser` (guarded by identity, in case a relaunch has
353
+ // already replaced it by the time this fires) is the only action taken; a
354
+ // live session already holding a context on it is left to fail on its own
355
+ // next call.
356
+ launched.on("disconnected", () => {
357
+ if (browser === launched)
358
+ browser = null;
359
+ });
360
+ return { ok: true, browser: launched };
361
+ })();
362
+ }
363
+ const result = await launchInFlight;
364
+ launchInFlight = null;
365
+ if (!result.ok)
366
+ return result;
367
+ const relaunched = browser === null;
368
+ browser = result.browser;
369
+ return { ok: true, browser: result.browser, relaunched };
370
+ }
371
+ return {
372
+ async acquireSession(options = {}) {
373
+ cancelIdleTimer();
374
+ const ensured = await ensureBrowser();
375
+ if (!ensured.ok) {
376
+ return {
377
+ launched: false,
378
+ refusal: ensured.refusal,
379
+ message: ensured.message,
380
+ remedy: ensured.remedy,
381
+ expectedExecutablePath: ensured.expectedExecutablePath,
382
+ };
383
+ }
384
+ liveCount += 1;
385
+ const session = await createSessionFromBrowser(ensured.browser, options, async () => {
386
+ liveCount = Math.max(0, liveCount - 1);
387
+ if (liveCount === 0)
388
+ armIdleTimerIfIdle();
389
+ });
390
+ return { launched: true, session, relaunchedBrowser: ensured.relaunched };
391
+ },
392
+ liveSessionCount: () => liveCount,
393
+ async dispose() {
394
+ cancelIdleTimer();
395
+ liveCount = 0;
396
+ if (browser !== null) {
397
+ const toClose = browser;
398
+ browser = null;
399
+ await toClose.close().catch(() => { });
400
+ }
401
+ },
402
+ };
403
+ }
259
404
  //# sourceMappingURL=browser-session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser-session.js","sourceRoot":"","sources":["../src/browser-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,QAAQ,EAAgD,MAAM,iBAAiB,CAAC;AACzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA0MjC,MAAM,CAAC,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AAEzE;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACvC,MAAM,cAAc,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IACjD,IAAI,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAC3E,OAAO;QACL,SAAS,EAAE,KAAK;QAChB,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EACL,6BAA6B,cAAc,mDAAmD;YAC9F,8GAA8G;QAChH,MAAM,EAAE,uBAAuB;QAC/B,sBAAsB,EAAE,cAAc;KACvC,CAAC;AACJ,CAAC;AAED,oLAAoL;AACpL,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IACvC,OAAO,CAAiC;IACxC,MAAM,CAAS;IACf,sBAAsB,CAAS;IAExC,YAAY,WAAgC;QAC1C,KAAK,CAAC,GAAG,WAAW,CAAC,OAAO,YAAY,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;QACtC,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;QACjC,IAAI,CAAC,sBAAsB,GAAG,WAAW,CAAC,sBAAsB,CAAC;IACnE,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAAC,UAAiC,EAAE;IACpF,MAAM,cAAc,GAAG,yBAAyB,EAAE,CAAC;IACnD,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;QAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC;QACjE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,WAAW,EAAE,CAAC;IAC7C,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC,OAAO,EAAE,cAAc,CAAC,cAAc,CAAC,EAAE,CAAC;AACzG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAiC,EAAE;IAC5E,MAAM,MAAM,GAAG,MAAM,4BAA4B,CAAC,OAAO,CAAC,CAAC;IAC3D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,CAAC;QACvD,MAAM,IAAI,uBAAuB,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,OAA8B,EAAE,cAAsB;IACxF,MAAM,OAAO,GAAY,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;IACvG,OAAO,wBAAwB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,KAAK,UAAU,wBAAwB,CACrC,OAAgB,EAChB,OAA8B,EAC9B,kBAAuC;IAEvC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAC/B,yFAAyF;IACzF,8GAA8G;IAC9G,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACnH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC1B,MAAM,OAAO,GAAmB,MAAM,OAAO,CAAC,UAAU,CAAC;QACvD,GAAG,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;QAChE,0EAA0E;QAC1E,yEAAyE;QACzE,yEAAyE;QACzE,yEAAyE;QACzE,mEAAmE;QACnE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;KACpE,CAAC,CAAC;IACH,MAAM,IAAI,GAAS,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAE3C,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,qEAAqE;IACrE,IAAI,IAAI,EAAE,gBAAgB,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC;QAC9B,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YAC1C,IAAI,UAAU,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC;gBACH,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC;YACnE,CAAC;YAAC,MAAM,CAAC;gBACP,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YACD,gEAAgE;YAChE,oEAAoE;YACpE,+CAA+C;YAC/C,MAAM,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAE3C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACpB,OAAO,GAAG,IAAI,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS;QACT,IAAI;QACJ,SAAS;QACT,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;QAC5C,KAAK,CAAC,KAAK;YACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,kBAAkB,EAAE,CAAC;QAC7B,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,IAAY;YACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CACb,qGAAqG;oBACnG,gGAAgG;oBAChG,kCAAkC,CACrC,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,IAAsB;YAC7C,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACpB,MAAM,IAAI,KAAK,CACb,qGAAqG;oBACnG,qCAAqC,CACxC,CAAC;YACJ,CAAC;YACD,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACpD,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG;gBACxB,mEAAmE;gBACnE,oCAAoC;gBACpC,OAAO,EAAE,CAAC,CAAC;gBACX,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;gBAClC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;gBAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;aACnC,CAAC,CAAC,CAAC;YACJ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE1D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;YAC9D,IAAI,oBAAoB,GAAG,CAAC,CAAC;YAC7B,IAAI,mBAAmB,GAAkB,IAAI,CAAC;YAC9C,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC3C,IAAI,aAAa,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;oBAClC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,OAA+C,EAAE,EAAE;wBACtE,+DAA+D;wBAC/D,0DAA0D;wBAC1D,gEAAgE;wBAChE,gEAAgE;wBAChE,2DAA2D;wBAC3D,iEAAiE;wBACjE,4DAA4D;wBAC5D,2CAA2C;wBAC3C,MAAM,KAAK,GAAI,UAA0F,CAAC,YAAY,CAAC;wBACvH,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,OAAO;4BAAE,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;oBAClE,CAAC,EAAE,aAAa,CAAC,CAAC;oBAClB,oBAAoB,GAAG,aAAa,CAAC,MAAM,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,mBAAmB;wBACjB,4BAA4B,aAAa,IAAI,+CAA+C,QAAQ;4BACpG,GAAG,IAAI,CAAC,MAAM,qFAAqF;4BACnG,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,iBAAiB;4BACrG,oEAAoE,CAAC;gBACzE,CAAC;YACH,CAAC;YACD,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;QACxF,CAAC;QACD,KAAK,CAAC,aAAa;YACjB,IAAI,QAAQ,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YACnC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CACb,iGAAiG;oBAC/F,iGAAiG;oBACjG,8DAA8D,CACjE,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;YAC3B,iGAAiG;YACjG,0FAA0F;YAC1F,IAAI,KAAK,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC;YAChC,MAAM,aAAa,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,CAAC;YAC5C,6FAA6F;YAC7F,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACrE,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAwB;IAI5C,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACpD,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,GAAG;QACxB,yEAAyE;QACzE,gEAAgE;QAChE,wEAAwE;QACxE,qEAAqE;QACrE,OAAO,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;QAClC,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,KAAK;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK;KACnC,CAAC,CAAC,CAAC;IACJ,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACjG,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1G,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,yEAAyE;QACzE,kEAAkE;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;AACH,CAAC;AAED,sLAAsL;AACtL,SAAS,QAAQ,CAAC,GAAW;IAC3B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,UAAU,CAAC,OAAyC;IAC3D,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACzG,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,mEAAmE;AAsChI;4EAC4E;AAC5E,MAAM,UAAU,0BAA0B,CAAC,gBAAwB,8BAA8B;IAC/F,IAAI,OAAO,GAAmB,IAAI,CAAC;IACnC,IAAI,cAAc,GAAwH,IAAI,CAAC;IAC/I,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,IAAI,SAAS,GAAyC,IAAI,CAAC;IAE3D,SAAS,eAAe;QACtB,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,SAAS,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,SAAS,kBAAkB;QACzB,eAAe,EAAE,CAAC;QAClB,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC1B,2EAA2E;YAC3E,+DAA+D;YAC/D,uEAAuE;YACvE,oDAAoD;YACpD,IAAI,SAAS,KAAK,CAAC,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACxC,MAAM,OAAO,GAAG,OAAO,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;gBACf,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,EAAE,aAAa,CAAC,CAAC;IACpB,CAAC;IAED,KAAK,UAAU,aAAa;QAG1B,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;QACtE,IAAI,cAAc,KAAK,IAAI,EAAE,CAAC;YAC5B,cAAc,GAAG,CAAC,KAAK,IAAI,EAAE;gBAC3B,MAAM,cAAc,GAAG,yBAAyB,EAAE,CAAC;gBACnD,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;oBAC9B,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,GAAG,cAAc,CAAC;oBACjE,OAAO,EAAE,EAAE,EAAE,KAAc,EAAE,GAAG,WAAW,EAAE,CAAC;gBAChD,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,cAAc,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC1G,4EAA4E;gBAC5E,4EAA4E;gBAC5E,yEAAyE;gBACzE,0EAA0E;gBAC1E,0EAA0E;gBAC1E,aAAa;gBACb,QAAQ,CAAC,EAAE,CAAC,cAAc,EAAE,GAAG,EAAE;oBAC/B,IAAI,OAAO,KAAK,QAAQ;wBAAE,OAAO,GAAG,IAAI,CAAC;gBAC3C,CAAC,CAAC,CAAC;gBACH,OAAO,EAAE,EAAE,EAAE,IAAa,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;YAClD,CAAC,CAAC,EAAE,CAAC;QACP,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QACpC,cAAc,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC;QAC9B,MAAM,UAAU,GAAG,OAAO,KAAK,IAAI,CAAC;QACpC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO;QACL,KAAK,CAAC,cAAc,CAAC,UAAiC,EAAE;YACtD,eAAe,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChB,OAAO;oBACL,QAAQ,EAAE,KAAK;oBACf,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;iBACvD,CAAC;YACJ,CAAC;YACD,SAAS,IAAI,CAAC,CAAC;YACf,MAAM,OAAO,GAAG,MAAM,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE;gBAClF,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAI,SAAS,KAAK,CAAC;oBAAE,kBAAkB,EAAE,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC;QAC5E,CAAC;QACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,SAAS;QACjC,KAAK,CAAC,OAAO;YACX,eAAe,EAAE,CAAC;YAClB,SAAS,GAAG,CAAC,CAAC;YACd,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;gBACrB,MAAM,OAAO,GAAG,OAAO,CAAC;gBACxB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,15 @@
1
- export type { BrowserSessionOptions, BrowserSession, BrowserSessionAuth, SeededCookie, StorageStateSeed, StorageStateInjectionResult, ChromiumUnavailable, ChromiumAvailability, BrowserSessionLaunch, } from "./browser-session.ts";
2
- export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY, } from "./browser-session.ts";
1
+ export type { BrowserSessionOptions, BrowserSession, BrowserSessionAuth, SeededCookie, StorageStateSeed, StorageStateInjectionResult, ChromiumUnavailable, ChromiumAvailability, BrowserSessionLaunch, SharedBrowserAcquireResult, SharedBrowserAcquireOutcome, SharedBrowserManager, } from "./browser-session.ts";
2
+ export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY, createSharedBrowserManager, SHARED_BROWSER_IDLE_TIMEOUT_MS, } from "./browser-session.ts";
3
3
  export type { DomElementSnapshot } from "./dom-evidence.ts";
4
4
  export { captureElementSnapshot } from "./dom-evidence.ts";
5
5
  export type { BrowserActionCollectorOptions, BrowserActionCollector, WaitForOptions } from "./browser-action-collector.ts";
6
6
  export { createBrowserActionCollector } from "./browser-action-collector.ts";
7
+ export type { BrowserRecordingCollectorOptions, BrowserRecordingCollector, RecordedTarget, RecordedInteraction, } from "./browser-recording-collector.ts";
8
+ export { createBrowserRecordingCollector } from "./browser-recording-collector.ts";
7
9
  export type { BrowserConsoleCollectorOptions } from "./browser-console-collector.ts";
8
10
  export { createBrowserConsoleCollector } from "./browser-console-collector.ts";
9
- export type { BrowserNetworkCollectorOptions } from "./browser-network-collector.ts";
10
- export { createBrowserNetworkCollector } from "./browser-network-collector.ts";
11
+ export type { BrowserNetworkCollectorOptions, CapturedResponseBody } from "./browser-network-collector.ts";
12
+ export { createBrowserNetworkCollector, captureResponseBody, MAX_RESPONSE_BODY_BYTES } from "./browser-network-collector.ts";
11
13
  export type { HeaderCorrelationIds } from "./network-correlation.ts";
12
14
  export { extractHeaderCorrelationIds } from "./network-correlation.ts";
13
15
  export type { ScriptUrlRewrite, SourceRootResolver } from "./script-url-mapping.ts";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,YAAY,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3H,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,EAIvB,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAE3D,YAAY,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC3H,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAE7E,YAAY,EACV,gCAAgC,EAChC,yBAAyB,EACzB,cAAc,EACd,mBAAmB,GACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAEnF,YAAY,EAAE,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAE/E,YAAY,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3G,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAE7H,YAAY,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAEvE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
package/dist/index.js CHANGED
@@ -1,8 +1,13 @@
1
- export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY, } from "./browser-session.js";
1
+ export { launchBrowserSession, launchBrowserSessionOrRefuse, resolveChromiumExecutable, BrowserUnavailableError, CHROMIUM_INSTALL_REMEDY,
2
+ // RT-264: browser reuse. NOT SHIPPABLE -- see browser-session.ts's own doc on
3
+ // createSharedBrowserManager. Exported so its isolation test can import it, and so a
4
+ // release note can point at exactly this symbol as "written, unrun, not wired in."
5
+ createSharedBrowserManager, SHARED_BROWSER_IDLE_TIMEOUT_MS, } from "./browser-session.js";
2
6
  export { captureElementSnapshot } from "./dom-evidence.js";
3
7
  export { createBrowserActionCollector } from "./browser-action-collector.js";
8
+ export { createBrowserRecordingCollector } from "./browser-recording-collector.js";
4
9
  export { createBrowserConsoleCollector } from "./browser-console-collector.js";
5
- export { createBrowserNetworkCollector } from "./browser-network-collector.js";
10
+ export { createBrowserNetworkCollector, captureResponseBody, MAX_RESPONSE_BODY_BYTES } from "./browser-network-collector.js";
6
11
  export { extractHeaderCorrelationIds } from "./network-correlation.js";
7
12
  export { rewriteScriptUrls } from "./script-url-mapping.js";
8
13
  export { INITIATOR_HEADER_NAME, stripInitiatorWrapperFrame } from "./frontend-initiator-capture.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAG7E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,yBAAyB,EACzB,uBAAuB,EACvB,uBAAuB;AACvB,8EAA8E;AAC9E,qFAAqF;AACrF,mFAAmF;AACnF,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAG3D,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAQ7E,OAAO,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AAG7H,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AAGvE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descryy/runtime-browser",
3
- "version": "0.4.7",
3
+ "version": "0.5.0",
4
4
  "type": "module",
5
5
  "description": "Browser runtime: launch, isolated context, navigation, click/type/wait, DOM inspection, screenshots, console/page-error/network capture, all through the Collector contract (plan §7/§8). See documents/decisions-inbox/PROPOSAL-B-playwright-for-browser-runtime.md for the Playwright-vs-CDP call. BrowserSession.injectStorageState (0.4.5) is the mid-session counterpart to the launch-time auth seed -- lands cookies/localStorage into a session that is already open, for a scenario's sign-in step.",
6
6
  "license": "UNLICENSED",
@@ -25,17 +25,17 @@
25
25
  "registry": "https://registry.npmjs.org",
26
26
  "access": "public"
27
27
  },
28
- "scripts": {
29
- "build": "tsc -b"
30
- },
31
28
  "dependencies": {
32
29
  "@descryy/runtime-contracts": "0.3.3",
33
30
  "@descryy/runtime-backend-observation": "0.3.6",
34
31
  "playwright-core": "^1.62.1",
35
- "@descryy/runtime-adapter-typescript": "0.3.6"
32
+ "@descryy/runtime-adapter-typescript": "0.3.8"
36
33
  },
37
34
  "devDependencies": {
38
- "@descryy/runtime-controller": "0.3.6",
35
+ "@descryy/runtime-controller": "0.3.9",
39
36
  "@descryy/runtime-evidence-store": "0.4.2"
37
+ },
38
+ "scripts": {
39
+ "build": "tsc -b"
40
40
  }
41
- }
41
+ }