opensteer 0.9.6 → 0.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/README.md +2 -2
  2. package/dist/{chunk-3I3A5OLB.js → chunk-BPGXP3RF.js} +257 -24
  3. package/dist/chunk-BPGXP3RF.js.map +1 -0
  4. package/dist/{chunk-3XBQRZZC.js → chunk-EXXRLPLI.js} +158 -46
  5. package/dist/chunk-EXXRLPLI.js.map +1 -0
  6. package/dist/{chunk-T5P2QGZ3.js → chunk-GKYBP3KD.js} +154 -13
  7. package/dist/chunk-GKYBP3KD.js.map +1 -0
  8. package/dist/{chunk-BVRIPCWA.js → chunk-LFWP5RXF.js} +500 -513
  9. package/dist/chunk-LFWP5RXF.js.map +1 -0
  10. package/dist/{chunk-L4NF74KI.js → chunk-SOJEWKSW.js} +5 -5
  11. package/dist/{chunk-L4NF74KI.js.map → chunk-SOJEWKSW.js.map} +1 -1
  12. package/dist/cli/bin.cjs +1230 -660
  13. package/dist/cli/bin.cjs.map +1 -1
  14. package/dist/cli/bin.js +166 -72
  15. package/dist/cli/bin.js.map +1 -1
  16. package/dist/index.cjs +793 -565
  17. package/dist/index.cjs.map +1 -1
  18. package/dist/index.d.cts +36 -51
  19. package/dist/index.d.ts +36 -51
  20. package/dist/index.js +4 -4
  21. package/dist/local-view/public/assets/app.js +10 -1
  22. package/dist/local-view/serve-entry.cjs +1022 -591
  23. package/dist/local-view/serve-entry.cjs.map +1 -1
  24. package/dist/local-view/serve-entry.js +2 -2
  25. package/dist/opensteer-XLPY343Y.js +6 -0
  26. package/dist/{opensteer-UGA6YBRN.js.map → opensteer-XLPY343Y.js.map} +1 -1
  27. package/dist/{session-control-U3L5H2ZI.js → session-control-FVKKD45R.js} +4 -4
  28. package/dist/{session-control-U3L5H2ZI.js.map → session-control-FVKKD45R.js.map} +1 -1
  29. package/package.json +5 -5
  30. package/skills/recorder/SKILL.md +2 -2
  31. package/dist/chunk-3I3A5OLB.js.map +0 -1
  32. package/dist/chunk-3XBQRZZC.js.map +0 -1
  33. package/dist/chunk-BVRIPCWA.js.map +0 -1
  34. package/dist/chunk-T5P2QGZ3.js.map +0 -1
  35. package/dist/opensteer-UGA6YBRN.js +0 -6
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../protocol/src/dom-action-bridge.ts","../../browser-core/src/brand.ts","../../browser-core/src/identity.ts","../../browser-core/src/geometry.ts","../../browser-core/src/network.ts","../../browser-core/src/errors.ts","../../browser-core/src/post-load-tracker.ts","../../runtime-core/src/policy/defaults.ts","../../runtime-core/src/policy/settle.ts","../../protocol/src/validation.ts","../../protocol/src/version.ts","../../protocol/src/binary-location.ts","../../protocol/src/identity.ts","../../protocol/src/geometry.ts","../../protocol/src/metadata.ts","../../protocol/src/network.ts","../../protocol/src/storage.ts","../../protocol/src/requests.ts","../../protocol/src/state.ts","../../protocol/src/snapshots.ts","../../protocol/src/events.ts","../../protocol/src/artifacts.ts","../../protocol/src/captcha.ts","../../protocol/src/traces.ts","../../protocol/src/envelopes.ts","../../protocol/src/scripts.ts","../../protocol/src/interaction.ts","../../protocol/src/semantic.ts","../../protocol/src/computer-use-bridge.ts","../../runtime-core/src/policy/timeout.ts","../../runtime-core/src/runtimes/dom/errors.ts","../../runtime-core/src/runtimes/dom/match-policy.ts","../../runtime-core/src/runtimes/dom/match-selectors.ts","../../runtime-core/src/runtimes/dom/extraction.ts","../../runtime-core/src/runtimes/dom/selectors.ts","../../runtime-core/src/runtimes/dom/path.ts","../../runtime-core/src/runtimes/dom/descriptors.ts","../../runtime-core/src/action-boundary.ts","../../runtime-core/src/runtimes/dom/executor.ts","../../runtime-core/src/runtimes/dom/runtime.ts","../../runtime-core/src/sdk/extraction-data-path.ts","../../runtime-core/src/sdk/extraction-consolidation.ts","../../runtime-core/src/sdk/extraction.ts","../src/env.ts","../src/provider/config.ts","../src/local-browser/cookie-reader.ts","../src/cloud/cookie-sync.ts","../src/cloud/profile-sync.ts","../src/cloud/client.ts","../src/cloud/config.ts","../../runtime-core/src/sdk/semantic-dispatch.ts","../../runtime-core/package.json","../../runtime-core/src/version.ts","../../runtime-core/src/internal/errors.ts","../../runtime-core/src/runtimes/computer-use/display.ts","../../runtime-core/src/runtimes/computer-use/trace-enrichment.ts","../../runtime-core/src/runtimes/computer-use/runtime.ts","../../runtime-core/src/requests/shared.ts","../../runtime-core/src/reverse/materialization.ts","../../runtime-core/src/network/history.ts","../../runtime-core/src/requests/execution/matched-tls/index.ts","../../runtime-core/src/sdk/snapshot/constants.ts","../../runtime-core/src/sdk/snapshot/cleaner.ts","../../runtime-core/src/sdk/snapshot/marking.ts","../../runtime-core/src/sdk/snapshot/compiler.ts","../../runtime-core/src/scripts/beautify.ts","../../runtime-core/src/scripts/deobfuscate.ts","../../runtime-core/src/scripts/sandbox-shims/minimal.ts","../../runtime-core/src/scripts/sandbox-shims/standard.ts","../../runtime-core/src/scripts/sandbox-shims/full.ts","../../runtime-core/src/scripts/sandbox.ts","../../runtime-core/src/captcha/solver-capsolver.ts","../../runtime-core/src/captcha/solver-2captcha.ts","../../runtime-core/src/captcha/detect.ts","../../runtime-core/src/captcha/inject.ts","../../runtime-core/src/interaction/diff.ts","../../runtime-core/src/sdk/runtime.ts","../../runtime-core/src/recorder/browser-scripts.ts","../../runtime-core/src/recorder/event-collector.ts","../../runtime-core/src/recorder/codegen.ts","../src/sdk/semantic-rest-client.ts","../src/cloud/automation-client.ts","../src/cloud/workspace-sync.ts","../src/cloud/session-proxy.ts","../src/sdk/runtime.ts","../src/sdk/runtime-resolution.ts"],"names":["path","createBodyPayload","targetByElementSchema","targetByPersistSchema","targetBySelectorSchema","jsonValueSchema","abortError","sha256Hex","parsed","boundary","cloneElementPath","isPersistedOpensteerExtractionValueNode","isPersistedOpensteerExtractionSourceNode","isPersistedOpensteerExtractionArrayNode","isPersistedObjectNode","stripPositionClauses","normalizeNonEmptyString","randomUUID","createHash","execFileCallback","brand","existsSync","promisify","gzipCallback","mkdtemp","tmpdir","readFile","rm","parseSrcsetCandidates","hasAttribute","escapeHtml","VOID_TAGS","mainSnapshot","sanitizeHintToken","fetch","normalizeErrorMessage","delay","sleep","createTask","pollTask","extractCaptchaToken","readString","normalizeNamespace","frameRef","navigation","artifacts","output","descriptor","result","preparedTarget","executed","toOpensteerResolvedTarget","resolved","stablePath","normalizeHeaderName","previewData","parseContentType","toOpensteerTagName","format","createRequestSignal"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","file":"chunk-LFWP5RXF.js","sourcesContent":["import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n KeyModifier,\n NodeLocator,\n PageRef,\n Point,\n Quad,\n Rect,\n} from \"@opensteer/browser-core\";\nimport type { ReplayElementPath } from \"./dom-path-types.js\";\n\nexport const OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/dom-action-bridge\");\n\nexport type DomActionScrollAlignment = \"start\" | \"center\" | \"end\" | \"nearest\";\n\nexport interface DomActionTargetInspection {\n readonly connected: boolean;\n readonly visible: boolean;\n readonly enabled: boolean;\n readonly editable: boolean;\n readonly pointerEvents: string;\n readonly bounds?: Rect;\n readonly contentQuads: readonly Quad[];\n}\n\nexport interface DomActionScrollOptions {\n readonly block?: DomActionScrollAlignment;\n readonly inline?: DomActionScrollAlignment;\n}\n\nexport interface DomActionKeyPressInput {\n readonly key: string;\n readonly modifiers?: readonly KeyModifier[];\n}\n\nexport interface DomActionSettleOptions {\n readonly operation: \"dom.click\" | \"dom.hover\" | \"dom.input\" | \"dom.scroll\";\n readonly snapshot?: ActionBoundarySnapshot;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(\n pageRef: PageRef,\n trigger: ActionBoundarySettleTrigger,\n boundary?: ActionBoundaryOutcome,\n ): Promise<void>;\n}\n\nexport type DomPointerHitRelation =\n | \"self\"\n | \"descendant\"\n | \"ancestor\"\n | \"same-owner\"\n | \"outside\"\n | \"unknown\";\n\nexport interface DomPointerHitAssessment {\n readonly relation: DomPointerHitRelation;\n readonly blocking: boolean;\n readonly ambiguous?: boolean;\n readonly blockingDescription?: string;\n readonly canonicalTarget?: NodeLocator;\n readonly hitOwner?: NodeLocator;\n}\n\nexport interface BuildReplayPathOptions {\n readonly enableTextMatch?: boolean;\n}\n\nexport interface DomActionBridge {\n buildReplayPath(\n locator: NodeLocator,\n options?: BuildReplayPathOptions,\n ): Promise<ReplayElementPath>;\n inspectActionTarget(locator: NodeLocator): Promise<DomActionTargetInspection>;\n canonicalizePointerTarget(locator: NodeLocator): Promise<NodeLocator>;\n classifyPointerHit(input: {\n readonly target: NodeLocator;\n readonly hit: NodeLocator;\n readonly point: Point;\n }): Promise<DomPointerHitAssessment>;\n scrollNodeIntoView(locator: NodeLocator, options?: DomActionScrollOptions): Promise<void>;\n focusNode(locator: NodeLocator): Promise<void>;\n pressKey(locator: NodeLocator, input: DomActionKeyPressInput): Promise<void>;\n finalizeDomAction(\n pageRef: PageRef,\n options: DomActionSettleOptions,\n ): Promise<ActionBoundaryOutcome>;\n}\n\nexport interface DomActionBridgeProvider {\n [OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL](): DomActionBridge;\n}\n\ntype DomActionBridgeFactory = DomActionBridgeProvider[typeof OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL];\n\nfunction isDomActionBridgeFactory(value: unknown): value is DomActionBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveDomActionBridge(\n engine: BrowserCoreEngine | DomActionBridgeProvider,\n): DomActionBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_DOM_ACTION_BRIDGE_SYMBOL);\n return isDomActionBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","declare const brandSymbol: unique symbol;\n\nexport type Brand<Value, Name extends string> = Value & {\n readonly [brandSymbol]: Name;\n};\n\nexport function brand<Value, Name extends string>(value: Value): Brand<Value, Name> {\n return value as Brand<Value, Name>;\n}\n","import { brand, type Brand } from \"./brand.js\";\n\ntype StringRefKind =\n | \"SessionRef\"\n | \"PageRef\"\n | \"FrameRef\"\n | \"DocumentRef\"\n | \"NodeRef\"\n | \"NetworkRequestId\"\n | \"DownloadRef\"\n | \"DialogRef\"\n | \"ChooserRef\"\n | \"WorkerRef\";\n\nexport type SessionRef = Brand<string, \"SessionRef\">;\nexport type PageRef = Brand<string, \"PageRef\">;\nexport type FrameRef = Brand<string, \"FrameRef\">;\nexport type DocumentRef = Brand<string, \"DocumentRef\">;\nexport type NodeRef = Brand<string, \"NodeRef\">;\nexport type NetworkRequestId = Brand<string, \"NetworkRequestId\">;\nexport type DownloadRef = Brand<string, \"DownloadRef\">;\nexport type DialogRef = Brand<string, \"DialogRef\">;\nexport type ChooserRef = Brand<string, \"ChooserRef\">;\nexport type WorkerRef = Brand<string, \"WorkerRef\">;\nexport type DocumentEpoch = Brand<number, \"DocumentEpoch\">;\n\nexport interface NodeLocator {\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n}\n\nconst REF_PREFIXES = {\n session: \"session\",\n page: \"page\",\n frame: \"frame\",\n document: \"document\",\n node: \"node\",\n request: \"request\",\n download: \"download\",\n dialog: \"dialog\",\n chooser: \"chooser\",\n worker: \"worker\",\n} as const;\n\ntype RefPrefix = (typeof REF_PREFIXES)[keyof typeof REF_PREFIXES];\n\nfunction normalizeRef(prefix: RefPrefix, value: string): string {\n const trimmed = value.trim();\n if (trimmed.length === 0) {\n throw new TypeError(`${prefix} reference cannot be empty`);\n }\n\n const canonicalPrefix = `${prefix}:`;\n if (trimmed.startsWith(canonicalPrefix)) {\n if (trimmed.length === canonicalPrefix.length) {\n throw new TypeError(`${prefix} reference must include an identifier`);\n }\n return trimmed;\n }\n\n if (trimmed.includes(\":\")) {\n throw new TypeError(\n `${prefix} reference \"${trimmed}\" must either omit a prefix or use ${canonicalPrefix}`,\n );\n }\n\n return `${canonicalPrefix}${trimmed}`;\n}\n\nfunction hasPrefix(prefix: RefPrefix, value: string): boolean {\n return value.startsWith(`${prefix}:`) && value.length > prefix.length + 1;\n}\n\nfunction createStringRef<Name extends StringRefKind>(\n prefix: RefPrefix,\n value: string,\n): Brand<string, Name> {\n return brand<string, Name>(normalizeRef(prefix, value));\n}\n\nexport function createSessionRef(value: string): SessionRef {\n return createStringRef(\"session\", value);\n}\n\nexport function createPageRef(value: string): PageRef {\n return createStringRef(\"page\", value);\n}\n\nexport function createFrameRef(value: string): FrameRef {\n return createStringRef(\"frame\", value);\n}\n\nexport function createDocumentRef(value: string): DocumentRef {\n return createStringRef(\"document\", value);\n}\n\nexport function createNodeRef(value: string): NodeRef {\n return createStringRef(\"node\", value);\n}\n\nexport function createNetworkRequestId(value: string): NetworkRequestId {\n return createStringRef(\"request\", value);\n}\n\nexport function createDownloadRef(value: string): DownloadRef {\n return createStringRef(\"download\", value);\n}\n\nexport function createDialogRef(value: string): DialogRef {\n return createStringRef(\"dialog\", value);\n}\n\nexport function createChooserRef(value: string): ChooserRef {\n return createStringRef(\"chooser\", value);\n}\n\nexport function createWorkerRef(value: string): WorkerRef {\n return createStringRef(\"worker\", value);\n}\n\nexport function isSessionRef(value: string): value is SessionRef {\n return hasPrefix(\"session\", value);\n}\n\nexport function isPageRef(value: string): value is PageRef {\n return hasPrefix(\"page\", value);\n}\n\nexport function isFrameRef(value: string): value is FrameRef {\n return hasPrefix(\"frame\", value);\n}\n\nexport function isDocumentRef(value: string): value is DocumentRef {\n return hasPrefix(\"document\", value);\n}\n\nexport function isNodeRef(value: string): value is NodeRef {\n return hasPrefix(\"node\", value);\n}\n\nexport function isNetworkRequestId(value: string): value is NetworkRequestId {\n return hasPrefix(\"request\", value);\n}\n\nexport function isDownloadRef(value: string): value is DownloadRef {\n return hasPrefix(\"download\", value);\n}\n\nexport function isDialogRef(value: string): value is DialogRef {\n return hasPrefix(\"dialog\", value);\n}\n\nexport function isChooserRef(value: string): value is ChooserRef {\n return hasPrefix(\"chooser\", value);\n}\n\nexport function isWorkerRef(value: string): value is WorkerRef {\n return hasPrefix(\"worker\", value);\n}\n\nexport function serializeRef(\n ref:\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef,\n): string {\n return ref;\n}\n\nexport function createDocumentEpoch(value: number): DocumentEpoch {\n if (!Number.isInteger(value) || value < 0) {\n throw new RangeError(\n `document epoch must be a non-negative integer, received ${String(value)}`,\n );\n }\n return brand<number, \"DocumentEpoch\">(value);\n}\n\nexport function nextDocumentEpoch(epoch: DocumentEpoch): DocumentEpoch {\n return createDocumentEpoch(epoch + 1);\n}\n\nexport function serializeDocumentEpoch(epoch: DocumentEpoch): number {\n return epoch;\n}\n\nexport function createNodeLocator(\n documentRef: DocumentRef,\n documentEpoch: DocumentEpoch,\n nodeRef: NodeRef,\n): NodeLocator {\n return { documentRef, documentEpoch, nodeRef };\n}\n","import { brand, type Brand } from \"./brand.js\";\n\nexport interface Point {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface Size {\n readonly width: number;\n readonly height: number;\n}\n\nexport interface Rect {\n readonly x: number;\n readonly y: number;\n readonly width: number;\n readonly height: number;\n}\n\nexport type Quad = readonly [Point, Point, Point, Point];\n\nexport interface ScrollOffset {\n readonly x: number;\n readonly y: number;\n}\n\nexport type CoordinateSpace =\n | \"document-css\"\n | \"layout-viewport-css\"\n | \"visual-viewport-css\"\n | \"computer-display-css\"\n | \"window\"\n | \"screen\"\n | \"device-pixel\";\n\nexport interface LayoutViewport {\n readonly origin: Point;\n readonly size: Size;\n}\n\nexport interface VisualViewport {\n readonly origin: Point;\n readonly offsetWithinLayoutViewport: ScrollOffset;\n readonly size: Size;\n}\n\nexport type DevicePixelRatio = Brand<number, \"DevicePixelRatio\">;\nexport type PageScaleFactor = Brand<number, \"PageScaleFactor\">;\nexport type PageZoomFactor = Brand<number, \"PageZoomFactor\">;\n\nexport interface ViewportMetrics {\n readonly layoutViewport: LayoutViewport;\n readonly visualViewport: VisualViewport;\n readonly scrollOffset: ScrollOffset;\n readonly contentSize: Size;\n readonly devicePixelRatio: DevicePixelRatio;\n readonly pageScaleFactor: PageScaleFactor;\n readonly pageZoomFactor: PageZoomFactor;\n}\n\nfunction assertFinite(value: number, name: string): void {\n if (!Number.isFinite(value)) {\n throw new TypeError(`${name} must be a finite number`);\n }\n}\n\nfunction assertNonNegative(value: number, name: string): void {\n assertFinite(value, name);\n if (value < 0) {\n throw new RangeError(`${name} must be greater than or equal to 0`);\n }\n}\n\nfunction createScale<Name extends string>(value: number, name: string) {\n if (!Number.isFinite(value) || value <= 0) {\n throw new RangeError(`${name} must be greater than 0`);\n }\n return brand<number, Name>(value);\n}\n\nexport function createPoint(x: number, y: number): Point {\n assertFinite(x, \"point.x\");\n assertFinite(y, \"point.y\");\n return { x, y };\n}\n\nexport function createSize(width: number, height: number): Size {\n assertNonNegative(width, \"size.width\");\n assertNonNegative(height, \"size.height\");\n return { width, height };\n}\n\nexport function createRect(x: number, y: number, width: number, height: number): Rect {\n assertFinite(x, \"rect.x\");\n assertFinite(y, \"rect.y\");\n assertNonNegative(width, \"rect.width\");\n assertNonNegative(height, \"rect.height\");\n return { x, y, width, height };\n}\n\nexport function createScrollOffset(x: number, y: number): ScrollOffset {\n assertFinite(x, \"scrollOffset.x\");\n assertFinite(y, \"scrollOffset.y\");\n return { x, y };\n}\n\nexport function createQuad(points: readonly [Point, Point, Point, Point]): Quad {\n return points;\n}\n\nexport function rectToQuad(rect: Rect): Quad {\n return createQuad([\n createPoint(rect.x, rect.y),\n createPoint(rect.x + rect.width, rect.y),\n createPoint(rect.x + rect.width, rect.y + rect.height),\n createPoint(rect.x, rect.y + rect.height),\n ]);\n}\n\nexport function quadBounds(quad: Quad): Rect {\n const xs = quad.map((point) => point.x);\n const ys = quad.map((point) => point.y);\n const minX = Math.min(...xs);\n const maxX = Math.max(...xs);\n const minY = Math.min(...ys);\n const maxY = Math.max(...ys);\n return createRect(minX, minY, maxX - minX, maxY - minY);\n}\n\nexport function rectContainsPoint(rect: Rect, point: Point): boolean {\n return (\n point.x >= rect.x &&\n point.x <= rect.x + rect.width &&\n point.y >= rect.y &&\n point.y <= rect.y + rect.height\n );\n}\n\nexport function createDevicePixelRatio(value: number): DevicePixelRatio {\n return createScale<\"DevicePixelRatio\">(value, \"devicePixelRatio\");\n}\n\nexport function createPageScaleFactor(value: number): PageScaleFactor {\n return createScale<\"PageScaleFactor\">(value, \"pageScaleFactor\");\n}\n\nexport function createPageZoomFactor(value: number): PageZoomFactor {\n return createScale<\"PageZoomFactor\">(value, \"pageZoomFactor\");\n}\n","import type {\n DocumentRef,\n FrameRef,\n NetworkRequestId,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"./identity.js\";\n\nexport interface HeaderEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type BodyPayloadEncoding = \"identity\" | \"base64\" | \"gzip\" | \"deflate\" | \"brotli\" | \"unknown\";\n\nexport interface BodyPayload {\n readonly bytes: Uint8Array;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport type NetworkCaptureState = \"pending\" | \"complete\" | \"failed\" | \"skipped\";\n\nexport type NetworkRecordKind = \"http\" | \"websocket\" | \"event-stream\";\n\nexport type NetworkResourceType =\n | \"document\"\n | \"stylesheet\"\n | \"image\"\n | \"media\"\n | \"font\"\n | \"script\"\n | \"fetch\"\n | \"xhr\"\n | \"websocket\"\n | \"event-stream\"\n | \"manifest\"\n | \"texttrack\"\n | \"beacon\"\n | \"ping\"\n | \"preflight\"\n | \"other\";\n\nexport type NetworkInitiatorType =\n | \"parser\"\n | \"script\"\n | \"preload\"\n | \"redirect\"\n | \"user\"\n | \"service-worker\"\n | \"other\";\n\nexport interface NetworkInitiator {\n readonly type: NetworkInitiatorType;\n readonly url?: string;\n readonly lineNumber?: number;\n readonly columnNumber?: number;\n readonly requestId?: NetworkRequestId;\n readonly stackTrace?: readonly string[];\n}\n\nexport interface NetworkTiming {\n readonly requestStartMs?: number;\n readonly dnsStartMs?: number;\n readonly dnsEndMs?: number;\n readonly connectStartMs?: number;\n readonly connectEndMs?: number;\n readonly sslStartMs?: number;\n readonly sslEndMs?: number;\n readonly requestSentMs?: number;\n readonly responseStartMs?: number;\n readonly responseEndMs?: number;\n readonly workerStartMs?: number;\n readonly workerReadyMs?: number;\n}\n\nexport interface NetworkTransferSizes {\n readonly requestHeadersBytes?: number;\n readonly responseHeadersBytes?: number;\n readonly encodedBodyBytes?: number;\n readonly decodedBodyBytes?: number;\n readonly transferSizeBytes?: number;\n}\n\nexport interface NetworkSourceMetadata {\n readonly protocol?: string;\n readonly remoteAddress?: {\n readonly ip?: string;\n readonly port?: number;\n };\n readonly fromServiceWorker?: boolean;\n readonly fromDiskCache?: boolean;\n readonly fromMemoryCache?: boolean;\n readonly workerRef?: WorkerRef;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkRecordFilterInput {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport function createHeaderEntry(name: string, value: string): HeaderEntry {\n return { name, value };\n}\n\nexport function createBodyPayload(\n bytes: Uint8Array,\n options: {\n encoding?: BodyPayloadEncoding;\n mimeType?: string;\n charset?: string;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return {\n bytes,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength: bytes.byteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n mimeType?: string;\n encoding?: BodyPayloadEncoding;\n truncated?: boolean;\n originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(new TextEncoder().encode(value), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport function matchesNetworkRecordFilters(\n record: Pick<NetworkRecord, \"url\" | \"method\" | \"status\" | \"resourceType\">,\n filters: NetworkRecordFilterInput,\n): boolean {\n if (filters.url !== undefined && !includesCaseInsensitive(record.url, filters.url)) {\n return false;\n }\n\n let parsedUrl: URL | undefined;\n const getParsedUrl = (): URL => {\n parsedUrl ??= new URL(record.url);\n return parsedUrl;\n };\n\n if (filters.hostname !== undefined) {\n const hostname = getParsedUrl().hostname;\n if (!includesCaseInsensitive(hostname, filters.hostname)) {\n return false;\n }\n }\n\n if (filters.path !== undefined) {\n const path = getParsedUrl().pathname;\n if (!includesCaseInsensitive(path, filters.path)) {\n return false;\n }\n }\n\n if (filters.method !== undefined && !includesCaseInsensitive(record.method, filters.method)) {\n return false;\n }\n\n if (\n filters.status !== undefined &&\n !includesCaseInsensitive(\n record.status === undefined ? \"\" : String(record.status),\n filters.status,\n )\n ) {\n return false;\n }\n\n if (filters.resourceType !== undefined && record.resourceType !== filters.resourceType) {\n return false;\n }\n\n return true;\n}\n\nfunction includesCaseInsensitive(value: string, query: string): boolean {\n return value.toLowerCase().includes(query.toLowerCase());\n}\n","import type { BrowserCapabilityPath } from \"./capabilities.js\";\nimport type { DocumentEpoch, DocumentRef, NodeRef, PageRef, SessionRef } from \"./identity.js\";\n\nexport type BrowserCoreErrorCode =\n | \"invalid-argument\"\n | \"invalid-ref\"\n | \"not-found\"\n | \"unsupported-capability\"\n | \"stale-node-ref\"\n | \"session-closed\"\n | \"page-closed\"\n | \"frame-detached\"\n | \"timeout\"\n | \"navigation-failed\"\n | \"operation-failed\";\n\nexport interface BrowserCoreErrorOptions {\n readonly cause?: unknown;\n readonly retriable?: boolean;\n readonly capability?: BrowserCapabilityPath;\n readonly details?: Record<string, unknown>;\n}\n\nexport class BrowserCoreError extends Error {\n readonly code: BrowserCoreErrorCode;\n readonly retriable: boolean;\n readonly capability: BrowserCapabilityPath | undefined;\n readonly details: Record<string, unknown> | undefined;\n\n constructor(code: BrowserCoreErrorCode, message: string, options: BrowserCoreErrorOptions = {}) {\n super(message, { cause: options.cause });\n this.name = \"BrowserCoreError\";\n this.code = code;\n this.retriable = options.retriable ?? false;\n this.capability = options.capability;\n this.details = options.details;\n }\n}\n\nexport function isBrowserCoreError(value: unknown): value is BrowserCoreError {\n return value instanceof BrowserCoreError;\n}\n\nexport function createBrowserCoreError(\n code: BrowserCoreErrorCode,\n message: string,\n options: BrowserCoreErrorOptions = {},\n): BrowserCoreError {\n return new BrowserCoreError(code, message, options);\n}\n\nexport function unsupportedCapabilityError(capability: BrowserCapabilityPath): BrowserCoreError {\n return new BrowserCoreError(\n \"unsupported-capability\",\n `capability ${capability} is not supported by this backend`,\n {\n capability,\n details: { capability },\n },\n );\n}\n\nexport function staleNodeRefError(input: {\n readonly nodeRef: NodeRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n}): BrowserCoreError {\n return new BrowserCoreError(\n \"stale-node-ref\",\n `node ${input.nodeRef} is stale for ${input.documentRef} at epoch ${input.documentEpoch}`,\n {\n details: {\n nodeRef: input.nodeRef,\n documentRef: input.documentRef,\n documentEpoch: input.documentEpoch,\n },\n },\n );\n}\n\nexport function closedSessionError(sessionRef: SessionRef): BrowserCoreError {\n return new BrowserCoreError(\"session-closed\", `session ${sessionRef} is closed`, {\n details: { sessionRef },\n });\n}\n\nexport function closedPageError(pageRef: PageRef): BrowserCoreError {\n return new BrowserCoreError(\"page-closed\", `page ${pageRef} is closed`, {\n details: { pageRef },\n });\n}\n","export const DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS = 400;\nexport const DEFAULT_ACTION_BOUNDARY_POLL_INTERVAL_MS = 100;\n\nexport interface PostLoadTrackerState {\n readonly installedAt: number;\n readonly lastMutationAt: number;\n readonly lastNetworkActivityAt: number;\n readonly lastTrackedNetworkActivityAt: number;\n readonly now: number;\n readonly pendingFetches: number;\n readonly pendingTimeouts: number;\n readonly pendingXhrs: number;\n readonly trackedPendingFetches: number;\n readonly trackedPendingXhrs: number;\n readonly collecting: boolean;\n readonly readyState: string;\n}\n\nexport interface PostLoadTrackerSnapshot {\n readonly lastMutationAt: number;\n readonly lastTrackedNetworkActivityAt: number;\n readonly trackedPendingFetches: number;\n readonly trackedPendingXhrs: number;\n}\n\nexport function getPostLoadTrackerMutationQuietMs(\n tracker: PostLoadTrackerState | undefined,\n): number | undefined {\n if (!tracker || tracker.readyState === \"loading\") {\n return undefined;\n }\n\n return Math.max(0, tracker.now - Math.max(tracker.installedAt, tracker.lastMutationAt));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction readFiniteNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction readNonNegativeNumber(value: unknown): number {\n const parsed = readFiniteNumber(value);\n return parsed === undefined || parsed < 0 ? 0 : parsed;\n}\n\nexport function normalizePostLoadTrackerState(value: unknown): PostLoadTrackerState | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n const installedAt = readFiniteNumber(value.installedAt);\n const lastMutationAt = readFiniteNumber(value.lastMutationAt);\n const lastNetworkActivityAt = readFiniteNumber(value.lastNetworkActivityAt);\n const lastTrackedNetworkActivityAt = readFiniteNumber(value.lastTrackedNetworkActivityAt);\n const now = readFiniteNumber(value.now);\n const readyState = typeof value.readyState === \"string\" ? value.readyState : undefined;\n if (\n installedAt === undefined ||\n lastMutationAt === undefined ||\n lastNetworkActivityAt === undefined ||\n lastTrackedNetworkActivityAt === undefined ||\n now === undefined ||\n readyState === undefined\n ) {\n return undefined;\n }\n\n return {\n installedAt,\n lastMutationAt,\n lastNetworkActivityAt,\n lastTrackedNetworkActivityAt,\n now,\n pendingFetches: readNonNegativeNumber(value.pendingFetches),\n pendingTimeouts: readNonNegativeNumber(value.pendingTimeouts),\n pendingXhrs: readNonNegativeNumber(value.pendingXhrs),\n trackedPendingFetches: readNonNegativeNumber(value.trackedPendingFetches),\n trackedPendingXhrs: readNonNegativeNumber(value.trackedPendingXhrs),\n collecting: value.collecting === true,\n readyState,\n };\n}\n\nexport function buildPostLoadTrackerInstallScript(): string {\n return `(() => {\n const globalObject = globalThis;\n if (globalObject.__opensteerActionBoundaryTrackerInstalled) {\n return true;\n }\n\n const tracker = {\n installedAt: performance.now(),\n lastMutationAt: performance.now(),\n lastNetworkActivityAt: performance.now(),\n lastTrackedNetworkActivityAt: performance.now(),\n pendingFetches: 0,\n pendingTimeouts: 0,\n pendingXhrs: 0,\n trackedPendingFetches: 0,\n trackedPendingXhrs: 0,\n collecting: true,\n readyState: document.readyState,\n };\n globalObject.__opensteerActionBoundaryTrackerInstalled = true;\n globalObject.__opensteerActionBoundaryTracker = tracker;\n\n const markMutation = () => {\n tracker.lastMutationAt = performance.now();\n tracker.readyState = document.readyState;\n };\n const markNetwork = () => {\n tracker.lastNetworkActivityAt = performance.now();\n tracker.readyState = document.readyState;\n };\n const markTrackedNetwork = () => {\n tracker.lastTrackedNetworkActivityAt = performance.now();\n markNetwork();\n };\n const resetTracking = () => {\n const now = performance.now();\n tracker.lastTrackedNetworkActivityAt = now;\n tracker.trackedPendingFetches = 0;\n tracker.trackedPendingXhrs = 0;\n tracker.collecting = true;\n tracker.readyState = document.readyState;\n };\n\n const startObserver = () => {\n const target = document.documentElement ?? document;\n if (!(target instanceof Node)) {\n return;\n }\n const observer = new MutationObserver(markMutation);\n observer.observe(target, {\n subtree: true,\n childList: true,\n characterData: true,\n attributes: true,\n });\n markMutation();\n };\n\n if (document.documentElement) {\n startObserver();\n } else {\n document.addEventListener(\"DOMContentLoaded\", startObserver, { once: true });\n }\n\n document.addEventListener(\"readystatechange\", markMutation);\n addEventListener(\"load\", markMutation, { once: true });\n\n if (typeof globalObject.fetch === \"function\") {\n const nativeFetch = globalObject.fetch.bind(globalObject);\n globalObject.fetch = (...args) => {\n const tracked = tracker.collecting === true;\n tracker.pendingFetches += 1;\n if (tracked) {\n tracker.trackedPendingFetches += 1;\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n return nativeFetch(...args)\n .finally(() => {\n tracker.pendingFetches = Math.max(0, tracker.pendingFetches - 1);\n if (tracked) {\n tracker.trackedPendingFetches = Math.max(0, tracker.trackedPendingFetches - 1);\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n });\n };\n }\n\n if (typeof globalObject.XMLHttpRequest === \"function\") {\n const NativeXMLHttpRequest = globalObject.XMLHttpRequest;\n const nativeSend = NativeXMLHttpRequest.prototype.send;\n NativeXMLHttpRequest.prototype.send = function(...args) {\n const tracked = tracker.collecting === true;\n tracker.pendingXhrs += 1;\n if (tracked) {\n tracker.trackedPendingXhrs += 1;\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n const finalize = () => {\n this.removeEventListener(\"loadend\", finalize);\n tracker.pendingXhrs = Math.max(0, tracker.pendingXhrs - 1);\n if (tracked) {\n tracker.trackedPendingXhrs = Math.max(0, tracker.trackedPendingXhrs - 1);\n markTrackedNetwork();\n } else {\n markNetwork();\n }\n };\n this.addEventListener(\"loadend\", finalize, { once: true });\n return nativeSend.apply(this, args);\n };\n }\n\n tracker.beginObservation = () => {\n resetTracking();\n return true;\n };\n tracker.freezeObservation = () => {\n tracker.collecting = false;\n tracker.readyState = document.readyState;\n return true;\n };\n\n return true;\n })()`;\n}\n\nexport function buildPostLoadTrackerBeginExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker || typeof tracker.beginObservation !== \"function\") {\n return false;\n }\n return tracker.beginObservation();\n })()`;\n}\n\nexport function buildPostLoadTrackerFreezeExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker || typeof tracker.freezeObservation !== \"function\") {\n return false;\n }\n return tracker.freezeObservation();\n })()`;\n}\n\nexport function buildPostLoadTrackerReadExpression(): string {\n return `(() => {\n const tracker = globalThis.__opensteerActionBoundaryTracker;\n if (!tracker) {\n return null;\n }\n\n return {\n installedAt: Number(tracker.installedAt ?? 0),\n lastMutationAt: Number(tracker.lastMutationAt ?? 0),\n lastNetworkActivityAt: Number(tracker.lastNetworkActivityAt ?? 0),\n lastTrackedNetworkActivityAt: Number(tracker.lastTrackedNetworkActivityAt ?? 0),\n now: Number(performance.now()),\n pendingFetches: Number(tracker.pendingFetches ?? 0),\n pendingTimeouts: Number(tracker.pendingTimeouts ?? 0),\n pendingXhrs: Number(tracker.pendingXhrs ?? 0),\n trackedPendingFetches: Number(tracker.trackedPendingFetches ?? 0),\n trackedPendingXhrs: Number(tracker.trackedPendingXhrs ?? 0),\n collecting: tracker.collecting === true,\n readyState: String(document.readyState),\n };\n })()`;\n}\n\nexport function capturePostLoadTrackerSnapshot(\n tracker: PostLoadTrackerState,\n): PostLoadTrackerSnapshot {\n return {\n lastMutationAt: tracker.lastMutationAt,\n lastTrackedNetworkActivityAt: tracker.lastTrackedNetworkActivityAt,\n trackedPendingFetches: tracker.trackedPendingFetches,\n trackedPendingXhrs: tracker.trackedPendingXhrs,\n };\n}\n\nexport function postLoadTrackerHasTrackedNetworkActivitySince(\n snapshot: PostLoadTrackerSnapshot,\n tracker: PostLoadTrackerState | undefined,\n): boolean {\n if (!tracker) {\n return false;\n }\n\n return (\n tracker.trackedPendingFetches > snapshot.trackedPendingFetches ||\n tracker.trackedPendingXhrs > snapshot.trackedPendingXhrs ||\n tracker.lastTrackedNetworkActivityAt > snapshot.lastTrackedNetworkActivityAt\n );\n}\n\nexport function postLoadTrackerIsSettled(\n tracker: PostLoadTrackerState | undefined,\n quietWindowMs = DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n): boolean {\n if (!tracker) {\n return false;\n }\n\n if (tracker.readyState !== \"complete\") {\n return false;\n }\n\n if (tracker.trackedPendingFetches > 0 || tracker.trackedPendingXhrs > 0) {\n return false;\n }\n\n const lastActivityAt = Math.max(\n tracker.installedAt,\n tracker.lastMutationAt,\n tracker.lastTrackedNetworkActivityAt,\n );\n return tracker.now - lastActivityAt >= quietWindowMs;\n}\n","import {\n DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n type VisualStabilityScope,\n} from \"@opensteer/browser-core\";\n\nimport type {\n FallbackDecision,\n FallbackPolicy,\n OpensteerPolicy,\n RetryDecision,\n RetryPolicy,\n SettleObserver,\n SettlePolicy,\n TimeoutPolicy,\n} from \"./types.js\";\n\nconst DEFAULT_TIMEOUTS: Readonly<Record<string, number>> = {\n \"session.open\": 30_000,\n \"page.goto\": 30_000,\n \"page.add-init-script\": 10_000,\n \"page.snapshot\": 15_000,\n \"computer.execute\": 30_000,\n \"dom.click\": 30_000,\n \"dom.hover\": 10_000,\n \"dom.input\": 30_000,\n \"dom.scroll\": 10_000,\n \"dom.extract\": 15_000,\n \"network.query\": 15_000,\n \"network.detail\": 15_000,\n \"scripts.capture\": 15_000,\n \"session.cookies\": 10_000,\n \"session.storage\": 10_000,\n \"session.state\": 15_000,\n \"session.fetch\": 30_000,\n \"session.close\": 10_000,\n};\n\nconst DEFAULT_SETTLE_DELAYS: Readonly<Record<string, number>> = {\n navigation: 500,\n \"dom-action\": 100,\n snapshot: 0,\n};\n\ninterface VisualStabilityProfile {\n readonly settleMs: number;\n readonly scope: VisualStabilityScope;\n readonly timeoutMs: number;\n}\n\nconst DOM_ACTION_VISUAL_STABILITY_PROFILES: Readonly<Record<string, VisualStabilityProfile>> = {\n \"dom.click\": { settleMs: 750, scope: \"main-frame\", timeoutMs: 7_000 },\n \"dom.input\": { settleMs: 750, scope: \"main-frame\", timeoutMs: 7_000 },\n \"dom.scroll\": { settleMs: 600, scope: \"main-frame\", timeoutMs: 7_000 },\n \"dom.hover\": { settleMs: 200, scope: \"main-frame\", timeoutMs: 2_500 },\n};\n\nconst DEFAULT_DOM_ACTION_VISUAL_STABILITY_PROFILE: VisualStabilityProfile = {\n settleMs: 750,\n scope: \"main-frame\",\n timeoutMs: 7_000,\n};\n\nconst NAVIGATION_VISUAL_STABILITY_PROFILE: VisualStabilityProfile = {\n settleMs: 750,\n scope: \"visible-frames\",\n timeoutMs: 7_000,\n};\n\nconst NAVIGATION_POST_LOAD_CAPTURE_WINDOW_MS = 1_000;\n\nconst defaultDomActionSettleObserver: SettleObserver = {\n async settle(input) {\n if (input.trigger !== \"dom-action\") {\n return false;\n }\n\n const profile =\n DOM_ACTION_VISUAL_STABILITY_PROFILES[input.operation] ??\n DEFAULT_DOM_ACTION_VISUAL_STABILITY_PROFILE;\n\n const effectiveTimeout =\n input.remainingMs === undefined\n ? profile.timeoutMs\n : Math.min(profile.timeoutMs, input.remainingMs);\n\n if (effectiveTimeout <= 0) {\n return false;\n }\n\n try {\n await input.engine.waitForVisualStability({\n pageRef: input.pageRef,\n timeoutMs: effectiveTimeout,\n settleMs: profile.settleMs,\n ...(input.observedMutationQuietMs === undefined\n ? {}\n : { initialQuietMs: input.observedMutationQuietMs }),\n scope: profile.scope,\n });\n return true;\n } catch {\n return false;\n }\n },\n};\nObject.freeze(defaultDomActionSettleObserver);\n\nconst defaultNavigationSettleObserver: SettleObserver = {\n async settle(input) {\n if (input.trigger !== \"navigation\") {\n return false;\n }\n\n const profile = NAVIGATION_VISUAL_STABILITY_PROFILE;\n\n const effectiveTimeout =\n input.remainingMs === undefined\n ? profile.timeoutMs\n : Math.min(profile.timeoutMs, input.remainingMs);\n\n if (effectiveTimeout <= 0) {\n return false;\n }\n\n try {\n let visualTimeout = effectiveTimeout;\n let initialQuietMs = input.observedMutationQuietMs ?? 0;\n\n if (!input.postLoadHandled) {\n const startedAt = Date.now();\n await input.engine.waitForPostLoadQuiet({\n pageRef: input.pageRef,\n timeoutMs: effectiveTimeout,\n quietMs: DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS,\n captureWindowMs: Math.min(NAVIGATION_POST_LOAD_CAPTURE_WINDOW_MS, effectiveTimeout),\n signal: input.signal,\n });\n visualTimeout = Math.max(0, effectiveTimeout - (Date.now() - startedAt));\n initialQuietMs = Math.max(initialQuietMs, DEFAULT_POST_LOAD_TRACKER_QUIET_WINDOW_MS);\n }\n\n if (visualTimeout <= 0) {\n return true;\n }\n await input.engine.waitForVisualStability({\n pageRef: input.pageRef,\n timeoutMs: visualTimeout,\n settleMs: profile.settleMs,\n ...(initialQuietMs <= 0 ? {} : { initialQuietMs }),\n scope: profile.scope,\n });\n return true;\n } catch {\n return false;\n }\n },\n};\nObject.freeze(defaultNavigationSettleObserver);\n\nconst DEFAULT_SETTLE_OBSERVERS: NonNullable<SettlePolicy[\"observers\"]> = Object.freeze([\n defaultDomActionSettleObserver,\n defaultNavigationSettleObserver,\n]);\n\nexport const defaultTimeoutPolicy: TimeoutPolicy = {\n resolveTimeoutMs(input) {\n return DEFAULT_TIMEOUTS[input.operation];\n },\n};\nObject.freeze(defaultTimeoutPolicy);\n\nexport const defaultSettlePolicy: SettlePolicy = {\n observers: DEFAULT_SETTLE_OBSERVERS,\n resolveDelayMs(input) {\n return DEFAULT_SETTLE_DELAYS[input.trigger] ?? 0;\n },\n};\nObject.freeze(defaultSettlePolicy);\n\nexport const defaultRetryPolicy: RetryPolicy = {\n evaluate() {\n return { retry: false } satisfies RetryDecision;\n },\n};\nObject.freeze(defaultRetryPolicy);\n\nexport const defaultFallbackPolicy: FallbackPolicy = {\n evaluate() {\n return { fallback: false } satisfies FallbackDecision;\n },\n};\nObject.freeze(defaultFallbackPolicy);\n\nconst DEFAULT_POLICY: OpensteerPolicy = {\n timeout: defaultTimeoutPolicy,\n settle: defaultSettlePolicy,\n retry: defaultRetryPolicy,\n fallback: defaultFallbackPolicy,\n};\nObject.freeze(DEFAULT_POLICY);\n\nexport function defaultPolicy(): OpensteerPolicy {\n return DEFAULT_POLICY;\n}\n","import type { SettleContext, SettlePolicy } from \"./types.js\";\n\nexport async function settleWithPolicy(policy: SettlePolicy, input: SettleContext): Promise<void> {\n for (const observer of policy.observers ?? []) {\n if (await observer.settle(input)) {\n return;\n }\n }\n\n const delayMs = policy.resolveDelayMs({\n operation: input.operation,\n trigger: input.trigger,\n });\n if (delayMs <= 0) {\n return;\n }\n\n await delayWithSignal(delayMs, input.signal);\n}\n\nexport function delayWithSignal(delayMs: number, signal: AbortSignal): Promise<void> {\n if (signal.aborted) {\n return Promise.reject(signal.reason ?? abortError());\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n\n const onAbort = () => {\n clearTimeout(timer);\n signal.removeEventListener(\"abort\", onAbort);\n reject(signal.reason ?? abortError());\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError() {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n","import type { JsonSchema, JsonSchemaType, JsonValue } from \"./json.js\";\n\nexport interface JsonSchemaValidationIssue {\n readonly path: string;\n readonly message: string;\n}\n\nexport function validateJsonSchema(\n schema: JsonSchema,\n value: unknown,\n path = \"$\",\n): readonly JsonSchemaValidationIssue[] {\n return validateSchemaNode(schema, value, path);\n}\n\nfunction validateSchemaNode(\n schema: JsonSchema,\n value: unknown,\n path: string,\n): JsonSchemaValidationIssue[] {\n const issues: JsonSchemaValidationIssue[] = [];\n\n if (\"const\" in schema && !isJsonValueEqual(schema.const, value)) {\n issues.push({\n path,\n message: `must equal ${JSON.stringify(schema.const)}`,\n });\n return issues;\n }\n\n if (\n schema.enum !== undefined &&\n !schema.enum.some((candidate) => isJsonValueEqual(candidate, value))\n ) {\n issues.push({\n path,\n message: `must be one of ${schema.enum.map((candidate) => JSON.stringify(candidate)).join(\", \")}`,\n });\n return issues;\n }\n\n if (schema.oneOf !== undefined) {\n const branchIssues = schema.oneOf.map((member) => validateSchemaNode(member, value, path));\n const validBranches = branchIssues.filter((current) => current.length === 0).length;\n if (validBranches !== 1) {\n issues.push({\n path,\n message:\n validBranches === 0\n ? \"must match exactly one supported shape\"\n : \"matches multiple supported shapes\",\n });\n return issues;\n }\n }\n\n if (schema.anyOf !== undefined) {\n const hasMatch = schema.anyOf.some(\n (member) => validateSchemaNode(member, value, path).length === 0,\n );\n if (!hasMatch) {\n issues.push({\n path,\n message: \"must match at least one supported shape\",\n });\n return issues;\n }\n }\n\n if (schema.allOf !== undefined) {\n for (const member of schema.allOf) {\n issues.push(...validateSchemaNode(member, value, path));\n }\n if (issues.length > 0) {\n return issues;\n }\n }\n\n if (schema.type !== undefined && !matchesSchemaType(schema.type, value)) {\n issues.push({\n path,\n message: `must be ${describeSchemaType(schema.type)}`,\n });\n return issues;\n }\n\n if (typeof value === \"string\") {\n if (schema.minLength !== undefined && value.length < schema.minLength) {\n issues.push({\n path,\n message: `must have length >= ${String(schema.minLength)}`,\n });\n }\n if (schema.maxLength !== undefined && value.length > schema.maxLength) {\n issues.push({\n path,\n message: `must have length <= ${String(schema.maxLength)}`,\n });\n }\n if (schema.pattern !== undefined && !new RegExp(schema.pattern).test(value)) {\n issues.push({\n path,\n message: `must match pattern ${schema.pattern}`,\n });\n }\n return issues;\n }\n\n if (typeof value === \"number\") {\n if (schema.minimum !== undefined && value < schema.minimum) {\n issues.push({\n path,\n message: `must be >= ${String(schema.minimum)}`,\n });\n }\n if (schema.maximum !== undefined && value > schema.maximum) {\n issues.push({\n path,\n message: `must be <= ${String(schema.maximum)}`,\n });\n }\n if (schema.exclusiveMinimum !== undefined && value <= schema.exclusiveMinimum) {\n issues.push({\n path,\n message: `must be > ${String(schema.exclusiveMinimum)}`,\n });\n }\n if (schema.exclusiveMaximum !== undefined && value >= schema.exclusiveMaximum) {\n issues.push({\n path,\n message: `must be < ${String(schema.exclusiveMaximum)}`,\n });\n }\n return issues;\n }\n\n if (Array.isArray(value)) {\n if (schema.minItems !== undefined && value.length < schema.minItems) {\n issues.push({\n path,\n message: `must have at least ${String(schema.minItems)} items`,\n });\n }\n if (schema.maxItems !== undefined && value.length > schema.maxItems) {\n issues.push({\n path,\n message: `must have at most ${String(schema.maxItems)} items`,\n });\n }\n if (schema.uniqueItems) {\n const seen = new Set<string>();\n for (const item of value) {\n const key = JSON.stringify(item);\n if (seen.has(key)) {\n issues.push({\n path,\n message: \"must not contain duplicate items\",\n });\n break;\n }\n seen.add(key);\n }\n }\n if (schema.items !== undefined) {\n for (let index = 0; index < value.length; index += 1) {\n issues.push(...validateSchemaNode(schema.items, value[index], `${path}[${String(index)}]`));\n }\n }\n return issues;\n }\n\n if (isPlainObject(value)) {\n const properties = schema.properties ?? {};\n for (const requiredKey of schema.required ?? []) {\n if (!(requiredKey in value)) {\n issues.push({\n path: joinObjectPath(path, requiredKey),\n message: \"is required\",\n });\n }\n }\n\n for (const [key, propertyValue] of Object.entries(value)) {\n const propertySchema = properties[key];\n if (propertySchema !== undefined) {\n issues.push(\n ...validateSchemaNode(propertySchema, propertyValue, joinObjectPath(path, key)),\n );\n continue;\n }\n\n if (schema.additionalProperties === false) {\n issues.push({\n path: joinObjectPath(path, key),\n message: \"is not allowed\",\n });\n continue;\n }\n\n if (schema.additionalProperties !== undefined && schema.additionalProperties !== true) {\n issues.push(\n ...validateSchemaNode(\n schema.additionalProperties,\n propertyValue,\n joinObjectPath(path, key),\n ),\n );\n }\n }\n }\n\n return issues;\n}\n\nfunction matchesSchemaType(\n expected: JsonSchemaType | readonly JsonSchemaType[],\n value: unknown,\n): boolean {\n const candidates = Array.isArray(expected) ? expected : [expected];\n return candidates.some((candidate) => matchesSingleSchemaType(candidate, value));\n}\n\nfunction matchesSingleSchemaType(expected: JsonSchemaType, value: unknown): boolean {\n switch (expected) {\n case \"string\":\n return typeof value === \"string\";\n case \"number\":\n return typeof value === \"number\" && Number.isFinite(value);\n case \"integer\":\n return typeof value === \"number\" && Number.isInteger(value);\n case \"boolean\":\n return typeof value === \"boolean\";\n case \"null\":\n return value === null;\n case \"array\":\n return Array.isArray(value);\n case \"object\":\n return isPlainObject(value);\n }\n}\n\nfunction describeSchemaType(expected: JsonSchemaType | readonly JsonSchemaType[]): string {\n const candidates = Array.isArray(expected) ? expected : [expected];\n return candidates.join(\" or \");\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === \"[object Object]\";\n}\n\nfunction joinObjectPath(base: string, key: string): string {\n return `${base}.${key}`;\n}\n\nfunction isJsonValueEqual(expected: JsonValue | undefined, actual: unknown): boolean {\n if (expected === undefined) {\n return actual === undefined;\n }\n if (\n expected === null ||\n typeof expected === \"string\" ||\n typeof expected === \"number\" ||\n typeof expected === \"boolean\"\n ) {\n return actual === expected;\n }\n if (Array.isArray(expected)) {\n return (\n Array.isArray(actual) &&\n actual.length === expected.length &&\n expected.every((entry, index) => isJsonValueEqual(entry, actual[index]))\n );\n }\n if (!isPlainObject(actual)) {\n return false;\n }\n\n const expectedObject = expected as Record<string, JsonValue>;\n const expectedKeys = Object.keys(expectedObject).sort((left, right) => left.localeCompare(right));\n const actualKeys = Object.keys(actual).sort((left, right) => left.localeCompare(right));\n return (\n expectedKeys.length === actualKeys.length &&\n expectedKeys.every(\n (key, index) =>\n key === actualKeys[index] && isJsonValueEqual(expectedObject[key], actual[key]),\n )\n );\n}\n","import {\n JSON_SCHEMA_DRAFT_2020_12,\n literalSchema,\n objectSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nexport const OPENSTEER_PROTOCOL_NAME = \"opensteer\";\nexport const OPENSTEER_PROTOCOL_COMPATIBILITY_REVISION = 3 as const;\nexport const OPENSTEER_PROTOCOL_VERSION = `0.${OPENSTEER_PROTOCOL_COMPATIBILITY_REVISION}.0`;\nexport const OPENSTEER_PROTOCOL_REVISION_DATE = \"2026-04-15\";\nexport const OPENSTEER_PROTOCOL_MEDIA_TYPE = `application/vnd.${OPENSTEER_PROTOCOL_NAME}+json;version=${OPENSTEER_PROTOCOL_VERSION}`;\nexport const OPENSTEER_PROTOCOL_REST_BASE_PATH = `/api/v${OPENSTEER_PROTOCOL_COMPATIBILITY_REVISION}`;\n\nexport type OpensteerProtocolName = typeof OPENSTEER_PROTOCOL_NAME;\nexport type OpensteerProtocolVersion = typeof OPENSTEER_PROTOCOL_VERSION;\n\nexport interface OpensteerProtocolDescriptor {\n readonly protocol: OpensteerProtocolName;\n readonly version: OpensteerProtocolVersion;\n readonly revisionDate: string;\n readonly mediaType: string;\n readonly restBasePath: string;\n}\n\nexport const opensteerProtocolDescriptor: OpensteerProtocolDescriptor = {\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: OPENSTEER_PROTOCOL_VERSION,\n revisionDate: OPENSTEER_PROTOCOL_REVISION_DATE,\n mediaType: OPENSTEER_PROTOCOL_MEDIA_TYPE,\n restBasePath: OPENSTEER_PROTOCOL_REST_BASE_PATH,\n};\n\nexport const opensteerProtocolDescriptorSchema: JsonSchema = objectSchema(\n {\n protocol: literalSchema(OPENSTEER_PROTOCOL_NAME),\n version: literalSchema(OPENSTEER_PROTOCOL_VERSION),\n revisionDate: stringSchema({\n format: \"date\",\n description: \"Calendar revision for this protocol snapshot.\",\n }),\n mediaType: stringSchema({\n description: \"Canonical media type for JSON payloads using this protocol revision.\",\n }),\n restBasePath: stringSchema({\n description: \"Base HTTP path for the canonical REST transport.\",\n }),\n },\n {\n $schema: JSON_SCHEMA_DRAFT_2020_12,\n $id: \"https://opensteer.dev/schemas/protocol/descriptor.json\",\n title: \"OpensteerProtocolDescriptor\",\n required: [\"protocol\", \"version\", \"revisionDate\", \"mediaType\", \"restBasePath\"],\n },\n);\n\nexport function isSupportedProtocolVersion(value: string): value is OpensteerProtocolVersion {\n return value === OPENSTEER_PROTOCOL_VERSION;\n}\n\nexport function assertSupportedProtocolVersion(value: string): OpensteerProtocolVersion {\n if (!isSupportedProtocolVersion(value)) {\n throw new RangeError(\n `unsupported protocol version ${value}; expected ${OPENSTEER_PROTOCOL_VERSION}`,\n );\n }\n\n return value;\n}\n","import type { JsonSchema } from \"./json.js\";\nimport { enumSchema, integerSchema, objectSchema, stringSchema } from \"./json.js\";\n\nexport interface ExternalBinaryLocation {\n readonly delivery: \"external\";\n readonly uri: string;\n readonly mimeType: string;\n readonly byteLength: number;\n readonly sha256: string;\n}\n\nexport const externalBinaryLocationSchema: JsonSchema = objectSchema(\n {\n delivery: enumSchema([\"external\"] as const),\n uri: stringSchema(),\n mimeType: stringSchema(),\n byteLength: integerSchema({ minimum: 0 }),\n sha256: stringSchema(),\n },\n {\n title: \"ExternalBinaryLocation\",\n required: [\"delivery\", \"uri\", \"mimeType\", \"byteLength\", \"sha256\"],\n },\n);\n","export type {\n SessionRef,\n PageRef,\n FrameRef,\n DocumentRef,\n NodeRef,\n NetworkRequestId,\n DownloadRef,\n DialogRef,\n ChooserRef,\n WorkerRef,\n DocumentEpoch,\n NodeLocator,\n} from \"@opensteer/browser-core\";\n\nexport {\n createSessionRef,\n createPageRef,\n createFrameRef,\n createDocumentRef,\n createNodeRef,\n createNetworkRequestId,\n createDownloadRef,\n createDialogRef,\n createChooserRef,\n createWorkerRef,\n isSessionRef,\n isPageRef,\n isFrameRef,\n isDocumentRef,\n isNodeRef,\n isNetworkRequestId,\n isDownloadRef,\n isDialogRef,\n isChooserRef,\n isWorkerRef,\n serializeRef,\n createDocumentEpoch,\n nextDocumentEpoch,\n serializeDocumentEpoch,\n createNodeLocator,\n} from \"@opensteer/browser-core\";\n\nimport type {\n SessionRef,\n PageRef,\n FrameRef,\n DocumentRef,\n NodeRef,\n NetworkRequestId,\n DownloadRef,\n DialogRef,\n ChooserRef,\n WorkerRef,\n} from \"@opensteer/browser-core\";\n\nimport {\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nexport type OpensteerRef =\n | SessionRef\n | PageRef\n | FrameRef\n | DocumentRef\n | NodeRef\n | NetworkRequestId\n | DownloadRef\n | DialogRef\n | ChooserRef\n | WorkerRef;\n\ntype RefPrefix =\n | \"session\"\n | \"page\"\n | \"frame\"\n | \"document\"\n | \"node\"\n | \"request\"\n | \"download\"\n | \"dialog\"\n | \"chooser\"\n | \"worker\";\n\nexport interface ParsedOpensteerRef {\n readonly kind: RefPrefix;\n readonly value: string;\n}\n\nconst refPrefixes = [\n \"session\",\n \"page\",\n \"frame\",\n \"document\",\n \"node\",\n \"request\",\n \"download\",\n \"dialog\",\n \"chooser\",\n \"worker\",\n] as const satisfies readonly RefPrefix[];\n\nfunction parsePrefixedRef(value: string): ParsedOpensteerRef | null {\n const separatorIndex = value.indexOf(\":\");\n if (separatorIndex <= 0 || separatorIndex === value.length - 1) {\n return null;\n }\n\n const kind = value.slice(0, separatorIndex);\n if (!refPrefixes.includes(kind as RefPrefix)) {\n return null;\n }\n\n return {\n kind: kind as RefPrefix,\n value: value.slice(separatorIndex + 1),\n };\n}\n\nexport function isOpensteerRef(value: string): value is OpensteerRef {\n return parsePrefixedRef(value) !== null;\n}\n\nexport function parseOpensteerRef(value: string): ParsedOpensteerRef | null {\n return parsePrefixedRef(value);\n}\n\nfunction prefixedRefSchema(prefix: RefPrefix, title: string): JsonSchema {\n return stringSchema({\n title,\n pattern: `^${prefix}:.+$`,\n });\n}\n\nexport const opensteerRefKindSchema: JsonSchema = enumSchema(refPrefixes, {\n title: \"OpensteerRefKind\",\n});\n\nexport const sessionRefSchema = prefixedRefSchema(\"session\", \"SessionRef\");\nexport const pageRefSchema = prefixedRefSchema(\"page\", \"PageRef\");\nexport const frameRefSchema = prefixedRefSchema(\"frame\", \"FrameRef\");\nexport const documentRefSchema = prefixedRefSchema(\"document\", \"DocumentRef\");\nexport const nodeRefSchema = prefixedRefSchema(\"node\", \"NodeRef\");\nexport const networkRequestIdSchema = prefixedRefSchema(\"request\", \"NetworkRequestId\");\nexport const downloadRefSchema = prefixedRefSchema(\"download\", \"DownloadRef\");\nexport const dialogRefSchema = prefixedRefSchema(\"dialog\", \"DialogRef\");\nexport const chooserRefSchema = prefixedRefSchema(\"chooser\", \"ChooserRef\");\nexport const workerRefSchema = prefixedRefSchema(\"worker\", \"WorkerRef\");\n\nexport const opensteerRefSchema: JsonSchema = oneOfSchema(\n [\n sessionRefSchema,\n pageRefSchema,\n frameRefSchema,\n documentRefSchema,\n nodeRefSchema,\n networkRequestIdSchema,\n downloadRefSchema,\n dialogRefSchema,\n chooserRefSchema,\n workerRefSchema,\n ],\n {\n title: \"OpensteerRef\",\n },\n);\n\nexport const documentEpochSchema: JsonSchema = integerSchema({\n title: \"DocumentEpoch\",\n minimum: 0,\n});\n\nexport const nodeLocatorSchema: JsonSchema = objectSchema(\n {\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n nodeRef: nodeRefSchema,\n },\n {\n title: \"NodeLocator\",\n required: [\"documentRef\", \"documentEpoch\", \"nodeRef\"],\n },\n);\n","export type {\n Point,\n Size,\n Rect,\n Quad,\n ScrollOffset,\n CoordinateSpace,\n LayoutViewport,\n VisualViewport,\n DevicePixelRatio,\n PageScaleFactor,\n PageZoomFactor,\n ViewportMetrics,\n} from \"@opensteer/browser-core\";\n\nimport { arraySchema, enumSchema, numberSchema, objectSchema, type JsonSchema } from \"./json.js\";\n\nexport const pointSchema: JsonSchema = objectSchema(\n {\n x: numberSchema(),\n y: numberSchema(),\n },\n {\n title: \"Point\",\n required: [\"x\", \"y\"],\n },\n);\n\nexport const sizeSchema: JsonSchema = objectSchema(\n {\n width: numberSchema({ minimum: 0 }),\n height: numberSchema({ minimum: 0 }),\n },\n {\n title: \"Size\",\n required: [\"width\", \"height\"],\n },\n);\n\nexport const rectSchema: JsonSchema = objectSchema(\n {\n x: numberSchema(),\n y: numberSchema(),\n width: numberSchema({ minimum: 0 }),\n height: numberSchema({ minimum: 0 }),\n },\n {\n title: \"Rect\",\n required: [\"x\", \"y\", \"width\", \"height\"],\n },\n);\n\nexport const quadSchema: JsonSchema = arraySchema(pointSchema, {\n title: \"Quad\",\n minItems: 4,\n maxItems: 4,\n});\n\nexport const scrollOffsetSchema: JsonSchema = objectSchema(\n {\n x: numberSchema(),\n y: numberSchema(),\n },\n {\n title: \"ScrollOffset\",\n required: [\"x\", \"y\"],\n },\n);\n\nexport const coordinateSpaceSchema: JsonSchema = enumSchema(\n [\n \"document-css\",\n \"layout-viewport-css\",\n \"visual-viewport-css\",\n \"computer-display-css\",\n \"window\",\n \"screen\",\n \"device-pixel\",\n ] as const,\n {\n title: \"CoordinateSpace\",\n },\n);\n\nexport const layoutViewportSchema: JsonSchema = objectSchema(\n {\n origin: pointSchema,\n size: sizeSchema,\n },\n {\n title: \"LayoutViewport\",\n required: [\"origin\", \"size\"],\n },\n);\n\nexport const visualViewportSchema: JsonSchema = objectSchema(\n {\n origin: pointSchema,\n offsetWithinLayoutViewport: scrollOffsetSchema,\n size: sizeSchema,\n },\n {\n title: \"VisualViewport\",\n required: [\"origin\", \"offsetWithinLayoutViewport\", \"size\"],\n },\n);\n\nexport const viewportMetricsSchema: JsonSchema = objectSchema(\n {\n layoutViewport: layoutViewportSchema,\n visualViewport: visualViewportSchema,\n scrollOffset: scrollOffsetSchema,\n contentSize: sizeSchema,\n devicePixelRatio: numberSchema({ exclusiveMinimum: 0 }),\n pageScaleFactor: numberSchema({ exclusiveMinimum: 0 }),\n pageZoomFactor: numberSchema({ exclusiveMinimum: 0 }),\n },\n {\n title: \"ViewportMetrics\",\n required: [\n \"layoutViewport\",\n \"visualViewport\",\n \"scrollOffset\",\n \"contentSize\",\n \"devicePixelRatio\",\n \"pageScaleFactor\",\n \"pageZoomFactor\",\n ],\n },\n);\n","export type { PageLifecycleState, PageInfo, FrameInfo } from \"@opensteer/browser-core\";\n\nimport {\n documentEpochSchema,\n documentRefSchema,\n frameRefSchema,\n pageRefSchema,\n sessionRefSchema,\n} from \"./identity.js\";\nimport { enumSchema, objectSchema, stringSchema, type JsonSchema } from \"./json.js\";\n\nexport const pageLifecycleStateSchema: JsonSchema = enumSchema(\n [\"opening\", \"open\", \"closing\", \"closed\", \"crashed\"] as const,\n {\n title: \"PageLifecycleState\",\n },\n);\n\nexport const pageInfoSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n sessionRef: sessionRefSchema,\n targetId: stringSchema({\n description: \"Underlying browser target identifier when available.\",\n }),\n openerPageRef: pageRefSchema,\n url: stringSchema({\n description: \"Current main-frame URL.\",\n }),\n title: stringSchema(),\n lifecycleState: pageLifecycleStateSchema,\n },\n {\n title: \"PageInfo\",\n required: [\"pageRef\", \"sessionRef\", \"url\", \"title\", \"lifecycleState\"],\n },\n);\n\nexport const frameInfoSchema: JsonSchema = objectSchema(\n {\n frameRef: frameRefSchema,\n pageRef: pageRefSchema,\n parentFrameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n url: stringSchema(),\n name: stringSchema(),\n isMainFrame: {\n type: \"boolean\",\n },\n },\n {\n title: \"FrameInfo\",\n required: [\"frameRef\", \"pageRef\", \"documentRef\", \"documentEpoch\", \"url\", \"isMainFrame\"],\n },\n);\n","export type {\n HeaderEntry,\n BodyPayloadEncoding,\n NetworkCaptureState,\n NetworkRecordKind,\n NetworkResourceType,\n NetworkInitiatorType,\n NetworkInitiator,\n NetworkTiming,\n NetworkTransferSizes,\n NetworkSourceMetadata,\n} from \"@opensteer/browser-core\";\n\nexport { createHeaderEntry } from \"@opensteer/browser-core\";\n\nimport type {\n BodyPayloadEncoding,\n DocumentRef,\n FrameRef,\n HeaderEntry,\n NetworkCaptureState,\n NetworkInitiator,\n NetworkRecordKind,\n NetworkRequestId,\n NetworkResourceType,\n NetworkSourceMetadata,\n NetworkTiming,\n NetworkTransferSizes,\n PageRef,\n SessionRef,\n WorkerRef,\n} from \"@opensteer/browser-core\";\n\nimport {\n documentRefSchema,\n frameRefSchema,\n networkRequestIdSchema,\n pageRefSchema,\n sessionRefSchema,\n workerRefSchema,\n} from \"./identity.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n numberSchema,\n objectSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nexport interface BodyPayload {\n readonly data: string;\n readonly encoding: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated: boolean;\n readonly capturedByteLength: number;\n readonly originalByteLength?: number;\n}\n\nexport interface NetworkRecord {\n readonly kind: NetworkRecordKind;\n readonly requestId: NetworkRequestId;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly method: string;\n readonly url: string;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly status?: number;\n readonly statusText?: string;\n readonly resourceType: NetworkResourceType;\n readonly redirectFromRequestId?: NetworkRequestId;\n readonly redirectToRequestId?: NetworkRequestId;\n readonly navigationRequest: boolean;\n readonly initiator?: NetworkInitiator;\n readonly timing?: NetworkTiming;\n readonly transfer?: NetworkTransferSizes;\n readonly source?: NetworkSourceMetadata;\n readonly captureState: NetworkCaptureState;\n readonly requestBodyState: NetworkCaptureState;\n readonly responseBodyState: NetworkCaptureState;\n readonly requestBodySkipReason?: string;\n readonly responseBodySkipReason?: string;\n readonly requestBodyError?: string;\n readonly responseBodyError?: string;\n readonly requestBody?: BodyPayload;\n readonly responseBody?: BodyPayload;\n}\n\nexport interface NetworkQueryRecord {\n readonly recordId: string;\n readonly capture?: string;\n readonly tags?: readonly string[];\n readonly savedAt?: number;\n readonly record: NetworkRecord;\n}\n\nexport function createBodyPayload(\n data: string,\n options: {\n readonly encoding?: BodyPayloadEncoding;\n readonly mimeType?: string;\n readonly charset?: string;\n readonly truncated?: boolean;\n readonly originalByteLength?: number;\n } = {},\n): BodyPayload {\n const capturedByteLength = Buffer.from(data, \"base64\").byteLength;\n\n return {\n data,\n encoding: options.encoding ?? \"identity\",\n truncated: options.truncated ?? false,\n capturedByteLength,\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.charset === undefined ? {} : { charset: options.charset }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n };\n}\n\nexport function bodyPayloadFromUtf8(\n value: string,\n options: {\n readonly mimeType?: string;\n readonly encoding?: BodyPayloadEncoding;\n readonly truncated?: boolean;\n readonly originalByteLength?: number;\n } = {},\n): BodyPayload {\n return createBodyPayload(Buffer.from(value, \"utf8\").toString(\"base64\"), {\n ...(options.mimeType === undefined ? {} : { mimeType: options.mimeType }),\n ...(options.encoding === undefined ? {} : { encoding: options.encoding }),\n ...(options.truncated === undefined ? {} : { truncated: options.truncated }),\n ...(options.originalByteLength === undefined\n ? {}\n : { originalByteLength: options.originalByteLength }),\n charset: \"utf-8\",\n });\n}\n\nexport const headerEntrySchema: JsonSchema = objectSchema(\n {\n name: stringSchema(),\n value: stringSchema(),\n },\n {\n title: \"HeaderEntry\",\n required: [\"name\", \"value\"],\n },\n);\n\nexport const bodyPayloadEncodingSchema: JsonSchema = enumSchema(\n [\"identity\", \"base64\", \"gzip\", \"deflate\", \"brotli\", \"unknown\"] as const,\n {\n title: \"BodyPayloadEncoding\",\n },\n);\n\nexport const bodyPayloadSchema: JsonSchema = objectSchema(\n {\n data: stringSchema({\n description: \"Binary payload encoded as base64.\",\n }),\n encoding: bodyPayloadEncodingSchema,\n mimeType: stringSchema(),\n charset: stringSchema(),\n truncated: {\n type: \"boolean\",\n },\n capturedByteLength: integerSchema({ minimum: 0 }),\n originalByteLength: integerSchema({ minimum: 0 }),\n },\n {\n title: \"BodyPayload\",\n required: [\"data\", \"encoding\", \"truncated\", \"capturedByteLength\"],\n },\n);\n\nexport const networkRecordKindSchema: JsonSchema = enumSchema(\n [\"http\", \"websocket\", \"event-stream\"] as const,\n {\n title: \"NetworkRecordKind\",\n },\n);\n\nexport const networkCaptureStateSchema: JsonSchema = enumSchema(\n [\"pending\", \"complete\", \"failed\", \"skipped\"] as const,\n {\n title: \"NetworkCaptureState\",\n },\n);\n\nexport const networkResourceTypeSchema: JsonSchema = enumSchema(\n [\n \"document\",\n \"stylesheet\",\n \"image\",\n \"media\",\n \"font\",\n \"script\",\n \"fetch\",\n \"xhr\",\n \"websocket\",\n \"event-stream\",\n \"manifest\",\n \"texttrack\",\n \"beacon\",\n \"ping\",\n \"preflight\",\n \"other\",\n ] as const,\n {\n title: \"NetworkResourceType\",\n },\n);\n\nexport const networkInitiatorTypeSchema: JsonSchema = enumSchema(\n [\"parser\", \"script\", \"preload\", \"redirect\", \"user\", \"service-worker\", \"other\"] as const,\n {\n title: \"NetworkInitiatorType\",\n },\n);\n\nexport const networkInitiatorSchema: JsonSchema = objectSchema(\n {\n type: networkInitiatorTypeSchema,\n url: stringSchema(),\n lineNumber: integerSchema({ minimum: 0 }),\n columnNumber: integerSchema({ minimum: 0 }),\n requestId: networkRequestIdSchema,\n stackTrace: arraySchema(stringSchema()),\n },\n {\n title: \"NetworkInitiator\",\n required: [\"type\"],\n },\n);\n\nexport const networkTimingSchema: JsonSchema = objectSchema(\n {\n requestStartMs: numberSchema(),\n dnsStartMs: numberSchema(),\n dnsEndMs: numberSchema(),\n connectStartMs: numberSchema(),\n connectEndMs: numberSchema(),\n sslStartMs: numberSchema(),\n sslEndMs: numberSchema(),\n requestSentMs: numberSchema(),\n responseStartMs: numberSchema(),\n responseEndMs: numberSchema(),\n workerStartMs: numberSchema(),\n workerReadyMs: numberSchema(),\n },\n {\n title: \"NetworkTiming\",\n },\n);\n\nexport const networkTransferSizesSchema: JsonSchema = objectSchema(\n {\n requestHeadersBytes: integerSchema({ minimum: 0 }),\n responseHeadersBytes: integerSchema({ minimum: 0 }),\n encodedBodyBytes: integerSchema({ minimum: 0 }),\n decodedBodyBytes: integerSchema({ minimum: 0 }),\n transferSizeBytes: integerSchema({ minimum: 0 }),\n },\n {\n title: \"NetworkTransferSizes\",\n },\n);\n\nexport const networkSourceMetadataSchema: JsonSchema = objectSchema(\n {\n protocol: stringSchema(),\n remoteAddress: objectSchema(\n {\n ip: stringSchema(),\n port: integerSchema({ minimum: 0 }),\n },\n {\n required: [],\n },\n ),\n fromServiceWorker: {\n type: \"boolean\",\n },\n fromDiskCache: {\n type: \"boolean\",\n },\n fromMemoryCache: {\n type: \"boolean\",\n },\n workerRef: workerRefSchema,\n },\n {\n title: \"NetworkSourceMetadata\",\n },\n);\n\nexport const networkRecordSchema: JsonSchema = objectSchema(\n {\n kind: networkRecordKindSchema,\n requestId: networkRequestIdSchema,\n sessionRef: sessionRefSchema,\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n method: stringSchema(),\n url: stringSchema(),\n requestHeaders: arraySchema(headerEntrySchema),\n responseHeaders: arraySchema(headerEntrySchema),\n status: integerSchema({ minimum: 0 }),\n statusText: stringSchema(),\n resourceType: networkResourceTypeSchema,\n redirectFromRequestId: networkRequestIdSchema,\n redirectToRequestId: networkRequestIdSchema,\n navigationRequest: {\n type: \"boolean\",\n },\n initiator: networkInitiatorSchema,\n timing: networkTimingSchema,\n transfer: networkTransferSizesSchema,\n source: networkSourceMetadataSchema,\n captureState: networkCaptureStateSchema,\n requestBodyState: networkCaptureStateSchema,\n responseBodyState: networkCaptureStateSchema,\n requestBodySkipReason: stringSchema(),\n responseBodySkipReason: stringSchema(),\n requestBodyError: stringSchema(),\n responseBodyError: stringSchema(),\n requestBody: bodyPayloadSchema,\n responseBody: bodyPayloadSchema,\n },\n {\n title: \"NetworkRecord\",\n required: [\n \"kind\",\n \"requestId\",\n \"sessionRef\",\n \"method\",\n \"url\",\n \"requestHeaders\",\n \"responseHeaders\",\n \"resourceType\",\n \"navigationRequest\",\n \"captureState\",\n \"requestBodyState\",\n \"responseBodyState\",\n ],\n },\n);\n\nexport const networkQueryRecordSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n capture: stringSchema({ minLength: 1 }),\n tags: arraySchema(stringSchema({ minLength: 1 }), {\n uniqueItems: true,\n }),\n savedAt: integerSchema({ minimum: 0 }),\n record: networkRecordSchema,\n },\n {\n title: \"NetworkQueryRecord\",\n required: [\"recordId\", \"record\"],\n },\n);\n\nexport const orderedHeadersSchema: JsonSchema = arraySchema(headerEntrySchema, {\n title: \"OrderedHeaders\",\n});\n","export type {\n CookieSameSite,\n CookiePriority,\n CookieRecord,\n StorageEntry,\n IndexedDbRecord,\n IndexedDbIndexSnapshot,\n IndexedDbObjectStoreSnapshot,\n IndexedDbDatabaseSnapshot,\n StorageOriginSnapshot,\n SessionStorageSnapshot,\n StorageSnapshot,\n} from \"@opensteer/browser-core\";\n\nimport { frameRefSchema, pageRefSchema, sessionRefSchema } from \"./identity.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n numberSchema,\n objectSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nconst jsonUnknownSchema: JsonSchema = {};\n\nexport const cookieSameSiteSchema: JsonSchema = enumSchema([\"strict\", \"lax\", \"none\"] as const, {\n title: \"CookieSameSite\",\n});\n\nexport const cookiePrioritySchema: JsonSchema = enumSchema([\"low\", \"medium\", \"high\"] as const, {\n title: \"CookiePriority\",\n});\n\nexport const cookieRecordSchema: JsonSchema = objectSchema(\n {\n sessionRef: sessionRefSchema,\n name: stringSchema(),\n value: stringSchema(),\n domain: stringSchema(),\n path: stringSchema(),\n secure: {\n type: \"boolean\",\n },\n httpOnly: {\n type: \"boolean\",\n },\n sameSite: cookieSameSiteSchema,\n priority: cookiePrioritySchema,\n partitionKey: stringSchema(),\n session: {\n type: \"boolean\",\n },\n expiresAt: {\n type: [\"number\", \"null\"],\n },\n },\n {\n title: \"CookieRecord\",\n required: [\"sessionRef\", \"name\", \"value\", \"domain\", \"path\", \"secure\", \"httpOnly\", \"session\"],\n },\n);\n\nexport const storageEntrySchema: JsonSchema = objectSchema(\n {\n key: stringSchema(),\n value: stringSchema(),\n },\n {\n title: \"StorageEntry\",\n required: [\"key\", \"value\"],\n },\n);\n\nexport const indexedDbRecordSchema: JsonSchema = objectSchema(\n {\n key: jsonUnknownSchema,\n primaryKey: jsonUnknownSchema,\n value: jsonUnknownSchema,\n },\n {\n title: \"IndexedDbRecord\",\n required: [\"key\", \"value\"],\n },\n);\n\nexport const indexedDbIndexSnapshotSchema: JsonSchema = objectSchema(\n {\n name: stringSchema(),\n keyPath: {\n oneOf: [stringSchema(), arraySchema(stringSchema())],\n },\n multiEntry: {\n type: \"boolean\",\n },\n unique: {\n type: \"boolean\",\n },\n },\n {\n title: \"IndexedDbIndexSnapshot\",\n required: [\"name\", \"multiEntry\", \"unique\"],\n },\n);\n\nexport const indexedDbObjectStoreSnapshotSchema: JsonSchema = objectSchema(\n {\n name: stringSchema(),\n keyPath: {\n oneOf: [stringSchema(), arraySchema(stringSchema())],\n },\n autoIncrement: {\n type: \"boolean\",\n },\n indexes: arraySchema(indexedDbIndexSnapshotSchema),\n records: arraySchema(indexedDbRecordSchema),\n },\n {\n title: \"IndexedDbObjectStoreSnapshot\",\n required: [\"name\", \"autoIncrement\", \"indexes\", \"records\"],\n },\n);\n\nexport const indexedDbDatabaseSnapshotSchema: JsonSchema = objectSchema(\n {\n name: stringSchema(),\n version: numberSchema(),\n objectStores: arraySchema(indexedDbObjectStoreSnapshotSchema),\n },\n {\n title: \"IndexedDbDatabaseSnapshot\",\n required: [\"name\", \"version\", \"objectStores\"],\n },\n);\n\nexport const storageOriginSnapshotSchema: JsonSchema = objectSchema(\n {\n origin: stringSchema(),\n localStorage: arraySchema(storageEntrySchema),\n indexedDb: arraySchema(indexedDbDatabaseSnapshotSchema),\n },\n {\n title: \"StorageOriginSnapshot\",\n required: [\"origin\", \"localStorage\"],\n },\n);\n\nexport const sessionStorageSnapshotSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n origin: stringSchema(),\n entries: arraySchema(storageEntrySchema),\n },\n {\n title: \"SessionStorageSnapshot\",\n required: [\"pageRef\", \"frameRef\", \"origin\", \"entries\"],\n },\n);\n\nexport const storageSnapshotSchema: JsonSchema = objectSchema(\n {\n sessionRef: sessionRefSchema,\n capturedAt: integerSchema({ minimum: 0 }),\n origins: arraySchema(storageOriginSnapshotSchema),\n sessionStorage: arraySchema(sessionStorageSnapshotSchema),\n },\n {\n title: \"StorageSnapshot\",\n required: [\"sessionRef\", \"capturedAt\", \"origins\"],\n },\n);\n","import type { HeaderEntry } from \"./network.js\";\nimport {\n bodyPayloadSchema,\n headerEntrySchema,\n networkResourceTypeSchema,\n type BodyPayload,\n type NetworkQueryRecord,\n type NetworkResourceType,\n} from \"./network.js\";\nimport type { JsonSchema, JsonValue } from \"./json.js\";\nimport { pageRefSchema, type PageRef } from \"./identity.js\";\nimport { cookieRecordSchema, storageEntrySchema } from \"./storage.js\";\nimport type { CookieRecord, StorageEntry } from \"./storage.js\";\nimport {\n arraySchema,\n defineSchema,\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n recordSchema,\n stringSchema,\n} from \"./json.js\";\n\nexport type OpensteerRequestScalar = string | number | boolean;\nexport type TransportKind =\n | \"direct-http\"\n | \"matched-tls\"\n | \"context-http\"\n | \"page-http\"\n | \"session-http\";\n\nexport interface OpensteerRequestEntry {\n readonly name: string;\n readonly value: string;\n}\n\nexport type OpensteerRequestParameterLocation = \"path\" | \"query\" | \"header\";\n\nexport interface OpensteerRequestPlanParameter {\n readonly name: string;\n readonly in: OpensteerRequestParameterLocation;\n readonly wireName?: string;\n readonly required?: boolean;\n readonly description?: string;\n readonly defaultValue?: string;\n}\n\nexport interface OpensteerRequestPlanTransport {\n readonly kind: TransportKind;\n readonly requiresBrowser?: boolean;\n readonly requireSameOrigin?: boolean;\n readonly cookieJar?: string;\n}\n\nexport interface OpensteerRequestPlanEndpoint {\n readonly method: string;\n readonly urlTemplate: string;\n readonly defaultQuery?: readonly OpensteerRequestEntry[];\n readonly defaultHeaders?: readonly OpensteerRequestEntry[];\n}\n\nexport type OpensteerRequestPlanBodyKind = \"json\" | \"form\" | \"text\";\n\nexport interface OpensteerRequestPlanBody {\n readonly kind?: OpensteerRequestPlanBodyKind;\n readonly contentType?: string;\n readonly required?: boolean;\n readonly description?: string;\n readonly template?: JsonValue | string;\n readonly fields?: readonly OpensteerRequestEntry[];\n}\n\nexport interface OpensteerRequestPlanResponseExpectation {\n readonly status: number | readonly number[];\n readonly contentType?: string;\n}\n\nexport interface OpensteerRequestFailurePolicyHeaderMatch {\n readonly name: string;\n readonly valueIncludes: string;\n}\n\nexport interface OpensteerRequestFailurePolicy {\n readonly statusCodes?: readonly number[];\n readonly finalUrlIncludes?: readonly string[];\n readonly responseHeaders?: readonly OpensteerRequestFailurePolicyHeaderMatch[];\n readonly responseBodyIncludes?: readonly string[];\n}\n\nexport interface OpensteerRequestRetryBackoffPolicy {\n readonly strategy?: \"fixed\" | \"exponential\";\n readonly delayMs: number;\n readonly maxDelayMs?: number;\n}\n\nexport interface OpensteerRequestRetryPolicy {\n readonly maxRetries: number;\n readonly backoff?: OpensteerRequestRetryBackoffPolicy;\n readonly respectRetryAfter?: boolean;\n readonly failurePolicy?: OpensteerRequestFailurePolicy;\n}\n\nexport interface OpensteerRequestPlanAuth {\n readonly strategy: \"session-cookie\" | \"bearer-token\" | \"api-key\" | \"custom\";\n readonly failurePolicy?: OpensteerRequestFailurePolicy;\n readonly description?: string;\n}\n\nexport interface OpensteerRequestPlanPayload {\n readonly transport: OpensteerRequestPlanTransport;\n readonly endpoint: OpensteerRequestPlanEndpoint;\n readonly parameters?: readonly OpensteerRequestPlanParameter[];\n readonly body?: OpensteerRequestPlanBody;\n readonly response?: OpensteerRequestPlanResponseExpectation;\n readonly retryPolicy?: OpensteerRequestRetryPolicy;\n readonly auth?: OpensteerRequestPlanAuth;\n}\n\nexport interface OpensteerRegistryProvenance {\n readonly source: string;\n readonly sourceId?: string;\n readonly capturedAt?: number;\n readonly notes?: string;\n}\n\nexport interface OpensteerRequestPlanFreshness {\n readonly lastValidatedAt?: number;\n readonly staleAt?: number;\n readonly expiresAt?: number;\n}\n\nexport interface OpensteerRequestPlanRecord {\n readonly id: string;\n readonly key: string;\n readonly version: string;\n readonly createdAt: number;\n readonly updatedAt: number;\n readonly contentHash: string;\n readonly tags: readonly string[];\n readonly provenance?: OpensteerRegistryProvenance;\n readonly freshness?: OpensteerRequestPlanFreshness;\n readonly payload: OpensteerRequestPlanPayload;\n}\n\nexport interface OpensteerNetworkQueryInput {\n readonly pageRef?: PageRef;\n readonly recordId?: string;\n readonly requestId?: string;\n readonly capture?: string;\n readonly tag?: string;\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string | number;\n readonly resourceType?: NetworkResourceType;\n readonly includeBodies?: boolean;\n readonly json?: boolean;\n readonly before?: string;\n readonly after?: string;\n readonly limit?: number;\n}\n\nexport interface OpensteerGraphqlSummary {\n readonly operationType?: \"query\" | \"mutation\" | \"subscription\" | \"unknown\";\n readonly operationName?: string;\n readonly persisted?: boolean;\n}\n\nexport interface OpensteerNetworkBodySummary {\n readonly bytes?: number;\n readonly contentType?: string;\n readonly streaming?: boolean;\n}\n\nexport interface OpensteerNetworkSummaryRecord {\n readonly recordId: string;\n readonly capture?: string;\n readonly savedAt?: number;\n readonly kind: NetworkQueryRecord[\"record\"][\"kind\"];\n readonly method: string;\n readonly status?: number;\n readonly resourceType: NetworkResourceType;\n readonly url: string;\n readonly request?: OpensteerNetworkBodySummary;\n readonly response?: OpensteerNetworkBodySummary;\n readonly graphql?: OpensteerGraphqlSummary;\n readonly websocket?: {\n readonly subprotocol?: string;\n };\n}\n\nexport interface OpensteerNetworkQueryOutput {\n readonly records: readonly OpensteerNetworkSummaryRecord[];\n}\n\nexport interface OpensteerParsedCookie {\n readonly name: string;\n readonly value: string;\n}\n\nexport interface OpensteerStructuredBodyPreview {\n readonly contentType?: string;\n readonly bytes: number;\n readonly truncated: boolean;\n readonly data?: JsonValue | string;\n readonly note?: string;\n}\n\nexport interface OpensteerNetworkRedirectHop {\n readonly method: string;\n readonly status?: number;\n readonly url: string;\n readonly location?: string;\n readonly setCookie?: readonly string[];\n}\n\nexport interface OpensteerNetworkDetailOutput {\n readonly recordId: string;\n readonly capture?: string;\n readonly savedAt?: number;\n readonly summary: OpensteerNetworkSummaryRecord;\n readonly requestHeaders: readonly HeaderEntry[];\n readonly responseHeaders: readonly HeaderEntry[];\n readonly cookiesSent?: readonly OpensteerParsedCookie[];\n readonly requestBody?: OpensteerStructuredBodyPreview;\n readonly responseBody?: OpensteerStructuredBodyPreview;\n readonly graphql?: OpensteerGraphqlSummary & {\n readonly variables?: JsonValue;\n };\n readonly redirectChain?: readonly OpensteerNetworkRedirectHop[];\n readonly notes?: readonly string[];\n readonly transportProbe?: {\n readonly recommended?: TransportKind;\n readonly attempts: readonly OpensteerReplayAttempt[];\n };\n}\n\nexport interface OpensteerNetworkDetailInput {\n readonly recordId: string;\n readonly probe?: boolean;\n}\n\nexport interface OpensteerReplayAttempt {\n readonly transport: TransportKind;\n readonly status?: number;\n readonly ok: boolean;\n readonly durationMs: number;\n readonly note?: string;\n readonly error?: string;\n}\n\nexport interface OpensteerNetworkReplayOverrides {\n readonly query?: OpensteerRequestScalarMap;\n readonly headers?: OpensteerRequestScalarMap;\n readonly body?: OpensteerRequestBodyInput;\n readonly variables?: JsonValue;\n}\n\nexport interface OpensteerNetworkReplayInput extends OpensteerNetworkReplayOverrides {\n readonly recordId: string;\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerNetworkReplayOutput {\n readonly recordId: string;\n readonly transport?: TransportKind;\n readonly attempts: readonly OpensteerReplayAttempt[];\n readonly response?: OpensteerRequestResponseResult;\n readonly data?: JsonValue | string;\n readonly note?: string;\n}\n\nexport type OpensteerSessionFetchTransport = \"auto\" | \"direct\" | \"matched-tls\" | \"context\" | \"page\";\n\nexport interface OpensteerSessionFetchInput {\n readonly pageRef?: PageRef;\n readonly url: string;\n readonly method?: string;\n readonly query?: OpensteerRequestScalarMap;\n readonly headers?: OpensteerRequestScalarMap;\n readonly body?: OpensteerRequestBodyInput;\n readonly transport?: OpensteerSessionFetchTransport;\n readonly cookies?: boolean;\n readonly followRedirects?: boolean;\n}\n\nexport interface OpensteerSessionFetchOutput {\n readonly transport?: TransportKind;\n readonly attempts: readonly OpensteerReplayAttempt[];\n readonly response?: OpensteerRequestResponseResult;\n readonly data?: JsonValue | string;\n readonly note?: string;\n}\n\nexport interface OpensteerCookieQueryInput {\n readonly domain?: string;\n}\n\nexport interface OpensteerCookieQueryOutput {\n readonly domain?: string;\n readonly cookies: readonly CookieRecord[];\n}\n\nexport type OpensteerStorageArea = \"local\" | \"session\";\n\nexport interface OpensteerStorageQueryInput {\n readonly domain?: string;\n}\n\nexport interface OpensteerStorageDomainSnapshot {\n readonly domain: string;\n readonly localStorage: readonly StorageEntry[];\n readonly sessionStorage: readonly StorageEntry[];\n}\n\nexport interface OpensteerStorageQueryOutput {\n readonly domains: readonly OpensteerStorageDomainSnapshot[];\n}\n\nexport interface OpensteerHiddenField {\n readonly path: string;\n readonly name: string;\n readonly value: string;\n}\n\nexport interface OpensteerStateDomainSnapshot {\n readonly domain: string;\n readonly cookies: readonly CookieRecord[];\n readonly hiddenFields: readonly OpensteerHiddenField[];\n readonly localStorage: readonly StorageEntry[];\n readonly sessionStorage: readonly StorageEntry[];\n readonly globals?: Readonly<Record<string, JsonValue>>;\n}\n\nexport interface OpensteerStateQueryInput {\n readonly domain?: string;\n}\n\nexport interface OpensteerStateQueryOutput {\n readonly domains: readonly OpensteerStateDomainSnapshot[];\n}\n\nexport interface OpensteerNetworkTagInput {\n readonly pageRef?: PageRef;\n readonly recordId?: string;\n readonly requestId?: string;\n readonly capture?: string;\n readonly tag: string;\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkResourceType;\n}\n\nexport interface OpensteerNetworkTagOutput {\n readonly taggedCount: number;\n}\n\nexport interface OpensteerNetworkClearInput {\n readonly capture?: string;\n readonly tag?: string;\n}\n\nexport interface OpensteerNetworkClearOutput {\n readonly clearedCount: number;\n}\n\nexport interface OpensteerWriteRequestPlanInput {\n readonly id?: string;\n readonly key: string;\n readonly version: string;\n readonly tags?: readonly string[];\n readonly provenance?: OpensteerRegistryProvenance;\n readonly freshness?: OpensteerRequestPlanFreshness;\n readonly payload: OpensteerRequestPlanPayload;\n}\n\nexport interface OpensteerGetRequestPlanInput {\n readonly key: string;\n readonly version?: string;\n}\n\nexport interface OpensteerListRequestPlansInput {\n readonly key?: string;\n}\n\nexport interface OpensteerListRequestPlansOutput {\n readonly plans: readonly OpensteerRequestPlanRecord[];\n}\n\nexport type OpensteerRequestScalarMap = Readonly<Record<string, OpensteerRequestScalar>>;\n\nexport interface OpensteerJsonRequestBodyInput {\n readonly json: JsonValue;\n readonly contentType?: string;\n}\n\nexport interface OpensteerTextRequestBodyInput {\n readonly text: string;\n readonly contentType?: string;\n}\n\nexport interface OpensteerBase64RequestBodyInput {\n readonly base64: string;\n readonly contentType?: string;\n}\n\nexport type OpensteerRequestBodyInput =\n | OpensteerJsonRequestBodyInput\n | OpensteerTextRequestBodyInput\n | OpensteerBase64RequestBodyInput;\n\nexport interface OpensteerRequestExecuteInput {\n readonly key: string;\n readonly version?: string;\n readonly pageRef?: PageRef;\n readonly cookieJar?: string;\n readonly params?: OpensteerRequestScalarMap;\n readonly query?: OpensteerRequestScalarMap;\n readonly headers?: OpensteerRequestScalarMap;\n readonly bodyVars?: OpensteerRequestScalarMap;\n readonly body?: OpensteerRequestBodyInput;\n readonly validateResponse?: boolean;\n}\n\nexport interface OpensteerRawRequestInput {\n readonly transport?: TransportKind;\n readonly pageRef?: PageRef;\n readonly cookieJar?: string;\n readonly url: string;\n readonly method?: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: OpensteerRequestBodyInput;\n readonly followRedirects?: boolean;\n}\n\nexport interface OpensteerRequestTransportResult {\n readonly method: string;\n readonly url: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BodyPayload;\n}\n\nexport interface OpensteerRequestResponseResult {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BodyPayload;\n readonly redirected: boolean;\n}\n\nexport interface OpensteerRequestExecuteOutput {\n readonly plan: {\n readonly id: string;\n readonly key: string;\n readonly version: string;\n };\n readonly request: OpensteerRequestTransportResult;\n readonly response: OpensteerRequestResponseResult;\n readonly recovery?: {\n readonly attempted: boolean;\n readonly succeeded: boolean;\n readonly matchedFailurePolicy?: boolean;\n };\n readonly data?: unknown;\n}\n\nexport interface OpensteerRawRequestOutput {\n readonly recordId: string;\n readonly request: OpensteerRequestTransportResult;\n readonly response: OpensteerRequestResponseResult;\n readonly data?: unknown;\n}\n\nexport interface OpensteerInferRequestPlanInput {\n readonly recordId: string;\n readonly key: string;\n readonly version: string;\n readonly transport?: TransportKind;\n}\n\nexport const opensteerRequestScalarSchema: JsonSchema = oneOfSchema(\n [stringSchema(), { type: \"number\" }, { type: \"boolean\" }],\n {\n title: \"OpensteerRequestScalar\",\n },\n);\n\nconst opensteerRequestScalarMapSchema: JsonSchema = recordSchema(opensteerRequestScalarSchema, {\n title: \"OpensteerRequestScalarMap\",\n});\n\nexport const opensteerRequestEntrySchema: JsonSchema = objectSchema(\n {\n name: stringSchema({ minLength: 1 }),\n value: stringSchema(),\n },\n {\n title: \"OpensteerRequestEntry\",\n required: [\"name\", \"value\"],\n },\n);\n\nexport const opensteerRequestPlanParameterLocationSchema: JsonSchema = enumSchema(\n [\"path\", \"query\", \"header\"] as const,\n {\n title: \"OpensteerRequestParameterLocation\",\n },\n);\n\nexport const opensteerRequestPlanParameterSchema: JsonSchema = objectSchema(\n {\n name: stringSchema({ minLength: 1 }),\n in: opensteerRequestPlanParameterLocationSchema,\n wireName: stringSchema({ minLength: 1 }),\n required: { type: \"boolean\" },\n description: stringSchema({ minLength: 1 }),\n defaultValue: stringSchema(),\n },\n {\n title: \"OpensteerRequestPlanParameter\",\n required: [\"name\", \"in\"],\n },\n);\n\nexport const opensteerRequestPlanTransportSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\n \"direct-http\",\n \"matched-tls\",\n \"context-http\",\n \"page-http\",\n \"session-http\",\n ] as const),\n requiresBrowser: { type: \"boolean\" },\n requireSameOrigin: { type: \"boolean\" },\n cookieJar: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerRequestPlanTransport\",\n required: [\"kind\"],\n },\n);\n\nexport const opensteerRequestPlanEndpointSchema: JsonSchema = objectSchema(\n {\n method: stringSchema({ minLength: 1 }),\n urlTemplate: stringSchema({ minLength: 1 }),\n defaultQuery: arraySchema(opensteerRequestEntrySchema),\n defaultHeaders: arraySchema(opensteerRequestEntrySchema),\n },\n {\n title: \"OpensteerRequestPlanEndpoint\",\n required: [\"method\", \"urlTemplate\"],\n },\n);\n\nexport const opensteerRequestPlanBodySchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"json\", \"form\", \"text\"] as const),\n contentType: stringSchema({ minLength: 1 }),\n required: { type: \"boolean\" },\n description: stringSchema({ minLength: 1 }),\n template: defineSchema({\n title: \"JsonValue\",\n }),\n fields: arraySchema(opensteerRequestEntrySchema),\n },\n {\n title: \"OpensteerRequestPlanBody\",\n },\n);\n\nexport const transportKindSchema: JsonSchema = enumSchema(\n [\"direct-http\", \"matched-tls\", \"context-http\", \"page-http\", \"session-http\"] as const,\n {\n title: \"TransportKind\",\n },\n);\n\nconst opensteerRequestPlanStatusSchema: JsonSchema = oneOfSchema(\n [\n integerSchema({ minimum: 100, maximum: 599 }),\n arraySchema(integerSchema({ minimum: 100, maximum: 599 }), {\n minItems: 1,\n uniqueItems: true,\n }),\n ],\n {\n title: \"OpensteerRequestPlanResponseStatus\",\n },\n);\n\nexport const opensteerRequestPlanResponseExpectationSchema: JsonSchema = objectSchema(\n {\n status: opensteerRequestPlanStatusSchema,\n contentType: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerRequestPlanResponseExpectation\",\n required: [\"status\"],\n },\n);\n\nexport const opensteerRequestFailurePolicyHeaderMatchSchema: JsonSchema = objectSchema(\n {\n name: stringSchema({ minLength: 1 }),\n valueIncludes: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerRequestFailurePolicyHeaderMatch\",\n required: [\"name\", \"valueIncludes\"],\n },\n);\n\nexport const opensteerRequestFailurePolicySchema: JsonSchema = objectSchema(\n {\n statusCodes: arraySchema(integerSchema({ minimum: 100, maximum: 599 }), {\n minItems: 1,\n uniqueItems: true,\n }),\n finalUrlIncludes: arraySchema(stringSchema({ minLength: 1 }), {\n minItems: 1,\n uniqueItems: true,\n }),\n responseHeaders: arraySchema(opensteerRequestFailurePolicyHeaderMatchSchema, {\n minItems: 1,\n }),\n responseBodyIncludes: arraySchema(stringSchema({ minLength: 1 }), {\n minItems: 1,\n uniqueItems: true,\n }),\n },\n {\n title: \"OpensteerRequestFailurePolicy\",\n },\n);\n\nexport const opensteerRequestRetryBackoffPolicySchema: JsonSchema = objectSchema(\n {\n strategy: enumSchema([\"fixed\", \"exponential\"] as const),\n delayMs: integerSchema({ minimum: 0 }),\n maxDelayMs: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerRequestRetryBackoffPolicy\",\n required: [\"delayMs\"],\n },\n);\n\nexport const opensteerRequestRetryPolicySchema: JsonSchema = objectSchema(\n {\n maxRetries: integerSchema({ minimum: 0 }),\n backoff: opensteerRequestRetryBackoffPolicySchema,\n respectRetryAfter: { type: \"boolean\" },\n failurePolicy: opensteerRequestFailurePolicySchema,\n },\n {\n title: \"OpensteerRequestRetryPolicy\",\n required: [\"maxRetries\"],\n },\n);\n\nexport const opensteerRequestPlanAuthSchema: JsonSchema = objectSchema(\n {\n strategy: enumSchema([\"session-cookie\", \"bearer-token\", \"api-key\", \"custom\"] as const),\n failurePolicy: opensteerRequestFailurePolicySchema,\n description: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerRequestPlanAuth\",\n required: [\"strategy\"],\n },\n);\n\nexport const opensteerRequestPlanPayloadSchema: JsonSchema = objectSchema(\n {\n transport: opensteerRequestPlanTransportSchema,\n endpoint: opensteerRequestPlanEndpointSchema,\n parameters: arraySchema(opensteerRequestPlanParameterSchema),\n body: opensteerRequestPlanBodySchema,\n response: opensteerRequestPlanResponseExpectationSchema,\n retryPolicy: opensteerRequestRetryPolicySchema,\n auth: opensteerRequestPlanAuthSchema,\n },\n {\n title: \"OpensteerRequestPlanPayload\",\n required: [\"transport\", \"endpoint\"],\n },\n);\n\nexport const opensteerRegistryProvenanceSchema: JsonSchema = objectSchema(\n {\n source: stringSchema({ minLength: 1 }),\n sourceId: stringSchema({ minLength: 1 }),\n capturedAt: integerSchema({ minimum: 0 }),\n notes: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerRegistryProvenance\",\n required: [\"source\"],\n },\n);\n\nexport const opensteerRequestPlanFreshnessSchema: JsonSchema = objectSchema(\n {\n lastValidatedAt: integerSchema({ minimum: 0 }),\n staleAt: integerSchema({ minimum: 0 }),\n expiresAt: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerRequestPlanFreshness\",\n },\n);\n\nexport const opensteerRequestPlanRecordSchema: JsonSchema = objectSchema(\n {\n id: stringSchema({ minLength: 1 }),\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n createdAt: integerSchema({ minimum: 0 }),\n updatedAt: integerSchema({ minimum: 0 }),\n contentHash: stringSchema({ minLength: 1 }),\n tags: arraySchema(stringSchema({ minLength: 1 }), {\n uniqueItems: true,\n }),\n provenance: opensteerRegistryProvenanceSchema,\n freshness: opensteerRequestPlanFreshnessSchema,\n payload: opensteerRequestPlanPayloadSchema,\n },\n {\n title: \"OpensteerRequestPlanRecord\",\n required: [\"id\", \"key\", \"version\", \"createdAt\", \"updatedAt\", \"contentHash\", \"tags\", \"payload\"],\n },\n);\n\nconst jsonValueSchema: JsonSchema = defineSchema({\n title: \"JsonValue\",\n});\n\nexport const opensteerRequestBodyInputSchema: JsonSchema = oneOfSchema(\n [\n objectSchema(\n {\n json: jsonValueSchema,\n contentType: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerJsonRequestBodyInput\",\n required: [\"json\"],\n },\n ),\n objectSchema(\n {\n text: stringSchema(),\n contentType: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerTextRequestBodyInput\",\n required: [\"text\"],\n },\n ),\n objectSchema(\n {\n base64: stringSchema(),\n contentType: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerBase64RequestBodyInput\",\n required: [\"base64\"],\n },\n ),\n ],\n {\n title: \"OpensteerRequestBodyInput\",\n },\n);\n\nexport const opensteerNetworkQueryInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n recordId: stringSchema({ minLength: 1 }),\n requestId: stringSchema({ minLength: 1 }),\n capture: stringSchema({ minLength: 1 }),\n tag: stringSchema({ minLength: 1 }),\n url: stringSchema({ minLength: 1 }),\n hostname: stringSchema({ minLength: 1 }),\n path: stringSchema({ minLength: 1 }),\n method: stringSchema({ minLength: 1 }),\n status: oneOfSchema([\n integerSchema({ minimum: 100, maximum: 599 }),\n stringSchema({ minLength: 1 }),\n ]),\n resourceType: networkResourceTypeSchema,\n includeBodies: { type: \"boolean\" },\n json: { type: \"boolean\" },\n before: stringSchema({ minLength: 1 }),\n after: stringSchema({ minLength: 1 }),\n limit: integerSchema({ minimum: 1, maximum: 1000 }),\n },\n {\n title: \"OpensteerNetworkQueryInput\",\n },\n);\n\nconst opensteerGraphqlSummarySchema: JsonSchema = objectSchema(\n {\n operationType: enumSchema([\"query\", \"mutation\", \"subscription\", \"unknown\"] as const),\n operationName: stringSchema({ minLength: 1 }),\n persisted: { type: \"boolean\" },\n },\n {\n title: \"OpensteerGraphqlSummary\",\n },\n);\n\nconst opensteerNetworkBodySummarySchema: JsonSchema = objectSchema(\n {\n bytes: integerSchema({ minimum: 0 }),\n contentType: stringSchema({ minLength: 1 }),\n streaming: { type: \"boolean\" },\n },\n {\n title: \"OpensteerNetworkBodySummary\",\n },\n);\n\nexport const opensteerNetworkSummaryRecordSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n capture: stringSchema({ minLength: 1 }),\n savedAt: integerSchema({ minimum: 0 }),\n kind: enumSchema([\"http\", \"websocket\", \"event-stream\"] as const),\n method: stringSchema({ minLength: 1 }),\n status: integerSchema({ minimum: 100, maximum: 599 }),\n resourceType: networkResourceTypeSchema,\n url: stringSchema({ minLength: 1 }),\n request: opensteerNetworkBodySummarySchema,\n response: opensteerNetworkBodySummarySchema,\n graphql: opensteerGraphqlSummarySchema,\n websocket: objectSchema(\n {\n subprotocol: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerWebsocketSummary\",\n },\n ),\n },\n {\n title: \"OpensteerNetworkSummaryRecord\",\n required: [\"recordId\", \"kind\", \"method\", \"resourceType\", \"url\"],\n },\n);\n\nexport const opensteerNetworkQueryOutputSchema: JsonSchema = objectSchema(\n {\n records: arraySchema(opensteerNetworkSummaryRecordSchema),\n },\n {\n title: \"OpensteerNetworkQueryOutput\",\n required: [\"records\"],\n },\n);\n\nexport const opensteerNetworkDetailInputSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n probe: { type: \"boolean\" },\n },\n {\n title: \"OpensteerNetworkDetailInput\",\n required: [\"recordId\"],\n },\n);\n\nconst opensteerParsedCookieSchema: JsonSchema = objectSchema(\n {\n name: stringSchema({ minLength: 1 }),\n value: stringSchema(),\n },\n {\n title: \"OpensteerParsedCookie\",\n required: [\"name\", \"value\"],\n },\n);\n\nconst opensteerStructuredBodyPreviewSchema: JsonSchema = objectSchema(\n {\n contentType: stringSchema({ minLength: 1 }),\n bytes: integerSchema({ minimum: 0 }),\n truncated: { type: \"boolean\" },\n data: oneOfSchema([jsonValueSchema, stringSchema()]),\n note: stringSchema(),\n },\n {\n title: \"OpensteerStructuredBodyPreview\",\n required: [\"bytes\", \"truncated\"],\n },\n);\n\nconst opensteerNetworkRedirectHopSchema: JsonSchema = objectSchema(\n {\n method: stringSchema({ minLength: 1 }),\n status: integerSchema({ minimum: 100, maximum: 599 }),\n url: stringSchema({ minLength: 1 }),\n location: stringSchema({ minLength: 1 }),\n setCookie: arraySchema(stringSchema()),\n },\n {\n title: \"OpensteerNetworkRedirectHop\",\n required: [\"method\", \"url\"],\n },\n);\n\nconst opensteerReplayAttemptSchema: JsonSchema = objectSchema(\n {\n transport: transportKindSchema,\n status: integerSchema({ minimum: 100, maximum: 599 }),\n ok: { type: \"boolean\" },\n durationMs: integerSchema({ minimum: 0 }),\n note: stringSchema(),\n error: stringSchema(),\n },\n {\n title: \"OpensteerReplayAttempt\",\n required: [\"transport\", \"ok\", \"durationMs\"],\n },\n);\n\nexport const opensteerNetworkDetailOutputSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n capture: stringSchema({ minLength: 1 }),\n savedAt: integerSchema({ minimum: 0 }),\n summary: opensteerNetworkSummaryRecordSchema,\n requestHeaders: arraySchema(headerEntrySchema),\n responseHeaders: arraySchema(headerEntrySchema),\n cookiesSent: arraySchema(opensteerParsedCookieSchema),\n requestBody: opensteerStructuredBodyPreviewSchema,\n responseBody: opensteerStructuredBodyPreviewSchema,\n graphql: objectSchema(\n {\n operationType: enumSchema([\"query\", \"mutation\", \"subscription\", \"unknown\"] as const),\n operationName: stringSchema({ minLength: 1 }),\n persisted: { type: \"boolean\" },\n variables: jsonValueSchema,\n },\n {\n title: \"OpensteerGraphqlDetail\",\n },\n ),\n redirectChain: arraySchema(opensteerNetworkRedirectHopSchema),\n notes: arraySchema(stringSchema()),\n transportProbe: objectSchema(\n {\n recommended: transportKindSchema,\n attempts: arraySchema(opensteerReplayAttemptSchema),\n },\n {\n title: \"OpensteerTransportProbeResult\",\n required: [\"attempts\"],\n },\n ),\n },\n {\n title: \"OpensteerNetworkDetailOutput\",\n required: [\"recordId\", \"summary\", \"requestHeaders\", \"responseHeaders\"],\n },\n);\n\nexport const opensteerNetworkReplayInputSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n query: opensteerRequestScalarMapSchema,\n headers: opensteerRequestScalarMapSchema,\n body: opensteerRequestBodyInputSchema,\n variables: jsonValueSchema,\n },\n {\n title: \"OpensteerNetworkReplayInput\",\n required: [\"recordId\"],\n },\n);\n\nexport let opensteerNetworkReplayOutputSchema: JsonSchema;\n\nconst opensteerSessionFetchTransportSchema: JsonSchema = enumSchema(\n [\"auto\", \"direct\", \"matched-tls\", \"context\", \"page\"] as const,\n {\n title: \"OpensteerSessionFetchTransport\",\n },\n);\n\nexport const opensteerSessionFetchInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n url: stringSchema({ minLength: 1 }),\n method: stringSchema({ minLength: 1 }),\n query: opensteerRequestScalarMapSchema,\n headers: opensteerRequestScalarMapSchema,\n body: opensteerRequestBodyInputSchema,\n transport: opensteerSessionFetchTransportSchema,\n cookies: { type: \"boolean\" },\n followRedirects: { type: \"boolean\" },\n },\n {\n title: \"OpensteerSessionFetchInput\",\n required: [\"url\"],\n },\n);\n\nexport let opensteerSessionFetchOutputSchema: JsonSchema;\n\nexport const opensteerCookieQueryInputSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerCookieQueryInput\",\n },\n);\n\nexport const opensteerCookieQueryOutputSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n cookies: arraySchema(cookieRecordSchema),\n },\n {\n title: \"OpensteerCookieQueryOutput\",\n required: [\"cookies\"],\n },\n);\n\nconst opensteerStorageDomainSnapshotSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n localStorage: arraySchema(storageEntrySchema),\n sessionStorage: arraySchema(storageEntrySchema),\n },\n {\n title: \"OpensteerStorageDomainSnapshot\",\n required: [\"domain\", \"localStorage\", \"sessionStorage\"],\n },\n);\n\nexport const opensteerStorageQueryInputSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerStorageQueryInput\",\n },\n);\n\nexport const opensteerStorageQueryOutputSchema: JsonSchema = objectSchema(\n {\n domains: arraySchema(opensteerStorageDomainSnapshotSchema),\n },\n {\n title: \"OpensteerStorageQueryOutput\",\n required: [\"domains\"],\n },\n);\n\nconst opensteerHiddenFieldSchema: JsonSchema = objectSchema(\n {\n path: stringSchema({ minLength: 1 }),\n name: stringSchema({ minLength: 1 }),\n value: stringSchema(),\n },\n {\n title: \"OpensteerHiddenField\",\n required: [\"path\", \"name\", \"value\"],\n },\n);\n\nconst opensteerStateDomainSnapshotSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n cookies: arraySchema(cookieRecordSchema),\n hiddenFields: arraySchema(opensteerHiddenFieldSchema),\n localStorage: arraySchema(storageEntrySchema),\n sessionStorage: arraySchema(storageEntrySchema),\n globals: recordSchema(jsonValueSchema),\n },\n {\n title: \"OpensteerStateDomainSnapshot\",\n required: [\"domain\", \"cookies\", \"hiddenFields\", \"localStorage\", \"sessionStorage\"],\n },\n);\n\nexport const opensteerStateQueryInputSchema: JsonSchema = objectSchema(\n {\n domain: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerStateQueryInput\",\n },\n);\n\nexport const opensteerStateQueryOutputSchema: JsonSchema = objectSchema(\n {\n domains: arraySchema(opensteerStateDomainSnapshotSchema),\n },\n {\n title: \"OpensteerStateQueryOutput\",\n required: [\"domains\"],\n },\n);\n\nexport const opensteerNetworkTagInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n recordId: stringSchema({ minLength: 1 }),\n requestId: stringSchema({ minLength: 1 }),\n capture: stringSchema({ minLength: 1 }),\n tag: stringSchema({ minLength: 1 }),\n url: stringSchema({ minLength: 1 }),\n hostname: stringSchema({ minLength: 1 }),\n path: stringSchema({ minLength: 1 }),\n method: stringSchema({ minLength: 1 }),\n status: stringSchema({ minLength: 1 }),\n resourceType: networkResourceTypeSchema,\n },\n {\n title: \"OpensteerNetworkTagInput\",\n required: [\"tag\"],\n },\n);\n\nexport const opensteerNetworkTagOutputSchema: JsonSchema = objectSchema(\n {\n taggedCount: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerNetworkTagOutput\",\n required: [\"taggedCount\"],\n },\n);\n\nexport const opensteerNetworkClearInputSchema: JsonSchema = objectSchema(\n {\n capture: stringSchema({ minLength: 1 }),\n tag: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerNetworkClearInput\",\n },\n);\n\nexport const opensteerNetworkClearOutputSchema: JsonSchema = objectSchema(\n {\n clearedCount: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerNetworkClearOutput\",\n required: [\"clearedCount\"],\n },\n);\n\nexport const opensteerWriteRequestPlanInputSchema: JsonSchema = objectSchema(\n {\n id: stringSchema({ minLength: 1 }),\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n tags: arraySchema(stringSchema({ minLength: 1 }), {\n uniqueItems: true,\n }),\n provenance: opensteerRegistryProvenanceSchema,\n freshness: opensteerRequestPlanFreshnessSchema,\n payload: opensteerRequestPlanPayloadSchema,\n },\n {\n title: \"OpensteerWriteRequestPlanInput\",\n required: [\"key\", \"version\", \"payload\"],\n },\n);\n\nexport const opensteerGetRequestPlanInputSchema: JsonSchema = objectSchema(\n {\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerGetRequestPlanInput\",\n required: [\"key\"],\n },\n);\n\nexport const opensteerListRequestPlansInputSchema: JsonSchema = objectSchema(\n {\n key: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerListRequestPlansInput\",\n },\n);\n\nexport const opensteerListRequestPlansOutputSchema: JsonSchema = objectSchema(\n {\n plans: arraySchema(opensteerRequestPlanRecordSchema),\n },\n {\n title: \"OpensteerListRequestPlansOutput\",\n required: [\"plans\"],\n },\n);\n\nexport const opensteerRequestExecuteInputSchema: JsonSchema = objectSchema(\n {\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n cookieJar: stringSchema({ minLength: 1 }),\n params: opensteerRequestScalarMapSchema,\n query: opensteerRequestScalarMapSchema,\n headers: opensteerRequestScalarMapSchema,\n bodyVars: opensteerRequestScalarMapSchema,\n body: opensteerRequestBodyInputSchema,\n validateResponse: { type: \"boolean\" },\n },\n {\n title: \"OpensteerRequestExecuteInput\",\n required: [\"key\"],\n },\n);\n\nexport const opensteerRawRequestInputSchema: JsonSchema = objectSchema(\n {\n transport: transportKindSchema,\n pageRef: pageRefSchema,\n cookieJar: stringSchema({ minLength: 1 }),\n url: stringSchema({ minLength: 1 }),\n method: stringSchema({ minLength: 1 }),\n headers: arraySchema(headerEntrySchema),\n body: opensteerRequestBodyInputSchema,\n followRedirects: { type: \"boolean\" },\n },\n {\n title: \"OpensteerRawRequestInput\",\n required: [\"url\"],\n },\n);\n\nexport const opensteerRequestTransportResultSchema: JsonSchema = objectSchema(\n {\n method: stringSchema({ minLength: 1 }),\n url: stringSchema({ minLength: 1 }),\n headers: arraySchema(headerEntrySchema),\n body: bodyPayloadSchema,\n },\n {\n title: \"OpensteerRequestTransportResult\",\n required: [\"method\", \"url\", \"headers\"],\n },\n);\n\nexport const opensteerRequestResponseResultSchema: JsonSchema = objectSchema(\n {\n url: stringSchema({ minLength: 1 }),\n status: integerSchema({ minimum: 100, maximum: 599 }),\n statusText: stringSchema(),\n headers: arraySchema(headerEntrySchema),\n body: bodyPayloadSchema,\n redirected: { type: \"boolean\" },\n },\n {\n title: \"OpensteerRequestResponseResult\",\n required: [\"url\", \"status\", \"statusText\", \"headers\", \"redirected\"],\n },\n);\n\nopensteerNetworkReplayOutputSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n transport: transportKindSchema,\n attempts: arraySchema(opensteerReplayAttemptSchema),\n response: opensteerRequestResponseResultSchema,\n data: oneOfSchema([jsonValueSchema, stringSchema()]),\n note: stringSchema(),\n },\n {\n title: \"OpensteerNetworkReplayOutput\",\n required: [\"recordId\", \"attempts\"],\n },\n);\n\nopensteerSessionFetchOutputSchema = objectSchema(\n {\n transport: transportKindSchema,\n attempts: arraySchema(opensteerReplayAttemptSchema),\n response: opensteerRequestResponseResultSchema,\n data: oneOfSchema([jsonValueSchema, stringSchema()]),\n note: stringSchema(),\n },\n {\n title: \"OpensteerSessionFetchOutput\",\n required: [\"attempts\"],\n },\n);\n\nexport const opensteerRequestExecuteOutputSchema: JsonSchema = objectSchema(\n {\n plan: objectSchema(\n {\n id: stringSchema({ minLength: 1 }),\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerResolvedRequestPlanRef\",\n required: [\"id\", \"key\", \"version\"],\n },\n ),\n request: opensteerRequestTransportResultSchema,\n response: opensteerRequestResponseResultSchema,\n recovery: objectSchema(\n {\n attempted: { type: \"boolean\" },\n succeeded: { type: \"boolean\" },\n matchedFailurePolicy: { type: \"boolean\" },\n },\n {\n title: \"OpensteerRequestRecoveryMetadata\",\n required: [\"attempted\", \"succeeded\"],\n },\n ),\n data: jsonValueSchema,\n },\n {\n title: \"OpensteerRequestExecuteOutput\",\n required: [\"plan\", \"request\", \"response\"],\n },\n);\n\nexport const opensteerRawRequestOutputSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n request: opensteerRequestTransportResultSchema,\n response: opensteerRequestResponseResultSchema,\n data: jsonValueSchema,\n },\n {\n title: \"OpensteerRawRequestOutput\",\n required: [\"recordId\", \"request\", \"response\"],\n },\n);\n\nexport const opensteerInferRequestPlanInputSchema: JsonSchema = objectSchema(\n {\n recordId: stringSchema({ minLength: 1 }),\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n transport: transportKindSchema,\n },\n {\n title: \"OpensteerInferRequestPlanInput\",\n required: [\"recordId\", \"key\", \"version\"],\n },\n);\n","import type { JsonSchema } from \"./json.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n recordSchema,\n stringSchema,\n} from \"./json.js\";\nimport { pageRefSchema, type PageRef } from \"./identity.js\";\nimport { storageSnapshotSchema, type StorageSnapshot } from \"./storage.js\";\n\nexport interface OpensteerStateSnapshot {\n readonly id: string;\n readonly capturedAt: number;\n readonly pageRef?: PageRef;\n readonly url?: string;\n readonly cookies?: readonly {\n readonly name: string;\n readonly value: string;\n readonly domain: string;\n readonly path: string;\n readonly secure: boolean;\n readonly httpOnly: boolean;\n readonly sameSite?: \"strict\" | \"lax\" | \"none\";\n readonly priority?: \"low\" | \"medium\" | \"high\";\n readonly partitionKey?: string;\n readonly session: boolean;\n readonly expiresAt?: number | null;\n }[];\n readonly storage?: StorageSnapshot;\n readonly hiddenFields?: readonly {\n readonly path: string;\n readonly name: string;\n readonly value: string;\n }[];\n readonly globals?: Readonly<Record<string, unknown>>;\n}\n\nexport interface OpensteerStateDelta {\n readonly beforeStateId?: string;\n readonly afterStateId?: string;\n readonly cookiesChanged: readonly string[];\n readonly storageChanged: readonly string[];\n readonly hiddenFieldsChanged: readonly string[];\n readonly globalsChanged: readonly string[];\n}\n\nconst opensteerStateSnapshotCookieSchema: JsonSchema = objectSchema(\n {\n name: stringSchema({ minLength: 1 }),\n value: stringSchema(),\n domain: stringSchema({ minLength: 1 }),\n path: stringSchema({ minLength: 1 }),\n secure: { type: \"boolean\" },\n httpOnly: { type: \"boolean\" },\n sameSite: enumSchema([\"strict\", \"lax\", \"none\"] as const),\n priority: enumSchema([\"low\", \"medium\", \"high\"] as const),\n partitionKey: stringSchema({ minLength: 1 }),\n session: { type: \"boolean\" },\n expiresAt: oneOfSchema([integerSchema({ minimum: 0 }), { type: \"null\" }]),\n },\n {\n title: \"OpensteerStateSnapshotCookie\",\n required: [\"name\", \"value\", \"domain\", \"path\", \"secure\", \"httpOnly\", \"session\"],\n },\n);\n\nexport const opensteerStateSnapshotSchema: JsonSchema = objectSchema(\n {\n id: stringSchema({ minLength: 1 }),\n capturedAt: integerSchema({ minimum: 0 }),\n pageRef: pageRefSchema,\n url: stringSchema({ minLength: 1 }),\n cookies: arraySchema(opensteerStateSnapshotCookieSchema),\n storage: storageSnapshotSchema,\n hiddenFields: arraySchema(\n objectSchema(\n {\n path: stringSchema({ minLength: 1 }),\n name: stringSchema({ minLength: 1 }),\n value: stringSchema(),\n },\n {\n title: \"OpensteerStateSnapshotHiddenField\",\n required: [\"path\", \"name\", \"value\"],\n },\n ),\n ),\n globals: recordSchema({}, { title: \"OpensteerStateSnapshotGlobals\" }),\n },\n {\n title: \"OpensteerStateSnapshot\",\n required: [\"id\", \"capturedAt\"],\n },\n);\n\nexport const opensteerStateDeltaSchema: JsonSchema = objectSchema(\n {\n beforeStateId: stringSchema({ minLength: 1 }),\n afterStateId: stringSchema({ minLength: 1 }),\n cookiesChanged: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n storageChanged: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n hiddenFieldsChanged: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n globalsChanged: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n },\n {\n title: \"OpensteerStateDelta\",\n required: [\"cookiesChanged\", \"storageChanged\", \"hiddenFieldsChanged\", \"globalsChanged\"],\n },\n);\n","export type {\n ScreenshotFormat,\n HtmlSnapshot,\n DomSnapshotNode,\n ShadowDomSnapshotMode,\n DomSnapshot,\n HitTestResult,\n} from \"@opensteer/browser-core\";\n\nexport { findDomSnapshotNode, findDomSnapshotNodeByRef } from \"@opensteer/browser-core\";\n\nimport type { DocumentEpoch, DocumentRef, FrameRef, PageRef } from \"./identity.js\";\nimport {\n documentEpochSchema,\n documentRefSchema,\n frameRefSchema,\n nodeRefSchema,\n pageRefSchema,\n} from \"./identity.js\";\nimport type { ExternalBinaryLocation } from \"./binary-location.js\";\nimport { externalBinaryLocationSchema } from \"./binary-location.js\";\nimport type { CoordinateSpace, Rect, Size } from \"./geometry.js\";\nimport {\n coordinateSpaceSchema,\n pointSchema,\n quadSchema,\n rectSchema,\n sizeSchema,\n} from \"./geometry.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nexport interface ScreenshotArtifact {\n readonly pageRef: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n readonly payload: ExternalBinaryLocation;\n readonly format: \"png\" | \"jpeg\" | \"webp\";\n readonly size: Size;\n readonly coordinateSpace: CoordinateSpace;\n readonly clip?: Rect;\n}\n\nexport const screenshotFormatSchema: JsonSchema = enumSchema([\"png\", \"jpeg\", \"webp\"] as const, {\n title: \"ScreenshotFormat\",\n});\n\nexport const screenshotArtifactSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n payload: externalBinaryLocationSchema,\n format: screenshotFormatSchema,\n size: sizeSchema,\n coordinateSpace: coordinateSpaceSchema,\n clip: rectSchema,\n },\n {\n title: \"ScreenshotArtifact\",\n required: [\"pageRef\", \"payload\", \"format\", \"size\", \"coordinateSpace\"],\n },\n);\n\nexport const htmlSnapshotSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n url: stringSchema(),\n capturedAt: integerSchema({ minimum: 0 }),\n html: stringSchema(),\n },\n {\n title: \"HtmlSnapshot\",\n required: [\"pageRef\", \"frameRef\", \"documentRef\", \"documentEpoch\", \"url\", \"capturedAt\", \"html\"],\n },\n);\n\nexport const domSnapshotNodeSchema: JsonSchema = objectSchema(\n {\n snapshotNodeId: integerSchema({ minimum: 0 }),\n nodeRef: nodeRefSchema,\n parentSnapshotNodeId: integerSchema({ minimum: 0 }),\n childSnapshotNodeIds: arraySchema(integerSchema({ minimum: 0 })),\n shadowRootType: enumSchema([\"open\", \"closed\", \"user-agent\"] as const),\n shadowHostNodeRef: nodeRefSchema,\n contentDocumentRef: documentRefSchema,\n nodeType: integerSchema({ minimum: 0 }),\n nodeName: stringSchema(),\n nodeValue: stringSchema(),\n textContent: stringSchema(),\n computedStyle: objectSchema(\n {\n display: stringSchema(),\n visibility: stringSchema(),\n opacity: stringSchema(),\n position: stringSchema(),\n cursor: stringSchema(),\n overflowX: stringSchema(),\n overflowY: stringSchema(),\n },\n {\n required: [],\n },\n ),\n attributes: arraySchema(\n objectSchema(\n {\n name: stringSchema(),\n value: stringSchema(),\n },\n {\n required: [\"name\", \"value\"],\n },\n ),\n ),\n layout: objectSchema(\n {\n rect: rectSchema,\n quad: quadSchema,\n paintOrder: integerSchema({ minimum: 0 }),\n },\n {\n required: [],\n },\n ),\n },\n {\n title: \"DomSnapshotNode\",\n required: [\n \"snapshotNodeId\",\n \"childSnapshotNodeIds\",\n \"nodeType\",\n \"nodeName\",\n \"nodeValue\",\n \"attributes\",\n ],\n },\n);\n\nexport const shadowDomSnapshotModeSchema: JsonSchema = enumSchema(\n [\"flattened\", \"preserved\", \"unsupported\"] as const,\n {\n title: \"ShadowDomSnapshotMode\",\n },\n);\n\nexport const domSnapshotSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n parentDocumentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n url: stringSchema(),\n capturedAt: integerSchema({ minimum: 0 }),\n rootSnapshotNodeId: integerSchema({ minimum: 0 }),\n shadowDomMode: shadowDomSnapshotModeSchema,\n geometryCoordinateSpace: coordinateSpaceSchema,\n nodes: arraySchema(domSnapshotNodeSchema),\n },\n {\n title: \"DomSnapshot\",\n required: [\n \"pageRef\",\n \"frameRef\",\n \"documentRef\",\n \"documentEpoch\",\n \"url\",\n \"capturedAt\",\n \"rootSnapshotNodeId\",\n \"shadowDomMode\",\n \"nodes\",\n ],\n },\n);\n\nexport const hitTestResultSchema: JsonSchema = objectSchema(\n {\n inputPoint: pointSchema,\n inputCoordinateSpace: coordinateSpaceSchema,\n resolvedPoint: pointSchema,\n resolvedCoordinateSpace: coordinateSpaceSchema,\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n nodeRef: nodeRefSchema,\n targetQuad: quadSchema,\n obscured: {\n type: \"boolean\",\n },\n pointerEventsSkipped: {\n type: \"boolean\",\n },\n },\n {\n title: \"HitTestResult\",\n required: [\n \"inputPoint\",\n \"inputCoordinateSpace\",\n \"resolvedPoint\",\n \"resolvedCoordinateSpace\",\n \"pageRef\",\n \"frameRef\",\n \"documentRef\",\n \"documentEpoch\",\n \"obscured\",\n \"pointerEventsSkipped\",\n ],\n },\n);\n","export type { ConsoleLevel } from \"@opensteer/browser-core\";\n\nexport type { PageCreatedStepEvent as PageCreatedEvent } from \"@opensteer/browser-core\";\nexport type { PopupOpenedStepEvent as PopupOpenedEvent } from \"@opensteer/browser-core\";\nexport type { PageClosedStepEvent as PageClosedEvent } from \"@opensteer/browser-core\";\nexport type { DialogOpenedStepEvent as DialogOpenedEvent } from \"@opensteer/browser-core\";\nexport type { DownloadStartedStepEvent as DownloadStartedEvent } from \"@opensteer/browser-core\";\nexport type { DownloadFinishedStepEvent as DownloadFinishedEvent } from \"@opensteer/browser-core\";\nexport type { ChooserOpenedStepEvent as ChooserOpenedEvent } from \"@opensteer/browser-core\";\nexport type { WorkerCreatedStepEvent as WorkerCreatedEvent } from \"@opensteer/browser-core\";\nexport type { WorkerDestroyedStepEvent as WorkerDestroyedEvent } from \"@opensteer/browser-core\";\nexport type { ConsoleStepEvent as ConsoleEvent } from \"@opensteer/browser-core\";\nexport type { PageErrorStepEvent as PageErrorEvent } from \"@opensteer/browser-core\";\nexport type { WebSocketOpenedStepEvent as WebSocketOpenedEvent } from \"@opensteer/browser-core\";\nexport type { WebSocketFrameStepEvent as WebSocketFrameEvent } from \"@opensteer/browser-core\";\nexport type { WebSocketClosedStepEvent as WebSocketClosedEvent } from \"@opensteer/browser-core\";\nexport type { EventStreamMessageStepEvent as EventStreamMessageEvent } from \"@opensteer/browser-core\";\nexport type { PausedStepEvent as PausedEvent } from \"@opensteer/browser-core\";\nexport type { ResumedStepEvent as ResumedEvent } from \"@opensteer/browser-core\";\nexport type { FrozenStepEvent as FrozenEvent } from \"@opensteer/browser-core\";\nexport type { StepEvent as OpensteerEvent } from \"@opensteer/browser-core\";\n\nimport {\n chooserRefSchema,\n dialogRefSchema,\n documentEpochSchema,\n documentRefSchema,\n downloadRefSchema,\n frameRefSchema,\n pageRefSchema,\n sessionRefSchema,\n workerRefSchema,\n} from \"./identity.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\n\nfunction eventBaseSchema(kind: string): Record<string, JsonSchema> {\n return {\n eventId: stringSchema(),\n kind: enumSchema([kind] as const),\n timestamp: integerSchema({ minimum: 0 }),\n sessionRef: sessionRefSchema,\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n };\n}\n\nconst dialogTypeSchema = enumSchema([\"alert\", \"beforeunload\", \"confirm\", \"prompt\"] as const);\nconst downloadStateSchema = enumSchema([\"completed\", \"canceled\", \"failed\"] as const);\nconst chooserTypeSchema = enumSchema([\"file\", \"select\"] as const);\nconst workerTypeSchema = enumSchema([\"dedicated\", \"shared\", \"service\"] as const);\nconst consoleLevelSchema = enumSchema([\"debug\", \"log\", \"info\", \"warn\", \"error\", \"trace\"] as const);\nconst websocketDirectionSchema = enumSchema([\"sent\", \"received\"] as const);\n\nconst pageCreatedEventSchema = objectSchema(eventBaseSchema(\"page-created\"), {\n title: \"PageCreatedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"pageRef\"],\n});\n\nconst popupOpenedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"popup-opened\"),\n openerPageRef: pageRefSchema,\n },\n {\n title: \"PopupOpenedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"pageRef\", \"openerPageRef\"],\n },\n);\n\nconst pageClosedEventSchema = objectSchema(eventBaseSchema(\"page-closed\"), {\n title: \"PageClosedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"pageRef\"],\n});\n\nconst dialogOpenedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"dialog-opened\"),\n dialogRef: dialogRefSchema,\n dialogType: dialogTypeSchema,\n message: stringSchema(),\n defaultValue: stringSchema(),\n },\n {\n title: \"DialogOpenedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"dialogRef\", \"dialogType\", \"message\"],\n },\n);\n\nconst downloadStartedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"download-started\"),\n downloadRef: downloadRefSchema,\n url: stringSchema(),\n suggestedFilename: stringSchema(),\n },\n {\n title: \"DownloadStartedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"downloadRef\", \"url\"],\n },\n);\n\nconst downloadFinishedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"download-finished\"),\n downloadRef: downloadRefSchema,\n state: downloadStateSchema,\n filePath: stringSchema(),\n },\n {\n title: \"DownloadFinishedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"downloadRef\", \"state\"],\n },\n);\n\nconst chooserOpenedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"chooser-opened\"),\n chooserRef: chooserRefSchema,\n chooserType: chooserTypeSchema,\n multiple: {\n type: \"boolean\",\n },\n options: arraySchema(\n objectSchema(\n {\n index: integerSchema({ minimum: 0 }),\n label: stringSchema(),\n value: stringSchema(),\n selected: {\n type: \"boolean\",\n },\n },\n {\n required: [\"index\", \"label\", \"value\", \"selected\"],\n },\n ),\n ),\n },\n {\n title: \"ChooserOpenedEvent\",\n required: [\n \"eventId\",\n \"kind\",\n \"timestamp\",\n \"sessionRef\",\n \"chooserRef\",\n \"chooserType\",\n \"multiple\",\n ],\n },\n);\n\nconst workerCreatedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"worker-created\"),\n workerRef: workerRefSchema,\n workerType: workerTypeSchema,\n url: stringSchema(),\n },\n {\n title: \"WorkerCreatedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"workerRef\", \"workerType\", \"url\"],\n },\n);\n\nconst workerDestroyedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"worker-destroyed\"),\n workerRef: workerRefSchema,\n workerType: workerTypeSchema,\n url: stringSchema(),\n },\n {\n title: \"WorkerDestroyedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"workerRef\", \"workerType\", \"url\"],\n },\n);\n\nconst consoleEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"console\"),\n level: consoleLevelSchema,\n text: stringSchema(),\n location: objectSchema(\n {\n url: stringSchema(),\n lineNumber: integerSchema({ minimum: 0 }),\n columnNumber: integerSchema({ minimum: 0 }),\n },\n {\n required: [],\n },\n ),\n },\n {\n title: \"ConsoleEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"level\", \"text\"],\n },\n);\n\nconst pageErrorEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"page-error\"),\n message: stringSchema(),\n stack: stringSchema(),\n },\n {\n title: \"PageErrorEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"message\"],\n },\n);\n\nconst websocketOpenedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"websocket-opened\"),\n socketId: stringSchema(),\n url: stringSchema(),\n },\n {\n title: \"WebSocketOpenedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"socketId\", \"url\"],\n },\n);\n\nconst websocketFrameEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"websocket-frame\"),\n socketId: stringSchema(),\n direction: websocketDirectionSchema,\n opcode: integerSchema({ minimum: 0 }),\n payloadPreview: stringSchema(),\n },\n {\n title: \"WebSocketFrameEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"socketId\", \"direction\"],\n },\n);\n\nconst websocketClosedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"websocket-closed\"),\n socketId: stringSchema(),\n code: integerSchema({ minimum: 0 }),\n reason: stringSchema(),\n },\n {\n title: \"WebSocketClosedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"socketId\"],\n },\n);\n\nconst eventStreamMessageEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"event-stream-message\"),\n streamId: stringSchema(),\n eventName: stringSchema(),\n dataPreview: stringSchema(),\n },\n {\n title: \"EventStreamMessageEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\", \"streamId\"],\n },\n);\n\nconst pausedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"paused\"),\n reason: stringSchema(),\n },\n {\n title: \"PausedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\"],\n },\n);\n\nconst resumedEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"resumed\"),\n reason: stringSchema(),\n },\n {\n title: \"ResumedEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\"],\n },\n);\n\nconst frozenEventSchema = objectSchema(\n {\n ...eventBaseSchema(\"frozen\"),\n reason: stringSchema(),\n },\n {\n title: \"FrozenEvent\",\n required: [\"eventId\", \"kind\", \"timestamp\", \"sessionRef\"],\n },\n);\n\nexport const opensteerEventSchema: JsonSchema = oneOfSchema(\n [\n pageCreatedEventSchema,\n popupOpenedEventSchema,\n pageClosedEventSchema,\n dialogOpenedEventSchema,\n downloadStartedEventSchema,\n downloadFinishedEventSchema,\n chooserOpenedEventSchema,\n workerCreatedEventSchema,\n workerDestroyedEventSchema,\n consoleEventSchema,\n pageErrorEventSchema,\n websocketOpenedEventSchema,\n websocketFrameEventSchema,\n websocketClosedEventSchema,\n eventStreamMessageEventSchema,\n pausedEventSchema,\n resumedEventSchema,\n frozenEventSchema,\n ],\n {\n title: \"OpensteerEvent\",\n },\n);\n","import type { DocumentEpoch, DocumentRef, FrameRef, PageRef, SessionRef } from \"./identity.js\";\nimport {\n documentEpochSchema,\n documentRefSchema,\n frameRefSchema,\n pageRefSchema,\n sessionRefSchema,\n} from \"./identity.js\";\nimport type { ExternalBinaryLocation } from \"./binary-location.js\";\nimport { externalBinaryLocationSchema } from \"./binary-location.js\";\nimport type { JsonSchema } from \"./json.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n stringSchema,\n} from \"./json.js\";\nimport type { HtmlSnapshot, DomSnapshot, ScreenshotArtifact } from \"./snapshots.js\";\nimport { domSnapshotSchema, htmlSnapshotSchema, screenshotArtifactSchema } from \"./snapshots.js\";\nimport type { CookieRecord, StorageSnapshot } from \"./storage.js\";\nimport { cookieRecordSchema, storageSnapshotSchema } from \"./storage.js\";\n\nexport type OpensteerArtifactKind =\n | \"screenshot\"\n | \"html-snapshot\"\n | \"dom-snapshot\"\n | \"cookies\"\n | \"storage-snapshot\"\n | \"script-source\";\n\nexport type ArtifactRelation = \"result\" | \"before\" | \"after\" | \"capture\" | \"evidence\" | \"snapshot\";\n\nexport type ArtifactExternalLocation = ExternalBinaryLocation;\n\nexport interface ArtifactProvenance {\n readonly sourceArtifactId?: string;\n readonly transform?: string;\n}\n\nexport interface ScriptSourceArtifactData {\n readonly source: \"inline\" | \"external\" | \"dynamic\" | \"worker\";\n readonly url?: string;\n readonly type?: string;\n readonly hash: string;\n readonly loadOrder: number;\n readonly content: string;\n}\n\nexport interface ArtifactInline<TData> {\n readonly delivery: \"inline\";\n readonly data: TData;\n}\n\ninterface ArtifactContext {\n readonly sessionRef?: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n}\n\ninterface OpensteerArtifactBase extends ArtifactContext {\n readonly artifactId: string;\n readonly kind: OpensteerArtifactKind;\n readonly createdAt: number;\n readonly provenance?: ArtifactProvenance;\n}\n\nexport interface ScreenshotArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"screenshot\";\n readonly payload: ArtifactInline<ScreenshotArtifact> | ArtifactExternalLocation;\n}\n\nexport interface HtmlSnapshotArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"html-snapshot\";\n readonly payload: ArtifactInline<HtmlSnapshot> | ArtifactExternalLocation;\n}\n\nexport interface DomSnapshotArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"dom-snapshot\";\n readonly payload: ArtifactInline<DomSnapshot> | ArtifactExternalLocation;\n}\n\nexport interface CookiesArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"cookies\";\n readonly payload: ArtifactInline<readonly CookieRecord[]> | ArtifactExternalLocation;\n}\n\nexport interface StorageSnapshotArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"storage-snapshot\";\n readonly payload: ArtifactInline<StorageSnapshot> | ArtifactExternalLocation;\n}\n\nexport interface ScriptSourceArtifactRecord extends OpensteerArtifactBase {\n readonly kind: \"script-source\";\n readonly payload: ArtifactInline<ScriptSourceArtifactData> | ArtifactExternalLocation;\n}\n\nexport type OpensteerArtifact =\n | ScreenshotArtifactRecord\n | HtmlSnapshotArtifactRecord\n | DomSnapshotArtifactRecord\n | CookiesArtifactRecord\n | StorageSnapshotArtifactRecord\n | ScriptSourceArtifactRecord;\n\nexport interface ArtifactReference {\n readonly artifactId: string;\n readonly kind: OpensteerArtifactKind;\n readonly relation: ArtifactRelation;\n}\n\nexport interface OpensteerArtifactReadInput {\n readonly artifactId: string;\n}\n\nexport interface OpensteerArtifactReadOutput {\n readonly artifact: OpensteerArtifact;\n}\n\nconst artifactKindSchema: JsonSchema = enumSchema(\n [\n \"screenshot\",\n \"html-snapshot\",\n \"dom-snapshot\",\n \"cookies\",\n \"storage-snapshot\",\n \"script-source\",\n ] as const,\n {\n title: \"OpensteerArtifactKind\",\n },\n);\n\nconst artifactRelationSchema: JsonSchema = enumSchema(\n [\"result\", \"before\", \"after\", \"capture\", \"evidence\", \"snapshot\"] as const,\n {\n title: \"ArtifactRelation\",\n },\n);\n\nfunction inlineArtifactPayloadSchema(dataSchema: JsonSchema, title: string): JsonSchema {\n return objectSchema(\n {\n delivery: enumSchema([\"inline\"] as const),\n data: dataSchema,\n },\n {\n title,\n required: [\"delivery\", \"data\"],\n },\n );\n}\n\nfunction artifactBaseSchema(kind: OpensteerArtifactKind): Record<string, JsonSchema> {\n return {\n artifactId: stringSchema(),\n kind: enumSchema([kind] as const),\n createdAt: integerSchema({ minimum: 0 }),\n provenance: objectSchema(\n {\n sourceArtifactId: stringSchema({ minLength: 1 }),\n transform: stringSchema({ minLength: 1 }),\n },\n {\n title: \"ArtifactProvenance\",\n },\n ),\n sessionRef: sessionRefSchema,\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n };\n}\n\nconst screenshotArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"screenshot\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(screenshotArtifactSchema, \"InlineScreenshotArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"ScreenshotArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nconst htmlSnapshotArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"html-snapshot\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(htmlSnapshotSchema, \"InlineHtmlSnapshotArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"HtmlSnapshotArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nconst domSnapshotArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"dom-snapshot\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(domSnapshotSchema, \"InlineDomSnapshotArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"DomSnapshotArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nconst cookiesArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"cookies\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(arraySchema(cookieRecordSchema), \"InlineCookiesArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"CookiesArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nconst storageSnapshotArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"storage-snapshot\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(storageSnapshotSchema, \"InlineStorageSnapshotArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"StorageSnapshotArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nexport const scriptSourceArtifactDataSchema: JsonSchema = objectSchema(\n {\n source: enumSchema([\"inline\", \"external\", \"dynamic\", \"worker\"] as const),\n url: stringSchema({ minLength: 1 }),\n type: stringSchema({ minLength: 1 }),\n hash: stringSchema({ minLength: 1 }),\n loadOrder: integerSchema({ minimum: 0 }),\n content: stringSchema(),\n },\n {\n title: \"ScriptSourceArtifactData\",\n required: [\"source\", \"hash\", \"loadOrder\", \"content\"],\n },\n);\n\nconst scriptSourceArtifactRecordSchema: JsonSchema = objectSchema(\n {\n ...artifactBaseSchema(\"script-source\"),\n payload: oneOfSchema([\n inlineArtifactPayloadSchema(scriptSourceArtifactDataSchema, \"InlineScriptSourceArtifact\"),\n externalBinaryLocationSchema,\n ]),\n },\n {\n title: \"ScriptSourceArtifactRecord\",\n required: [\"artifactId\", \"kind\", \"createdAt\", \"payload\"],\n },\n);\n\nexport const opensteerArtifactSchema: JsonSchema = oneOfSchema(\n [\n screenshotArtifactRecordSchema,\n htmlSnapshotArtifactRecordSchema,\n domSnapshotArtifactRecordSchema,\n cookiesArtifactRecordSchema,\n storageSnapshotArtifactRecordSchema,\n scriptSourceArtifactRecordSchema,\n ],\n {\n title: \"OpensteerArtifact\",\n },\n);\n\nexport const artifactReferenceSchema: JsonSchema = objectSchema(\n {\n artifactId: stringSchema(),\n kind: artifactKindSchema,\n relation: artifactRelationSchema,\n },\n {\n title: \"ArtifactReference\",\n required: [\"artifactId\", \"kind\", \"relation\"],\n },\n);\n\nexport const opensteerArtifactReadInputSchema: JsonSchema = objectSchema(\n {\n artifactId: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerArtifactReadInput\",\n required: [\"artifactId\"],\n },\n);\n\nexport const opensteerArtifactReadOutputSchema: JsonSchema = objectSchema(\n {\n artifact: opensteerArtifactSchema,\n },\n {\n title: \"OpensteerArtifactReadOutput\",\n required: [\"artifact\"],\n },\n);\n","import type { JsonSchema } from \"./json.js\";\nimport { enumSchema, integerSchema, objectSchema, stringSchema } from \"./json.js\";\nimport { pageRefSchema, type PageRef } from \"./identity.js\";\n\nexport type CaptchaType = \"recaptcha-v2\" | \"hcaptcha\" | \"turnstile\";\nexport type CaptchaProvider = \"2captcha\" | \"capsolver\";\n\nexport interface CaptchaDetectionResult {\n readonly type: CaptchaType;\n readonly siteKey: string;\n readonly pageUrl: string;\n}\n\nexport interface OpensteerCaptchaSolveInput {\n readonly provider: CaptchaProvider;\n readonly apiKey: string;\n readonly pageRef?: PageRef;\n readonly timeoutMs?: number;\n readonly type?: CaptchaType;\n readonly siteKey?: string;\n readonly pageUrl?: string;\n}\n\nexport interface OpensteerCaptchaSolveOutput {\n readonly captcha: CaptchaDetectionResult;\n readonly token: string;\n readonly injected: boolean;\n readonly provider: CaptchaProvider;\n}\n\nexport const captchaTypeSchema: JsonSchema = enumSchema(\n [\"recaptcha-v2\", \"hcaptcha\", \"turnstile\"] as const,\n {\n title: \"CaptchaType\",\n },\n);\n\nexport const captchaProviderSchema: JsonSchema = enumSchema([\"2captcha\", \"capsolver\"] as const, {\n title: \"CaptchaProvider\",\n});\n\nexport const captchaDetectionResultSchema: JsonSchema = objectSchema(\n {\n type: captchaTypeSchema,\n siteKey: stringSchema({ minLength: 1 }),\n pageUrl: stringSchema({ minLength: 1 }),\n },\n {\n title: \"CaptchaDetectionResult\",\n required: [\"type\", \"siteKey\", \"pageUrl\"],\n },\n);\n\nexport const opensteerCaptchaSolveInputSchema: JsonSchema = objectSchema(\n {\n provider: captchaProviderSchema,\n apiKey: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n timeoutMs: integerSchema({ minimum: 1 }),\n type: captchaTypeSchema,\n siteKey: stringSchema({ minLength: 1 }),\n pageUrl: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerCaptchaSolveInput\",\n required: [\"provider\", \"apiKey\"],\n },\n);\n\nexport const opensteerCaptchaSolveOutputSchema: JsonSchema = objectSchema(\n {\n captcha: captchaDetectionResultSchema,\n token: stringSchema({ minLength: 1 }),\n injected: { type: \"boolean\" },\n provider: captchaProviderSchema,\n },\n {\n title: \"OpensteerCaptchaSolveOutput\",\n required: [\"captcha\", \"token\", \"injected\", \"provider\"],\n },\n);\n","import {\n artifactReferenceSchema,\n opensteerArtifactSchema,\n type ArtifactReference,\n type OpensteerArtifact,\n} from \"./artifacts.js\";\nimport { opensteerEventSchema, type OpensteerEvent } from \"./events.js\";\nimport type { DocumentEpoch, DocumentRef, FrameRef, PageRef, SessionRef } from \"./identity.js\";\nimport {\n documentEpochSchema,\n documentRefSchema,\n frameRefSchema,\n pageRefSchema,\n sessionRefSchema,\n} from \"./identity.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\nimport { opensteerErrorSchema, type OpensteerError } from \"./errors.js\";\n\nexport type TraceOutcome = \"ok\" | \"error\";\n\nexport interface TraceContext {\n readonly sessionRef?: SessionRef;\n readonly pageRef?: PageRef;\n readonly frameRef?: FrameRef;\n readonly documentRef?: DocumentRef;\n readonly documentEpoch?: DocumentEpoch;\n}\n\nexport interface TraceRecord<TData = unknown> {\n readonly traceId: string;\n readonly stepId: string;\n readonly operation: string;\n readonly outcome: TraceOutcome;\n readonly startedAt: number;\n readonly completedAt: number;\n readonly durationMs: number;\n readonly context: TraceContext;\n readonly events: readonly OpensteerEvent[];\n readonly artifacts?: readonly ArtifactReference[];\n readonly data?: TData;\n readonly error?: OpensteerError;\n}\n\nexport interface TraceBundle<TData = unknown> {\n readonly trace: TraceRecord<TData>;\n readonly artifacts?: readonly OpensteerArtifact[];\n}\n\nexport const traceContextSchema: JsonSchema = objectSchema(\n {\n sessionRef: sessionRefSchema,\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n },\n {\n title: \"TraceContext\",\n },\n);\n\nexport function traceRecordSchema(dataSchema: JsonSchema = {}): JsonSchema {\n return objectSchema(\n {\n traceId: stringSchema(),\n stepId: stringSchema(),\n operation: stringSchema(),\n outcome: enumSchema([\"ok\", \"error\"] as const),\n startedAt: integerSchema({ minimum: 0 }),\n completedAt: integerSchema({ minimum: 0 }),\n durationMs: integerSchema({ minimum: 0 }),\n context: traceContextSchema,\n events: arraySchema(opensteerEventSchema),\n artifacts: arraySchema(artifactReferenceSchema),\n data: dataSchema,\n error: opensteerErrorSchema,\n },\n {\n title: \"TraceRecord\",\n required: [\n \"traceId\",\n \"stepId\",\n \"operation\",\n \"outcome\",\n \"startedAt\",\n \"completedAt\",\n \"durationMs\",\n \"context\",\n \"events\",\n ],\n },\n );\n}\n\nexport function traceBundleSchema(dataSchema: JsonSchema = {}): JsonSchema {\n return objectSchema(\n {\n trace: traceRecordSchema(dataSchema),\n artifacts: arraySchema(opensteerArtifactSchema),\n },\n {\n title: \"TraceBundle\",\n required: [\"trace\"],\n },\n );\n}\n","import type { OpensteerArtifact } from \"./artifacts.js\";\nimport { opensteerArtifactSchema } from \"./artifacts.js\";\nimport type { OpensteerCapability } from \"./capabilities.js\";\nimport { opensteerCapabilitySetSchema } from \"./capabilities.js\";\nimport type { OpensteerError } from \"./errors.js\";\nimport { opensteerErrorSchema } from \"./errors.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n literalSchema,\n objectSchema,\n oneOfSchema,\n stringSchema,\n type JsonSchema,\n} from \"./json.js\";\nimport type { TraceRecord } from \"./traces.js\";\nimport { traceRecordSchema } from \"./traces.js\";\nimport {\n OPENSTEER_PROTOCOL_NAME,\n OPENSTEER_PROTOCOL_VERSION,\n type OpensteerProtocolVersion,\n} from \"./version.js\";\n\nexport interface OpensteerRequestEnvelope<TInput> {\n readonly protocol: typeof OPENSTEER_PROTOCOL_NAME;\n readonly version: OpensteerProtocolVersion;\n readonly requestId: string;\n readonly operation: string;\n readonly sentAt: number;\n readonly input: TInput;\n}\n\nexport interface OpensteerSuccessEnvelope<TOutput> {\n readonly protocol: typeof OPENSTEER_PROTOCOL_NAME;\n readonly version: OpensteerProtocolVersion;\n readonly requestId: string;\n readonly operation: string;\n readonly status: \"ok\";\n readonly receivedAt: number;\n readonly data: TOutput;\n readonly trace?: TraceRecord<TOutput>;\n readonly artifacts?: readonly OpensteerArtifact[];\n readonly capabilities?: readonly OpensteerCapability[];\n}\n\nexport interface OpensteerErrorEnvelope {\n readonly protocol: typeof OPENSTEER_PROTOCOL_NAME;\n readonly version: OpensteerProtocolVersion;\n readonly requestId: string;\n readonly operation: string;\n readonly status: \"error\";\n readonly receivedAt: number;\n readonly error: OpensteerError;\n readonly trace?: TraceRecord<unknown>;\n readonly artifacts?: readonly OpensteerArtifact[];\n readonly capabilities?: readonly OpensteerCapability[];\n}\n\nexport type OpensteerResponseEnvelope<TOutput> =\n | OpensteerSuccessEnvelope<TOutput>\n | OpensteerErrorEnvelope;\n\nexport function createRequestEnvelope<TInput>(\n operation: string,\n input: TInput,\n options: {\n readonly requestId: string;\n readonly sentAt?: number;\n readonly version?: OpensteerProtocolVersion;\n },\n): OpensteerRequestEnvelope<TInput> {\n return {\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: options.version ?? OPENSTEER_PROTOCOL_VERSION,\n requestId: options.requestId,\n operation,\n sentAt: options.sentAt ?? Date.now(),\n input,\n };\n}\n\nexport function createSuccessEnvelope<TOutput>(\n request: Pick<OpensteerRequestEnvelope<unknown>, \"requestId\" | \"operation\" | \"version\">,\n data: TOutput,\n options: {\n readonly receivedAt?: number;\n readonly trace?: TraceRecord<TOutput>;\n readonly artifacts?: readonly OpensteerArtifact[];\n readonly capabilities?: readonly OpensteerCapability[];\n } = {},\n): OpensteerSuccessEnvelope<TOutput> {\n return {\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: request.version,\n requestId: request.requestId,\n operation: request.operation,\n status: \"ok\",\n receivedAt: options.receivedAt ?? Date.now(),\n data,\n ...(options.trace === undefined ? {} : { trace: options.trace }),\n ...(options.artifacts === undefined ? {} : { artifacts: options.artifacts }),\n ...(options.capabilities === undefined ? {} : { capabilities: options.capabilities }),\n };\n}\n\nexport function createErrorEnvelope(\n request: Pick<OpensteerRequestEnvelope<unknown>, \"requestId\" | \"operation\" | \"version\">,\n error: OpensteerError,\n options: {\n readonly receivedAt?: number;\n readonly trace?: TraceRecord<unknown>;\n readonly artifacts?: readonly OpensteerArtifact[];\n readonly capabilities?: readonly OpensteerCapability[];\n } = {},\n): OpensteerErrorEnvelope {\n return {\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: request.version,\n requestId: request.requestId,\n operation: request.operation,\n status: \"error\",\n receivedAt: options.receivedAt ?? Date.now(),\n error,\n ...(options.trace === undefined ? {} : { trace: options.trace }),\n ...(options.artifacts === undefined ? {} : { artifacts: options.artifacts }),\n ...(options.capabilities === undefined ? {} : { capabilities: options.capabilities }),\n };\n}\n\nexport function isErrorEnvelope<TOutput>(\n envelope: OpensteerResponseEnvelope<TOutput>,\n): envelope is OpensteerErrorEnvelope {\n return envelope.status === \"error\";\n}\n\nfunction operationFieldSchema(operation: string | undefined): JsonSchema {\n return operation === undefined ? stringSchema() : literalSchema(operation);\n}\n\nexport function requestEnvelopeSchema(inputSchema: JsonSchema, operation?: string): JsonSchema {\n return objectSchema(\n {\n protocol: literalSchema(OPENSTEER_PROTOCOL_NAME),\n version: literalSchema(OPENSTEER_PROTOCOL_VERSION),\n requestId: stringSchema(),\n operation: operationFieldSchema(operation),\n sentAt: integerSchema({ minimum: 0 }),\n input: inputSchema,\n },\n {\n title: \"OpensteerRequestEnvelope\",\n required: [\"protocol\", \"version\", \"requestId\", \"operation\", \"sentAt\", \"input\"],\n },\n );\n}\n\nexport function successEnvelopeSchema(dataSchema: JsonSchema, operation?: string): JsonSchema {\n return objectSchema(\n {\n protocol: literalSchema(OPENSTEER_PROTOCOL_NAME),\n version: literalSchema(OPENSTEER_PROTOCOL_VERSION),\n requestId: stringSchema(),\n operation: operationFieldSchema(operation),\n status: enumSchema([\"ok\"] as const),\n receivedAt: integerSchema({ minimum: 0 }),\n data: dataSchema,\n trace: traceRecordSchema(dataSchema),\n artifacts: arraySchema(opensteerArtifactSchema),\n capabilities: opensteerCapabilitySetSchema,\n },\n {\n title: \"OpensteerSuccessEnvelope\",\n required: [\"protocol\", \"version\", \"requestId\", \"operation\", \"status\", \"receivedAt\", \"data\"],\n },\n );\n}\n\nfunction errorEnvelopeSchema(operation?: string): JsonSchema {\n return objectSchema(\n {\n protocol: literalSchema(OPENSTEER_PROTOCOL_NAME),\n version: literalSchema(OPENSTEER_PROTOCOL_VERSION),\n requestId: stringSchema(),\n operation: operationFieldSchema(operation),\n status: enumSchema([\"error\"] as const),\n receivedAt: integerSchema({ minimum: 0 }),\n error: opensteerErrorSchema,\n trace: traceRecordSchema(),\n artifacts: arraySchema(opensteerArtifactSchema),\n capabilities: opensteerCapabilitySetSchema,\n },\n {\n title: \"OpensteerErrorEnvelope\",\n required: [\"protocol\", \"version\", \"requestId\", \"operation\", \"status\", \"receivedAt\", \"error\"],\n },\n );\n}\n\nexport const opensteerErrorEnvelopeSchema: JsonSchema = errorEnvelopeSchema();\n\nexport function responseEnvelopeSchema(dataSchema: JsonSchema, operation?: string): JsonSchema {\n return oneOfSchema(\n [successEnvelopeSchema(dataSchema, operation), errorEnvelopeSchema(operation)],\n {\n title: \"OpensteerResponseEnvelope\",\n },\n );\n}\n","import type { JsonSchema } from \"./json.js\";\nimport {\n arraySchema,\n enumSchema,\n integerSchema,\n objectSchema,\n oneOfSchema,\n recordSchema,\n stringSchema,\n} from \"./json.js\";\n\nexport interface OpensteerScriptBeautifyInput {\n readonly artifactId?: string;\n readonly content?: string;\n readonly persist?: boolean;\n}\n\nexport interface OpensteerScriptBeautifyOutput {\n readonly content: string;\n readonly artifactId?: string;\n readonly bytesBefore: number;\n readonly bytesAfter: number;\n}\n\nexport interface OpensteerScriptDeobfuscateInput {\n readonly artifactId?: string;\n readonly content?: string;\n readonly persist?: boolean;\n}\n\nexport interface OpensteerScriptDeobfuscateOutput {\n readonly content: string;\n readonly artifactId?: string;\n readonly transforms: readonly string[];\n readonly bytesBefore: number;\n readonly bytesAfter: number;\n}\n\nexport type SandboxFidelity = \"minimal\" | \"standard\" | \"full\";\nexport type SandboxAjaxMode = \"passthrough\" | \"capture\" | \"mock\";\n\nexport interface SandboxAjaxRoute {\n readonly urlPattern: string;\n readonly mode: SandboxAjaxMode;\n readonly mockResponse?: {\n readonly status: number;\n readonly headers?: Readonly<Record<string, string>>;\n readonly body?: string;\n };\n}\n\nexport interface OpensteerScriptSandboxInput {\n readonly artifactId?: string;\n readonly content?: string;\n readonly fidelity?: SandboxFidelity;\n readonly ajaxRoutes?: readonly SandboxAjaxRoute[];\n readonly cookies?: Readonly<Record<string, string>>;\n readonly globals?: Readonly<Record<string, unknown>>;\n readonly timeoutMs?: number;\n readonly clockMode?: \"real\" | \"manual\";\n}\n\nexport interface SandboxCapturedAjaxCall {\n readonly method: string;\n readonly url: string;\n readonly headers: Readonly<Record<string, string>>;\n readonly body?: string;\n readonly timestamp: number;\n}\n\nexport interface OpensteerScriptSandboxOutput {\n readonly result?: unknown;\n readonly capturedAjax: readonly SandboxCapturedAjaxCall[];\n readonly errors: readonly string[];\n readonly durationMs: number;\n}\n\nconst scriptTransformInputSchema = objectSchema(\n {\n artifactId: stringSchema({ minLength: 1 }),\n content: stringSchema(),\n persist: { type: \"boolean\" },\n },\n {\n title: \"OpensteerScriptTransformInput\",\n },\n);\n\nconst scriptTransformOutputSchema = objectSchema(\n {\n content: stringSchema(),\n artifactId: stringSchema({ minLength: 1 }),\n bytesBefore: integerSchema({ minimum: 0 }),\n bytesAfter: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerScriptTransformOutput\",\n required: [\"content\", \"bytesBefore\", \"bytesAfter\"],\n },\n);\n\nexport const opensteerScriptBeautifyInputSchema: JsonSchema = scriptTransformInputSchema;\n\nexport const opensteerScriptBeautifyOutputSchema: JsonSchema = scriptTransformOutputSchema;\n\nexport const opensteerScriptDeobfuscateInputSchema: JsonSchema = scriptTransformInputSchema;\n\nexport const opensteerScriptDeobfuscateOutputSchema: JsonSchema = objectSchema(\n {\n content: stringSchema(),\n artifactId: stringSchema({ minLength: 1 }),\n transforms: arraySchema(stringSchema({ minLength: 1 }), {\n uniqueItems: true,\n }),\n bytesBefore: integerSchema({ minimum: 0 }),\n bytesAfter: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerScriptDeobfuscateOutput\",\n required: [\"content\", \"transforms\", \"bytesBefore\", \"bytesAfter\"],\n },\n);\n\nexport const sandboxFidelitySchema: JsonSchema = enumSchema(\n [\"minimal\", \"standard\", \"full\"] as const,\n {\n title: \"SandboxFidelity\",\n },\n);\n\nexport const sandboxAjaxModeSchema: JsonSchema = enumSchema(\n [\"passthrough\", \"capture\", \"mock\"] as const,\n {\n title: \"SandboxAjaxMode\",\n },\n);\n\nexport const sandboxAjaxRouteSchema: JsonSchema = objectSchema(\n {\n urlPattern: stringSchema({ minLength: 1 }),\n mode: sandboxAjaxModeSchema,\n mockResponse: objectSchema(\n {\n status: integerSchema({ minimum: 100, maximum: 599 }),\n headers: recordSchema(stringSchema(), {\n title: \"SandboxAjaxMockHeaders\",\n }),\n body: stringSchema(),\n },\n {\n title: \"SandboxAjaxMockResponse\",\n required: [\"status\"],\n },\n ),\n },\n {\n title: \"SandboxAjaxRoute\",\n required: [\"urlPattern\", \"mode\"],\n },\n);\n\nexport const opensteerScriptSandboxInputSchema: JsonSchema = objectSchema(\n {\n artifactId: stringSchema({ minLength: 1 }),\n content: stringSchema(),\n fidelity: sandboxFidelitySchema,\n ajaxRoutes: arraySchema(sandboxAjaxRouteSchema),\n cookies: recordSchema(stringSchema(), {\n title: \"SandboxCookies\",\n }),\n globals: objectSchema(\n {},\n {\n title: \"SandboxGlobals\",\n additionalProperties: true,\n },\n ),\n timeoutMs: integerSchema({ minimum: 1 }),\n clockMode: enumSchema([\"real\", \"manual\"] as const),\n },\n {\n title: \"OpensteerScriptSandboxInput\",\n },\n);\n\nexport const sandboxCapturedAjaxCallSchema: JsonSchema = objectSchema(\n {\n method: stringSchema({ minLength: 1 }),\n url: stringSchema({ minLength: 1 }),\n headers: recordSchema(stringSchema(), {\n title: \"SandboxCapturedAjaxHeaders\",\n }),\n body: stringSchema(),\n timestamp: integerSchema({ minimum: 0 }),\n },\n {\n title: \"SandboxCapturedAjaxCall\",\n required: [\"method\", \"url\", \"headers\", \"timestamp\"],\n },\n);\n\nexport const opensteerScriptSandboxOutputSchema: JsonSchema = objectSchema(\n {\n result: oneOfSchema(\n [\n objectSchema({}, { additionalProperties: true }),\n arraySchema({}),\n stringSchema(),\n { type: \"number\" },\n enumSchema([true, false, null] as const),\n ],\n {\n title: \"SandboxResult\",\n },\n ),\n capturedAjax: arraySchema(sandboxCapturedAjaxCallSchema),\n errors: arraySchema(stringSchema({ minLength: 1 })),\n durationMs: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerScriptSandboxOutput\",\n required: [\"capturedAjax\", \"errors\", \"durationMs\"],\n },\n);\n","import type { JsonSchema } from \"./json.js\";\nimport {\n arraySchema,\n defineSchema,\n integerSchema,\n objectSchema,\n stringSchema,\n enumSchema,\n oneOfSchema,\n} from \"./json.js\";\nimport { pageRefSchema, type PageRef } from \"./identity.js\";\nimport { opensteerRegistryProvenanceSchema, type OpensteerRegistryProvenance } from \"./requests.js\";\nimport {\n opensteerStateDeltaSchema,\n opensteerStateSnapshotSchema,\n type OpensteerStateDelta,\n type OpensteerStateSnapshot,\n} from \"./state.js\";\nimport type { JsonValue } from \"./json.js\";\nimport type { OpensteerTargetInput } from \"./semantic.js\";\n\nexport type OpensteerInteractionCaptureStep =\n | {\n readonly kind: \"goto\";\n readonly url: string;\n }\n | {\n readonly kind: \"click\";\n readonly target: OpensteerTargetInput;\n }\n | {\n readonly kind: \"hover\";\n readonly target: OpensteerTargetInput;\n }\n | {\n readonly kind: \"input\";\n readonly target: OpensteerTargetInput;\n readonly text: string;\n readonly pressEnter?: boolean;\n }\n | {\n readonly kind: \"scroll\";\n readonly target: OpensteerTargetInput;\n readonly direction: \"up\" | \"down\" | \"left\" | \"right\";\n readonly amount: number;\n }\n | {\n readonly kind: \"wait\";\n readonly durationMs: number;\n };\n\nexport interface OpensteerInteractionEventRecord {\n readonly type: string;\n readonly timestamp: number;\n readonly targetPath?: string;\n readonly properties: Readonly<Record<string, unknown>>;\n}\n\nexport interface OpensteerInteractionTracePayload {\n readonly mode: \"manual\" | \"automated\";\n readonly pageRef?: PageRef;\n readonly url?: string;\n readonly startedAt: number;\n readonly completedAt: number;\n readonly beforeState?: OpensteerStateSnapshot;\n readonly afterState?: OpensteerStateSnapshot;\n readonly stateDelta?: OpensteerStateDelta;\n readonly events: readonly OpensteerInteractionEventRecord[];\n readonly networkRecordIds: readonly string[];\n readonly caseId?: string;\n readonly notes?: string;\n}\n\nexport interface OpensteerInteractionTraceRecord {\n readonly id: string;\n readonly key: string;\n readonly version: string;\n readonly createdAt: number;\n readonly updatedAt: number;\n readonly contentHash: string;\n readonly tags: readonly string[];\n readonly provenance?: OpensteerRegistryProvenance;\n readonly payload: OpensteerInteractionTracePayload;\n}\n\nexport interface OpensteerInteractionCaptureInput {\n readonly key?: string;\n readonly pageRef?: PageRef;\n readonly durationMs?: number;\n readonly script?: string;\n readonly args?: readonly JsonValue[];\n readonly steps?: readonly OpensteerInteractionCaptureStep[];\n readonly includeStorage?: boolean;\n readonly includeSessionStorage?: boolean;\n readonly includeIndexedDb?: boolean;\n readonly globalNames?: readonly string[];\n readonly caseId?: string;\n readonly notes?: string;\n readonly tags?: readonly string[];\n}\n\nexport interface OpensteerInteractionCaptureOutput {\n readonly trace: OpensteerInteractionTraceRecord;\n}\n\nexport interface OpensteerInteractionGetInput {\n readonly traceId: string;\n}\n\nexport interface OpensteerInteractionGetOutput {\n readonly trace: OpensteerInteractionTraceRecord;\n}\n\nexport interface OpensteerInteractionDiffInput {\n readonly leftTraceId: string;\n readonly rightTraceId: string;\n}\n\nexport interface OpensteerInteractionDiffOutput {\n readonly summary: {\n readonly eventCountDelta: number;\n readonly propertyMismatchCount: number;\n readonly stateMismatchCount: number;\n readonly downstreamRequestMismatchCount: number;\n };\n readonly eventSequenceMismatches: readonly string[];\n readonly eventPropertyMismatches: readonly string[];\n readonly stateMismatches: readonly string[];\n readonly downstreamRequestMismatches: readonly string[];\n}\n\nexport interface OpensteerInteractionReplayInput {\n readonly traceId: string;\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerInteractionReplayOutput {\n readonly traceId: string;\n readonly replayedEventCount: number;\n readonly success: boolean;\n readonly error?: string;\n}\n\nexport const opensteerInteractionEventRecordSchema: JsonSchema = objectSchema(\n {\n type: stringSchema({ minLength: 1 }),\n timestamp: integerSchema({ minimum: 0 }),\n targetPath: stringSchema({ minLength: 1 }),\n properties: objectSchema(\n {},\n {\n title: \"OpensteerInteractionEventProperties\",\n additionalProperties: true,\n },\n ),\n },\n {\n title: \"OpensteerInteractionEventRecord\",\n required: [\"type\", \"timestamp\", \"properties\"],\n },\n);\n\nexport const opensteerInteractionTracePayloadSchema: JsonSchema = objectSchema(\n {\n mode: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n url: stringSchema({ minLength: 1 }),\n startedAt: integerSchema({ minimum: 0 }),\n completedAt: integerSchema({ minimum: 0 }),\n beforeState: opensteerStateSnapshotSchema,\n afterState: opensteerStateSnapshotSchema,\n stateDelta: opensteerStateDeltaSchema,\n events: arraySchema(opensteerInteractionEventRecordSchema),\n networkRecordIds: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n caseId: stringSchema({ minLength: 1 }),\n notes: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerInteractionTracePayload\",\n required: [\"mode\", \"startedAt\", \"completedAt\", \"events\", \"networkRecordIds\"],\n },\n);\n\nexport const opensteerInteractionTraceRecordSchema: JsonSchema = objectSchema(\n {\n id: stringSchema({ minLength: 1 }),\n key: stringSchema({ minLength: 1 }),\n version: stringSchema({ minLength: 1 }),\n createdAt: integerSchema({ minimum: 0 }),\n updatedAt: integerSchema({ minimum: 0 }),\n contentHash: stringSchema({ minLength: 1 }),\n tags: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n provenance: opensteerRegistryProvenanceSchema,\n payload: opensteerInteractionTracePayloadSchema,\n },\n {\n title: \"OpensteerInteractionTraceRecord\",\n required: [\"id\", \"key\", \"version\", \"createdAt\", \"updatedAt\", \"contentHash\", \"tags\", \"payload\"],\n },\n);\n\nconst targetByElementSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"element\"] as const),\n element: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerInteractionTargetByElement\",\n required: [\"kind\", \"element\"],\n },\n);\n\nconst targetByPersistSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"persist\"] as const),\n name: stringSchema(),\n },\n {\n title: \"OpensteerInteractionTargetByPersist\",\n required: [\"kind\", \"name\"],\n },\n);\n\nconst targetBySelectorSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"selector\"] as const),\n selector: stringSchema(),\n },\n {\n title: \"OpensteerInteractionTargetBySelector\",\n required: [\"kind\", \"selector\"],\n },\n);\n\nconst opensteerInteractionTargetInputSchema: JsonSchema = oneOfSchema(\n [targetByElementSchema, targetByPersistSchema, targetBySelectorSchema],\n {\n title: \"OpensteerInteractionTargetInput\",\n },\n);\n\nconst opensteerInteractionCaptureStepSchema: JsonSchema = oneOfSchema(\n [\n objectSchema(\n {\n kind: enumSchema([\"goto\"] as const),\n url: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerInteractionCaptureGotoStep\",\n required: [\"kind\", \"url\"],\n },\n ),\n objectSchema(\n {\n kind: enumSchema([\"click\"] as const),\n target: opensteerInteractionTargetInputSchema,\n },\n {\n title: \"OpensteerInteractionCaptureClickStep\",\n required: [\"kind\", \"target\"],\n },\n ),\n objectSchema(\n {\n kind: enumSchema([\"hover\"] as const),\n target: opensteerInteractionTargetInputSchema,\n },\n {\n title: \"OpensteerInteractionCaptureHoverStep\",\n required: [\"kind\", \"target\"],\n },\n ),\n objectSchema(\n {\n kind: enumSchema([\"input\"] as const),\n target: opensteerInteractionTargetInputSchema,\n text: stringSchema(),\n pressEnter: { type: \"boolean\" },\n },\n {\n title: \"OpensteerInteractionCaptureInputStep\",\n required: [\"kind\", \"target\", \"text\"],\n },\n ),\n objectSchema(\n {\n kind: enumSchema([\"scroll\"] as const),\n target: opensteerInteractionTargetInputSchema,\n direction: enumSchema([\"up\", \"down\", \"left\", \"right\"] as const),\n amount: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerInteractionCaptureScrollStep\",\n required: [\"kind\", \"target\", \"direction\", \"amount\"],\n },\n ),\n objectSchema(\n {\n kind: enumSchema([\"wait\"] as const),\n durationMs: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerInteractionCaptureWaitStep\",\n required: [\"kind\", \"durationMs\"],\n },\n ),\n ],\n {\n title: \"OpensteerInteractionCaptureStep\",\n },\n);\n\nexport const opensteerInteractionCaptureInputSchema: JsonSchema = objectSchema(\n {\n key: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n durationMs: integerSchema({ minimum: 1 }),\n script: stringSchema({ minLength: 1 }),\n args: arraySchema(defineSchema({ title: \"OpensteerInteractionCaptureArg\" })),\n steps: arraySchema(opensteerInteractionCaptureStepSchema, { minItems: 1 }),\n includeStorage: { type: \"boolean\" },\n includeSessionStorage: { type: \"boolean\" },\n includeIndexedDb: { type: \"boolean\" },\n globalNames: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n caseId: stringSchema({ minLength: 1 }),\n notes: stringSchema({ minLength: 1 }),\n tags: arraySchema(stringSchema({ minLength: 1 }), { uniqueItems: true }),\n },\n {\n title: \"OpensteerInteractionCaptureInput\",\n },\n);\n\nexport const opensteerInteractionCaptureOutputSchema: JsonSchema = objectSchema(\n {\n trace: opensteerInteractionTraceRecordSchema,\n },\n {\n title: \"OpensteerInteractionCaptureOutput\",\n required: [\"trace\"],\n },\n);\n\nexport const opensteerInteractionGetInputSchema: JsonSchema = objectSchema(\n {\n traceId: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerInteractionGetInput\",\n required: [\"traceId\"],\n },\n);\n\nexport const opensteerInteractionGetOutputSchema: JsonSchema = objectSchema(\n {\n trace: opensteerInteractionTraceRecordSchema,\n },\n {\n title: \"OpensteerInteractionGetOutput\",\n required: [\"trace\"],\n },\n);\n\nexport const opensteerInteractionDiffInputSchema: JsonSchema = objectSchema(\n {\n leftTraceId: stringSchema({ minLength: 1 }),\n rightTraceId: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerInteractionDiffInput\",\n required: [\"leftTraceId\", \"rightTraceId\"],\n },\n);\n\nexport const opensteerInteractionDiffOutputSchema: JsonSchema = objectSchema(\n {\n summary: objectSchema(\n {\n eventCountDelta: integerSchema({ minimum: 0 }),\n propertyMismatchCount: integerSchema({ minimum: 0 }),\n stateMismatchCount: integerSchema({ minimum: 0 }),\n downstreamRequestMismatchCount: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerInteractionDiffSummary\",\n required: [\n \"eventCountDelta\",\n \"propertyMismatchCount\",\n \"stateMismatchCount\",\n \"downstreamRequestMismatchCount\",\n ],\n },\n ),\n eventSequenceMismatches: arraySchema(stringSchema({ minLength: 1 })),\n eventPropertyMismatches: arraySchema(stringSchema({ minLength: 1 })),\n stateMismatches: arraySchema(stringSchema({ minLength: 1 })),\n downstreamRequestMismatches: arraySchema(stringSchema({ minLength: 1 })),\n },\n {\n title: \"OpensteerInteractionDiffOutput\",\n required: [\n \"summary\",\n \"eventSequenceMismatches\",\n \"eventPropertyMismatches\",\n \"stateMismatches\",\n \"downstreamRequestMismatches\",\n ],\n },\n);\n\nexport const opensteerInteractionReplayInputSchema: JsonSchema = objectSchema(\n {\n traceId: stringSchema({ minLength: 1 }),\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerInteractionReplayInput\",\n required: [\"traceId\"],\n },\n);\n\nexport const opensteerInteractionReplayOutputSchema: JsonSchema = objectSchema(\n {\n traceId: stringSchema({ minLength: 1 }),\n replayedEventCount: integerSchema({ minimum: 0 }),\n success: { type: \"boolean\" },\n error: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerInteractionReplayOutput\",\n required: [\"traceId\", \"replayedEventCount\", \"success\"],\n },\n);\n","import type { JsonSchema, JsonValue } from \"./json.js\";\nimport {\n arraySchema,\n defineSchema,\n enumSchema,\n integerSchema,\n literalSchema,\n objectSchema,\n oneOfSchema,\n recordSchema,\n stringSchema,\n numberSchema,\n} from \"./json.js\";\nimport { OpensteerProtocolError } from \"./errors.js\";\nimport type { OpensteerCapability } from \"./capabilities.js\";\nimport type { ExternalBinaryLocation } from \"./binary-location.js\";\nimport { externalBinaryLocationSchema } from \"./binary-location.js\";\nimport {\n documentEpochSchema,\n documentRefSchema,\n frameRefSchema,\n nodeRefSchema,\n pageRefSchema,\n sessionRefSchema,\n} from \"./identity.js\";\nimport type {\n DocumentEpoch,\n DocumentRef,\n FrameRef,\n NodeRef,\n PageRef,\n SessionRef,\n} from \"./identity.js\";\nimport { coordinateSpaceSchema, pointSchema, rectSchema, sizeSchema } from \"./geometry.js\";\nimport type { CoordinateSpace, Point, Rect, Size } from \"./geometry.js\";\nimport { pageInfoSchema } from \"./metadata.js\";\nimport { requestEnvelopeSchema, responseEnvelopeSchema } from \"./envelopes.js\";\nimport { screenshotFormatSchema, type HitTestResult, type ScreenshotFormat } from \"./snapshots.js\";\nimport type {\n OpensteerArtifactReadInput,\n OpensteerArtifactReadOutput,\n ScriptSourceArtifactData,\n} from \"./artifacts.js\";\nimport {\n opensteerArtifactReadInputSchema,\n opensteerArtifactReadOutputSchema,\n} from \"./artifacts.js\";\nimport {\n opensteerCookieQueryInputSchema,\n opensteerCookieQueryOutputSchema,\n opensteerNetworkDetailInputSchema,\n opensteerNetworkDetailOutputSchema,\n opensteerNetworkQueryInputSchema,\n opensteerNetworkQueryOutputSchema,\n opensteerNetworkReplayInputSchema,\n opensteerNetworkReplayOutputSchema,\n opensteerSessionFetchInputSchema,\n opensteerSessionFetchOutputSchema,\n opensteerStateQueryInputSchema,\n opensteerStateQueryOutputSchema,\n opensteerStorageQueryInputSchema,\n opensteerStorageQueryOutputSchema,\n type OpensteerCookieQueryInput,\n type OpensteerCookieQueryOutput,\n type OpensteerNetworkDetailInput,\n type OpensteerNetworkDetailOutput,\n type OpensteerNetworkQueryInput,\n type OpensteerNetworkQueryOutput,\n type OpensteerNetworkReplayInput,\n type OpensteerNetworkReplayOutput,\n type OpensteerSessionFetchInput,\n type OpensteerSessionFetchOutput,\n type OpensteerStateQueryInput,\n type OpensteerStateQueryOutput,\n type OpensteerStorageQueryInput,\n type OpensteerStorageQueryOutput,\n} from \"./requests.js\";\nimport {\n opensteerScriptBeautifyInputSchema,\n opensteerScriptBeautifyOutputSchema,\n opensteerScriptDeobfuscateInputSchema,\n opensteerScriptDeobfuscateOutputSchema,\n opensteerScriptSandboxInputSchema,\n opensteerScriptSandboxOutputSchema,\n type OpensteerScriptBeautifyInput,\n type OpensteerScriptBeautifyOutput,\n type OpensteerScriptDeobfuscateInput,\n type OpensteerScriptDeobfuscateOutput,\n type OpensteerScriptSandboxInput,\n type OpensteerScriptSandboxOutput,\n} from \"./scripts.js\";\nimport {\n opensteerCaptchaSolveInputSchema,\n opensteerCaptchaSolveOutputSchema,\n type OpensteerCaptchaSolveInput,\n type OpensteerCaptchaSolveOutput,\n} from \"./captcha.js\";\nimport {\n opensteerInteractionCaptureInputSchema,\n opensteerInteractionCaptureOutputSchema,\n opensteerInteractionDiffInputSchema,\n opensteerInteractionDiffOutputSchema,\n opensteerInteractionGetInputSchema,\n opensteerInteractionGetOutputSchema,\n opensteerInteractionReplayInputSchema,\n opensteerInteractionReplayOutputSchema,\n type OpensteerInteractionCaptureInput,\n type OpensteerInteractionCaptureOutput,\n type OpensteerInteractionDiffInput,\n type OpensteerInteractionDiffOutput,\n type OpensteerInteractionGetInput,\n type OpensteerInteractionGetOutput,\n type OpensteerInteractionReplayInput,\n type OpensteerInteractionReplayOutput,\n} from \"./interaction.js\";\nimport { validateJsonSchema } from \"./validation.js\";\nimport { OPENSTEER_PROTOCOL_REST_BASE_PATH } from \"./version.js\";\n\nexport type OpensteerSnapshotMode = \"action\" | \"extraction\";\n\nexport interface OpensteerBrowserLaunchOptions {\n readonly headless?: boolean;\n readonly executablePath?: string;\n readonly args?: readonly string[];\n readonly timeoutMs?: number;\n}\n\nexport interface OpensteerAttachBrowserOptions {\n readonly mode: \"attach\";\n readonly endpoint?: string;\n readonly headers?: Readonly<Record<string, string>>;\n readonly freshTab?: boolean;\n}\n\nexport type OpensteerBrowserMode = \"temporary\" | \"persistent\";\n\nexport type OpensteerBrowserOptions = OpensteerBrowserMode | OpensteerAttachBrowserOptions;\n\nexport interface OpensteerHumanizeOptions {\n /** Interpolate mouse paths with curves and jitter before clicks/scrolls. */\n readonly mouse?: boolean;\n /** Realistic per-character typing cadence with key hold duration. */\n readonly keyboard?: boolean;\n /** Break large scrolls into discrete wheel ticks with delays. */\n readonly scroll?: boolean;\n}\n\nexport interface OpensteerBrowserContextOptions {\n readonly ignoreHTTPSErrors?: boolean;\n readonly locale?: string;\n readonly timezoneId?: string;\n readonly userAgent?: string;\n readonly viewport?: {\n readonly width: number;\n readonly height: number;\n } | null;\n readonly javaScriptEnabled?: boolean;\n readonly bypassCSP?: boolean;\n readonly reducedMotion?: \"reduce\" | \"no-preference\";\n readonly colorScheme?: \"light\" | \"dark\" | \"no-preference\";\n readonly stealthProfile?: OpensteerStealthProfileInput;\n /**\n * Enable human-like interaction patterns for mouse, keyboard, and scroll\n * events. When `true` (the default), all sub-options are enabled. Pass\n * `false` to disable, or an object to control individual categories.\n */\n readonly humanize?: boolean | OpensteerHumanizeOptions;\n}\n\nexport interface OpensteerStealthProfileInput {\n readonly id?: string;\n readonly platform?: \"macos\" | \"windows\" | \"linux\";\n readonly browserBrand?: \"chrome\" | \"edge\";\n readonly browserVersion?: string;\n readonly userAgent?: string;\n readonly viewport?: {\n readonly width: number;\n readonly height: number;\n };\n readonly screenResolution?: {\n readonly width: number;\n readonly height: number;\n };\n readonly devicePixelRatio?: number;\n readonly maxTouchPoints?: number;\n readonly webglVendor?: string;\n readonly webglRenderer?: string;\n readonly fonts?: readonly string[];\n readonly canvasNoiseSeed?: number;\n readonly audioNoiseSeed?: number;\n readonly locale?: string;\n readonly timezoneId?: string;\n}\n\nexport interface OpensteerTargetByElement {\n readonly kind: \"element\";\n readonly element: number;\n}\n\nexport interface OpensteerTargetByPersist {\n readonly kind: \"persist\";\n readonly persist: string;\n}\n\nexport interface OpensteerTargetBySelector {\n readonly kind: \"selector\";\n readonly selector: string;\n}\n\nexport type OpensteerTargetInput =\n | OpensteerTargetByElement\n | OpensteerTargetByPersist\n | OpensteerTargetBySelector;\n\nexport interface OpensteerResolvedTarget {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n readonly tagName: string;\n readonly pathHint: string;\n readonly persist?: string;\n readonly selectorUsed?: string;\n}\n\nexport interface OpensteerActionResult {\n readonly tagName: string;\n readonly persist?: string;\n}\n\nexport interface OpensteerSnapshotCounter {\n readonly element: number;\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef?: NodeRef;\n readonly tagName: string;\n readonly pathHint: string;\n readonly text?: string;\n readonly attributes?: readonly {\n readonly name: string;\n readonly value: string;\n }[];\n readonly iframeDepth: number;\n readonly shadowDepth: number;\n readonly interactive: boolean;\n}\n\nexport interface OpensteerNavigationSummary {\n readonly url: string;\n readonly title: string;\n}\n\nexport interface OpensteerOpenInput {\n readonly url?: string;\n readonly workspace?: string;\n readonly browser?: OpensteerBrowserOptions;\n readonly launch?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n}\n\nexport interface OpensteerOpenOutput extends OpensteerNavigationSummary {}\n\nexport interface OpensteerPageListInput {}\n\nexport interface OpensteerPageListOutput {\n readonly activePageRef?: PageRef;\n readonly pages: readonly import(\"./metadata.js\").PageInfo[];\n}\n\nexport interface OpensteerPageNewInput {\n readonly url?: string;\n readonly openerPageRef?: PageRef;\n}\n\nexport interface OpensteerPageNewOutput extends OpensteerNavigationSummary {\n readonly pageRef: PageRef;\n}\n\nexport interface OpensteerPageActivateInput {\n readonly pageRef: PageRef;\n}\n\nexport interface OpensteerPageActivateOutput extends OpensteerNavigationSummary {}\n\nexport interface OpensteerPageCloseInput {\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerPageCloseOutput {\n readonly closedPageRef: PageRef;\n readonly activePageRef?: PageRef;\n readonly pages: readonly import(\"./metadata.js\").PageInfo[];\n}\n\nexport interface OpensteerPageGotoInput {\n readonly url: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerPageGotoOutput extends OpensteerNavigationSummary {}\n\nexport interface OpensteerPageEvaluateInput {\n readonly script: string;\n readonly args?: readonly JsonValue[];\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerPageEvaluateOutput {\n readonly pageRef: PageRef;\n readonly value: JsonValue;\n}\n\nexport interface OpensteerAddInitScriptInput {\n readonly script: string;\n readonly args?: readonly JsonValue[];\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerAddInitScriptOutput {\n readonly registrationId: string;\n readonly sessionRef: SessionRef;\n readonly pageRef?: PageRef;\n}\n\nexport interface OpensteerCaptureScriptsInput {\n readonly pageRef?: PageRef;\n readonly includeInline?: boolean;\n readonly includeExternal?: boolean;\n readonly includeDynamic?: boolean;\n readonly includeWorkers?: boolean;\n readonly urlFilter?: string;\n readonly persist?: boolean;\n}\n\nexport interface OpensteerCapturedScript extends ScriptSourceArtifactData {\n readonly artifactId?: string;\n}\n\nexport interface OpensteerCaptureScriptsOutput {\n readonly pageRef: PageRef;\n readonly scripts: readonly OpensteerCapturedScript[];\n}\n\nexport interface OpensteerPageSnapshotInput {\n readonly mode?: OpensteerSnapshotMode;\n}\n\nexport interface OpensteerPageSnapshotOutput {\n readonly url: string;\n readonly title: string;\n readonly mode: OpensteerSnapshotMode;\n readonly html: string;\n readonly counters: readonly OpensteerSnapshotCounter[];\n}\n\nexport interface OpensteerInspectCookiesInput {\n readonly urls?: readonly string[];\n}\n\nexport interface OpensteerInspectStorageInput {\n readonly includeSessionStorage?: boolean;\n readonly includeIndexedDb?: boolean;\n}\n\nexport interface OpensteerDomClickInput {\n readonly target: OpensteerTargetInput;\n readonly button?: OpensteerComputerMouseButton;\n readonly clickCount?: number;\n readonly modifiers?: readonly OpensteerComputerKeyModifier[];\n readonly persist?: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerDomHoverInput {\n readonly target: OpensteerTargetInput;\n readonly persist?: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerDomInputInput {\n readonly target: OpensteerTargetInput;\n readonly text: string;\n readonly pressEnter?: boolean;\n readonly persist?: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerDomScrollInput {\n readonly target: OpensteerTargetInput;\n readonly direction: \"up\" | \"down\" | \"left\" | \"right\";\n readonly amount: number;\n readonly persist?: string;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerDomExtractInput {\n readonly persist?: string;\n readonly template?: Readonly<Record<string, unknown>>;\n}\n\nexport interface OpensteerDomExtractOutput {\n readonly data: JsonValue;\n}\n\nexport interface OpensteerSessionCloseInput {}\n\nexport interface OpensteerSessionCloseOutput {\n readonly closed: true;\n}\n\nexport const opensteerComputerAnnotationNames = [\n \"clickable\",\n \"typeable\",\n \"scrollable\",\n \"grid\",\n \"selected\",\n] as const;\n\nexport type OpensteerComputerAnnotation = (typeof opensteerComputerAnnotationNames)[number];\n\nexport type OpensteerComputerMouseButton = \"left\" | \"middle\" | \"right\";\nexport type OpensteerComputerKeyModifier = \"Shift\" | \"Control\" | \"Alt\" | \"Meta\";\n\nexport interface OpensteerComputerClickAction {\n readonly type: \"click\";\n readonly x: number;\n readonly y: number;\n readonly button?: OpensteerComputerMouseButton;\n readonly clickCount?: number;\n readonly modifiers?: readonly OpensteerComputerKeyModifier[];\n}\n\nexport interface OpensteerComputerMoveAction {\n readonly type: \"move\";\n readonly x: number;\n readonly y: number;\n}\n\nexport interface OpensteerComputerScrollAction {\n readonly type: \"scroll\";\n readonly x: number;\n readonly y: number;\n readonly deltaX: number;\n readonly deltaY: number;\n}\n\nexport interface OpensteerComputerTypeAction {\n readonly type: \"type\";\n readonly text: string;\n}\n\nexport interface OpensteerComputerKeyAction {\n readonly type: \"key\";\n readonly key: string;\n readonly modifiers?: readonly OpensteerComputerKeyModifier[];\n}\n\nexport interface OpensteerComputerDragAction {\n readonly type: \"drag\";\n readonly start: Point;\n readonly end: Point;\n readonly steps?: number;\n}\n\nexport interface OpensteerComputerScreenshotAction {\n readonly type: \"screenshot\";\n}\n\nexport interface OpensteerComputerWaitAction {\n readonly type: \"wait\";\n readonly durationMs: number;\n}\n\nexport type OpensteerComputerAction =\n | OpensteerComputerClickAction\n | OpensteerComputerMoveAction\n | OpensteerComputerScrollAction\n | OpensteerComputerTypeAction\n | OpensteerComputerKeyAction\n | OpensteerComputerDragAction\n | OpensteerComputerScreenshotAction\n | OpensteerComputerWaitAction;\n\nexport interface OpensteerComputerScreenshotOptions {\n readonly format?: ScreenshotFormat;\n readonly includeCursor?: boolean;\n readonly disableAnnotations?: readonly OpensteerComputerAnnotation[];\n}\n\nexport interface OpensteerScreenshotSummary {\n readonly payload: ExternalBinaryLocation;\n readonly format: \"png\" | \"jpeg\" | \"webp\";\n readonly size: Size;\n readonly coordinateSpace: CoordinateSpace;\n readonly clip?: Rect;\n}\n\nexport interface OpensteerComputerExecuteInput {\n readonly action: OpensteerComputerAction;\n readonly screenshot?: OpensteerComputerScreenshotOptions;\n readonly captureNetwork?: string;\n}\n\nexport interface OpensteerComputerDisplayScale {\n readonly x: number;\n readonly y: number;\n}\n\nexport interface OpensteerComputerTracePoint {\n readonly role: \"point\" | \"start\" | \"end\";\n readonly point: Point;\n readonly hitTest?: HitTestResult;\n readonly target?: OpensteerResolvedTarget;\n}\n\nexport interface OpensteerComputerTraceEnrichment {\n readonly points: readonly OpensteerComputerTracePoint[];\n}\n\nexport interface OpensteerComputerExecuteTiming {\n readonly actionMs: number;\n readonly waitMs: number;\n readonly totalMs: number;\n}\n\nexport interface OpensteerComputerExecuteOutput {\n readonly url: string;\n readonly title: string;\n readonly screenshot: OpensteerScreenshotSummary;\n}\n\nexport const opensteerSemanticOperationNames = [\n \"session.open\",\n \"page.list\",\n \"page.new\",\n \"page.activate\",\n \"page.close\",\n \"page.goto\",\n \"page.evaluate\",\n \"page.add-init-script\",\n \"page.snapshot\",\n \"dom.click\",\n \"dom.hover\",\n \"dom.input\",\n \"dom.scroll\",\n \"dom.extract\",\n \"network.query\",\n \"network.detail\",\n \"interaction.capture\",\n \"interaction.get\",\n \"interaction.diff\",\n \"interaction.replay\",\n \"artifact.read\",\n \"session.cookies\",\n \"session.storage\",\n \"session.state\",\n \"session.fetch\",\n \"scripts.capture\",\n \"scripts.beautify\",\n \"scripts.deobfuscate\",\n \"scripts.sandbox\",\n \"captcha.solve\",\n \"computer.execute\",\n \"session.close\",\n] as const;\n\nexport type OpensteerSemanticOperationName = (typeof opensteerSemanticOperationNames)[number];\n\nexport const opensteerExposedSemanticOperationNames = [\n \"session.open\",\n \"page.list\",\n \"page.new\",\n \"page.activate\",\n \"page.close\",\n \"page.goto\",\n \"page.evaluate\",\n \"page.add-init-script\",\n \"page.snapshot\",\n \"dom.click\",\n \"dom.hover\",\n \"dom.input\",\n \"dom.scroll\",\n \"dom.extract\",\n \"network.query\",\n \"network.detail\",\n \"interaction.capture\",\n \"interaction.get\",\n \"interaction.diff\",\n \"interaction.replay\",\n \"artifact.read\",\n \"session.cookies\",\n \"session.storage\",\n \"session.state\",\n \"session.fetch\",\n \"scripts.capture\",\n \"scripts.beautify\",\n \"scripts.deobfuscate\",\n \"scripts.sandbox\",\n \"captcha.solve\",\n \"computer.execute\",\n \"session.close\",\n] as const satisfies readonly OpensteerSemanticOperationName[];\n\nexport interface OpensteerSemanticOperationSpec<TInput = unknown, TOutput = unknown> {\n readonly name: OpensteerSemanticOperationName;\n readonly description: string;\n readonly inputSchema: JsonSchema;\n readonly outputSchema: JsonSchema & { readonly __output?: TOutput };\n readonly requiredCapabilities: readonly OpensteerCapability[];\n readonly packageRunnable?: boolean;\n resolveRequiredCapabilities?(input: TInput): readonly OpensteerCapability[];\n}\n\nexport interface OpensteerSemanticRestEndpointDescriptor {\n readonly name: OpensteerSemanticOperationName;\n readonly method: \"POST\";\n readonly path: string;\n readonly description: string;\n readonly requestSchema: JsonSchema;\n readonly responseSchema: JsonSchema;\n}\n\nfunction defineSemanticOperationSpec<TInput, TOutput>(\n spec: OpensteerSemanticOperationSpec<TInput, TOutput>,\n): OpensteerSemanticOperationSpec<TInput, TOutput> {\n return spec;\n}\n\nconst opensteerPackageRunnableSemanticOperationNames = new Set<OpensteerSemanticOperationName>([\n \"page.list\",\n \"page.new\",\n \"page.activate\",\n \"page.close\",\n \"page.goto\",\n \"page.evaluate\",\n \"page.add-init-script\",\n \"page.snapshot\",\n \"dom.click\",\n \"dom.hover\",\n \"dom.input\",\n \"dom.scroll\",\n \"dom.extract\",\n \"network.query\",\n \"network.detail\",\n \"interaction.capture\",\n \"interaction.get\",\n \"interaction.diff\",\n \"interaction.replay\",\n \"artifact.read\",\n \"session.cookies\",\n \"session.storage\",\n \"session.state\",\n \"session.fetch\",\n \"scripts.capture\",\n \"scripts.beautify\",\n \"scripts.deobfuscate\",\n \"scripts.sandbox\",\n \"captcha.solve\",\n \"computer.execute\",\n]);\n\nconst snapshotModeSchema: JsonSchema = enumSchema([\"action\", \"extraction\"] as const, {\n title: \"OpensteerSnapshotMode\",\n});\n\nconst viewportSchema: JsonSchema = oneOfSchema(\n [\n objectSchema(\n {\n width: integerSchema({ minimum: 1 }),\n height: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerViewport\",\n required: [\"width\", \"height\"],\n },\n ),\n literalSchema(null),\n ],\n {\n title: \"OpensteerViewportOrNull\",\n },\n);\n\nconst opensteerBrowserLaunchOptionsSchema: JsonSchema = objectSchema(\n {\n headless: { type: \"boolean\" },\n executablePath: stringSchema(),\n args: arraySchema(stringSchema()),\n timeoutMs: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerBrowserLaunchOptions\",\n },\n);\n\nconst attachBrowserOptionsSchema: JsonSchema = objectSchema(\n {\n mode: enumSchema([\"attach\"] as const),\n endpoint: stringSchema(),\n headers: recordSchema(stringSchema(), {\n title: \"OpensteerAttachBrowserHeaders\",\n }),\n freshTab: { type: \"boolean\" },\n },\n {\n title: \"OpensteerAttachBrowserOptions\",\n required: [\"mode\"],\n },\n);\n\nconst opensteerBrowserOptionsSchema: JsonSchema = oneOfSchema(\n [enumSchema([\"temporary\", \"persistent\"] as const), attachBrowserOptionsSchema],\n {\n title: \"OpensteerBrowserOptions\",\n },\n);\n\nconst opensteerBrowserContextOptionsSchema: JsonSchema = objectSchema(\n {\n ignoreHTTPSErrors: { type: \"boolean\" },\n locale: stringSchema(),\n timezoneId: stringSchema(),\n userAgent: stringSchema(),\n viewport: viewportSchema,\n javaScriptEnabled: { type: \"boolean\" },\n bypassCSP: { type: \"boolean\" },\n reducedMotion: enumSchema([\"reduce\", \"no-preference\"] as const),\n colorScheme: enumSchema([\"light\", \"dark\", \"no-preference\"] as const),\n stealthProfile: objectSchema(\n {\n id: stringSchema(),\n platform: enumSchema([\"macos\", \"windows\", \"linux\"] as const),\n browserBrand: enumSchema([\"chrome\", \"edge\"] as const),\n browserVersion: stringSchema(),\n userAgent: stringSchema(),\n viewport: viewportSchema,\n screenResolution: viewportSchema,\n devicePixelRatio: { type: \"number\", minimum: 0.5 },\n maxTouchPoints: integerSchema({ minimum: 0 }),\n webglVendor: stringSchema(),\n webglRenderer: stringSchema(),\n fonts: arraySchema(stringSchema()),\n canvasNoiseSeed: integerSchema({ minimum: 0 }),\n audioNoiseSeed: integerSchema({ minimum: 0 }),\n locale: stringSchema(),\n timezoneId: stringSchema(),\n },\n {\n title: \"OpensteerStealthProfileInput\",\n },\n ),\n humanize: oneOfSchema(\n [\n { type: \"boolean\" } as JsonSchema,\n objectSchema(\n {\n mouse: { type: \"boolean\" },\n keyboard: { type: \"boolean\" },\n scroll: { type: \"boolean\" },\n },\n { title: \"OpensteerHumanizeOptions\" },\n ),\n ],\n { title: \"OpensteerHumanize\" },\n ),\n },\n {\n title: \"OpensteerBrowserContextOptions\",\n },\n);\n\nconst targetByElementSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"element\"] as const),\n element: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerTargetByElement\",\n required: [\"kind\", \"element\"],\n },\n);\n\nconst targetByPersistSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"persist\"] as const),\n persist: stringSchema(),\n },\n {\n title: \"OpensteerTargetByPersist\",\n required: [\"kind\", \"persist\"],\n },\n);\n\nconst targetBySelectorSchema: JsonSchema = objectSchema(\n {\n kind: enumSchema([\"selector\"] as const),\n selector: stringSchema(),\n },\n {\n title: \"OpensteerTargetBySelector\",\n required: [\"kind\", \"selector\"],\n },\n);\n\nconst opensteerTargetInputSchema: JsonSchema = oneOfSchema(\n [targetByElementSchema, targetByPersistSchema, targetBySelectorSchema],\n {\n title: \"OpensteerTargetInput\",\n },\n);\n\nconst opensteerActionResultSchema: JsonSchema = objectSchema(\n {\n tagName: stringSchema({ minLength: 1 }),\n persist: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerActionResult\",\n required: [\"tagName\"],\n },\n);\n\nconst opensteerSnapshotCounterSchema: JsonSchema = objectSchema(\n {\n element: integerSchema({ minimum: 1 }),\n pageRef: pageRefSchema,\n frameRef: frameRefSchema,\n documentRef: documentRefSchema,\n documentEpoch: documentEpochSchema,\n nodeRef: nodeRefSchema,\n tagName: stringSchema(),\n pathHint: stringSchema(),\n text: stringSchema(),\n attributes: arraySchema(\n objectSchema(\n {\n name: stringSchema(),\n value: stringSchema(),\n },\n {\n title: \"OpensteerSnapshotCounterAttribute\",\n required: [\"name\", \"value\"],\n },\n ),\n ),\n iframeDepth: integerSchema({ minimum: 0 }),\n shadowDepth: integerSchema({ minimum: 0 }),\n interactive: { type: \"boolean\" },\n },\n {\n title: \"OpensteerSnapshotCounter\",\n required: [\n \"element\",\n \"pageRef\",\n \"frameRef\",\n \"documentRef\",\n \"documentEpoch\",\n \"tagName\",\n \"pathHint\",\n \"iframeDepth\",\n \"shadowDepth\",\n \"interactive\",\n ],\n },\n);\n\nconst opensteerNavigationSummarySchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n title: stringSchema(),\n },\n {\n title: \"OpensteerNavigationSummary\",\n required: [\"url\", \"title\"],\n },\n);\n\nconst opensteerOpenInputSchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n workspace: stringSchema(),\n browser: opensteerBrowserOptionsSchema,\n launch: opensteerBrowserLaunchOptionsSchema,\n context: opensteerBrowserContextOptionsSchema,\n },\n {\n title: \"OpensteerOpenInput\",\n },\n);\n\nconst opensteerPageListInputSchema: JsonSchema = objectSchema(\n {},\n {\n title: \"OpensteerPageListInput\",\n },\n);\n\nconst opensteerPageListOutputSchema: JsonSchema = objectSchema(\n {\n activePageRef: pageRefSchema,\n pages: arraySchema(pageInfoSchema),\n },\n {\n title: \"OpensteerPageListOutput\",\n required: [\"pages\"],\n },\n);\n\nconst opensteerPageNewInputSchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n openerPageRef: pageRefSchema,\n },\n {\n title: \"OpensteerPageNewInput\",\n },\n);\n\nconst opensteerPageActivateInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerPageActivateInput\",\n required: [\"pageRef\"],\n },\n);\n\nconst opensteerPageCloseInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerPageCloseInput\",\n },\n);\n\nconst opensteerPageCloseOutputSchema: JsonSchema = objectSchema(\n {\n closedPageRef: pageRefSchema,\n activePageRef: pageRefSchema,\n pages: arraySchema(pageInfoSchema),\n },\n {\n title: \"OpensteerPageCloseOutput\",\n required: [\"closedPageRef\", \"pages\"],\n },\n);\n\nconst opensteerPageNewOutputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n url: stringSchema(),\n title: stringSchema(),\n },\n {\n title: \"OpensteerPageNewOutput\",\n required: [\"pageRef\", \"url\", \"title\"],\n },\n);\n\nconst opensteerPageGotoInputSchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerPageGotoInput\",\n required: [\"url\"],\n },\n);\n\nconst opensteerPageEvaluateInputSchema: JsonSchema = objectSchema(\n {\n script: stringSchema({ minLength: 1 }),\n args: arraySchema(\n defineSchema({\n title: \"JsonValue\",\n }),\n ),\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerPageEvaluateInput\",\n required: [\"script\"],\n },\n);\n\nconst opensteerPageEvaluateOutputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n value: oneOfSchema(\n [\n defineSchema({\n title: \"JsonValue\",\n }),\n arraySchema({}),\n stringSchema(),\n numberSchema(),\n enumSchema([true, false, null] as const),\n ],\n {\n title: \"OpensteerPageEvaluateValue\",\n },\n ),\n },\n {\n title: \"OpensteerPageEvaluateOutput\",\n required: [\"pageRef\", \"value\"],\n },\n);\n\nconst opensteerAddInitScriptInputSchema: JsonSchema = objectSchema(\n {\n script: stringSchema({ minLength: 1 }),\n args: arraySchema(defineSchema({ title: \"OpensteerInitScriptArg\" })),\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerAddInitScriptInput\",\n required: [\"script\"],\n },\n);\n\nconst opensteerAddInitScriptOutputSchema: JsonSchema = objectSchema(\n {\n registrationId: stringSchema({ minLength: 1 }),\n sessionRef: sessionRefSchema,\n pageRef: pageRefSchema,\n },\n {\n title: \"OpensteerAddInitScriptOutput\",\n required: [\"registrationId\", \"sessionRef\"],\n },\n);\n\nconst opensteerCapturedScriptSchema: JsonSchema = objectSchema(\n {\n source: enumSchema([\"inline\", \"external\", \"dynamic\", \"worker\"] as const),\n url: stringSchema({ minLength: 1 }),\n type: stringSchema({ minLength: 1 }),\n hash: stringSchema({ minLength: 1 }),\n loadOrder: integerSchema({ minimum: 0 }),\n content: stringSchema(),\n artifactId: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerCapturedScript\",\n required: [\"source\", \"hash\", \"loadOrder\", \"content\"],\n },\n);\n\nconst opensteerCaptureScriptsInputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n includeInline: { type: \"boolean\" },\n includeExternal: { type: \"boolean\" },\n includeDynamic: { type: \"boolean\" },\n includeWorkers: { type: \"boolean\" },\n urlFilter: stringSchema({ minLength: 1 }),\n persist: { type: \"boolean\" },\n },\n {\n title: \"OpensteerCaptureScriptsInput\",\n },\n);\n\nconst opensteerCaptureScriptsOutputSchema: JsonSchema = objectSchema(\n {\n pageRef: pageRefSchema,\n scripts: arraySchema(opensteerCapturedScriptSchema),\n },\n {\n title: \"OpensteerCaptureScriptsOutput\",\n required: [\"pageRef\", \"scripts\"],\n },\n);\n\nconst opensteerPageSnapshotInputSchema: JsonSchema = objectSchema(\n {\n mode: snapshotModeSchema,\n },\n {\n title: \"OpensteerPageSnapshotInput\",\n },\n);\n\nconst opensteerPageSnapshotOutputSchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n title: stringSchema(),\n mode: snapshotModeSchema,\n html: stringSchema(),\n counters: arraySchema(opensteerSnapshotCounterSchema),\n },\n {\n title: \"OpensteerPageSnapshotOutput\",\n required: [\"url\", \"title\", \"mode\", \"html\", \"counters\"],\n },\n);\n\nconst opensteerComputerMouseButtonSchema: JsonSchema = enumSchema(\n [\"left\", \"middle\", \"right\"] as const,\n {\n title: \"OpensteerComputerMouseButton\",\n },\n);\n\nconst opensteerComputerKeyModifierSchema: JsonSchema = enumSchema(\n [\"Shift\", \"Control\", \"Alt\", \"Meta\"] as const,\n {\n title: \"OpensteerComputerKeyModifier\",\n },\n);\n\nconst opensteerDomClickInputSchema: JsonSchema = objectSchema(\n {\n target: opensteerTargetInputSchema,\n button: opensteerComputerMouseButtonSchema,\n clickCount: integerSchema({ minimum: 1 }),\n modifiers: arraySchema(opensteerComputerKeyModifierSchema, {\n uniqueItems: true,\n }),\n persist: stringSchema(),\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerDomClickInput\",\n required: [\"target\"],\n },\n);\n\nconst opensteerDomHoverInputSchema = objectSchema(\n {\n target: opensteerTargetInputSchema,\n persist: stringSchema(),\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerDomHoverInput\",\n required: [\"target\"],\n },\n);\n\nconst opensteerDomInputInputSchema: JsonSchema = objectSchema(\n {\n target: opensteerTargetInputSchema,\n text: stringSchema(),\n pressEnter: { type: \"boolean\" },\n persist: stringSchema(),\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerDomInputInput\",\n required: [\"target\", \"text\"],\n },\n);\n\nconst opensteerDomScrollInputSchema: JsonSchema = objectSchema(\n {\n target: opensteerTargetInputSchema,\n direction: enumSchema([\"up\", \"down\", \"left\", \"right\"] as const),\n amount: integerSchema({ minimum: 1 }),\n persist: stringSchema(),\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerDomScrollInput\",\n required: [\"target\", \"direction\", \"amount\"],\n },\n);\n\nconst opensteerExtractTemplateSchema: JsonSchema = objectSchema(\n {},\n {\n title: \"OpensteerExtractTemplate\",\n additionalProperties: true,\n },\n);\n\nconst opensteerDomExtractInputSchema: JsonSchema = defineSchema({\n ...objectSchema(\n {\n persist: stringSchema(),\n template: opensteerExtractTemplateSchema,\n },\n {\n title: \"OpensteerDomExtractInput\",\n },\n ),\n anyOf: [defineSchema({ required: [\"persist\"] }), defineSchema({ required: [\"template\"] })],\n});\n\nconst jsonValueSchema: JsonSchema = recordSchema({}, { title: \"JsonValueRecord\" });\n\nconst opensteerDomExtractOutputSchema: JsonSchema = objectSchema(\n {\n data: oneOfSchema(\n [\n jsonValueSchema,\n arraySchema({}),\n stringSchema(),\n numberSchema(),\n enumSchema([true, false, null] as const),\n ],\n {\n title: \"OpensteerExtractedJsonValue\",\n },\n ),\n },\n {\n title: \"OpensteerDomExtractOutput\",\n required: [\"data\"],\n },\n);\n\nconst opensteerSessionCloseInputSchema: JsonSchema = objectSchema(\n {},\n {\n title: \"OpensteerSessionCloseInput\",\n required: [],\n },\n);\n\nconst opensteerSessionCloseOutputSchema: JsonSchema = objectSchema(\n {\n closed: literalSchema(true),\n },\n {\n title: \"OpensteerSessionCloseOutput\",\n required: [\"closed\"],\n },\n);\n\nconst opensteerComputerAnnotationSchema: JsonSchema = enumSchema(opensteerComputerAnnotationNames, {\n title: \"OpensteerComputerAnnotation\",\n});\n\nconst opensteerComputerClickActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"click\"] as const),\n x: numberSchema(),\n y: numberSchema(),\n button: opensteerComputerMouseButtonSchema,\n clickCount: integerSchema({ minimum: 1 }),\n modifiers: arraySchema(opensteerComputerKeyModifierSchema, {\n uniqueItems: true,\n }),\n },\n {\n title: \"OpensteerComputerClickAction\",\n required: [\"type\", \"x\", \"y\"],\n },\n);\n\nconst opensteerComputerMoveActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"move\"] as const),\n x: numberSchema(),\n y: numberSchema(),\n },\n {\n title: \"OpensteerComputerMoveAction\",\n required: [\"type\", \"x\", \"y\"],\n },\n);\n\nconst opensteerComputerScrollActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"scroll\"] as const),\n x: numberSchema(),\n y: numberSchema(),\n deltaX: numberSchema(),\n deltaY: numberSchema(),\n },\n {\n title: \"OpensteerComputerScrollAction\",\n required: [\"type\", \"x\", \"y\", \"deltaX\", \"deltaY\"],\n },\n);\n\nconst opensteerComputerTypeActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"type\"] as const),\n text: stringSchema(),\n },\n {\n title: \"OpensteerComputerTypeAction\",\n required: [\"type\", \"text\"],\n },\n);\n\nconst opensteerComputerKeyActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"key\"] as const),\n key: stringSchema(),\n modifiers: arraySchema(opensteerComputerKeyModifierSchema, {\n uniqueItems: true,\n }),\n },\n {\n title: \"OpensteerComputerKeyAction\",\n required: [\"type\", \"key\"],\n },\n);\n\nconst opensteerComputerDragActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"drag\"] as const),\n start: pointSchema,\n end: pointSchema,\n steps: integerSchema({ minimum: 1 }),\n },\n {\n title: \"OpensteerComputerDragAction\",\n required: [\"type\", \"start\", \"end\"],\n },\n);\n\nconst opensteerComputerScreenshotActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"screenshot\"] as const),\n },\n {\n title: \"OpensteerComputerScreenshotAction\",\n required: [\"type\"],\n },\n);\n\nconst opensteerComputerWaitActionSchema: JsonSchema = objectSchema(\n {\n type: enumSchema([\"wait\"] as const),\n durationMs: integerSchema({ minimum: 0 }),\n },\n {\n title: \"OpensteerComputerWaitAction\",\n required: [\"type\", \"durationMs\"],\n },\n);\n\nconst opensteerComputerActionSchema: JsonSchema = oneOfSchema(\n [\n opensteerComputerClickActionSchema,\n opensteerComputerMoveActionSchema,\n opensteerComputerScrollActionSchema,\n opensteerComputerTypeActionSchema,\n opensteerComputerKeyActionSchema,\n opensteerComputerDragActionSchema,\n opensteerComputerScreenshotActionSchema,\n opensteerComputerWaitActionSchema,\n ],\n {\n title: \"OpensteerComputerAction\",\n },\n);\n\nconst opensteerComputerScreenshotOptionsSchema: JsonSchema = objectSchema(\n {\n format: enumSchema([\"png\", \"jpeg\", \"webp\"] as const),\n includeCursor: { type: \"boolean\" },\n disableAnnotations: arraySchema(opensteerComputerAnnotationSchema, {\n uniqueItems: true,\n }),\n },\n {\n title: \"OpensteerComputerScreenshotOptions\",\n },\n);\n\nconst opensteerComputerExecuteInputSchema: JsonSchema = objectSchema(\n {\n action: opensteerComputerActionSchema,\n screenshot: opensteerComputerScreenshotOptionsSchema,\n captureNetwork: stringSchema({ minLength: 1 }),\n },\n {\n title: \"OpensteerComputerExecuteInput\",\n required: [\"action\"],\n },\n);\n\nconst opensteerScreenshotSummarySchema: JsonSchema = objectSchema(\n {\n payload: externalBinaryLocationSchema,\n format: screenshotFormatSchema,\n size: sizeSchema,\n coordinateSpace: coordinateSpaceSchema,\n clip: rectSchema,\n },\n {\n title: \"OpensteerScreenshotSummary\",\n required: [\"payload\", \"format\", \"size\", \"coordinateSpace\"],\n },\n);\n\nconst opensteerComputerExecuteOutputSchema: JsonSchema = objectSchema(\n {\n url: stringSchema(),\n title: stringSchema(),\n screenshot: opensteerScreenshotSummarySchema,\n },\n {\n title: \"OpensteerComputerExecuteOutput\",\n required: [\"url\", \"title\", \"screenshot\"],\n },\n);\n\nexport function resolveSemanticRequiredCapabilities<TInput>(\n spec: Pick<\n OpensteerSemanticOperationSpec<TInput, unknown>,\n \"requiredCapabilities\" | \"resolveRequiredCapabilities\"\n >,\n input: TInput,\n): readonly OpensteerCapability[] {\n return spec.resolveRequiredCapabilities?.(input) ?? spec.requiredCapabilities;\n}\n\nexport function assertValidSemanticOperationInput(\n name: OpensteerSemanticOperationName,\n input: unknown,\n): void {\n const spec = opensteerSemanticOperationSpecificationMap[name];\n const issues = validateJsonSchema(spec.inputSchema, input);\n if (issues.length === 0) {\n return;\n }\n\n const firstIssue = issues[0]!;\n throw new OpensteerProtocolError(\n \"invalid-request\",\n `invalid ${name} input at ${firstIssue.path}: ${firstIssue.message}`,\n {\n details: {\n operation: name,\n issues,\n },\n },\n );\n}\n\nconst opensteerSemanticOperationSpecificationsBase = [\n defineSemanticOperationSpec<OpensteerOpenInput, OpensteerOpenOutput>({\n name: \"session.open\",\n description: \"Open or resume the current Opensteer session and primary page.\",\n inputSchema: opensteerOpenInputSchema,\n outputSchema: opensteerNavigationSummarySchema,\n requiredCapabilities: [\"sessions.manage\", \"pages.manage\"],\n resolveRequiredCapabilities: (input) =>\n input.url === undefined\n ? [\"sessions.manage\", \"pages.manage\"]\n : [\"sessions.manage\", \"pages.manage\", \"pages.navigate\"],\n }),\n defineSemanticOperationSpec<OpensteerPageListInput, OpensteerPageListOutput>({\n name: \"page.list\",\n description: \"List top-level pages for the current Opensteer session.\",\n inputSchema: opensteerPageListInputSchema,\n outputSchema: opensteerPageListOutputSchema,\n requiredCapabilities: [\"inspect.pages\"],\n }),\n defineSemanticOperationSpec<OpensteerPageNewInput, OpensteerPageNewOutput>({\n name: \"page.new\",\n description: \"Create and optionally navigate a new top-level page in the current session.\",\n inputSchema: opensteerPageNewInputSchema,\n outputSchema: opensteerPageNewOutputSchema,\n requiredCapabilities: [\"pages.manage\"],\n resolveRequiredCapabilities: (input) =>\n input.url === undefined ? [\"pages.manage\"] : [\"pages.manage\", \"pages.navigate\"],\n }),\n defineSemanticOperationSpec<OpensteerPageActivateInput, OpensteerPageActivateOutput>({\n name: \"page.activate\",\n description: \"Activate an existing top-level page in the current session.\",\n inputSchema: opensteerPageActivateInputSchema,\n outputSchema: opensteerNavigationSummarySchema,\n requiredCapabilities: [\"pages.manage\", \"inspect.pages\"],\n }),\n defineSemanticOperationSpec<OpensteerPageCloseInput, OpensteerPageCloseOutput>({\n name: \"page.close\",\n description: \"Close a top-level page in the current session.\",\n inputSchema: opensteerPageCloseInputSchema,\n outputSchema: opensteerPageCloseOutputSchema,\n requiredCapabilities: [\"pages.manage\", \"inspect.pages\"],\n }),\n defineSemanticOperationSpec<OpensteerPageGotoInput, OpensteerPageGotoOutput>({\n name: \"page.goto\",\n description: \"Navigate the current Opensteer page to a new URL.\",\n inputSchema: opensteerPageGotoInputSchema,\n outputSchema: opensteerNavigationSummarySchema,\n requiredCapabilities: [\"pages.navigate\"],\n }),\n defineSemanticOperationSpec<OpensteerPageEvaluateInput, OpensteerPageEvaluateOutput>({\n name: \"page.evaluate\",\n description: \"Execute JavaScript in the live page context and return a structured result.\",\n inputSchema: opensteerPageEvaluateInputSchema,\n outputSchema: opensteerPageEvaluateOutputSchema,\n requiredCapabilities: [\"pages.manage\"],\n }),\n defineSemanticOperationSpec<OpensteerAddInitScriptInput, OpensteerAddInitScriptOutput>({\n name: \"page.add-init-script\",\n description: \"Register a script that runs before page scripts in the current browser session.\",\n inputSchema: opensteerAddInitScriptInputSchema,\n outputSchema: opensteerAddInitScriptOutputSchema,\n requiredCapabilities: [\"instrumentation.initScripts\"],\n }),\n defineSemanticOperationSpec<OpensteerPageSnapshotInput, OpensteerPageSnapshotOutput>({\n name: \"page.snapshot\",\n description: \"Compile an HTML-first agent snapshot for the current page.\",\n inputSchema: opensteerPageSnapshotInputSchema,\n outputSchema: opensteerPageSnapshotOutputSchema,\n requiredCapabilities: [\"inspect.pages\", \"inspect.html\", \"inspect.domSnapshot\"],\n }),\n defineSemanticOperationSpec<OpensteerDomClickInput, OpensteerActionResult>({\n name: \"dom.click\",\n description: \"Resolve and click a DOM target using Opensteer semantics.\",\n inputSchema: opensteerDomClickInputSchema,\n outputSchema: opensteerActionResultSchema,\n requiredCapabilities: [\"input.pointer\", \"inspect.domSnapshot\", \"inspect.hitTest\"],\n }),\n defineSemanticOperationSpec<OpensteerDomHoverInput, OpensteerActionResult>({\n name: \"dom.hover\",\n description: \"Resolve and hover a DOM target using Opensteer semantics.\",\n inputSchema: opensteerDomHoverInputSchema,\n outputSchema: opensteerActionResultSchema,\n requiredCapabilities: [\"input.pointer\", \"inspect.domSnapshot\", \"inspect.hitTest\"],\n }),\n defineSemanticOperationSpec<OpensteerDomInputInput, OpensteerActionResult>({\n name: \"dom.input\",\n description: \"Resolve a DOM target, focus it, and type text through Opensteer semantics.\",\n inputSchema: opensteerDomInputInputSchema,\n outputSchema: opensteerActionResultSchema,\n requiredCapabilities: [\n \"input.pointer\",\n \"input.keyboard\",\n \"inspect.domSnapshot\",\n \"inspect.hitTest\",\n ],\n }),\n defineSemanticOperationSpec<OpensteerDomScrollInput, OpensteerActionResult>({\n name: \"dom.scroll\",\n description:\n \"Resolve a DOM target and dispatch directional scrolling through Opensteer semantics.\",\n inputSchema: opensteerDomScrollInputSchema,\n outputSchema: opensteerActionResultSchema,\n requiredCapabilities: [\"input.pointer\", \"inspect.domSnapshot\", \"inspect.hitTest\"],\n }),\n defineSemanticOperationSpec<OpensteerDomExtractInput, OpensteerDomExtractOutput>({\n name: \"dom.extract\",\n description:\n \"Run structured DOM extraction and optionally persist the extraction descriptor for replay.\",\n inputSchema: opensteerDomExtractInputSchema,\n outputSchema: opensteerDomExtractOutputSchema,\n requiredCapabilities: [\"inspect.domSnapshot\", \"inspect.text\", \"inspect.attributes\"],\n }),\n defineSemanticOperationSpec<OpensteerNetworkQueryInput, OpensteerNetworkQueryOutput>({\n name: \"network.query\",\n description:\n \"Query captured network traffic with chronological summaries optimized for agent inspection.\",\n inputSchema: opensteerNetworkQueryInputSchema,\n outputSchema: opensteerNetworkQueryOutputSchema,\n requiredCapabilities: [\"inspect.network\"],\n }),\n defineSemanticOperationSpec<OpensteerNetworkDetailInput, OpensteerNetworkDetailOutput>({\n name: \"network.detail\",\n description:\n \"Inspect one captured network record with parsed headers, cookies, redirects, and truncated bodies.\",\n inputSchema: opensteerNetworkDetailInputSchema,\n outputSchema: opensteerNetworkDetailOutputSchema,\n requiredCapabilities: [\"inspect.network\", \"inspect.networkBodies\"],\n }),\n defineSemanticOperationSpec<OpensteerInteractionCaptureInput, OpensteerInteractionCaptureOutput>({\n name: \"interaction.capture\",\n description:\n \"Capture a guarded interaction window, including event properties, state changes, and downstream network.\",\n inputSchema: opensteerInteractionCaptureInputSchema,\n outputSchema: opensteerInteractionCaptureOutputSchema,\n requiredCapabilities: [\"pages.manage\", \"inspect.cookies\", \"inspect.localStorage\"],\n }),\n defineSemanticOperationSpec<OpensteerInteractionGetInput, OpensteerInteractionGetOutput>({\n name: \"interaction.get\",\n description:\n \"Read a captured interaction trace by ID for package inspection, diffing, and replay editing.\",\n inputSchema: opensteerInteractionGetInputSchema,\n outputSchema: opensteerInteractionGetOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerInteractionDiffInput, OpensteerInteractionDiffOutput>({\n name: \"interaction.diff\",\n description:\n \"Compare two captured interaction traces by event sequence, event properties, state deltas, and downstream network.\",\n inputSchema: opensteerInteractionDiffInputSchema,\n outputSchema: opensteerInteractionDiffOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerInteractionReplayInput, OpensteerInteractionReplayOutput>({\n name: \"interaction.replay\",\n description:\n \"Replay a captured interaction trace against a live page and report how many events were reproduced.\",\n inputSchema: opensteerInteractionReplayInputSchema,\n outputSchema: opensteerInteractionReplayOutputSchema,\n requiredCapabilities: [\"pages.manage\"],\n }),\n defineSemanticOperationSpec<OpensteerArtifactReadInput, OpensteerArtifactReadOutput>({\n name: \"artifact.read\",\n description:\n \"Read a persisted artifact by ID so agents can inspect captured scripts, storage, cookies, or snapshots linked from recorded workflows.\",\n inputSchema: opensteerArtifactReadInputSchema,\n outputSchema: opensteerArtifactReadOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerCaptureScriptsInput, OpensteerCaptureScriptsOutput>({\n name: \"scripts.capture\",\n description: \"Capture inline and external script sources from the current page and run.\",\n inputSchema: opensteerCaptureScriptsInputSchema,\n outputSchema: opensteerCaptureScriptsOutputSchema,\n requiredCapabilities: [\"inspect.html\", \"inspect.network\", \"inspect.networkBodies\"],\n }),\n defineSemanticOperationSpec<OpensteerScriptBeautifyInput, OpensteerScriptBeautifyOutput>({\n name: \"scripts.beautify\",\n description:\n \"Beautify captured or inline JavaScript through Prettier and optionally persist the transformed artifact.\",\n inputSchema: opensteerScriptBeautifyInputSchema,\n outputSchema: opensteerScriptBeautifyOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerScriptDeobfuscateInput, OpensteerScriptDeobfuscateOutput>({\n name: \"scripts.deobfuscate\",\n description:\n \"Deobfuscate captured or inline JavaScript through webcrack and optionally persist the transformed artifact.\",\n inputSchema: opensteerScriptDeobfuscateInputSchema,\n outputSchema: opensteerScriptDeobfuscateOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerScriptSandboxInput, OpensteerScriptSandboxOutput>({\n name: \"scripts.sandbox\",\n description:\n \"Execute captured or inline JavaScript inside a controlled VM sandbox with browser-style shims and AJAX interception.\",\n inputSchema: opensteerScriptSandboxInputSchema,\n outputSchema: opensteerScriptSandboxOutputSchema,\n requiredCapabilities: [],\n }),\n defineSemanticOperationSpec<OpensteerCaptchaSolveInput, OpensteerCaptchaSolveOutput>({\n name: \"captcha.solve\",\n description:\n \"Detect, solve, and inject a supported CAPTCHA token into the current page through a pluggable solver provider.\",\n inputSchema: opensteerCaptchaSolveInputSchema,\n outputSchema: opensteerCaptchaSolveOutputSchema,\n requiredCapabilities: [\"pages.manage\"],\n }),\n defineSemanticOperationSpec<OpensteerCookieQueryInput, OpensteerCookieQueryOutput>({\n name: \"session.cookies\",\n description:\n \"Read browser cookies for the active page domain or an explicitly selected domain.\",\n inputSchema: opensteerCookieQueryInputSchema,\n outputSchema: opensteerCookieQueryOutputSchema,\n requiredCapabilities: [\"inspect.cookies\"],\n }),\n defineSemanticOperationSpec<OpensteerStorageQueryInput, OpensteerStorageQueryOutput>({\n name: \"session.storage\",\n description:\n \"Read localStorage and sessionStorage grouped by domain for the active browser session.\",\n inputSchema: opensteerStorageQueryInputSchema,\n outputSchema: opensteerStorageQueryOutputSchema,\n requiredCapabilities: [\"inspect.localStorage\", \"inspect.sessionStorage\"],\n }),\n defineSemanticOperationSpec<OpensteerStateQueryInput, OpensteerStateQueryOutput>({\n name: \"session.state\",\n description:\n \"Read browser cookies, storage, hidden fields, and selected page globals grouped by domain.\",\n inputSchema: opensteerStateQueryInputSchema,\n outputSchema: opensteerStateQueryOutputSchema,\n requiredCapabilities: [\n \"inspect.cookies\",\n \"inspect.localStorage\",\n \"inspect.sessionStorage\",\n \"pages.manage\",\n ],\n }),\n defineSemanticOperationSpec<OpensteerSessionFetchInput, OpensteerSessionFetchOutput>({\n name: \"session.fetch\",\n description:\n \"Execute a session-aware HTTP request with browser cookies and automatic transport selection.\",\n inputSchema: opensteerSessionFetchInputSchema,\n outputSchema: opensteerSessionFetchOutputSchema,\n requiredCapabilities: [],\n resolveRequiredCapabilities: (input) => {\n switch (input.transport ?? \"auto\") {\n case \"direct\":\n return [];\n case \"matched-tls\":\n case \"context\":\n return [\"inspect.cookies\"];\n case \"page\":\n return [\"pages.manage\"];\n case \"auto\":\n return [\"inspect.cookies\", \"pages.manage\"];\n }\n },\n }),\n defineSemanticOperationSpec<OpensteerComputerExecuteInput, OpensteerComputerExecuteOutput>({\n name: \"computer.execute\",\n description:\n \"Execute a computer-use action in canonical computer-display-css coordinates and return the post-action screenshot in that same model-visible space.\",\n inputSchema: opensteerComputerExecuteInputSchema,\n outputSchema: opensteerComputerExecuteOutputSchema,\n requiredCapabilities: [\"artifacts.screenshot\", \"inspect.viewportMetrics\"],\n resolveRequiredCapabilities: (input) => {\n const base: OpensteerCapability[] = [\"artifacts.screenshot\", \"inspect.viewportMetrics\"];\n switch (input.action.type) {\n case \"click\":\n if ((input.action.modifiers?.length ?? 0) > 0) {\n base.unshift(\"input.keyboard\");\n }\n base.unshift(\"input.pointer\");\n break;\n case \"move\":\n case \"scroll\":\n case \"drag\":\n base.unshift(\"input.pointer\");\n break;\n case \"type\":\n case \"key\":\n base.unshift(\"input.keyboard\");\n break;\n case \"screenshot\":\n case \"wait\":\n break;\n }\n return base;\n },\n }),\n defineSemanticOperationSpec<OpensteerSessionCloseInput, OpensteerSessionCloseOutput>({\n name: \"session.close\",\n description: \"Close the current Opensteer session and release browser resources.\",\n inputSchema: opensteerSessionCloseInputSchema,\n outputSchema: opensteerSessionCloseOutputSchema,\n requiredCapabilities: [\"sessions.manage\"],\n }),\n] as const satisfies readonly OpensteerSemanticOperationSpec[];\n\nconst exposedSemanticOperationNameSet = new Set<OpensteerSemanticOperationName>(\n opensteerExposedSemanticOperationNames,\n);\n\nconst opensteerSemanticOperationSpecificationsInternal =\n opensteerSemanticOperationSpecificationsBase.map((spec) => ({\n ...spec,\n packageRunnable: opensteerPackageRunnableSemanticOperationNames.has(spec.name),\n })) as readonly OpensteerSemanticOperationSpec[];\n\nexport const opensteerSemanticOperationSpecifications =\n opensteerSemanticOperationSpecificationsInternal.filter((spec) =>\n exposedSemanticOperationNameSet.has(spec.name),\n ) as readonly OpensteerSemanticOperationSpec[];\n\nexport const opensteerSemanticOperationSpecificationMap = Object.fromEntries(\n opensteerSemanticOperationSpecificationsInternal.map((spec) => [spec.name, spec]),\n) as Record<OpensteerSemanticOperationName, OpensteerSemanticOperationSpec>;\n\nconst semanticRestBasePath = `${OPENSTEER_PROTOCOL_REST_BASE_PATH}/semantic`;\n\nexport const opensteerSemanticRestEndpoints: readonly OpensteerSemanticRestEndpointDescriptor[] =\n opensteerSemanticOperationSpecifications.map((spec) => ({\n name: spec.name,\n method: \"POST\",\n path: `${semanticRestBasePath}/operations/${spec.name.replaceAll(\".\", \"/\")}`,\n description: spec.description,\n requestSchema: requestEnvelopeSchema(spec.inputSchema, spec.name),\n responseSchema: responseEnvelopeSchema(spec.outputSchema, spec.name),\n }));\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySettleTrigger,\n ActionBoundarySnapshot,\n BrowserCoreEngine,\n PageRef,\n ScreenshotArtifact as BrowserCoreScreenshotArtifact,\n} from \"@opensteer/browser-core\";\n\nimport type {\n OpensteerComputerAction,\n OpensteerComputerAnnotation,\n OpensteerComputerExecuteTiming,\n} from \"./semantic.js\";\nimport type { OpensteerEvent } from \"./events.js\";\nimport type { ViewportMetrics } from \"./geometry.js\";\nimport type { ScreenshotFormat } from \"./snapshots.js\";\n\nexport const OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL = Symbol.for(\"@opensteer/computer-use-bridge\");\n\nexport interface NormalizedComputerScreenshotOptions {\n readonly format: ScreenshotFormat;\n readonly includeCursor: boolean;\n readonly annotations: readonly OpensteerComputerAnnotation[];\n}\n\nexport interface ComputerUseBridgeInput {\n readonly pageRef: PageRef;\n readonly snapshot?: ActionBoundarySnapshot;\n readonly action: OpensteerComputerAction;\n readonly screenshot: NormalizedComputerScreenshotOptions;\n readonly signal: AbortSignal;\n remainingMs(): number | undefined;\n policySettle(\n pageRef: PageRef,\n trigger: ActionBoundarySettleTrigger,\n boundary?: ActionBoundaryOutcome,\n ): Promise<void>;\n}\n\nexport interface ComputerUseBridgeOutput {\n readonly pageRef: PageRef;\n readonly screenshot: BrowserCoreScreenshotArtifact;\n readonly viewport: ViewportMetrics;\n readonly events: readonly OpensteerEvent[];\n readonly timing: OpensteerComputerExecuteTiming;\n readonly boundary?: ActionBoundaryOutcome;\n}\n\nexport interface ComputerUseBridge {\n execute(input: ComputerUseBridgeInput): Promise<ComputerUseBridgeOutput>;\n}\n\nexport interface ComputerUseBridgeProvider {\n [OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL](): ComputerUseBridge;\n}\n\ntype ComputerUseBridgeFactory =\n ComputerUseBridgeProvider[typeof OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL];\n\nfunction isComputerUseBridgeFactory(value: unknown): value is ComputerUseBridgeFactory {\n return typeof value === \"function\";\n}\n\nexport function resolveComputerUseBridge(\n engine: BrowserCoreEngine | ComputerUseBridgeProvider,\n): ComputerUseBridge | undefined {\n const candidate = Reflect.get(engine, OPENSTEER_COMPUTER_USE_BRIDGE_SYMBOL);\n return isComputerUseBridgeFactory(candidate) ? candidate.call(engine) : undefined;\n}\n","import { OpensteerProtocolError } from \"@opensteer/protocol\";\n\nimport type { TimeoutExecutionContext, TimeoutPolicy, TimeoutResolutionInput } from \"./types.js\";\n\nclass PolicyTimeoutController implements TimeoutExecutionContext {\n readonly signal: AbortSignal;\n readonly budgetMs: number | undefined;\n readonly deadlineAt: number | undefined;\n\n private readonly controller = new AbortController();\n private readonly abortPromise: Promise<never> | undefined;\n private readonly removeParentAbortListener: (() => void) | undefined;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private readonly input: TimeoutResolutionInput,\n budgetMs: number | undefined,\n ) {\n this.signal = this.controller.signal;\n this.budgetMs = budgetMs;\n this.deadlineAt = budgetMs === undefined ? undefined : Date.now() + budgetMs;\n\n const parentSignal = input.signal;\n if (parentSignal !== undefined) {\n const onAbort = () => {\n this.controller.abort(parentSignal.reason ?? abortError());\n };\n if (parentSignal.aborted) {\n onAbort();\n } else {\n parentSignal.addEventListener(\"abort\", onAbort, { once: true });\n this.removeParentAbortListener = () => {\n parentSignal.removeEventListener(\"abort\", onAbort);\n };\n }\n }\n\n if (budgetMs === undefined) {\n this.abortPromise = undefined;\n return;\n }\n\n const timeoutError = createTimeoutError(input.operation, budgetMs);\n if (budgetMs === 0) {\n this.controller.abort(timeoutError);\n this.abortPromise = Promise.reject(timeoutError);\n this.abortPromise.catch(() => undefined);\n return;\n }\n\n this.abortPromise = new Promise<never>((_, reject) => {\n this.timer = setTimeout(() => {\n this.controller.abort(timeoutError);\n reject(timeoutError);\n }, budgetMs);\n });\n this.abortPromise.catch(() => undefined);\n }\n\n get operation() {\n return this.input.operation;\n }\n\n remainingMs(): number | undefined {\n if (this.deadlineAt === undefined) {\n return undefined;\n }\n\n return Math.max(0, this.deadlineAt - Date.now());\n }\n\n throwIfAborted(): void {\n if (!this.signal.aborted) {\n return;\n }\n\n throw this.signal.reason ?? abortError();\n }\n\n async runStep<T>(step: () => Promise<T>): Promise<T> {\n this.throwIfAborted();\n const stepPromise = Promise.resolve().then(step);\n const result =\n this.abortPromise === undefined\n ? await stepPromise\n : await Promise.race([stepPromise, this.abortPromise]);\n this.throwIfAborted();\n return result;\n }\n\n async execute<T>(operation: (context: TimeoutExecutionContext) => Promise<T>): Promise<T> {\n try {\n return await this.runStep(() => operation(this));\n } finally {\n if (this.timer !== undefined) {\n clearTimeout(this.timer);\n }\n this.removeParentAbortListener?.();\n }\n }\n}\n\nexport async function runWithPolicyTimeout<T>(\n policy: TimeoutPolicy,\n input: TimeoutResolutionInput,\n operation: (context: TimeoutExecutionContext) => Promise<T>,\n): Promise<T> {\n const budgetMs = policy.resolveTimeoutMs(input);\n const normalizedBudgetMs =\n budgetMs === undefined ? undefined : normalizeBudgetMs(input.operation, budgetMs);\n return new PolicyTimeoutController(input, normalizedBudgetMs).execute(operation);\n}\n\nfunction createTimeoutError(operation: string, budgetMs: number): OpensteerProtocolError {\n return new OpensteerProtocolError(\n \"timeout\",\n `operation ${operation} exceeded ${String(budgetMs)}ms timeout`,\n {\n details: {\n policy: \"timeout\",\n operation,\n budgetMs,\n },\n },\n );\n}\n\nfunction normalizeBudgetMs(operation: string, budgetMs: number): number {\n if (!Number.isFinite(budgetMs) || budgetMs < 0) {\n throw new Error(`timeout budget for ${operation} must be a non-negative finite number`);\n }\n\n return budgetMs;\n}\n\nfunction abortError() {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n","export type ElementPathErrorCode =\n | \"ERR_PATH_CONTEXT_HOST_NOT_FOUND\"\n | \"ERR_PATH_CONTEXT_HOST_NOT_UNIQUE\"\n | \"ERR_PATH_IFRAME_UNAVAILABLE\"\n | \"ERR_PATH_SHADOW_ROOT_UNAVAILABLE\"\n | \"ERR_PATH_TARGET_NOT_FOUND\"\n | \"ERR_PATH_TARGET_NOT_UNIQUE\";\n\nexport class ElementPathError extends Error {\n readonly code: ElementPathErrorCode;\n\n constructor(code: ElementPathErrorCode, message: string) {\n super(message);\n this.name = \"ElementPathError\";\n this.code = code;\n }\n}\n","import type { AttributeMatchClause, MatchClause, MatchOperator, PathNode } from \"./types.js\";\n\nexport const ATTRIBUTE_DENY_KEYS = new Set([\n \"style\",\n \"nonce\",\n \"integrity\",\n \"crossorigin\",\n \"referrerpolicy\",\n \"autocomplete\",\n]);\n\nexport const LAZY_LOADING_MEDIA_TAGS = new Set([\"img\", \"video\", \"source\", \"iframe\"]);\n\nexport const VOLATILE_LAZY_LOADING_ATTRS = new Set([\n \"data-src\",\n \"data-lazy-src\",\n \"data-original\",\n \"data-lazy\",\n \"data-image\",\n \"data-url\",\n \"data-srcset\",\n \"data-lazy-srcset\",\n \"data-was-processed\",\n]);\n\nexport const VOLATILE_CLASS_TOKENS = new Set([\"text-up\", \"text-down\"]);\n\nexport const VOLATILE_LAZY_CLASS_TOKENS = new Set([\n \"lazy\",\n \"loaded\",\n \"loading\",\n \"lazyload\",\n \"lazyloaded\",\n \"lazyloading\",\n]);\n\nexport const MATCH_ATTRIBUTE_PRIORITY = [\n \"class\",\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n \"id\",\n \"href\",\n \"value\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"alt\",\n] as const;\n\nexport const STABLE_PRIMARY_ATTR_KEYS = [\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n \"name\",\n \"role\",\n \"type\",\n \"aria-label\",\n \"title\",\n \"placeholder\",\n] as const;\n\nexport const DEFERRED_MATCH_ATTR_KEYS = [\n \"href\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"value\",\n \"for\",\n \"aria-controls\",\n \"aria-labelledby\",\n \"aria-describedby\",\n] as const;\n\nconst STABLE_PRIMARY_ATTR_KEY_SET = new Set<string>(STABLE_PRIMARY_ATTR_KEYS);\nconst DEFERRED_MATCH_ATTR_KEY_SET = new Set<string>(DEFERRED_MATCH_ATTR_KEYS);\nconst MATCH_ATTRIBUTE_PRIORITY_INDEX = new Map<string, number>(\n MATCH_ATTRIBUTE_PRIORITY.map((key, index) => [key, index]),\n);\n\nconst INTERNAL_ATTR_PREFIXES = [\"data-os-\", \"data-opensteer-\"];\n\nexport interface AttributeFilterOptions {\n readonly tag?: string;\n readonly allowClass?: boolean;\n}\n\nexport function isValidCssAttributeKey(key: string | null | undefined): boolean {\n if (key == null) {\n return false;\n }\n const normalized = String(key).trim();\n if (normalized.length === 0) {\n return false;\n }\n if (/[\\s\"'<>/]/.test(normalized)) {\n return false;\n }\n return /^[A-Za-z_][A-Za-z0-9_:\\-.]*$/.test(normalized);\n}\n\nexport function isMediaTag(tag: string | null | undefined): boolean {\n if (!tag) {\n return false;\n }\n return LAZY_LOADING_MEDIA_TAGS.has(String(tag).toLowerCase());\n}\n\nexport function shouldKeepAttributeForPath(\n name: string,\n value: string,\n options: AttributeFilterOptions = {},\n): boolean {\n const key = String(name || \"\")\n .trim()\n .toLowerCase();\n if (!key || !value.trim()) {\n return false;\n }\n if (!isValidCssAttributeKey(name)) {\n return false;\n }\n if (key === \"c\") {\n return false;\n }\n if (/^on[a-z]/i.test(key)) {\n return false;\n }\n if (ATTRIBUTE_DENY_KEYS.has(key)) {\n return false;\n }\n if (INTERNAL_ATTR_PREFIXES.some((prefix) => key.startsWith(prefix))) {\n return false;\n }\n if (options.allowClass === false && key === \"class\") {\n return false;\n }\n if (isMediaTag(options.tag) && VOLATILE_LAZY_LOADING_ATTRS.has(key)) {\n return false;\n }\n return true;\n}\n\nexport function sortAttributeKeys(keys: readonly string[]): string[] {\n return [...keys].sort((left, right) => {\n const leftRank = MATCH_ATTRIBUTE_PRIORITY_INDEX.get(left) ?? Number.MAX_SAFE_INTEGER;\n const rightRank = MATCH_ATTRIBUTE_PRIORITY_INDEX.get(right) ?? Number.MAX_SAFE_INTEGER;\n if (leftRank !== rightRank) {\n return leftRank - rightRank;\n }\n return left.localeCompare(right);\n });\n}\n\nexport function escapeCssAttrValue(value: string): string {\n return String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\n\nexport function buildLocalClausePool(node: PathNode): MatchClause[] {\n const attrs = node.attrs || {};\n const pool: MatchClause[] = [];\n\n const classValue = String(attrs.class || \"\").trim();\n if (classValue) {\n pool.push({\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: classValue,\n });\n }\n\n const keys = sortAttributeKeys(Object.keys(attrs));\n for (const key of keys) {\n if (key === \"class\") {\n continue;\n }\n const value = attrs[key];\n if (!value || !value.trim()) {\n continue;\n }\n if (shouldDeferMatchAttribute(key)) {\n continue;\n }\n pool.push({ kind: \"attr\", key, op: \"exact\" });\n }\n\n pool.push({ kind: \"position\", axis: \"nthOfType\" });\n pool.push({ kind: \"position\", axis: \"nthChild\" });\n\n const hasPrimary = pool.some((clause) => clause.kind === \"attr\");\n if (!hasPrimary) {\n pool.push(...collectDeferredMatchClauses(node));\n }\n\n return pool;\n}\n\nexport function collectDeferredMatchClauses(node: PathNode): MatchClause[] {\n const attrs = node.attrs || {};\n const deferred: MatchClause[] = [];\n\n const keys = sortAttributeKeys(Object.keys(attrs));\n for (const key of keys) {\n if (key === \"class\") {\n continue;\n }\n const value = attrs[key];\n if (!value || !value.trim() || !shouldDeferMatchAttribute(key)) {\n continue;\n }\n deferred.push({ kind: \"attr\", key, op: \"exact\" });\n }\n\n return deferred;\n}\n\nexport function shouldDeferMatchAttribute(rawKey: string): boolean {\n const key = String(rawKey || \"\")\n .trim()\n .toLowerCase();\n if (!key || key === \"class\") {\n return false;\n }\n if (isIdLikeAttributeKey(key)) {\n return true;\n }\n if (DEFERRED_MATCH_ATTR_KEY_SET.has(key)) {\n return true;\n }\n if (key.startsWith(\"data-\") && !STABLE_PRIMARY_ATTR_KEY_SET.has(key)) {\n return true;\n }\n return !STABLE_PRIMARY_ATTR_KEY_SET.has(key);\n}\n\nexport function isIdLikeAttributeKey(rawKey: string): boolean {\n const key = String(rawKey || \"\")\n .trim()\n .toLowerCase();\n if (!key) {\n return false;\n }\n if (key === \"id\") {\n return true;\n }\n return /(?:^|[-_:])id$/.test(key);\n}\n\nexport function getClauseAttributeValue(\n node: PathNode,\n clause: AttributeMatchClause,\n): string | null {\n if (typeof clause.value === \"string\") {\n return clause.value;\n }\n const raw = node.attrs?.[clause.key];\n if (raw == null) {\n return null;\n }\n return String(raw);\n}\n\nexport function matchAttrValue(\n actual: string | null,\n expected: string,\n op: MatchOperator = \"exact\",\n _key?: string,\n): boolean {\n if (actual == null) {\n return false;\n }\n const normalized = String(actual);\n if (op === \"startsWith\") {\n return normalized.startsWith(expected);\n }\n if (op === \"contains\") {\n return normalized.includes(expected);\n }\n return normalized === expected;\n}\n","import type { DomPath, MatchClause, PathNode } from \"./types.js\";\nimport {\n escapeCssAttrValue,\n getClauseAttributeValue,\n isValidCssAttributeKey,\n} from \"./match-policy.js\";\n\nexport function buildPathCandidates(domPath: DomPath): string[] {\n const nodes = Array.isArray(domPath) ? domPath : [];\n if (!nodes.length) {\n return [];\n }\n\n const segments = nodes.map((node) => buildSegmentSelector(node));\n return buildSuffixCandidates(segments);\n}\n\nexport function buildSegmentSelector(node: PathNode): string {\n const tag = String(node?.tag || \"*\").toLowerCase();\n const clauses = Array.isArray(node?.match) ? node.match : [];\n let selector = tag || \"*\";\n\n for (const clause of clauses) {\n selector += buildClauseSelector(node, clause);\n }\n\n return selector;\n}\n\nfunction buildClauseSelector(node: PathNode, clause: MatchClause): string {\n if (!clause || typeof clause !== \"object\") {\n return \"\";\n }\n\n if (clause.kind === \"text\") {\n return \"\";\n }\n\n if (clause.kind === \"position\") {\n if (clause.axis === \"nthOfType\") {\n return `:nth-of-type(${Math.max(1, Number(node.position?.nthOfType || 1))})`;\n }\n return `:nth-child(${Math.max(1, Number(node.position?.nthChild || 1))})`;\n }\n\n const key = String(clause.key || \"\").trim();\n if (!isValidCssAttributeKey(key)) {\n return \"\";\n }\n\n const value = getClauseAttributeValue(node, clause);\n if (!value) {\n return \"\";\n }\n\n const op = clause.op || \"exact\";\n if (key === \"class\" && op === \"exact\") {\n const classClauses = buildClassTokenSelectors(value);\n if (classClauses) {\n return classClauses;\n }\n }\n\n if (op === \"startsWith\") {\n return `[${key}^=\"${escapeCssAttrValue(value)}\"]`;\n }\n if (op === \"contains\") {\n return `[${key}*=\"${escapeCssAttrValue(value)}\"]`;\n }\n return `[${key}=\"${escapeCssAttrValue(value)}\"]`;\n}\n\nfunction buildClassTokenSelectors(value: string): string {\n const tokens = tokenizeClassValue(value);\n if (!tokens.length) {\n return `[class=\"${escapeCssAttrValue(value)}\"]`;\n }\n\n return tokens.map((token) => `[class~=\"${escapeCssAttrValue(token)}\"]`).join(\"\");\n}\n\nfunction tokenizeClassValue(value: string): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n\n for (const token of String(value || \"\").split(/\\s+/)) {\n const normalized = token.trim();\n if (!normalized || seen.has(normalized)) {\n continue;\n }\n seen.add(normalized);\n out.push(normalized);\n }\n\n return out;\n}\n\nfunction buildSuffixCandidates(segments: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n\n for (let start = 0; start < segments.length; start += 1) {\n const selector = segments.slice(start).join(\" \");\n if (!selector || seen.has(selector)) {\n continue;\n }\n seen.add(selector);\n out.push(selector);\n }\n\n return out;\n}\n","import type { DomArrayFieldSelector, DomExtractFieldSelector, ElementPath } from \"./types.js\";\nimport { buildPathCandidates } from \"./match-selectors.js\";\n\nconst URL_LIST_ATTRIBUTES = new Set([\"srcset\", \"imagesrcset\", \"ping\"]);\nconst IFRAME_URL_ATTRIBUTES = new Set([\n \"href\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"action\",\n \"formaction\",\n \"poster\",\n \"ping\",\n]);\n\ninterface SrcsetCandidate {\n readonly url: string;\n readonly width: number | null;\n readonly density: number | null;\n}\n\nexport function buildArrayFieldPathCandidates(path: ElementPath): string[] {\n const strict = path.nodes.length ? buildPathCandidates(path.nodes) : [];\n const relaxedNodes = stripPositionClauses(path.nodes);\n const relaxed = relaxedNodes.length ? buildPathCandidates(relaxedNodes) : [];\n return dedupeSelectors([...strict, ...relaxed]);\n}\n\nexport function isCurrentUrlField(field: DomExtractFieldSelector | DomArrayFieldSelector): boolean {\n return field.source === \"current_url\";\n}\n\nexport function normalizeExtractedValue(raw: unknown, attribute?: string): string | null {\n if (raw == null) {\n return null;\n }\n\n const rawText = String(raw);\n if (!rawText.trim()) {\n return null;\n }\n\n const normalizedAttribute = String(attribute || \"\")\n .trim()\n .toLowerCase();\n\n if (URL_LIST_ATTRIBUTES.has(normalizedAttribute)) {\n const singleValue = pickSingleListAttributeValue(normalizedAttribute, rawText).trim();\n return singleValue || null;\n }\n\n const text = rawText.replace(/\\s+/g, \" \").trim();\n return text || null;\n}\n\nexport function resolveExtractedValueInContext(\n normalizedValue: string | null,\n options: {\n readonly attribute?: string;\n readonly baseURI?: string | null;\n readonly insideIframe?: boolean;\n },\n): string | null {\n if (normalizedValue == null) {\n return null;\n }\n\n const normalizedAttribute = String(options.attribute || \"\")\n .trim()\n .toLowerCase();\n\n if (!options.insideIframe) {\n return normalizedValue;\n }\n if (!IFRAME_URL_ATTRIBUTES.has(normalizedAttribute)) {\n return normalizedValue;\n }\n\n const baseURI = String(options.baseURI || \"\").trim();\n if (!baseURI) {\n return normalizedValue;\n }\n\n try {\n return new URL(normalizedValue, baseURI).href;\n } catch {\n return normalizedValue;\n }\n}\n\nfunction stripPositionClauses(nodes: ElementPath[\"nodes\"]): ElementPath[\"nodes\"] {\n return (nodes || []).map((node) => ({\n ...node,\n match: (node.match || []).filter(\n (clause) => clause.kind !== \"position\" && clause.kind !== \"text\",\n ),\n }));\n}\n\nfunction dedupeSelectors(selectors: readonly string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const selector of selectors) {\n if (!selector || seen.has(selector)) {\n continue;\n }\n seen.add(selector);\n out.push(selector);\n }\n return out;\n}\n\nfunction pickSingleListAttributeValue(attribute: string, raw: string): string {\n if (attribute === \"ping\") {\n const firstUrl = raw.trim().split(/\\s+/)[0] || \"\";\n return firstUrl.trim();\n }\n\n if (attribute === \"srcset\" || attribute === \"imagesrcset\") {\n const picked = pickBestSrcsetCandidate(raw);\n if (picked) {\n return picked;\n }\n return pickFirstSrcsetToken(raw) || \"\";\n }\n\n return raw.trim();\n}\n\nfunction pickBestSrcsetCandidate(raw: string): string | null {\n const candidates = parseSrcsetCandidates(raw);\n if (!candidates.length) {\n return null;\n }\n\n const widthCandidates = candidates.filter(hasWidth);\n if (widthCandidates.length) {\n return widthCandidates.reduce((best, candidate) =>\n candidate.width > best.width ? candidate : best,\n ).url;\n }\n\n const densityCandidates = candidates.filter(hasDensity);\n if (densityCandidates.length) {\n return densityCandidates.reduce((best, candidate) =>\n candidate.density > best.density ? candidate : best,\n ).url;\n }\n\n return candidates[0]?.url || null;\n}\n\nfunction parseSrcsetCandidates(raw: string): SrcsetCandidate[] {\n const text = String(raw || \"\").trim();\n if (!text) {\n return [];\n }\n\n const out: SrcsetCandidate[] = [];\n let index = 0;\n\n while (index < text.length) {\n index = skipSeparators(text, index);\n if (index >= text.length) {\n break;\n }\n\n const urlToken = readUrlToken(text, index);\n index = urlToken.nextIndex;\n const url = urlToken.value.trim();\n if (!url) {\n continue;\n }\n\n index = skipWhitespace(text, index);\n const descriptors: string[] = [];\n while (index < text.length && text[index] !== \",\") {\n const descriptorToken = readDescriptorToken(text, index);\n if (!descriptorToken.value) {\n index = descriptorToken.nextIndex;\n continue;\n }\n descriptors.push(descriptorToken.value);\n index = descriptorToken.nextIndex;\n index = skipWhitespace(text, index);\n }\n if (index < text.length && text[index] === \",\") {\n index += 1;\n }\n\n let width: number | null = null;\n let density: number | null = null;\n for (const descriptor of descriptors) {\n const token = descriptor.trim().toLowerCase();\n if (!token) {\n continue;\n }\n\n const widthMatch = token.match(/^(\\d+)w$/);\n if (widthMatch) {\n const parsed = Number.parseInt(widthMatch[1]!, 10);\n if (Number.isFinite(parsed)) {\n width = parsed;\n }\n continue;\n }\n\n const densityMatch = token.match(/^(\\d*\\.?\\d+)x$/);\n if (densityMatch) {\n const parsed = Number.parseFloat(densityMatch[1]!);\n if (Number.isFinite(parsed)) {\n density = parsed;\n }\n }\n }\n\n out.push({\n url,\n width,\n density,\n });\n }\n\n return out;\n}\n\nfunction hasWidth(\n candidate: SrcsetCandidate,\n): candidate is SrcsetCandidate & { readonly width: number } {\n return (\n typeof candidate.width === \"number\" && Number.isFinite(candidate.width) && candidate.width > 0\n );\n}\n\nfunction hasDensity(\n candidate: SrcsetCandidate,\n): candidate is SrcsetCandidate & { readonly density: number } {\n return (\n typeof candidate.density === \"number\" &&\n Number.isFinite(candidate.density) &&\n candidate.density > 0\n );\n}\n\nfunction pickFirstSrcsetToken(raw: string): string | null {\n const candidate = parseSrcsetCandidates(raw)[0];\n if (candidate?.url) {\n return candidate.url;\n }\n\n const text = String(raw || \"\");\n const start = skipSeparators(text, 0);\n if (start >= text.length) {\n return null;\n }\n\n const firstToken = readUrlToken(text, start).value.trim();\n return firstToken || null;\n}\n\nfunction skipWhitespace(value: string, index: number): number {\n let cursor = index;\n while (cursor < value.length && /\\s/.test(value[cursor]!)) {\n cursor += 1;\n }\n return cursor;\n}\n\nfunction skipSeparators(value: string, index: number): number {\n let cursor = skipWhitespace(value, index);\n while (cursor < value.length && value[cursor] === \",\") {\n cursor += 1;\n cursor = skipWhitespace(value, cursor);\n }\n return cursor;\n}\n\nfunction readUrlToken(value: string, index: number): { value: string; nextIndex: number } {\n let cursor = index;\n let out = \"\";\n const isDataUrl = value\n .slice(index, index + 5)\n .toLowerCase()\n .startsWith(\"data:\");\n\n while (cursor < value.length) {\n const char = value[cursor]!;\n if (/\\s/.test(char)) {\n break;\n }\n if (char === \",\" && !isDataUrl) {\n break;\n }\n out += char;\n cursor += 1;\n }\n\n if (isDataUrl && out.endsWith(\",\") && cursor < value.length) {\n out = out.slice(0, -1);\n }\n\n return {\n value: out,\n nextIndex: cursor,\n };\n}\n\nfunction readDescriptorToken(value: string, index: number): { value: string; nextIndex: number } {\n let cursor = skipWhitespace(value, index);\n let out = \"\";\n\n while (cursor < value.length) {\n const char = value[cursor]!;\n if (char === \",\" || /\\s/.test(char)) {\n break;\n }\n out += char;\n cursor += 1;\n }\n\n return {\n value: out.trim(),\n nextIndex: cursor,\n };\n}\n","import type { DomSnapshot, DomSnapshotNode, NodeRef } from \"@opensteer/browser-core\";\nimport { selectAll } from \"css-select\";\n\nexport interface DomSnapshotIndex {\n readonly snapshot: DomSnapshot;\n readonly rootNode: DomSnapshotNode;\n readonly nodesBySnapshotNodeId: ReadonlyMap<number, DomSnapshotNode>;\n readonly nodesByNodeRef: ReadonlyMap<NodeRef, DomSnapshotNode>;\n}\n\nexport interface DomQueryScope {\n readonly shadowHostNodeRef?: NodeRef;\n readonly pierceOpenShadow: boolean;\n}\n\ninterface SelectorRootNode {\n readonly kind: \"root\";\n children: SelectorNode[];\n}\n\ninterface SelectorElementNode {\n readonly kind: \"element\";\n readonly source: DomSnapshotNode;\n readonly parent: SelectorNode;\n children: SelectorNode[];\n}\n\ntype SelectorNode = SelectorRootNode | SelectorElementNode;\n\nconst selectorAdapter = {\n isTag(node: SelectorNode): node is SelectorElementNode {\n return node.kind === \"element\" && node.source.nodeType === 1;\n },\n getAttributeValue(element: SelectorElementNode, name: string): string | undefined {\n const normalizedName = name.toLowerCase();\n return element.source.attributes.find(\n (attribute) => attribute.name.toLowerCase() === normalizedName,\n )?.value;\n },\n getChildren(node: SelectorNode): SelectorNode[] {\n return node.children;\n },\n getName(element: SelectorElementNode): string {\n return element.source.nodeName.toLowerCase();\n },\n getParent(node: SelectorElementNode): SelectorNode | null {\n return node.parent;\n },\n getSiblings(node: SelectorNode): SelectorNode[] {\n return node.kind === \"root\" ? [node] : node.parent.children;\n },\n prevElementSibling(node: SelectorNode): SelectorElementNode | null {\n if (node.kind === \"root\") {\n return null;\n }\n const siblings = node.parent.children;\n const index = siblings.indexOf(node);\n for (let cursor = index - 1; cursor >= 0; cursor -= 1) {\n const sibling = siblings[cursor];\n if (sibling?.kind === \"element\" && sibling.source.nodeType === 1) {\n return sibling;\n }\n }\n return null;\n },\n getText(node: SelectorNode): string {\n if (node.kind === \"root\") {\n return node.children.map((child) => selectorAdapter.getText(child)).join(\"\");\n }\n if (node.source.textContent !== undefined) {\n return node.source.textContent;\n }\n return node.children.map((child) => selectorAdapter.getText(child)).join(\"\");\n },\n hasAttrib(element: SelectorElementNode, name: string): boolean {\n const normalizedName = name.toLowerCase();\n return element.source.attributes.some(\n (attribute) => attribute.name.toLowerCase() === normalizedName,\n );\n },\n removeSubsets(nodes: SelectorNode[]): SelectorNode[] {\n const unique = Array.from(new Set<SelectorNode>(nodes));\n const uniqueSet = new Set(unique);\n return unique.filter((node) => {\n let current = node.kind === \"element\" ? node.parent : null;\n while (current) {\n if (uniqueSet.has(current)) {\n return false;\n }\n current = current.kind === \"element\" ? current.parent : null;\n }\n return true;\n });\n },\n equals(left: SelectorNode, right: SelectorNode): boolean {\n return left === right;\n },\n existsOne(test: (node: SelectorElementNode) => boolean, nodes: SelectorNode[]): boolean {\n return selectorAdapter.findOne(test, nodes) !== null;\n },\n findAll(\n test: (node: SelectorElementNode) => boolean,\n nodes: SelectorNode[],\n ): SelectorElementNode[] {\n const matches: SelectorElementNode[] = [];\n const visit = (node: SelectorNode): void => {\n if (selectorAdapter.isTag(node) && test(node)) {\n matches.push(node);\n }\n for (const child of selectorAdapter.getChildren(node)) {\n visit(child);\n }\n };\n for (const node of nodes) {\n visit(node);\n }\n return matches;\n },\n findOne(\n test: (node: SelectorElementNode) => boolean,\n nodes: SelectorNode[],\n ): SelectorElementNode | null {\n const visit = (node: SelectorNode): SelectorElementNode | null => {\n if (selectorAdapter.isTag(node) && test(node)) {\n return node;\n }\n for (const child of selectorAdapter.getChildren(node)) {\n const match = visit(child);\n if (match !== null) {\n return match;\n }\n }\n return null;\n };\n for (const node of nodes) {\n const match = visit(node);\n if (match !== null) {\n return match;\n }\n }\n return null;\n },\n};\n\nexport function createDomSnapshotIndex(snapshot: DomSnapshot): DomSnapshotIndex {\n const nodesBySnapshotNodeId = new Map<number, DomSnapshotNode>();\n const nodesByNodeRef = new Map<NodeRef, DomSnapshotNode>();\n for (const node of snapshot.nodes) {\n nodesBySnapshotNodeId.set(node.snapshotNodeId, node);\n if (node.nodeRef !== undefined) {\n nodesByNodeRef.set(node.nodeRef, node);\n }\n }\n\n const rootNode = nodesBySnapshotNodeId.get(snapshot.rootSnapshotNodeId);\n if (!rootNode) {\n throw new Error(\n `snapshot ${snapshot.documentRef} is missing root node ${String(snapshot.rootSnapshotNodeId)}`,\n );\n }\n\n return {\n snapshot,\n rootNode,\n nodesBySnapshotNodeId,\n nodesByNodeRef,\n };\n}\n\nexport function findNodeBySnapshotNodeId(\n index: DomSnapshotIndex,\n snapshotNodeId: number,\n): DomSnapshotNode | undefined {\n return index.nodesBySnapshotNodeId.get(snapshotNodeId);\n}\n\nexport function findNodeByNodeRef(\n index: DomSnapshotIndex,\n nodeRef: NodeRef,\n): DomSnapshotNode | undefined {\n return index.nodesByNodeRef.get(nodeRef);\n}\n\nexport function normalizeToElementNode(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n): DomSnapshotNode | undefined {\n let current: DomSnapshotNode | undefined = node;\n while (current) {\n if (current.nodeType === 1) {\n return current;\n }\n current =\n current.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n }\n return undefined;\n}\n\nexport function findIframeHostNode(\n index: DomSnapshotIndex,\n contentDocumentRef: string,\n): DomSnapshotNode | undefined {\n return index.snapshot.nodes.find(\n (node) => node.nodeType === 1 && node.contentDocumentRef === contentDocumentRef,\n );\n}\n\nexport function hasShadowRoot(index: DomSnapshotIndex, hostNode: DomSnapshotNode): boolean {\n const hostRef = hostNode.nodeRef;\n if (hostRef === undefined) {\n return false;\n }\n return index.snapshot.nodes.some(\n (node) => findContainingShadowHostNode(index, node)?.nodeRef === hostRef,\n );\n}\n\nexport function findContainingShadowHostNode(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n): DomSnapshotNode | undefined {\n if (node.shadowHostNodeRef !== undefined) {\n return findNodeByNodeRef(index, node.shadowHostNodeRef);\n }\n\n if (node.shadowRootType === undefined) {\n return undefined;\n }\n\n let current =\n node.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, node.parentSnapshotNodeId);\n while (current) {\n if (current.shadowRootType === undefined) {\n return normalizeToElementNode(index, current);\n }\n current =\n current.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n }\n\n return undefined;\n}\n\nexport function isSameNodeOrDescendant(\n index: DomSnapshotIndex,\n nodeRef: NodeRef,\n ancestorNodeRef: NodeRef,\n): boolean {\n if (nodeRef === ancestorNodeRef) {\n return true;\n }\n\n const start = findNodeByNodeRef(index, nodeRef);\n if (!start) {\n return false;\n }\n\n const stack: DomSnapshotNode[] = [start];\n const visited = new Set<number>();\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (current.nodeRef === ancestorNodeRef) {\n return true;\n }\n if (visited.has(current.snapshotNodeId)) {\n continue;\n }\n visited.add(current.snapshotNodeId);\n\n if (current.parentSnapshotNodeId !== undefined) {\n const parent = findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n if (parent) {\n stack.push(parent);\n }\n }\n\n if (current.shadowHostNodeRef !== undefined) {\n const host = findNodeByNodeRef(index, current.shadowHostNodeRef);\n if (host) {\n stack.push(host);\n }\n }\n }\n\n return false;\n}\n\nexport function querySelectorAllInScope(\n index: DomSnapshotIndex,\n selector: string,\n scope: DomQueryScope,\n): DomSnapshotNode[] {\n const root = buildScopeRoot(index, scope);\n const matches = selectAll<SelectorNode, SelectorElementNode>(selector, root, {\n adapter: selectorAdapter,\n cacheResults: false,\n });\n return matches.map((match) => match.source);\n}\n\nexport function querySelectorAllWithinNode(\n index: DomSnapshotIndex,\n rootNode: DomSnapshotNode,\n selector: string,\n scope: DomQueryScope,\n): DomSnapshotNode[] {\n const rootShadowHostNodeRef = findContainingShadowHostNode(index, rootNode)?.nodeRef;\n const wrapper = buildElementWrapper(index, rootNode, {\n pierceOpenShadow: scope.pierceOpenShadow,\n ...(rootShadowHostNodeRef === undefined\n ? {}\n : { currentShadowHostNodeRef: rootShadowHostNodeRef }),\n });\n const matches = selectAll<SelectorNode, SelectorElementNode>(selector, wrapper, {\n adapter: selectorAdapter,\n cacheResults: false,\n });\n return matches.map((match) => match.source);\n}\n\nfunction buildScopeRoot(index: DomSnapshotIndex, scope: DomQueryScope): SelectorRootNode {\n const root: SelectorRootNode = {\n kind: \"root\",\n children: [],\n };\n const childSources = collectScopeEntryNodes(index, scope.shadowHostNodeRef);\n root.children = childSources.map((child) =>\n buildElementWrapper(index, child, {\n pierceOpenShadow: scope.pierceOpenShadow,\n parent: root,\n ...(scope.shadowHostNodeRef === undefined\n ? {}\n : { currentShadowHostNodeRef: scope.shadowHostNodeRef }),\n }),\n );\n return root;\n}\n\nfunction buildElementWrapper(\n index: DomSnapshotIndex,\n source: DomSnapshotNode,\n options: {\n readonly currentShadowHostNodeRef?: NodeRef;\n readonly pierceOpenShadow: boolean;\n readonly parent?: SelectorNode;\n },\n): SelectorElementNode {\n const parent = options.parent ?? createSelectorRootNode();\n\n const wrapper: SelectorElementNode = {\n kind: \"element\",\n source,\n parent,\n children: [],\n };\n\n const childSources = collectChildNodes(\n index,\n source,\n options.currentShadowHostNodeRef,\n options.pierceOpenShadow,\n );\n wrapper.children = childSources.map((child) => {\n const currentShadowHostNodeRef = resolveCurrentShadowHostNodeRef(\n index,\n child,\n options.currentShadowHostNodeRef,\n );\n\n if (currentShadowHostNodeRef === undefined) {\n return buildElementWrapper(index, child, {\n pierceOpenShadow: options.pierceOpenShadow,\n parent: wrapper,\n });\n }\n\n return buildElementWrapper(index, child, {\n pierceOpenShadow: options.pierceOpenShadow,\n parent: wrapper,\n currentShadowHostNodeRef,\n });\n });\n\n return wrapper;\n}\n\nfunction createSelectorRootNode(): SelectorRootNode {\n return {\n kind: \"root\",\n children: [],\n };\n}\n\nfunction collectScopeEntryNodes(\n index: DomSnapshotIndex,\n shadowHostNodeRef: NodeRef | undefined,\n): DomSnapshotNode[] {\n if (shadowHostNodeRef === undefined) {\n return collectDirectChildren(index, index.rootNode, shadowHostNodeRef);\n }\n\n const hostNode = findNodeByNodeRef(index, shadowHostNodeRef);\n if (!hostNode) {\n return [];\n }\n\n return collectDirectChildren(index, hostNode, shadowHostNodeRef);\n}\n\nfunction collectChildNodes(\n index: DomSnapshotIndex,\n source: DomSnapshotNode,\n currentShadowHostNodeRef: NodeRef | undefined,\n pierceOpenShadow: boolean,\n): DomSnapshotNode[] {\n const children = collectDirectChildren(index, source, currentShadowHostNodeRef);\n if (!pierceOpenShadow || source.nodeRef === undefined) {\n return children;\n }\n\n const openShadowChildren = source.childSnapshotNodeIds\n .map((snapshotNodeId) => findNodeBySnapshotNodeId(index, snapshotNodeId))\n .filter((node): node is DomSnapshotNode => {\n if (!node || node.nodeType !== 1) {\n return false;\n }\n return (\n node.shadowRootType === \"open\" &&\n findContainingShadowHostNode(index, node)?.nodeRef === source.nodeRef\n );\n });\n\n return sortNodes([...children, ...openShadowChildren]);\n}\n\nfunction collectDirectChildren(\n index: DomSnapshotIndex,\n source: DomSnapshotNode,\n expectedShadowHostNodeRef: NodeRef | undefined,\n): DomSnapshotNode[] {\n return sortNodes(\n source.childSnapshotNodeIds\n .map((snapshotNodeId) => findNodeBySnapshotNodeId(index, snapshotNodeId))\n .filter(\n (node): node is DomSnapshotNode =>\n !!node &&\n node.nodeType === 1 &&\n findContainingShadowHostNode(index, node)?.nodeRef === expectedShadowHostNodeRef,\n ),\n );\n}\n\nfunction resolveCurrentShadowHostNodeRef(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n fallback: NodeRef | undefined,\n): NodeRef | undefined {\n const shadowHostNodeRef = findContainingShadowHostNode(index, node)?.nodeRef;\n return shadowHostNodeRef ?? fallback;\n}\n\nfunction sortNodes(nodes: readonly DomSnapshotNode[]): DomSnapshotNode[] {\n return [...nodes].sort((left, right) => left.snapshotNodeId - right.snapshotNodeId);\n}\n","import type { DomSnapshot, DomSnapshotNode, NodeRef } from \"@opensteer/browser-core\";\n\nimport { ElementPathError } from \"./errors.js\";\nimport { buildArrayFieldPathCandidates } from \"./extraction.js\";\nimport { buildPathCandidates, buildSegmentSelector } from \"./match-selectors.js\";\nimport {\n DEFERRED_MATCH_ATTR_KEYS,\n MATCH_ATTRIBUTE_PRIORITY,\n STABLE_PRIMARY_ATTR_KEYS,\n buildLocalClausePool,\n isValidCssAttributeKey,\n shouldKeepAttributeForPath,\n} from \"./match-policy.js\";\nimport {\n createDomSnapshotIndex,\n findContainingShadowHostNode,\n findNodeByNodeRef,\n findNodeBySnapshotNodeId,\n querySelectorAllInScope,\n querySelectorAllWithinNode,\n type DomQueryScope,\n type DomSnapshotIndex,\n} from \"./selectors.js\";\nimport type {\n MatchClause,\n PathNode,\n PathNodePosition,\n ReplayElementPath,\n StructuralElementAnchor,\n TextMatchClause,\n} from \"./types.js\";\n\nconst MAX_ATTRIBUTE_VALUE_LENGTH = 300;\n\ninterface ResolveMatch {\n readonly node: DomSnapshotNode;\n readonly selector: string;\n readonly mode: \"unique\" | \"fallback\";\n readonly count: number;\n}\n\ninterface CandidateDiagnostic {\n readonly selector: string;\n readonly count: number;\n}\n\nexport function cloneStructuralElementAnchor(\n anchor: StructuralElementAnchor,\n): StructuralElementAnchor {\n return {\n resolution: \"structural\",\n context: cloneContext(anchor.context),\n nodes: anchor.nodes.map(clonePathNode),\n };\n}\n\nexport function cloneReplayElementPath(path: ReplayElementPath): ReplayElementPath {\n return {\n resolution: \"deterministic\",\n context: cloneContext(path.context),\n nodes: path.nodes.map(clonePathNode),\n };\n}\n\nexport function cloneElementPath(path: ReplayElementPath): ReplayElementPath {\n return cloneReplayElementPath(path);\n}\n\nexport function buildPathSelectorHint(\n path: { readonly nodes: readonly PathNode[] } | null | undefined,\n): string {\n const nodes = path?.nodes || [];\n const last = nodes[nodes.length - 1];\n if (!last) {\n return \"*\";\n }\n const tag = String(last.tag || \"*\").toLowerCase();\n const id = last.attrs?.id?.trim();\n if (id) {\n return `${tag}#${sanitizeHintToken(id)}`;\n }\n\n const testId = firstDefinedAttribute(last, [\"data-testid\", \"data-test\", \"data-qa\", \"data-cy\"]);\n if (testId) {\n return `${tag}[data-testid=\"${sanitizeHintToken(testId)}\"]`;\n }\n\n const name = last.attrs?.name?.trim();\n if (name) {\n return `${tag}[name=\"${sanitizeHintToken(name)}\"]`;\n }\n\n const role = last.attrs?.role?.trim();\n if (role) {\n return `${tag}[role=\"${sanitizeHintToken(role)}\"]`;\n }\n\n const classToken = last.attrs?.class\n ?.split(/\\s+/)\n .map((token) => token.trim())\n .find((token) => token.length > 0);\n if (classToken) {\n return `${tag}.${sanitizeHintToken(classToken)}`;\n }\n\n return buildSegmentSelector(last);\n}\n\nexport function createPathScope(shadowHostNodeRef?: NodeRef): DomQueryScope {\n return {\n ...(shadowHostNodeRef === undefined ? {} : { shadowHostNodeRef }),\n pierceOpenShadow: false,\n };\n}\n\nexport function createExplicitSelectorScope(): DomQueryScope {\n return {\n pierceOpenShadow: true,\n };\n}\n\nexport function createSnapshotIndex(snapshot: DomSnapshot) {\n return createDomSnapshotIndex(snapshot);\n}\n\nexport function sanitizeStructuralElementAnchor(\n anchor: StructuralElementAnchor,\n): StructuralElementAnchor {\n return {\n resolution: \"structural\",\n context: sanitizeContext(anchor.context),\n nodes: sanitizeNodes(anchor.nodes),\n };\n}\n\nexport function sanitizeReplayElementPath(path: ReplayElementPath): ReplayElementPath {\n return {\n resolution: \"deterministic\",\n context: sanitizeContext(path.context),\n nodes: sanitizeNodes(path.nodes),\n };\n}\n\nexport function sanitizeElementPath(path: ReplayElementPath): ReplayElementPath {\n return sanitizeReplayElementPath(path);\n}\n\nexport function buildLocalStructuralElementAnchor(\n index: DomSnapshotIndex,\n rawTargetNode: DomSnapshotNode,\n): StructuralElementAnchor {\n const targetNode = requireElementNode(index, rawTargetNode);\n const nodes = captureScopedStructuralNodes(index, targetNode);\n const shadowHost = findContainingShadowHostNode(index, targetNode);\n if (!shadowHost) {\n return sanitizeStructuralElementAnchor({\n resolution: \"structural\",\n context: [],\n nodes,\n });\n }\n\n const hostAnchor = buildLocalStructuralElementAnchor(index, shadowHost);\n return sanitizeStructuralElementAnchor({\n resolution: \"structural\",\n context: [\n ...hostAnchor.context,\n { kind: \"shadow\", host: cloneStructuralElementAnchor(hostAnchor).nodes },\n ],\n nodes,\n });\n}\n\nexport function resolveDomPathInScope(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): ResolveMatch | null {\n const candidates = buildPathCandidates(domPath);\n if (!candidates.length) {\n return null;\n }\n\n const lastNode = domPath[domPath.length - 1];\n const textClauses = lastNode?.match.filter((c): c is TextMatchClause => c.kind === \"text\") ?? [];\n\n let fallback: ResolveMatch | null = null;\n for (const selector of candidates) {\n let matches = querySelectorAllInScope(index, selector, scope);\n if (textClauses.length > 0 && matches.length > 1) {\n const filtered = matches.filter((node) => matchesTextClauses(node, textClauses));\n if (filtered.length > 0) {\n matches = filtered;\n }\n }\n if (matches.length === 1) {\n return {\n node: matches[0]!,\n selector,\n mode: \"unique\",\n count: 1,\n };\n }\n if (matches.length > 1 && fallback === null) {\n fallback = {\n node: matches[0]!,\n selector,\n mode: \"fallback\",\n count: matches.length,\n };\n }\n }\n\n return fallback;\n}\n\nfunction matchesTextClauses(node: DomSnapshotNode, clauses: readonly TextMatchClause[]): boolean {\n const text = (node.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n return clauses.every((clause) => text.includes(clause.value));\n}\n\nexport function queryAllDomPathInScope(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): DomSnapshotNode[] {\n const selectors = buildPathCandidates(domPath);\n for (const selector of selectors) {\n const matches = querySelectorAllInScope(index, selector, scope);\n if (matches.length > 0) {\n return matches;\n }\n }\n return [];\n}\n\nexport function resolveFirstWithinNodeBySelectors(\n index: DomSnapshotIndex,\n rootNode: DomSnapshotNode,\n selectors: readonly string[],\n): DomSnapshotNode | null {\n if (!selectors.length) {\n return null;\n }\n\n let fallback: DomSnapshotNode | null = null;\n for (const selector of selectors) {\n const matches = querySelectorAllWithinNode(index, rootNode, selector, createPathScope());\n if (matches.length === 1) {\n return matches[0]!;\n }\n if (matches.length > 1 && fallback === null) {\n fallback = matches[0]!;\n }\n }\n\n return fallback;\n}\n\nexport function collectCandidateDiagnostics(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): CandidateDiagnostic[] {\n return buildPathCandidates(domPath).map((selector) => ({\n selector,\n count: querySelectorAllInScope(index, selector, scope).length,\n }));\n}\n\nexport function resolveStructuralAnchorInScope(\n index: DomSnapshotIndex,\n anchorNodes: StructuralElementAnchor[\"nodes\"],\n scope: DomQueryScope,\n): ResolveMatch | null {\n const matches = queryAllStructuralAnchorInScope(index, anchorNodes, scope);\n if (matches.length === 0) {\n return null;\n }\n\n return {\n node: matches[0]!,\n selector: buildPathSelectorHint({ nodes: anchorNodes }),\n mode: matches.length === 1 ? \"unique\" : \"fallback\",\n count: matches.length,\n };\n}\n\nexport function queryAllStructuralAnchorInScope(\n index: DomSnapshotIndex,\n anchorNodes: StructuralElementAnchor[\"nodes\"],\n scope: DomQueryScope,\n): DomSnapshotNode[] {\n if (!anchorNodes.length) {\n return [];\n }\n\n const scopeHostNodeRef = scope.shadowHostNodeRef;\n const scopeRoot =\n scopeHostNodeRef === undefined ? index.rootNode : findNodeByNodeRef(index, scopeHostNodeRef);\n if (!scopeRoot) {\n return [];\n }\n\n let matches = collectChildrenInScope(index, scopeRoot, scopeHostNodeRef).filter((node) =>\n matchesStructuralAnchorNode(index, node, anchorNodes[0]!, scopeHostNodeRef),\n );\n for (let depth = 1; depth < anchorNodes.length && matches.length > 0; depth += 1) {\n const nextAnchorNode = anchorNodes[depth]!;\n matches = matches.flatMap((parent) =>\n collectChildrenInScope(index, parent, scopeHostNodeRef).filter((child) =>\n matchesStructuralAnchorNode(index, child, nextAnchorNode, scopeHostNodeRef),\n ),\n );\n }\n\n return matches;\n}\n\nexport function buildTargetNotFoundMessage(\n domPath: ReplayElementPath[\"nodes\"],\n diagnostics: readonly CandidateDiagnostic[],\n): string {\n const depth = Array.isArray(domPath) ? domPath.length : 0;\n const sample = diagnostics\n .slice(0, 4)\n .map((item) => `\"${item.selector}\" => ${String(item.count)}`)\n .join(\", \");\n const base =\n \"Element path resolution failed (ERR_PATH_TARGET_NOT_FOUND): no selector candidate matched the current DOM.\";\n if (!sample) {\n return `${base} Tried ${String(Math.max(diagnostics.length, 0))} candidates.`;\n }\n return `${base} Target depth ${String(depth)}. Candidate counts: ${sample}.`;\n}\n\nexport function buildTargetNotUniqueMessage(\n domPath: ReplayElementPath[\"nodes\"],\n diagnostics: readonly CandidateDiagnostic[],\n): string {\n const depth = Array.isArray(domPath) ? domPath.length : 0;\n const ambiguous = diagnostics\n .filter((item) => item.count > 1)\n .slice(0, 4)\n .map((item) => `\"${item.selector}\" => ${String(item.count)}`)\n .join(\", \");\n const base =\n \"Element path resolution failed (ERR_PATH_TARGET_NOT_UNIQUE): selector candidates matched multiple elements.\";\n if (!ambiguous) {\n return `${base} Target depth ${String(depth)}.`;\n }\n return `${base} Target depth ${String(depth)}. Candidate counts: ${ambiguous}.`;\n}\n\nexport function buildContextHostNotUniqueMessage(\n domPath: ReplayElementPath[\"nodes\"],\n diagnostics: readonly CandidateDiagnostic[],\n): string {\n const depth = Array.isArray(domPath) ? domPath.length : 0;\n const sample = diagnostics\n .filter((item) => item.count > 1)\n .slice(0, 4)\n .map((item) => `\"${item.selector}\" => ${String(item.count)}`)\n .join(\", \");\n const base =\n \"Context host resolution failed (ERR_PATH_CONTEXT_HOST_NOT_UNIQUE): stored selectors matched multiple context hosts.\";\n if (!sample) {\n return `${base} Host depth ${String(depth)}.`;\n }\n return `${base} Host depth ${String(depth)}. Candidate counts: ${sample}.`;\n}\n\nexport function buildArrayFieldCandidates(path: ReplayElementPath): string[] {\n return buildArrayFieldPathCandidates(path);\n}\n\nfunction firstDefinedAttribute(node: PathNode, keys: readonly string[]): string | undefined {\n for (const key of keys) {\n const value = node.attrs?.[key]?.trim();\n if (value) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction cloneContext(\n context: readonly StructuralElementAnchor[\"context\"][number][],\n): StructuralElementAnchor[\"context\"] {\n return context.map((hop) => ({\n kind: hop.kind,\n host: hop.host.map(clonePathNode),\n }));\n}\n\nfunction sanitizeContext(context: unknown): StructuralElementAnchor[\"context\"] {\n const hops = Array.isArray(context) ? context : [];\n return hops\n .filter(\n (hop): hop is { readonly kind: \"iframe\" | \"shadow\"; readonly host?: unknown[] } =>\n !!hop && (hop.kind === \"iframe\" || hop.kind === \"shadow\"),\n )\n .map((hop) => ({\n kind: hop.kind,\n host: sanitizeNodes(hop.host),\n }));\n}\n\nfunction sanitizeNodes(nodes: unknown): PathNode[] {\n return (Array.isArray(nodes) ? nodes : []).map((raw) =>\n normalizePathNode(raw as Record<string, unknown>),\n );\n}\n\nfunction sanitizeHintToken(value: string): string {\n return value.replace(/\"/g, '\\\\\"').trim();\n}\n\nexport function throwTargetNotFound(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): never {\n throw new ElementPathError(\n \"ERR_PATH_TARGET_NOT_FOUND\",\n buildTargetNotFoundMessage(domPath, collectCandidateDiagnostics(index, domPath, scope)),\n );\n}\n\nexport function throwTargetNotUnique(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): never {\n throw new ElementPathError(\n \"ERR_PATH_TARGET_NOT_UNIQUE\",\n buildTargetNotUniqueMessage(domPath, collectCandidateDiagnostics(index, domPath, scope)),\n );\n}\n\nexport function throwContextHostNotUnique(\n index: DomSnapshotIndex,\n domPath: ReplayElementPath[\"nodes\"],\n scope: DomQueryScope,\n): never {\n throw new ElementPathError(\n \"ERR_PATH_CONTEXT_HOST_NOT_UNIQUE\",\n buildContextHostNotUniqueMessage(domPath, collectCandidateDiagnostics(index, domPath, scope)),\n );\n}\n\nfunction normalizePathNode(raw: Record<string, unknown>): PathNode {\n const tag = String(raw?.tag || \"*\").toLowerCase();\n const attrsIn =\n raw?.attrs && typeof raw.attrs === \"object\" ? (raw.attrs as Record<string, unknown>) : {};\n const attrs: Record<string, string> = {};\n for (const [key, value] of Object.entries(attrsIn)) {\n const normalizedKey = String(key);\n const normalizedValue = String(value ?? \"\");\n if (!normalizedValue.trim()) {\n continue;\n }\n if (normalizedValue.length > MAX_ATTRIBUTE_VALUE_LENGTH) {\n continue;\n }\n if (!shouldKeepAttributeForPath(normalizedKey, normalizedValue, { tag })) {\n continue;\n }\n attrs[normalizedKey] = normalizedValue;\n }\n\n const positionRaw =\n raw?.position && typeof raw.position === \"object\"\n ? (raw.position as Record<string, unknown>)\n : {};\n\n const position: PathNodePosition = {\n nthChild: Math.max(1, Number(positionRaw.nthChild || 1)),\n nthOfType: Math.max(1, Number(positionRaw.nthOfType || 1)),\n };\n\n return {\n tag,\n attrs,\n position,\n match: normalizeMatch(raw?.match, attrs, position, tag),\n };\n}\n\nfunction clonePathNode(node: PathNode): PathNode {\n return {\n tag: node.tag,\n attrs: { ...node.attrs },\n position: {\n nthChild: node.position.nthChild,\n nthOfType: node.position.nthOfType,\n },\n match: node.match.map(cloneMatchClause),\n };\n}\n\nfunction cloneMatchClause(clause: MatchClause): MatchClause {\n if (clause.kind === \"position\") {\n return { kind: \"position\", axis: clause.axis };\n }\n if (clause.kind === \"text\") {\n return { kind: \"text\", value: clause.value };\n }\n return {\n kind: \"attr\",\n key: clause.key,\n ...(clause.op === undefined ? {} : { op: clause.op }),\n ...(clause.value === undefined ? {} : { value: clause.value }),\n };\n}\n\nfunction normalizeMatch(\n rawMatch: unknown,\n attrs: Record<string, string>,\n position: PathNodePosition,\n tag: string,\n): MatchClause[] {\n const out: MatchClause[] = [];\n const seen = new Set<string>();\n const hasExplicitMatchArray = Array.isArray(rawMatch);\n let normalizedLegacyClassClause = false;\n\n const push = (clause: MatchClause): void => {\n const key = JSON.stringify(clause);\n if (seen.has(key)) {\n return;\n }\n seen.add(key);\n out.push(clause);\n };\n\n if (Array.isArray(rawMatch)) {\n for (const clause of rawMatch) {\n if (!clause || typeof clause !== \"object\") {\n continue;\n }\n const record = clause as Record<string, unknown>;\n if (record.kind === \"position\") {\n if (record.axis === \"nthOfType\" || record.axis === \"nthChild\") {\n push({ kind: \"position\", axis: record.axis });\n }\n continue;\n }\n if (record.kind === \"attr\") {\n const key = String(record.key || \"\").trim();\n if (!isValidCssAttributeKey(key)) {\n continue;\n }\n const op = record.op === \"startsWith\" || record.op === \"contains\" ? record.op : \"exact\";\n const value = typeof record.value === \"string\" ? record.value : undefined;\n if (key === \"class\" && op === \"exact\" && attrs.class && !normalizedLegacyClassClause) {\n push({\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: attrs.class,\n });\n normalizedLegacyClassClause = true;\n continue;\n }\n push({\n kind: \"attr\",\n key,\n op,\n ...(value === undefined ? {} : { value }),\n });\n continue;\n }\n if (record.kind === \"text\") {\n const textValue = typeof record.value === \"string\" ? record.value.trim() : \"\";\n if (textValue) {\n push({ kind: \"text\", value: textValue.slice(0, 80) });\n }\n }\n }\n }\n\n if (!out.length && !hasExplicitMatchArray) {\n const seeded: PathNode = {\n tag,\n attrs,\n position,\n match: [],\n };\n for (const clause of buildLocalClausePool(seeded)) {\n push(clause);\n }\n }\n\n return out;\n}\n\nfunction requireElementNode(\n index: DomSnapshotIndex,\n rawTargetNode: DomSnapshotNode,\n): DomSnapshotNode {\n const normalized =\n rawTargetNode.nodeType === 1 && !isPseudoElementNodeName(rawTargetNode.nodeName)\n ? rawTargetNode\n : normalizeNonElementTarget(index, rawTargetNode);\n if (!normalized) {\n throw new Error(\n `target node ${String(rawTargetNode.snapshotNodeId)} is not attached to an element`,\n );\n }\n return normalized;\n}\n\nfunction normalizeNonElementTarget(\n index: DomSnapshotIndex,\n rawTargetNode: DomSnapshotNode,\n): DomSnapshotNode | undefined {\n let current: DomSnapshotNode | undefined = rawTargetNode;\n while (current) {\n if (current.nodeType === 1 && !isPseudoElementNodeName(current.nodeName)) {\n return current;\n }\n current =\n current.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n }\n return undefined;\n}\n\nfunction isPseudoElementNodeName(nodeName: string): boolean {\n return String(nodeName || \"\").startsWith(\"::\");\n}\n\nfunction captureScopedStructuralNodes(\n index: DomSnapshotIndex,\n targetNode: DomSnapshotNode,\n): PathNode[] {\n const scopeHostNodeRef = getShadowScopeNodeRef(index, targetNode);\n const chain = buildScopedElementChain(index, targetNode, scopeHostNodeRef);\n if (!chain.length) {\n throw new Error(\n `target node ${String(targetNode.snapshotNodeId)} has no scoped ancestor chain`,\n );\n }\n\n return chain.map((element) =>\n normalizePathNode({\n tag: element.nodeName.toLowerCase(),\n attrs: collectAttrs(element),\n position: toPosition(index, element, scopeHostNodeRef),\n match: [],\n }),\n );\n}\n\nfunction matchesStructuralAnchorNode(\n index: DomSnapshotIndex,\n candidate: DomSnapshotNode,\n anchorNode: PathNode,\n scopeHostNodeRef: NodeRef | undefined,\n): boolean {\n if (candidate.nodeType !== 1 || getShadowScopeNodeRef(index, candidate) !== scopeHostNodeRef) {\n return false;\n }\n if (candidate.nodeName.toLowerCase() !== anchorNode.tag.toLowerCase()) {\n return false;\n }\n\n const attrs = collectAttrs(candidate);\n for (const [key, value] of Object.entries(anchorNode.attrs)) {\n if (attrs[key] !== value) {\n return false;\n }\n }\n\n const position = toPosition(index, candidate, scopeHostNodeRef);\n return (\n position.nthChild === anchorNode.position.nthChild &&\n position.nthOfType === anchorNode.position.nthOfType\n );\n}\n\nfunction buildScopedElementChain(\n index: DomSnapshotIndex,\n targetNode: DomSnapshotNode,\n scopeHostNodeRef: NodeRef | undefined,\n): DomSnapshotNode[] {\n const chain: DomSnapshotNode[] = [];\n let current: DomSnapshotNode | undefined = targetNode;\n\n while (current) {\n if (current.nodeType !== 1) {\n current =\n current.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n continue;\n }\n\n if (getShadowScopeNodeRef(index, current) !== scopeHostNodeRef) {\n break;\n }\n\n chain.push(current);\n const parent =\n current.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, current.parentSnapshotNodeId);\n if (\n !parent ||\n parent.nodeType !== 1 ||\n getShadowScopeNodeRef(index, parent) !== scopeHostNodeRef\n ) {\n break;\n }\n current = parent;\n }\n\n chain.reverse();\n return chain;\n}\n\nfunction collectAttrs(node: DomSnapshotNode): Record<string, string> {\n const tag = node.nodeName.toLowerCase();\n const attrs: Record<string, string> = {};\n\n for (const attribute of node.attributes) {\n if (!shouldKeepAttributeForPath(attribute.name, attribute.value, { tag })) {\n continue;\n }\n const value = String(attribute.value || \"\");\n if (!value.trim()) {\n continue;\n }\n if (value.length > MAX_ATTRIBUTE_VALUE_LENGTH) {\n continue;\n }\n attrs[attribute.name] = value;\n }\n\n return attrs;\n}\n\nfunction toPosition(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n scopeHostNodeRef: NodeRef | undefined,\n): PathNodePosition {\n const siblings = getSiblingsInScope(index, node, scopeHostNodeRef);\n const tag = node.nodeName.toLowerCase();\n const sameTag = siblings.filter((sibling) => sibling.nodeName.toLowerCase() === tag);\n\n return {\n nthChild: siblings.findIndex((sibling) => sibling.snapshotNodeId === node.snapshotNodeId) + 1,\n nthOfType: sameTag.findIndex((sibling) => sibling.snapshotNodeId === node.snapshotNodeId) + 1,\n };\n}\n\nfunction getSiblingsInScope(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n scopeHostNodeRef: NodeRef | undefined,\n): DomSnapshotNode[] {\n const parent =\n node.parentSnapshotNodeId === undefined\n ? undefined\n : findNodeBySnapshotNodeId(index, node.parentSnapshotNodeId);\n if (\n parent &&\n parent.nodeType === 1 &&\n getShadowScopeNodeRef(index, parent) === scopeHostNodeRef\n ) {\n return collectChildrenInScope(index, parent, scopeHostNodeRef);\n }\n\n if (scopeHostNodeRef === undefined) {\n return collectChildrenInScope(index, index.rootNode, scopeHostNodeRef);\n }\n\n const hostNode = findNodeByNodeRef(index, scopeHostNodeRef);\n if (!hostNode) {\n return [];\n }\n return collectChildrenInScope(index, hostNode, scopeHostNodeRef);\n}\n\nfunction collectChildrenInScope(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n scopeHostNodeRef: NodeRef | undefined,\n): DomSnapshotNode[] {\n return node.childSnapshotNodeIds\n .map((snapshotNodeId) => findNodeBySnapshotNodeId(index, snapshotNodeId))\n .filter(\n (child): child is DomSnapshotNode =>\n !!child && child.nodeType === 1 && getShadowScopeNodeRef(index, child) === scopeHostNodeRef,\n )\n .sort((left, right) => left.snapshotNodeId - right.snapshotNodeId);\n}\n\nfunction getShadowScopeNodeRef(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n): NodeRef | undefined {\n return findContainingShadowHostNode(index, node)?.nodeRef;\n}\n\nexport { DEFERRED_MATCH_ATTR_KEYS, MATCH_ATTRIBUTE_PRIORITY, STABLE_PRIMARY_ATTR_KEYS };\n","import { createHash, randomUUID } from \"node:crypto\";\n\nimport type { DescriptorRecord, DescriptorRegistryStore } from \"../../registry.js\";\nimport type { FilesystemOpensteerWorkspace } from \"../../root.js\";\nimport { canonicalJsonString, toCanonicalJsonValue } from \"../../json.js\";\nimport { sanitizeReplayElementPath } from \"./path.js\";\nimport type {\n DomDescriptorPayload,\n DomDescriptorRecord,\n DomReadDescriptorInput,\n DomWriteDescriptorInput,\n} from \"./types.js\";\n\nexport interface DomDescriptorStore {\n read(input: DomReadDescriptorInput): Promise<DomDescriptorRecord | undefined>;\n write(input: DomWriteDescriptorInput): Promise<DomDescriptorRecord>;\n}\n\nexport function createDomDescriptorStore(options: {\n readonly root?: FilesystemOpensteerWorkspace;\n readonly namespace?: string;\n}): DomDescriptorStore {\n const namespace = normalizeDomDescriptorNamespace(options.namespace);\n if (options.root) {\n return new FilesystemDomDescriptorStore(options.root.registry.descriptors, namespace);\n }\n return new MemoryDomDescriptorStore(namespace);\n}\n\nexport function hashDomDescriptorPersist(persist: string): string {\n return sha256Hex(persist.trim());\n}\n\nconst DOM_DESCRIPTOR_METHOD_ALIASES: Readonly<Record<string, string>> = Object.freeze({\n click: \"dom.click\",\n hover: \"dom.hover\",\n input: \"dom.input\",\n scroll: \"dom.scroll\",\n});\n\nfunction normalizeDomDescriptorMethod(method: string): string {\n const normalized = method.trim();\n return DOM_DESCRIPTOR_METHOD_ALIASES[normalized] ?? normalized;\n}\n\nfunction buildDomDescriptorKeys(options: {\n readonly namespace?: string;\n readonly method: string;\n readonly persist: string;\n}): readonly string[] {\n const namespace = normalizeDomDescriptorNamespace(options.namespace);\n const persistHash = hashDomDescriptorPersist(options.persist);\n const rawMethod = options.method.trim();\n const canonicalMethod = normalizeDomDescriptorMethod(rawMethod);\n const methods = new Set([canonicalMethod]);\n if (rawMethod.length > 0) {\n methods.add(rawMethod);\n }\n return [...methods].map((method) => `dom:${namespace}:${method}:${persistHash}`);\n}\n\nexport function buildDomDescriptorKey(options: {\n readonly namespace?: string;\n readonly method: string;\n readonly persist: string;\n}): string {\n return buildDomDescriptorKeys(options)[0]!;\n}\n\nexport function normalizeDomDescriptorNamespace(namespace: string | undefined): string {\n const normalized = String(namespace || \"default\").trim();\n return normalized.length === 0 ? \"default\" : normalized;\n}\n\nfunction sha256Hex(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\nexport function buildDomDescriptorPayload(input: DomWriteDescriptorInput): DomDescriptorPayload {\n return {\n kind: \"dom-target\",\n method: normalizeDomDescriptorMethod(input.method),\n persist: input.persist,\n path: sanitizeReplayElementPath(input.path),\n ...(input.sourceUrl === undefined ? {} : { sourceUrl: input.sourceUrl }),\n };\n}\n\nexport function buildDomDescriptorVersion(payload: DomDescriptorPayload): string {\n return sha256Hex(canonicalJsonString(payload));\n}\n\nexport function parseDomDescriptorRecord(\n record: DescriptorRecord,\n): DomDescriptorRecord | undefined {\n const payload = record.payload;\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return undefined;\n }\n\n const raw = payload as Record<string, unknown>;\n if (raw.kind !== \"dom-target\") {\n return undefined;\n }\n if (typeof raw.method !== \"string\" || typeof raw.persist !== \"string\") {\n return undefined;\n }\n if (!raw.path || typeof raw.path !== \"object\" || Array.isArray(raw.path)) {\n return undefined;\n }\n if ((raw.path as { readonly resolution?: unknown }).resolution !== \"deterministic\") {\n return undefined;\n }\n\n const normalizedPayload: DomDescriptorPayload = {\n kind: \"dom-target\",\n method: normalizeDomDescriptorMethod(raw.method),\n persist: raw.persist,\n path: sanitizeReplayElementPath(raw.path as DomDescriptorPayload[\"path\"]),\n ...(typeof raw.sourceUrl === \"string\" ? { sourceUrl: raw.sourceUrl } : {}),\n };\n\n return {\n id: record.id,\n key: record.key,\n version: record.version,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n payload: normalizedPayload,\n };\n}\n\nclass FilesystemDomDescriptorStore implements DomDescriptorStore {\n constructor(\n private readonly registry: DescriptorRegistryStore,\n private readonly namespace: string,\n ) {}\n\n async read(input: DomReadDescriptorInput): Promise<DomDescriptorRecord | undefined> {\n for (const key of buildDomDescriptorKeys({\n namespace: this.namespace,\n method: input.method,\n persist: input.persist,\n })) {\n const record = await this.registry.resolve({ key });\n if (!record) {\n continue;\n }\n return parseDomDescriptorRecord(record);\n }\n return undefined;\n }\n\n async write(input: DomWriteDescriptorInput): Promise<DomDescriptorRecord> {\n const payload = buildDomDescriptorPayload(input);\n const key = buildDomDescriptorKey({\n namespace: this.namespace,\n method: input.method,\n persist: input.persist,\n });\n const version = buildDomDescriptorVersion(payload);\n const existing = await this.registry.resolve({ key, version });\n if (existing) {\n const parsed = parseDomDescriptorRecord(existing);\n if (!parsed) {\n throw new Error(`descriptor ${existing.id} has an invalid DOM payload`);\n }\n return parsed;\n }\n\n const now = Date.now();\n const record = await this.registry.write({\n id: `descriptor:${randomUUID()}`,\n key,\n version,\n createdAt: input.createdAt ?? now,\n updatedAt: input.updatedAt ?? input.createdAt ?? now,\n tags: [\"dom-runtime\", payload.method],\n provenance: {\n source: \"opensteer.dom\",\n sourceId: key,\n ...(payload.sourceUrl === undefined ? {} : { notes: payload.sourceUrl }),\n },\n payload: toCanonicalJsonValue(payload),\n });\n const parsed = parseDomDescriptorRecord(record);\n if (!parsed) {\n throw new Error(`descriptor ${record.id} could not be parsed after write`);\n }\n return parsed;\n }\n}\n\nclass MemoryDomDescriptorStore implements DomDescriptorStore {\n private readonly latestByKey = new Map<string, DomDescriptorRecord>();\n private readonly recordsByKey = new Map<string, Map<string, DomDescriptorRecord>>();\n\n constructor(private readonly namespace: string) {}\n\n async read(input: DomReadDescriptorInput): Promise<DomDescriptorRecord | undefined> {\n for (const key of buildDomDescriptorKeys({\n namespace: this.namespace,\n method: input.method,\n persist: input.persist,\n })) {\n const record = this.latestByKey.get(key);\n if (record) {\n return record;\n }\n }\n return undefined;\n }\n\n async write(input: DomWriteDescriptorInput): Promise<DomDescriptorRecord> {\n const payload = buildDomDescriptorPayload(input);\n const key = buildDomDescriptorKey({\n namespace: this.namespace,\n method: input.method,\n persist: input.persist,\n });\n const version = buildDomDescriptorVersion(payload);\n const existing = this.recordsByKey.get(key)?.get(version);\n if (existing) {\n return existing;\n }\n\n const now = Date.now();\n const record: DomDescriptorRecord = {\n id: `descriptor:${randomUUID()}`,\n key,\n version,\n createdAt: input.createdAt ?? now,\n updatedAt: input.updatedAt ?? input.createdAt ?? now,\n payload,\n };\n\n const versions = this.recordsByKey.get(key) ?? new Map<string, DomDescriptorRecord>();\n versions.set(version, record);\n this.recordsByKey.set(key, versions);\n this.latestByKey.set(key, record);\n return record;\n }\n}\n","import type {\n ActionBoundaryOutcome,\n ActionBoundarySnapshot,\n ActionBoundaryTimedOutPhase,\n BrowserCoreEngine,\n PageRef,\n} from \"@opensteer/browser-core\";\nimport { isOpensteerProtocolError } from \"@opensteer/protocol\";\n\nexport interface ActionBoundaryDiagnostics {\n readonly trigger: ActionBoundaryOutcome[\"trigger\"];\n readonly crossDocument: boolean;\n readonly bootstrapSettled: boolean;\n readonly visualSettled: boolean;\n readonly timedOutPhase?: ActionBoundaryTimedOutPhase | \"visual\";\n}\n\nconst actionBoundaryDiagnosticsBySignal = new WeakMap<AbortSignal, ActionBoundaryDiagnostics>();\n\nexport async function captureActionBoundarySnapshot(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<ActionBoundarySnapshot> {\n return engine.getActionBoundarySnapshot({ pageRef });\n}\n\nexport function createActionBoundaryDiagnostics(input: {\n readonly boundary: ActionBoundaryOutcome;\n readonly visualSettled: boolean;\n}): ActionBoundaryDiagnostics {\n return {\n trigger: input.boundary.trigger,\n crossDocument: input.boundary.crossDocument,\n bootstrapSettled: input.boundary.bootstrapSettled,\n visualSettled: input.visualSettled,\n ...(input.boundary.timedOutPhase !== undefined\n ? { timedOutPhase: input.boundary.timedOutPhase }\n : !input.visualSettled\n ? { timedOutPhase: \"visual\" as const }\n : {}),\n };\n}\n\nexport function recordActionBoundaryDiagnostics(\n signal: AbortSignal,\n diagnostics: ActionBoundaryDiagnostics,\n): void {\n actionBoundaryDiagnosticsBySignal.set(signal, diagnostics);\n}\n\nexport function takeActionBoundaryDiagnostics(\n signal: AbortSignal,\n): ActionBoundaryDiagnostics | undefined {\n const diagnostics = actionBoundaryDiagnosticsBySignal.get(signal);\n actionBoundaryDiagnosticsBySignal.delete(signal);\n return diagnostics;\n}\n\nexport function isSoftSettleTimeoutError(error: unknown, signal?: AbortSignal): boolean {\n if (isTimeoutError(error)) {\n return true;\n }\n\n return (\n signal?.aborted === true &&\n isTimeoutError(signal.reason) &&\n (error === signal.reason || isAbortError(error))\n );\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nfunction isTimeoutError(error: unknown): boolean {\n return isOpensteerProtocolError(error) && error.code === \"timeout\";\n}\n","import {\n type ActionBoundarySnapshot,\n createNodeLocator,\n createPoint,\n quadBounds,\n rectContainsPoint,\n type BrowserCoreEngine,\n type DocumentRef,\n type DomSnapshot,\n type HitTestResult,\n type PageRef,\n type Point,\n type Quad,\n type Rect,\n type StepEvent,\n} from \"@opensteer/browser-core\";\nimport { OpensteerProtocolError } from \"@opensteer/protocol\";\n\nimport {\n captureActionBoundarySnapshot,\n createActionBoundaryDiagnostics,\n isSoftSettleTimeoutError,\n recordActionBoundaryDiagnostics,\n} from \"../../action-boundary.js\";\nimport {\n delayWithSignal,\n runWithPolicyTimeout,\n settleWithPolicy,\n type DomActionPolicyOperation,\n type OpensteerPolicy,\n type TimeoutExecutionContext,\n} from \"../../policy/index.js\";\nimport {\n resolveDomActionBridge,\n type DomActionBridge,\n type DomActionTargetInspection,\n} from \"./bridge.js\";\nimport type {\n DomActionOutcome,\n DomClickInput,\n DomDescriptorRecord,\n DomHoverInput,\n DomInputInput,\n DomResolveTargetInput,\n DomScrollInput,\n DomTargetRef,\n DomWriteDescriptorInput,\n ResolvedDomTarget,\n} from \"./types.js\";\n\ninterface DomActionResolutionSession {\n getDocument(documentRef: DocumentRef): Promise<DomSnapshot>;\n}\n\ninterface DomActionExecutorOptions {\n readonly engine: BrowserCoreEngine;\n readonly policy: OpensteerPolicy;\n createResolutionSession(): DomActionResolutionSession;\n resolveTarget(\n session: DomActionResolutionSession,\n input: DomResolveTargetInput & {\n readonly descriptorWriter?: (input: DomWriteDescriptorInput) => Promise<DomDescriptorRecord>;\n },\n ): Promise<ResolvedDomTarget>;\n writeDescriptor(input: DomWriteDescriptorInput): Promise<DomDescriptorRecord>;\n}\n\ninterface ActionablePointerTarget {\n readonly resolved: ResolvedDomTarget;\n readonly original: ResolvedDomTarget;\n}\n\nconst MAX_DOM_ACTION_ATTEMPTS = 2;\nconst DEFAULT_SCROLL_OPTIONS = {\n block: \"center\",\n inline: \"center\",\n} as const;\n\nexport class DomActionExecutor {\n private readonly bridge: DomActionBridge | undefined;\n\n constructor(private readonly options: DomActionExecutorOptions) {\n this.bridge = resolveDomActionBridge(options.engine);\n }\n\n async click(input: DomClickInput): Promise<DomActionOutcome> {\n return this.executePointerAction(\n {\n operation: \"dom.click\",\n pageRef: input.pageRef,\n target: input.target,\n ...(input.position === undefined ? {} : { position: input.position }),\n ...(input.timeout === undefined ? {} : { timeout: input.timeout }),\n },\n async (pointerTarget, point, timeout) => {\n const events: StepEvent[] = [];\n const moved = await timeout.runStep(() =>\n this.options.engine.mouseMove({\n pageRef: pointerTarget.resolved.pageRef,\n point,\n coordinateSpace: \"document-css\",\n }),\n );\n events.push(...moved.events);\n const clicked = await timeout.runStep(() =>\n this.options.engine.mouseClick({\n pageRef: pointerTarget.resolved.pageRef,\n point,\n coordinateSpace: \"document-css\",\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { clickCount: input.clickCount }),\n ...(input.modifiers === undefined ? {} : { modifiers: input.modifiers }),\n }),\n );\n events.push(...clicked.events);\n return {\n resolved: pointerTarget.original,\n point,\n ...(events.length === 0 ? {} : { events }),\n };\n },\n );\n }\n\n async hover(input: DomHoverInput): Promise<DomActionOutcome> {\n return this.executePointerAction(\n {\n operation: \"dom.hover\",\n pageRef: input.pageRef,\n target: input.target,\n ...(input.position === undefined ? {} : { position: input.position }),\n ...(input.timeout === undefined ? {} : { timeout: input.timeout }),\n },\n async (pointerTarget, point, timeout) => {\n const moved = await timeout.runStep(() =>\n this.options.engine.mouseMove({\n pageRef: pointerTarget.resolved.pageRef,\n point,\n coordinateSpace: \"document-css\",\n }),\n );\n return {\n resolved: pointerTarget.original,\n point,\n ...(moved.events.length === 0 ? {} : { events: moved.events }),\n };\n },\n );\n }\n\n async scroll(input: DomScrollInput): Promise<DomActionOutcome> {\n return this.executePointerAction(\n {\n operation: \"dom.scroll\",\n pageRef: input.pageRef,\n target: input.target,\n ...(input.position === undefined ? {} : { position: input.position }),\n ...(input.timeout === undefined ? {} : { timeout: input.timeout }),\n },\n async (pointerTarget, point, timeout) => {\n const events: StepEvent[] = [];\n const moved = await timeout.runStep(() =>\n this.options.engine.mouseMove({\n pageRef: pointerTarget.resolved.pageRef,\n point,\n coordinateSpace: \"document-css\",\n }),\n );\n events.push(...moved.events);\n const scrolled = await timeout.runStep(() =>\n this.options.engine.mouseScroll({\n pageRef: pointerTarget.resolved.pageRef,\n point,\n coordinateSpace: \"document-css\",\n delta: input.delta,\n }),\n );\n events.push(...scrolled.events);\n return {\n resolved: pointerTarget.original,\n point,\n ...(events.length === 0 ? {} : { events }),\n };\n },\n );\n }\n\n async input(input: DomInputInput): Promise<ResolvedDomTarget> {\n return this.executeWithinTimeout(input.timeout, \"dom.input\", async (timeout) => {\n const bridge = this.requireBridge();\n let lastError: unknown;\n\n for (let attempt = 0; attempt < MAX_DOM_ACTION_ATTEMPTS; attempt += 1) {\n const session = this.options.createResolutionSession();\n try {\n const resolved = await timeout.runStep(() =>\n this.options.resolveTarget(session, {\n pageRef: input.pageRef,\n method: \"dom.input\",\n target: input.target,\n descriptorWriter: (writeInput) =>\n timeout.runStep(() => this.options.writeDescriptor(writeInput)),\n }),\n );\n\n const inspectionBeforeScroll = await timeout.runStep(() =>\n bridge.inspectActionTarget(resolved.locator),\n );\n this.assertKeyboardActionable(\"dom.input\", resolved, inspectionBeforeScroll, {\n allowTransientVisibilityFailure: true,\n });\n\n await timeout.runStep(() =>\n bridge.scrollNodeIntoView(resolved.locator, DEFAULT_SCROLL_OPTIONS),\n );\n\n const inspectionAfterScroll = await timeout.runStep(() =>\n bridge.inspectActionTarget(resolved.locator),\n );\n this.assertKeyboardActionable(\"dom.input\", resolved, inspectionAfterScroll);\n\n await timeout.runStep(() => bridge.focusNode(resolved.locator));\n await timeout.runStep(() =>\n this.options.engine.textInput({\n pageRef: resolved.pageRef,\n text: input.text,\n }),\n );\n let finalResolved = resolved;\n let finalSnapshot: ActionBoundarySnapshot | undefined;\n if (input.pressEnter) {\n await this.waitForPressEnterReaction(timeout);\n\n const enterSession = this.options.createResolutionSession();\n const enterResolved = await timeout.runStep(() =>\n this.options.resolveTarget(enterSession, {\n pageRef: input.pageRef,\n method: \"dom.input\",\n target: input.target,\n descriptorWriter: (writeInput) =>\n timeout.runStep(() => this.options.writeDescriptor(writeInput)),\n }),\n );\n const inspectionBeforeEnter = await timeout.runStep(() =>\n bridge.inspectActionTarget(enterResolved.locator),\n );\n this.assertKeyboardActionable(\"dom.input\", enterResolved, inspectionBeforeEnter);\n finalSnapshot = await timeout.runStep(() =>\n captureActionBoundarySnapshot(this.options.engine, enterResolved.pageRef),\n );\n\n await timeout.runStep(() =>\n bridge.pressKey(enterResolved.locator, {\n key: \"Enter\",\n }),\n );\n finalResolved = enterResolved;\n }\n\n const settleDiagnostics = await this.settle(\n finalResolved.pageRef,\n \"dom.input\",\n timeout,\n finalSnapshot,\n );\n if (finalSnapshot !== undefined) {\n recordActionBoundaryDiagnostics(timeout.signal, settleDiagnostics);\n }\n return finalResolved;\n } catch (error) {\n lastError = error;\n if (!this.shouldRetry(error) || attempt === MAX_DOM_ACTION_ATTEMPTS - 1) {\n throw error;\n }\n }\n }\n\n throw lastError ?? new Error(\"DOM input exhausted all retries\");\n });\n }\n\n private async executePointerAction<TResult>(\n input: {\n readonly operation: Extract<\n DomActionPolicyOperation,\n \"dom.click\" | \"dom.hover\" | \"dom.scroll\"\n >;\n readonly pageRef: PageRef;\n readonly target: DomTargetRef;\n readonly position?: Point;\n readonly timeout?: TimeoutExecutionContext;\n },\n dispatch: (\n pointerTarget: ActionablePointerTarget,\n point: Point,\n timeout: TimeoutExecutionContext,\n ) => Promise<TResult>,\n ): Promise<TResult> {\n return this.executeWithinTimeout(input.timeout, input.operation, async (timeout) => {\n const bridge = this.requireBridge();\n let lastError: unknown;\n\n for (let attempt = 0; attempt < MAX_DOM_ACTION_ATTEMPTS; attempt += 1) {\n const session = this.options.createResolutionSession();\n try {\n const resolved = await timeout.runStep(() =>\n this.options.resolveTarget(session, {\n pageRef: input.pageRef,\n method: input.operation,\n target: input.target,\n descriptorWriter: (writeInput) =>\n timeout.runStep(() => this.options.writeDescriptor(writeInput)),\n }),\n );\n const pointerTarget = await timeout.runStep(() =>\n this.resolveActionablePointerTarget(session, input.operation, resolved),\n );\n\n if (input.position !== undefined) {\n assertValidResolvedActionPosition(pointerTarget.resolved, input.position);\n }\n\n const inspectionBeforeScroll = await timeout.runStep(() =>\n bridge.inspectActionTarget(pointerTarget.resolved.locator),\n );\n this.assertPointerActionable(\n input.operation,\n pointerTarget.resolved,\n inspectionBeforeScroll,\n {\n allowTransientVisibilityFailure: true,\n },\n );\n\n await timeout.runStep(() =>\n bridge.scrollNodeIntoView(pointerTarget.resolved.locator, DEFAULT_SCROLL_OPTIONS),\n );\n\n const inspectionAfterScroll = await timeout.runStep(() =>\n bridge.inspectActionTarget(pointerTarget.resolved.locator),\n );\n this.assertPointerActionable(\n input.operation,\n pointerTarget.resolved,\n inspectionAfterScroll,\n );\n\n const point = await timeout.runStep(() =>\n this.computeActionPoint(\n input.operation,\n pointerTarget.resolved,\n inspectionAfterScroll,\n input.position,\n ),\n );\n if (input.operation !== \"dom.scroll\") {\n const hit = await timeout.runStep(() =>\n this.tryHitTest(pointerTarget.resolved.pageRef, point),\n );\n if (hit !== undefined) {\n await timeout.runStep(() =>\n this.assertHitTarget(input.operation, pointerTarget, point, hit),\n );\n }\n }\n\n const actionBoundarySnapshot = await timeout.runStep(() =>\n captureActionBoundarySnapshot(this.options.engine, pointerTarget.resolved.pageRef),\n );\n const outcome = await dispatch(pointerTarget, point, timeout);\n const settleDiagnostics = await this.settle(\n pointerTarget.resolved.pageRef,\n input.operation,\n timeout,\n actionBoundarySnapshot,\n );\n recordActionBoundaryDiagnostics(timeout.signal, settleDiagnostics);\n return outcome;\n } catch (error) {\n lastError = error;\n if (!this.shouldRetry(error) || attempt === MAX_DOM_ACTION_ATTEMPTS - 1) {\n throw error;\n }\n }\n }\n\n throw lastError ?? new Error(`${input.operation} exhausted all retries`);\n });\n }\n\n private async executeWithinTimeout<TResult>(\n timeout: TimeoutExecutionContext | undefined,\n operation: DomActionPolicyOperation,\n execute: (timeout: TimeoutExecutionContext) => Promise<TResult>,\n ): Promise<TResult> {\n if (timeout !== undefined) {\n return execute(timeout);\n }\n\n return runWithPolicyTimeout(this.options.policy.timeout, { operation }, execute);\n }\n\n private async settle(\n pageRef: PageRef,\n operation: DomActionPolicyOperation,\n timeout: TimeoutExecutionContext,\n snapshot?: ActionBoundarySnapshot,\n ): Promise<ReturnType<typeof createActionBoundaryDiagnostics>> {\n const bridge = this.requireBridge();\n let visualSettled = true;\n const boundary = await timeout.runStep(() =>\n bridge.finalizeDomAction(pageRef, {\n operation,\n ...(snapshot === undefined ? {} : { snapshot }),\n signal: timeout.signal,\n remainingMs: () => timeout.remainingMs(),\n policySettle: async (targetPageRef, trigger, boundary) => {\n try {\n await settleWithPolicy(this.options.policy.settle, {\n operation,\n trigger,\n engine: this.options.engine,\n pageRef: targetPageRef,\n signal: timeout.signal,\n remainingMs: timeout.remainingMs(),\n ...(boundary?.observedMutationQuietMs === undefined\n ? {}\n : { observedMutationQuietMs: boundary.observedMutationQuietMs }),\n ...(boundary?.postLoadHandled === true ? { postLoadHandled: true } : {}),\n });\n } catch (error) {\n if (snapshot !== undefined && isSoftSettleTimeoutError(error, timeout.signal)) {\n visualSettled = false;\n return;\n }\n throw error;\n }\n },\n }),\n );\n return createActionBoundaryDiagnostics({\n boundary,\n visualSettled,\n });\n }\n\n private async waitForPressEnterReaction(timeout: TimeoutExecutionContext): Promise<void> {\n const delayMs = this.options.policy.settle.resolveDelayMs({\n operation: \"dom.input\",\n trigger: \"dom-action\",\n });\n if (delayMs <= 0) {\n return;\n }\n await delayWithSignal(delayMs, timeout.signal);\n }\n\n private requireBridge(): DomActionBridge {\n if (this.bridge !== undefined) {\n return this.bridge;\n }\n\n throw new OpensteerProtocolError(\n \"unsupported-capability\",\n \"current engine does not expose a DOM action bridge\",\n {\n details: {\n operation: \"dom.click\",\n },\n },\n );\n }\n\n private async computeActionPoint(\n operation: DomActionPolicyOperation,\n resolved: ResolvedDomTarget,\n inspection: DomActionTargetInspection,\n position: Point | undefined,\n ): Promise<Point> {\n if (position !== undefined) {\n const bounds = inspection.bounds;\n if (bounds === undefined) {\n throw this.createActionabilityError(\n operation,\n \"missing-geometry\",\n `target ${resolved.nodeRef} does not expose live DOM geometry`,\n undefined,\n true,\n );\n }\n\n const point = createPoint(bounds.x + position.x, bounds.y + position.y);\n if (\n !rectContainsPoint(bounds, point) ||\n !pointFallsWithinQuads(point, inspection.contentQuads)\n ) {\n throw this.createActionabilityError(\n operation,\n \"obscured\",\n `target ${resolved.nodeRef} shifted before the requested action point became actionable`,\n {\n rect: bounds,\n point,\n },\n true,\n );\n }\n return point;\n }\n\n const quad = inspection.contentQuads[0];\n if (quad) {\n return centerOfQuad(quad);\n }\n\n throw this.createActionabilityError(\n operation,\n \"missing-geometry\",\n `target ${resolved.nodeRef} has no live actionable geometry after scrolling`,\n {\n ...(inspection.bounds === undefined ? {} : { rect: inspection.bounds }),\n },\n true,\n );\n }\n\n private assertPointerActionable(\n operation: DomActionPolicyOperation,\n resolved: ResolvedDomTarget,\n inspection: DomActionTargetInspection,\n options: {\n readonly allowTransientVisibilityFailure?: boolean;\n } = {},\n ): void {\n this.assertConnected(resolved, inspection);\n this.assertEnabled(operation, resolved, inspection);\n\n if (inspection.visible) {\n return;\n }\n\n const attribute = findSnapshotVisibilityAttribute(resolved);\n throw this.createActionabilityError(\n operation,\n \"not-visible\",\n attribute === undefined\n ? `target ${resolved.nodeRef} is not visible`\n : `target ${resolved.nodeRef} is hidden`,\n {\n ...(inspection.bounds === undefined ? {} : { rect: inspection.bounds }),\n ...(attribute === undefined ? {} : { attribute }),\n },\n options.allowTransientVisibilityFailure && attribute === undefined,\n );\n }\n\n private assertKeyboardActionable(\n operation: DomActionPolicyOperation,\n resolved: ResolvedDomTarget,\n inspection: DomActionTargetInspection,\n options: {\n readonly allowTransientVisibilityFailure?: boolean;\n } = {},\n ): void {\n this.assertPointerActionable(operation, resolved, inspection, options);\n\n if (inspection.editable) {\n return;\n }\n\n const attribute = findSnapshotEditabilityAttribute(resolved);\n throw this.createActionabilityError(\n operation,\n \"disabled\",\n `target ${resolved.nodeRef} is not editable`,\n {\n ...(inspection.bounds === undefined ? {} : { rect: inspection.bounds }),\n ...(attribute === undefined ? {} : { attribute }),\n },\n );\n }\n\n private assertConnected(\n resolved: ResolvedDomTarget,\n inspection: DomActionTargetInspection,\n ): void {\n if (inspection.connected) {\n return;\n }\n\n throw new OpensteerProtocolError(\n \"stale-node-ref\",\n `node ${resolved.nodeRef} became detached before ${resolved.source} could be acted on`,\n {\n retriable: true,\n details: {\n nodeRef: resolved.nodeRef,\n documentRef: resolved.documentRef,\n documentEpoch: resolved.documentEpoch,\n },\n },\n );\n }\n\n private assertEnabled(\n operation: DomActionPolicyOperation,\n resolved: ResolvedDomTarget,\n inspection: DomActionTargetInspection,\n ): void {\n if (inspection.enabled) {\n return;\n }\n\n const attribute = findSnapshotDisabledAttribute(resolved);\n throw this.createActionabilityError(\n operation,\n \"disabled\",\n `target ${resolved.nodeRef} is disabled`,\n {\n ...(inspection.bounds === undefined ? {} : { rect: inspection.bounds }),\n ...(attribute === undefined ? {} : { attribute }),\n },\n );\n }\n\n private async assertHitTarget(\n operation: DomActionPolicyOperation,\n pointerTarget: ActionablePointerTarget,\n point: Point,\n hit: HitTestResult,\n ): Promise<void> {\n const bridge = this.requireBridge();\n const resolved = pointerTarget.resolved;\n const details = {\n ...(resolved.node.layout?.rect === undefined ? {} : { rect: resolved.node.layout.rect }),\n point,\n ...(hit.nodeRef === undefined ? {} : { hitNodeRef: hit.nodeRef }),\n hitDocumentRef: hit.documentRef,\n hitDocumentEpoch: hit.documentEpoch,\n hitObscured: hit.obscured,\n pointerEventsSkipped: hit.pointerEventsSkipped,\n };\n\n if (hit.documentRef !== resolved.documentRef || hit.documentEpoch !== resolved.documentEpoch) {\n throw this.createActionabilityError(\n operation,\n \"obscured\",\n `hit test resolved outside ${resolved.documentRef}@${String(resolved.documentEpoch)}`,\n details,\n true,\n );\n }\n\n if (hit.nodeRef === undefined) {\n throw this.createActionabilityError(\n operation,\n \"obscured\",\n `hit test did not resolve a live node for ${operation}`,\n details,\n true,\n );\n }\n\n const assessment = await bridge.classifyPointerHit({\n target: resolved.locator,\n hit: createNodeLocator(hit.documentRef, hit.documentEpoch, hit.nodeRef),\n point,\n });\n if (\n assessment.relation !== \"outside\" ||\n assessment.blocking === false ||\n assessment.ambiguous === true\n ) {\n return;\n }\n\n throw this.createActionabilityError(\n operation,\n \"obscured\",\n `target is obscured by ${assessment.blockingDescription ?? \"another element\"} at the click point`,\n {\n ...details,\n hitRelation: assessment.relation,\n ...(assessment.ambiguous === undefined ? {} : { hitAmbiguous: assessment.ambiguous }),\n ...(assessment.blockingDescription === undefined\n ? {}\n : { blockingDescription: assessment.blockingDescription }),\n ...(assessment.canonicalTarget === undefined\n ? {}\n : {\n canonicalNodeRef: assessment.canonicalTarget.nodeRef,\n canonicalDocumentRef: assessment.canonicalTarget.documentRef,\n canonicalDocumentEpoch: assessment.canonicalTarget.documentEpoch,\n }),\n ...(assessment.hitOwner === undefined\n ? {}\n : {\n hitOwnerNodeRef: assessment.hitOwner.nodeRef,\n hitOwnerDocumentRef: assessment.hitOwner.documentRef,\n hitOwnerDocumentEpoch: assessment.hitOwner.documentEpoch,\n }),\n hitMissingFromSnapshot: !resolved.snapshot.nodes.some(\n (node) => node.nodeRef === hit.nodeRef,\n ),\n },\n );\n }\n\n private async resolveActionablePointerTarget(\n session: DomActionResolutionSession,\n operation: Extract<DomActionPolicyOperation, \"dom.click\" | \"dom.hover\" | \"dom.scroll\">,\n resolved: ResolvedDomTarget,\n ): Promise<ActionablePointerTarget> {\n const canonicalLocator = await this.requireBridge().canonicalizePointerTarget(resolved.locator);\n if (\n canonicalLocator.documentRef === resolved.documentRef &&\n canonicalLocator.documentEpoch === resolved.documentEpoch &&\n canonicalLocator.nodeRef === resolved.nodeRef\n ) {\n return {\n resolved,\n original: resolved,\n };\n }\n\n const canonicalResolved = await this.options.resolveTarget(session, {\n pageRef: resolved.pageRef,\n method: operation,\n target: {\n kind: \"live\",\n locator: canonicalLocator,\n },\n });\n\n return {\n resolved: canonicalResolved,\n original: resolved,\n };\n }\n\n private createActionabilityError(\n operation: DomActionPolicyOperation,\n reason: \"missing-geometry\" | \"not-visible\" | \"disabled\" | \"obscured\",\n message: string,\n details?: Readonly<Record<string, unknown>>,\n retriable = false,\n ): OpensteerProtocolError {\n return new OpensteerProtocolError(\"operation-failed\", message, {\n retriable,\n details: {\n policy: \"actionability\",\n operation,\n reason,\n ...(details === undefined ? {} : details),\n },\n });\n }\n\n private shouldRetry(error: unknown): boolean {\n if (error instanceof OpensteerProtocolError) {\n if (error.code === \"stale-node-ref\") {\n return true;\n }\n return error.retriable;\n }\n\n if (error && typeof error === \"object\" && \"code\" in error) {\n const candidate = error as { readonly code?: unknown; readonly retriable?: unknown };\n return candidate.code === \"stale-node-ref\" || candidate.retriable === true;\n }\n\n return false;\n }\n\n private async tryHitTest(pageRef: PageRef, point: Point): Promise<HitTestResult | undefined> {\n try {\n return await this.options.engine.hitTest({\n pageRef,\n point,\n coordinateSpace: \"document-css\",\n });\n } catch (error) {\n if (error instanceof Error && /No node found at given location/i.test(error.message)) {\n return undefined;\n }\n throw error;\n }\n }\n}\n\nfunction findSnapshotVisibilityAttribute(resolved: ResolvedDomTarget): string | undefined {\n if (hasAttribute(resolved, \"hidden\")) {\n return \"hidden\";\n }\n if (readAttributeValue(resolved, \"aria-hidden\") === \"true\") {\n return \"aria-hidden\";\n }\n return undefined;\n}\n\nfunction findSnapshotDisabledAttribute(resolved: ResolvedDomTarget): string | undefined {\n if (hasAttribute(resolved, \"disabled\")) {\n return \"disabled\";\n }\n if (readAttributeValue(resolved, \"aria-disabled\") === \"true\") {\n return \"aria-disabled\";\n }\n return undefined;\n}\n\nfunction findSnapshotEditabilityAttribute(resolved: ResolvedDomTarget): string | undefined {\n if (hasAttribute(resolved, \"readonly\")) {\n return \"readonly\";\n }\n return findSnapshotDisabledAttribute(resolved);\n}\n\nfunction hasAttribute(resolved: ResolvedDomTarget, name: string): boolean {\n return resolved.node.attributes.some((attribute) => attribute.name === name);\n}\n\nfunction readAttributeValue(resolved: ResolvedDomTarget, name: string): string | undefined {\n return resolved.node.attributes.find((attribute) => attribute.name === name)?.value;\n}\n\nfunction assertValidResolvedActionPosition(target: ResolvedDomTarget, position: Point): void {\n const rect = target.node.layout?.rect;\n if (!rect) {\n return;\n }\n\n const point = createPoint(rect.x + position.x, rect.y + position.y);\n if (!rectContainsPoint(rect, point)) {\n throw new OpensteerProtocolError(\n \"invalid-argument\",\n `target point for ${target.nodeRef} falls outside the resolved DOM box`,\n {\n details: {\n position,\n rect,\n },\n },\n );\n }\n}\n\nfunction centerOfQuad(quad: Quad): Point {\n return createPoint(\n (quad[0].x + quad[1].x + quad[2].x + quad[3].x) / 4,\n (quad[0].y + quad[1].y + quad[2].y + quad[3].y) / 4,\n );\n}\n\nfunction pointFallsWithinQuads(point: Point, quads: readonly Quad[]): boolean {\n return quads.some((quad) => rectContainsPoint(quadBounds(quad), point));\n}\n","import {\n createNodeLocator,\n type BrowserCoreEngine,\n type DocumentRef,\n type DomSnapshot,\n type DomSnapshotNode,\n type FrameRef,\n type NodeRef,\n type PageRef,\n type Point,\n} from \"@opensteer/browser-core\";\nimport { OpensteerProtocolError } from \"@opensteer/protocol\";\n\nimport { defaultPolicy, type OpensteerPolicy } from \"../../policy/index.js\";\nimport type { FilesystemOpensteerWorkspace } from \"../../root.js\";\nimport type { DomActionBridge } from \"./bridge.js\";\nimport { resolveDomActionBridge } from \"./bridge.js\";\nimport { createDomDescriptorStore, type DomDescriptorStore } from \"./descriptors.js\";\nimport { DomActionExecutor } from \"./executor.js\";\nimport { normalizeExtractedValue, resolveExtractedValueInContext } from \"./extraction.js\";\nimport { ElementPathError } from \"./errors.js\";\nimport {\n buildArrayFieldCandidates,\n buildLocalStructuralElementAnchor,\n buildPathSelectorHint,\n createExplicitSelectorScope,\n createPathScope,\n createSnapshotIndex,\n queryAllDomPathInScope,\n resolveStructuralAnchorInScope,\n resolveDomPathInScope,\n resolveFirstWithinNodeBySelectors,\n sanitizeElementPath,\n sanitizeReplayElementPath,\n sanitizeStructuralElementAnchor,\n throwTargetNotFound,\n} from \"./path.js\";\nimport {\n findIframeHostNode,\n findNodeByNodeRef,\n hasShadowRoot,\n normalizeToElementNode,\n querySelectorAllInScope,\n querySelectorAllWithinNode,\n type DomQueryScope,\n type DomSnapshotIndex,\n} from \"./selectors.js\";\nimport type {\n DomActionOutcome,\n DomArrayFieldSelector,\n DomBuildPathInput,\n DomClickInput,\n DomDescriptorRecord,\n DomExtractArrayRowsInput,\n DomExtractFieldSelector,\n DomHoverInput,\n DomInputInput,\n DomReadDescriptorInput,\n DomResolveTargetInput,\n DomRuntime,\n DomScrollInput,\n DomTargetRef,\n DomWriteDescriptorInput,\n ReplayElementPath,\n ResolvedDomTarget,\n StructuralElementAnchor,\n} from \"./types.js\";\n\ninterface SnapshotTarget {\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode;\n}\n\nclass SnapshotSession {\n private readonly snapshotsByDocumentRef = new Map<string, Promise<DomSnapshot>>();\n private readonly snapshotsByFrameRef = new Map<string, Promise<DomSnapshot>>();\n private readonly mainSnapshotsByPageRef = new Map<string, Promise<DomSnapshot>>();\n\n constructor(private readonly engine: BrowserCoreEngine) {}\n\n getDocument(documentRef: DocumentRef): Promise<DomSnapshot> {\n const existing = this.snapshotsByDocumentRef.get(documentRef);\n if (existing) {\n return existing;\n }\n\n const promise = this.engine.getDomSnapshot({ documentRef }).then((snapshot) => {\n this.snapshotsByFrameRef.set(snapshot.frameRef, Promise.resolve(snapshot));\n return snapshot;\n });\n this.snapshotsByDocumentRef.set(documentRef, promise);\n return promise;\n }\n\n getFrame(frameRef: FrameRef): Promise<DomSnapshot> {\n const existing = this.snapshotsByFrameRef.get(frameRef);\n if (existing) {\n return existing;\n }\n\n const promise = this.engine.getDomSnapshot({ frameRef }).then((snapshot) => {\n this.snapshotsByDocumentRef.set(snapshot.documentRef, Promise.resolve(snapshot));\n return snapshot;\n });\n this.snapshotsByFrameRef.set(frameRef, promise);\n return promise;\n }\n\n getMainDocument(pageRef: PageRef): Promise<DomSnapshot> {\n const existing = this.mainSnapshotsByPageRef.get(pageRef);\n if (existing) {\n return existing;\n }\n\n const promise = this.engine.listFrames({ pageRef }).then(async (frames) => {\n const mainFrame = frames.find((frame) => frame.isMainFrame);\n if (!mainFrame) {\n throw new Error(`page ${pageRef} does not expose a main frame`);\n }\n const snapshot = await this.getFrame(mainFrame.frameRef);\n return snapshot;\n });\n this.mainSnapshotsByPageRef.set(pageRef, promise);\n return promise;\n }\n}\n\nclass DefaultDomRuntime implements DomRuntime {\n readonly engine: BrowserCoreEngine;\n private readonly descriptors: DomDescriptorStore;\n private readonly policy: OpensteerPolicy;\n private readonly executor: DomActionExecutor;\n private readonly bridge: DomActionBridge | undefined;\n\n constructor(options: {\n readonly engine: BrowserCoreEngine;\n readonly root?: FilesystemOpensteerWorkspace;\n readonly namespace?: string;\n readonly descriptorStore?: DomDescriptorStore;\n readonly policy?: OpensteerPolicy;\n }) {\n this.engine = options.engine;\n this.descriptors =\n options.descriptorStore ??\n createDomDescriptorStore({\n ...(options.root === undefined ? {} : { root: options.root }),\n ...(options.namespace === undefined ? {} : { namespace: options.namespace }),\n });\n this.policy = options.policy ?? defaultPolicy();\n this.bridge = resolveDomActionBridge(this.engine);\n this.executor = new DomActionExecutor({\n engine: this.engine,\n policy: this.policy,\n createResolutionSession: () => new SnapshotSession(this.engine),\n resolveTarget: (session, input) =>\n this.resolveTargetWithSession(session as SnapshotSession, input),\n writeDescriptor: (input) => this.descriptors.write(input),\n });\n }\n\n async buildAnchor(input: DomBuildPathInput): Promise<StructuralElementAnchor> {\n return this.withSnapshotSession(async (session) => {\n const snapshot = await session.getDocument(input.locator.documentRef);\n if (snapshot.documentEpoch !== input.locator.documentEpoch) {\n throw new Error(\n `node locator ${input.locator.nodeRef} is stale for ${input.locator.documentRef}`,\n );\n }\n const index = createSnapshotIndex(snapshot);\n const node = findNodeByNodeRef(index, input.locator.nodeRef);\n if (!node) {\n throw new Error(\n `node ${input.locator.nodeRef} was not found in ${input.locator.documentRef}`,\n );\n }\n return this.buildAnchorFromSnapshotNode(session, snapshot, node);\n });\n }\n\n async buildPath(input: DomBuildPathInput): Promise<ReplayElementPath> {\n return sanitizeReplayElementPath(\n await this.requireBridge().buildReplayPath(\n input.locator,\n input.enableTextMatch ? { enableTextMatch: true } : undefined,\n ),\n );\n }\n\n async resolveTarget(input: DomResolveTargetInput): Promise<ResolvedDomTarget> {\n return this.withSnapshotSession((session) => this.resolveTargetWithSession(session, input));\n }\n\n async writeDescriptor(input: DomWriteDescriptorInput): Promise<DomDescriptorRecord> {\n return this.descriptors.write({\n ...input,\n path: sanitizeElementPath(input.path),\n });\n }\n\n async readDescriptor(input: DomReadDescriptorInput): Promise<DomDescriptorRecord | undefined> {\n return this.descriptors.read(input);\n }\n\n async click(input: DomClickInput): Promise<DomActionOutcome> {\n return this.executor.click(input);\n }\n\n async hover(input: DomHoverInput): Promise<DomActionOutcome> {\n return this.executor.hover(input);\n }\n\n async input(input: DomInputInput): Promise<ResolvedDomTarget> {\n return this.executor.input(input);\n }\n\n async scroll(input: DomScrollInput): Promise<DomActionOutcome> {\n return this.executor.scroll(input);\n }\n\n async extractFields(input: {\n readonly pageRef: PageRef;\n readonly fields: readonly DomExtractFieldSelector[];\n }): Promise<Readonly<Record<string, string | null>>> {\n return this.withSnapshotSession(async (session) => {\n const result: Record<string, string | null> = {};\n const mainSnapshot = await session.getMainDocument(input.pageRef);\n\n for (const field of input.fields) {\n if (field.source === \"current_url\") {\n result[field.key] = mainSnapshot.url;\n continue;\n }\n if (!field.target) {\n result[field.key] = null;\n continue;\n }\n\n try {\n const resolved = await this.resolveTargetWithSession(session, {\n pageRef: input.pageRef,\n method: \"extract\",\n target: field.target,\n });\n result[field.key] = await this.readExtractedValue(\n resolved.snapshot,\n resolved.node,\n field.attribute,\n );\n } catch {\n result[field.key] = null;\n }\n }\n\n return result;\n });\n }\n\n async extractArrayRows(input: DomExtractArrayRowsInput) {\n return this.withSnapshotSession(async (session) => {\n const normalizedArray = {\n itemParentPath: sanitizeElementPath(input.array.itemParentPath),\n fields: input.array.fields.map((field) => ({\n key: field.key,\n ...(field.path === undefined ? {} : { path: sanitizeElementPath(field.path) }),\n ...(field.attribute === undefined ? {} : { attribute: field.attribute }),\n ...(field.source === undefined ? {} : { source: field.source }),\n })),\n };\n\n const items = await this.queryAllByElementPath(\n session,\n input.pageRef,\n normalizedArray.itemParentPath,\n );\n if (!items.length) {\n return [];\n }\n\n const rows: Array<{\n readonly values: Readonly<Record<string, string | null>>;\n readonly meta: {\n readonly key: string;\n readonly order: number;\n };\n }> = [];\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index]!;\n const values: Record<string, string | null> = {};\n\n for (const field of normalizedArray.fields) {\n if (field.source === \"current_url\") {\n values[field.key] = item.snapshot.url;\n continue;\n }\n\n const targetNode = await this.resolveArrayFieldTarget(item, field);\n values[field.key] =\n targetNode === null\n ? null\n : await this.readExtractedValue(item.snapshot, targetNode, field.attribute);\n }\n\n rows.push({\n values,\n meta: {\n key: `${item.snapshot.documentRef}:${item.node.nodeRef ?? `snapshot:${String(item.node.snapshotNodeId)}`}`,\n order: index,\n },\n });\n }\n\n return rows;\n });\n }\n\n async validateArrayFieldPositionStripping(input: {\n readonly pageRef: PageRef;\n readonly itemParentPath: ReplayElementPath;\n readonly fields: readonly {\n readonly key: string;\n readonly originalPath: ReplayElementPath;\n readonly strippedPath: ReplayElementPath;\n }[];\n }): Promise<Readonly<Record<string, boolean>>> {\n return this.withSnapshotSession(async (session) => {\n const fieldsByKey = new Map(input.fields.map((field) => [field.key, true]));\n if (!fieldsByKey.size) {\n return {};\n }\n\n const items = await this.queryAllByElementPath(session, input.pageRef, input.itemParentPath);\n if (!items.length) {\n return Object.fromEntries([...fieldsByKey.keys()].map((key) => [key, false]));\n }\n\n for (const item of items) {\n const index = createSnapshotIndex(item.snapshot);\n for (const field of input.fields) {\n if (!fieldsByKey.get(field.key)) {\n continue;\n }\n\n const original = this.resolveFirstArrayFieldTargetInNode(\n index,\n item.node,\n field.originalPath,\n );\n if (!original) {\n fieldsByKey.set(field.key, false);\n continue;\n }\n\n const strippedUnique = this.resolveUniqueArrayFieldTargetInNode(\n index,\n item.node,\n field.strippedPath,\n );\n fieldsByKey.set(field.key, sameSnapshotNode(original, strippedUnique));\n }\n\n if ([...fieldsByKey.values()].every((value) => !value)) {\n break;\n }\n }\n\n return Object.fromEntries(fieldsByKey);\n });\n }\n\n private async withSnapshotSession<T>(\n callback: (session: SnapshotSession) => Promise<T>,\n ): Promise<T> {\n return callback(new SnapshotSession(this.engine));\n }\n\n private async resolveTargetWithSession(\n session: SnapshotSession,\n input: DomResolveTargetInput & {\n readonly descriptorWriter?: (input: DomWriteDescriptorInput) => Promise<DomDescriptorRecord>;\n },\n ): Promise<ResolvedDomTarget> {\n let resolved: ResolvedDomTarget;\n switch (input.target.kind) {\n case \"descriptor\":\n resolved = await this.resolveDescriptorTarget(\n session,\n input.pageRef,\n input.method,\n input.target,\n );\n break;\n case \"live\":\n resolved = await this.resolveLiveTarget(session, input.pageRef, input.target);\n break;\n case \"anchor\":\n resolved = await this.resolveAnchorTarget(\n session,\n input.pageRef,\n input.target.anchor,\n \"anchor\",\n input.target.persist,\n );\n break;\n case \"path\":\n resolved = await this.resolvePathTarget(\n session,\n input.pageRef,\n sanitizeElementPath(input.target.path),\n \"path\",\n input.target.persist,\n );\n break;\n case \"selector\":\n resolved = await this.resolveSelectorTarget(\n session,\n input.pageRef,\n input.method,\n input.target,\n input.descriptorWriter,\n );\n break;\n }\n\n this.assertTargetPageOwnership(input.pageRef, resolved);\n return resolved;\n }\n\n private async resolveDescriptorTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n method: string,\n target: Extract<DomTargetRef, { readonly kind: \"descriptor\" }>,\n ): Promise<ResolvedDomTarget> {\n const descriptor = await this.descriptors.read({\n method,\n persist: target.persist,\n });\n if (!descriptor) {\n throw new OpensteerProtocolError(\n \"not-found\",\n `no stored DOM descriptor found for \"${target.persist}\"`,\n {\n details: {\n persist: target.persist,\n kind: \"dom-descriptor\",\n },\n },\n );\n }\n return this.resolveStoredDescriptorTarget(session, pageRef, descriptor);\n }\n\n private async resolveStoredDescriptorTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n descriptor: DomDescriptorRecord,\n ): Promise<ResolvedDomTarget> {\n return this.resolvePathTarget(\n session,\n pageRef,\n descriptor.payload.path,\n \"descriptor\",\n descriptor.payload.persist,\n descriptor,\n );\n }\n\n private async resolveLiveTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n target: Extract<DomTargetRef, { readonly kind: \"live\" }>,\n ): Promise<ResolvedDomTarget> {\n const resolvedByLocator = await this.tryResolveLiveTargetByLocator(session, target);\n if (resolvedByLocator) {\n const { snapshot, node } = resolvedByLocator;\n const anchor = await this.buildAnchorFromSnapshotNode(session, snapshot, node);\n const replayPath = await this.tryBuildPathFromNode(snapshot, node, { enableTextMatch: true });\n return this.createResolvedTarget(\"live\", snapshot, node, anchor, {\n ...(target.persist === undefined ? {} : { persist: target.persist }),\n ...(replayPath === undefined ? {} : { replayPath }),\n });\n }\n\n if (target.anchor) {\n return this.resolveAnchorTarget(session, pageRef, target.anchor, \"live\", target.persist);\n }\n\n throw new Error(\n `node locator ${target.locator.nodeRef} is stale for ${target.locator.documentRef}`,\n );\n }\n\n private async resolveSelectorTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n method: string,\n target: Extract<DomTargetRef, { readonly kind: \"selector\" }>,\n descriptorWriter:\n | ((input: DomWriteDescriptorInput) => Promise<DomDescriptorRecord>)\n | undefined,\n ): Promise<ResolvedDomTarget> {\n const resolved = await this.resolveSelectorMatch(session, pageRef, target);\n const { snapshot, node } = resolved;\n const anchor = await this.buildAnchorFromSnapshotNode(session, snapshot, node);\n const writeDescriptor =\n descriptorWriter ?? ((input: DomWriteDescriptorInput) => this.descriptors.write(input));\n const enableTextMatch = method !== \"extract\";\n const replayPath = await this.tryBuildPathFromNode(snapshot, node, { enableTextMatch });\n const descriptor =\n target.persist === undefined\n ? undefined\n : await writeDescriptor({\n method,\n persist: target.persist,\n path: replayPath ?? (await this.buildPathForNode(snapshot, node, { enableTextMatch })),\n sourceUrl: snapshot.url,\n });\n return this.createResolvedTarget(\"selector\", snapshot, node, anchor, {\n ...(target.persist === undefined ? {} : { persist: target.persist }),\n selectorUsed: target.selector,\n ...(replayPath === undefined ? {} : { replayPath }),\n ...(descriptor === undefined ? {} : { descriptor }),\n });\n }\n\n private async resolveSelectorMatch(\n session: SnapshotSession,\n pageRef: PageRef,\n target: Extract<DomTargetRef, { readonly kind: \"selector\" }>,\n ): Promise<{\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode & { readonly nodeRef: NodeRef };\n }> {\n if (target.documentRef !== undefined) {\n return this.resolveSelectorMatchWithinSnapshots(\n [await session.getDocument(target.documentRef)],\n target.selector,\n );\n }\n\n if (target.frameRef !== undefined) {\n return this.resolveSelectorMatchWithinSnapshots(\n [await session.getFrame(target.frameRef)],\n target.selector,\n );\n }\n\n const mainSnapshot = await session.getMainDocument(pageRef);\n const mainMatch = await this.findSelectorMatchWithinSnapshots([mainSnapshot], target.selector);\n if (mainMatch !== undefined) {\n return mainMatch;\n }\n\n const frameSnapshots = await this.listSelectorSearchSnapshots(session, pageRef);\n return this.resolveSelectorMatchWithinSnapshots(\n frameSnapshots.filter((snapshot) => snapshot.documentRef !== mainSnapshot.documentRef),\n target.selector,\n );\n }\n\n private async listSelectorSearchSnapshots(\n session: SnapshotSession,\n pageRef: PageRef,\n ): Promise<readonly DomSnapshot[]> {\n const frames = await this.engine.listFrames({ pageRef });\n const snapshots = await Promise.allSettled(\n [...frames]\n .sort((left, right) => Number(right.isMainFrame) - Number(left.isMainFrame))\n .map((frame) => session.getFrame(frame.frameRef)),\n );\n return snapshots.flatMap((snapshot) =>\n snapshot.status === \"fulfilled\" ? [snapshot.value] : [],\n );\n }\n\n private async resolveSelectorMatchWithinSnapshots(\n snapshots: readonly DomSnapshot[],\n selector: string,\n ): Promise<{\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode & { readonly nodeRef: NodeRef };\n }> {\n const match = await this.findSelectorMatchWithinSnapshots(snapshots, selector);\n if (!match) {\n throw new Error(`selector \"${selector}\" did not match any elements`);\n }\n\n return match;\n }\n\n private async findSelectorMatchWithinSnapshots(\n snapshots: readonly DomSnapshot[],\n selector: string,\n ): Promise<\n | {\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode & { readonly nodeRef: NodeRef };\n }\n | undefined\n > {\n let match:\n | {\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode & { readonly nodeRef: NodeRef };\n }\n | undefined;\n\n for (const snapshot of snapshots) {\n const index = createSnapshotIndex(snapshot);\n const matches = querySelectorAllInScope(index, selector, createExplicitSelectorScope());\n for (const candidate of matches) {\n const node = toLiveElementNode(index, candidate);\n if (!node) {\n continue;\n }\n\n if (match !== undefined) {\n throw new Error(`selector \"${selector}\" matched multiple elements`);\n }\n\n match = {\n snapshot,\n node,\n };\n }\n }\n\n return match;\n }\n\n private async resolvePathTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n rawPath: ReplayElementPath,\n source: ResolvedDomTarget[\"source\"],\n persist?: string,\n descriptor?: DomDescriptorRecord,\n ): Promise<ResolvedDomTarget> {\n const path = sanitizeReplayElementPath(rawPath);\n const context = await this.resolvePathContext(session, pageRef, path.context);\n const target = resolveDomPathInScope(context.index, path.nodes, context.scope);\n if (!target) {\n throwTargetNotFound(context.index, path.nodes, context.scope);\n }\n if (target.node.nodeRef === undefined) {\n throw new Error(\n `resolved path \"${buildPathSelectorHint(path)}\" does not point to a live element`,\n );\n }\n\n const anchor = await this.buildAnchorFromSnapshotNode(session, context.snapshot, target.node);\n return this.createResolvedTarget(source, context.snapshot, target.node, anchor, {\n ...(persist === undefined ? {} : { persist }),\n replayPath: path,\n ...(source === \"path\" || source === \"descriptor\" ? { selectorUsed: target.selector } : {}),\n ...(descriptor === undefined ? {} : { descriptor }),\n });\n }\n\n private async resolveAnchorTarget(\n session: SnapshotSession,\n pageRef: PageRef,\n rawAnchor: StructuralElementAnchor,\n source: Extract<ResolvedDomTarget[\"source\"], \"anchor\" | \"live\">,\n persist?: string,\n ): Promise<ResolvedDomTarget> {\n const anchor = sanitizeStructuralElementAnchor(rawAnchor);\n const context = await this.resolveAnchorContext(session, pageRef, anchor.context);\n const target = resolveStructuralAnchorInScope(context.index, anchor.nodes, context.scope);\n if (!target || target.node.nodeRef === undefined) {\n throw new Error(\n `Unable to resolve structural anchor \"${buildPathSelectorHint(anchor)}\" in the current session`,\n );\n }\n\n const replayPath = await this.tryBuildPathFromNode(context.snapshot, target.node, {\n enableTextMatch: true,\n });\n return this.createResolvedTarget(source, context.snapshot, target.node, anchor, {\n ...(persist === undefined ? {} : { persist }),\n ...(replayPath === undefined ? {} : { replayPath }),\n });\n }\n\n private async queryAllByElementPath(\n session: SnapshotSession,\n pageRef: PageRef,\n rawPath: ReplayElementPath,\n ): Promise<readonly SnapshotTarget[]> {\n const path = sanitizeReplayElementPath(rawPath);\n const context = await this.resolvePathContext(session, pageRef, path.context);\n return queryAllDomPathInScope(context.index, path.nodes, context.scope)\n .filter(\n (node): node is DomSnapshotNode & { readonly nodeRef: NodeRef } =>\n node.nodeRef !== undefined,\n )\n .map((node) => this.createSnapshotTarget(context.snapshot, node));\n }\n\n private async resolvePathContext(\n session: SnapshotSession,\n pageRef: PageRef,\n contextPath: readonly ReplayElementPath[\"context\"][number][],\n ): Promise<{\n readonly snapshot: DomSnapshot;\n readonly index: DomSnapshotIndex;\n readonly scope: DomQueryScope;\n }> {\n let snapshot = await session.getMainDocument(pageRef);\n let index = createSnapshotIndex(snapshot);\n let scope = createPathScope();\n\n for (const hop of contextPath) {\n const host = resolveDomPathInScope(index, hop.host, scope);\n if (!host) {\n throw new ElementPathError(\n \"ERR_PATH_CONTEXT_HOST_NOT_FOUND\",\n \"Unable to resolve context host from stored match selectors.\",\n );\n }\n\n if (hop.kind === \"iframe\") {\n const nextDocumentRef = host.node.contentDocumentRef;\n if (!nextDocumentRef) {\n throw new ElementPathError(\n \"ERR_PATH_IFRAME_UNAVAILABLE\",\n \"Iframe is unavailable or inaccessible for this path.\",\n );\n }\n\n snapshot = await session.getDocument(nextDocumentRef);\n index = createSnapshotIndex(snapshot);\n scope = createPathScope();\n continue;\n }\n\n const hostRef = host.node.nodeRef;\n if (hostRef === undefined || !hasShadowRoot(index, host.node)) {\n throw new ElementPathError(\n \"ERR_PATH_SHADOW_ROOT_UNAVAILABLE\",\n \"Shadow root is unavailable for this path.\",\n );\n }\n\n scope = createPathScope(hostRef);\n }\n\n return {\n snapshot,\n index,\n scope,\n };\n }\n\n private async resolveAnchorContext(\n session: SnapshotSession,\n pageRef: PageRef,\n contextPath: readonly StructuralElementAnchor[\"context\"][number][],\n ): Promise<{\n readonly snapshot: DomSnapshot;\n readonly index: DomSnapshotIndex;\n readonly scope: DomQueryScope;\n }> {\n let snapshot = await session.getMainDocument(pageRef);\n let index = createSnapshotIndex(snapshot);\n let scope = createPathScope();\n\n for (const hop of contextPath) {\n const host = resolveStructuralAnchorInScope(index, hop.host, scope);\n if (!host) {\n throw new Error(\"Unable to resolve structural context host in the current session.\");\n }\n\n if (hop.kind === \"iframe\") {\n const nextDocumentRef = host.node.contentDocumentRef;\n if (!nextDocumentRef) {\n throw new Error(\"Iframe is unavailable or inaccessible for this structural anchor.\");\n }\n\n snapshot = await session.getDocument(nextDocumentRef);\n index = createSnapshotIndex(snapshot);\n scope = createPathScope();\n continue;\n }\n\n const hostRef = host.node.nodeRef;\n if (hostRef === undefined || !hasShadowRoot(index, host.node)) {\n throw new Error(\"Shadow root is unavailable for this structural anchor.\");\n }\n\n scope = createPathScope(hostRef);\n }\n\n return {\n snapshot,\n index,\n scope,\n };\n }\n\n private async buildAnchorFromSnapshotNode(\n session: SnapshotSession,\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n ): Promise<StructuralElementAnchor> {\n const index = createSnapshotIndex(snapshot);\n const localAnchor = buildLocalStructuralElementAnchor(index, node);\n return this.prefixIframeContext(session, snapshot, localAnchor);\n }\n\n private async prefixIframeContext(\n session: SnapshotSession,\n snapshot: DomSnapshot,\n localPath: StructuralElementAnchor,\n ): Promise<StructuralElementAnchor>;\n private async prefixIframeContext(\n session: SnapshotSession,\n snapshot: DomSnapshot,\n localPath: StructuralElementAnchor,\n ): Promise<StructuralElementAnchor> {\n if (snapshot.parentDocumentRef === undefined) {\n return sanitizeStructuralElementAnchor(localPath);\n }\n\n const parentSnapshot = await session.getDocument(snapshot.parentDocumentRef);\n const parentIndex = createSnapshotIndex(parentSnapshot);\n const iframeHost = findIframeHostNode(parentIndex, snapshot.documentRef);\n if (!iframeHost) {\n throw new Error(\n `document ${snapshot.documentRef} has parent ${snapshot.parentDocumentRef} but no iframe host`,\n );\n }\n\n const hostPath = await this.buildAnchorFromSnapshotNode(session, parentSnapshot, iframeHost);\n return sanitizeStructuralElementAnchor({\n resolution: \"structural\",\n context: [\n ...hostPath.context,\n { kind: \"iframe\", host: hostPath.nodes },\n ...localPath.context,\n ],\n nodes: localPath.nodes,\n });\n }\n\n private async tryResolveLiveTargetByLocator(\n session: SnapshotSession,\n target: Extract<DomTargetRef, { readonly kind: \"live\" }>,\n ): Promise<\n | {\n readonly snapshot: DomSnapshot;\n readonly node: DomSnapshotNode & { readonly nodeRef: NodeRef };\n }\n | undefined\n > {\n const snapshot = await session.getDocument(target.locator.documentRef);\n if (snapshot.documentEpoch !== target.locator.documentEpoch) {\n return undefined;\n }\n\n const index = createSnapshotIndex(snapshot);\n const node = findNodeByNodeRef(index, target.locator.nodeRef);\n if (!node) {\n return undefined;\n }\n\n const elementNode = normalizeToElementNode(index, node);\n if (!elementNode || elementNode.nodeRef === undefined) {\n throw new Error(`node ${target.locator.nodeRef} is not attached to a live element`);\n }\n\n return {\n snapshot,\n node: elementNode as DomSnapshotNode & { readonly nodeRef: NodeRef },\n };\n }\n\n private createResolvedTarget(\n source: ResolvedDomTarget[\"source\"],\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n anchor: StructuralElementAnchor,\n options: {\n readonly persist?: string;\n readonly replayPath?: ReplayElementPath;\n readonly selectorUsed?: string;\n readonly descriptor?: DomDescriptorRecord;\n } = {},\n ): ResolvedDomTarget {\n if (node.nodeRef === undefined) {\n throw new Error(\n `snapshot node ${String(node.snapshotNodeId)} does not expose a live node reference`,\n );\n }\n const locator = createNodeLocator(snapshot.documentRef, snapshot.documentEpoch, node.nodeRef);\n return {\n source,\n pageRef: snapshot.pageRef,\n frameRef: snapshot.frameRef,\n documentRef: snapshot.documentRef,\n documentEpoch: snapshot.documentEpoch,\n nodeRef: node.nodeRef,\n locator,\n snapshot,\n node,\n anchor: sanitizeStructuralElementAnchor(anchor),\n ...(options.replayPath === undefined\n ? {}\n : { replayPath: sanitizeReplayElementPath(options.replayPath) }),\n ...(options.persist === undefined ? {} : { persist: options.persist }),\n ...(options.selectorUsed === undefined ? {} : { selectorUsed: options.selectorUsed }),\n ...(options.descriptor === undefined ? {} : { descriptor: options.descriptor }),\n };\n }\n\n private createSnapshotTarget(snapshot: DomSnapshot, node: DomSnapshotNode): SnapshotTarget {\n if (node.nodeRef === undefined) {\n throw new Error(\n `snapshot node ${String(node.snapshotNodeId)} does not expose a live node reference`,\n );\n }\n return {\n snapshot,\n node,\n };\n }\n\n private requireBridge(): DomActionBridge {\n if (!this.bridge) {\n throw new Error(\"DOM live bridge is unavailable for this engine\");\n }\n return this.bridge;\n }\n\n private async buildPathForNode(\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n options?: { readonly enableTextMatch?: boolean },\n ): Promise<ReplayElementPath> {\n if (node.nodeRef === undefined) {\n throw new Error(\n `snapshot node ${String(node.snapshotNodeId)} does not expose a live node reference`,\n );\n }\n\n return this.buildPath({\n locator: createNodeLocator(snapshot.documentRef, snapshot.documentEpoch, node.nodeRef),\n ...(options?.enableTextMatch ? { enableTextMatch: true } : {}),\n });\n }\n\n private async tryBuildPathFromNode(\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n options?: { readonly enableTextMatch?: boolean },\n ): Promise<ReplayElementPath | undefined> {\n try {\n return await this.buildPathForNode(snapshot, node, options);\n } catch {\n return undefined;\n }\n }\n\n private async resolveArrayFieldTarget(\n item: SnapshotTarget,\n field: DomArrayFieldSelector,\n ): Promise<DomSnapshotNode | null> {\n if (!field.path) {\n return item.node;\n }\n\n const index = createSnapshotIndex(item.snapshot);\n return this.resolveFirstArrayFieldTargetInNode(index, item.node, field.path);\n }\n\n private resolveFirstArrayFieldTargetInNode(\n index: DomSnapshotIndex,\n rootNode: DomSnapshotNode,\n path: ReplayElementPath,\n ): DomSnapshotNode | null {\n const normalizedPath = sanitizeElementPath(path);\n const selectors = buildArrayFieldCandidates(normalizedPath);\n if (!selectors.length) {\n return rootNode;\n }\n\n return resolveFirstWithinNodeBySelectors(index, rootNode, selectors);\n }\n\n private resolveUniqueArrayFieldTargetInNode(\n index: DomSnapshotIndex,\n rootNode: DomSnapshotNode,\n path: ReplayElementPath,\n ): DomSnapshotNode | null {\n const normalizedPath = sanitizeElementPath(path);\n const selectors = buildArrayFieldCandidates(normalizedPath);\n if (!selectors.length) {\n return rootNode;\n }\n\n for (const selector of selectors) {\n const matches = querySelectorAllWithinNode(index, rootNode, selector, createPathScope());\n if (matches.length === 1) {\n return matches[0]!;\n }\n }\n\n return null;\n }\n\n private async readExtractedValue(\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n attribute: string | undefined,\n ): Promise<string | null> {\n let raw: string | null;\n if (attribute === undefined) {\n raw = node.textContent ?? node.nodeValue ?? null;\n } else {\n raw = node.attributes.find((entry) => entry.name === attribute)?.value ?? null;\n }\n\n const normalized = normalizeExtractedValue(raw, attribute);\n return resolveExtractedValueInContext(normalized, {\n ...(attribute === undefined ? {} : { attribute }),\n baseURI: snapshot.url,\n insideIframe: snapshot.parentDocumentRef !== undefined,\n });\n }\n\n private assertTargetPageOwnership(pageRef: PageRef, resolved: ResolvedDomTarget): void {\n if (resolved.pageRef !== pageRef) {\n throw new Error(\n `DOM target resolved on page ${resolved.pageRef} instead of requested page ${pageRef}`,\n );\n }\n }\n}\n\nexport function createDomRuntime(options: {\n readonly engine: BrowserCoreEngine;\n readonly root?: FilesystemOpensteerWorkspace;\n readonly namespace?: string;\n readonly descriptorStore?: DomDescriptorStore;\n readonly policy?: OpensteerPolicy;\n}): DomRuntime {\n return new DefaultDomRuntime(options);\n}\n\nfunction sameSnapshotNode(\n left: DomSnapshotNode | null | undefined,\n right: DomSnapshotNode | null | undefined,\n): boolean {\n if (!left || !right) {\n return false;\n }\n if (left.nodeRef !== undefined && right.nodeRef !== undefined) {\n return left.nodeRef === right.nodeRef;\n }\n return left.snapshotNodeId === right.snapshotNodeId;\n}\n\nfunction toLiveElementNode(\n index: DomSnapshotIndex,\n node: DomSnapshotNode,\n): (DomSnapshotNode & { readonly nodeRef: NodeRef }) | undefined {\n const normalized = normalizeToElementNode(index, node);\n if (!normalized || !hasNodeRef(normalized)) {\n return undefined;\n }\n return normalized;\n}\n\nfunction hasNodeRef(\n node: DomSnapshotNode,\n): node is DomSnapshotNode & { readonly nodeRef: NodeRef } {\n return node.nodeRef !== undefined;\n}\n","export interface DataPathPropertyToken {\n readonly kind: \"prop\";\n readonly key: string;\n}\n\nexport interface DataPathIndexToken {\n readonly kind: \"index\";\n readonly index: number;\n}\n\nexport type DataPathToken = DataPathPropertyToken | DataPathIndexToken;\n\nexport function joinDataPath(base: string, key: string): string {\n const normalizedBase = base.trim();\n const normalizedKey = key.trim();\n if (normalizedBase.length === 0) {\n return normalizedKey;\n }\n if (normalizedKey.length === 0) {\n return normalizedBase;\n }\n return `${normalizedBase}.${normalizedKey}`;\n}\n\nexport function appendDataPathIndex(base: string, index: number): string {\n const normalizedBase = base.trim();\n const normalizedIndex = Math.trunc(index);\n if (normalizedBase.length === 0) {\n return `[${String(normalizedIndex)}]`;\n }\n return `${normalizedBase}[${String(normalizedIndex)}]`;\n}\n\nexport function encodeDataPath(tokens: readonly DataPathToken[]): string {\n let out = \"\";\n for (const token of tokens) {\n if (token.kind === \"prop\") {\n out = out.length === 0 ? token.key : `${out}.${token.key}`;\n continue;\n }\n out += `[${String(token.index)}]`;\n }\n return out;\n}\n\nexport function parseDataPath(path: string): DataPathToken[] | null {\n const input = path.trim();\n if (input.length === 0) {\n return [];\n }\n if (input.includes(\"..\") || input.startsWith(\".\") || input.endsWith(\".\")) {\n return null;\n }\n\n const tokens: DataPathToken[] = [];\n let cursor = 0;\n while (cursor < input.length) {\n const char = input[cursor];\n if (char === \".\") {\n cursor += 1;\n continue;\n }\n\n if (char === \"[\") {\n const close = input.indexOf(\"]\", cursor + 1);\n if (close === -1) {\n return null;\n }\n\n const rawIndex = input.slice(cursor + 1, close).trim();\n if (!/^\\d+$/.test(rawIndex)) {\n return null;\n }\n\n tokens.push({\n kind: \"index\",\n index: Number.parseInt(rawIndex, 10),\n });\n cursor = close + 1;\n continue;\n }\n\n let end = cursor;\n while (end < input.length && input[end] !== \".\" && input[end] !== \"[\") {\n end += 1;\n }\n\n const key = input.slice(cursor, end).trim();\n if (key.length === 0) {\n return null;\n }\n\n tokens.push({\n kind: \"prop\",\n key,\n });\n cursor = end;\n }\n\n return tokens;\n}\n\nexport function inflateDataPathObject(flat: Readonly<Record<string, unknown>>): unknown {\n let root: unknown = {};\n let initialized = false;\n\n for (const [path, value] of Object.entries(flat)) {\n const tokens = parseDataPath(path);\n if (!tokens || tokens.length === 0) {\n continue;\n }\n\n if (!initialized) {\n root = tokens[0]?.kind === \"index\" ? [] : {};\n initialized = true;\n }\n\n assignDataPathValue(root, tokens, value);\n }\n\n return initialized ? root : {};\n}\n\nfunction assignDataPathValue(\n root: unknown,\n tokens: readonly DataPathToken[],\n value: unknown,\n): void {\n let current: unknown = root;\n\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n const next = tokens[index + 1];\n const isLast = index === tokens.length - 1;\n if (!token) {\n return;\n }\n\n if (token.kind === \"prop\") {\n if (!current || typeof current !== \"object\" || Array.isArray(current)) {\n return;\n }\n\n const objectRef = current as Record<string, unknown>;\n if (isLast) {\n objectRef[token.key] = value;\n return;\n }\n\n if (next?.kind === \"index\") {\n if (!Array.isArray(objectRef[token.key])) {\n objectRef[token.key] = [];\n }\n } else if (\n !objectRef[token.key] ||\n typeof objectRef[token.key] !== \"object\" ||\n Array.isArray(objectRef[token.key])\n ) {\n objectRef[token.key] = {};\n }\n\n current = objectRef[token.key];\n continue;\n }\n\n if (!Array.isArray(current)) {\n return;\n }\n if (isLast) {\n current[token.index] = value;\n return;\n }\n\n if (next?.kind === \"index\") {\n if (!Array.isArray(current[token.index])) {\n current[token.index] = [];\n }\n } else if (\n !current[token.index] ||\n typeof current[token.index] !== \"object\" ||\n Array.isArray(current[token.index])\n ) {\n current[token.index] = {};\n }\n\n current = current[token.index];\n }\n}\n","import { canonicalJsonString } from \"../json.js\";\nimport {\n sanitizeElementPath,\n type ElementPath,\n type MatchClause,\n type PathNode,\n} from \"../runtimes/dom/index.js\";\nimport { VOLATILE_CLASS_TOKENS, VOLATILE_LAZY_CLASS_TOKENS } from \"../runtimes/dom/match-policy.js\";\nimport {\n encodeDataPath,\n joinDataPath,\n parseDataPath,\n type DataPathToken,\n} from \"./extraction-data-path.js\";\nimport type {\n PersistedOpensteerExtractionArrayNode,\n PersistedOpensteerExtractionNode,\n PersistedOpensteerExtractionObjectNode,\n PersistedOpensteerExtractionPayload,\n PersistedOpensteerExtractionSourceNode,\n PersistedOpensteerExtractionValueNode,\n} from \"./extraction.js\";\n\nexport interface PersistableOpensteerPathField {\n readonly key: string;\n readonly path: ElementPath;\n readonly attribute?: string;\n}\n\nexport interface PersistableOpensteerSourceField {\n readonly key: string;\n readonly source: \"current_url\";\n}\n\nexport type PersistableOpensteerExtractionField =\n | PersistableOpensteerPathField\n | PersistableOpensteerSourceField;\n\ninterface IndexedArrayField {\n readonly source: PersistableOpensteerExtractionField;\n readonly arrayPath: string;\n readonly index: number;\n readonly fieldPath: string;\n}\n\ninterface ConsolidatedArrayField {\n readonly path: string;\n readonly node: PersistedOpensteerExtractionNode;\n}\n\ninterface ConsolidatedArrayVariantDescriptor {\n readonly itemParentPath: ElementPath;\n readonly fields: readonly ConsolidatedArrayField[];\n}\n\ninterface ConsolidatedArrayDescriptor {\n readonly path: string;\n readonly variants: readonly ConsolidatedArrayVariantDescriptor[];\n}\n\ninterface PerIndexDescriptor {\n readonly index: number;\n readonly itemRoot: ElementPath;\n readonly fields: readonly ConsolidatedArrayField[];\n}\n\nconst STRUCTURAL_ATTR_KEYS = new Set([\n \"class\",\n \"role\",\n \"type\",\n \"name\",\n \"data-testid\",\n \"data-test\",\n \"data-qa\",\n \"data-cy\",\n]);\n\nconst SINGLE_SAMPLE_DROP_ATTR_KEYS = new Set([\n \"id\",\n \"href\",\n \"src\",\n \"srcset\",\n \"imagesrcset\",\n \"ping\",\n \"value\",\n \"title\",\n \"alt\",\n \"placeholder\",\n \"for\",\n \"aria-label\",\n \"aria-labelledby\",\n]);\n\nconst DATA_TEST_ATTR_KEYS = new Set([\"data-testid\", \"data-test\", \"data-qa\", \"data-cy\"]);\n\nconst CLUSTER_FALLBACK_PREFIX = \"variant\";\n\nexport function buildPersistedOpensteerExtractionPayload(\n fields: readonly PersistableOpensteerExtractionField[],\n): PersistedOpensteerExtractionPayload {\n const normalizedFields = normalizePersistableFields(fields);\n\n const grouped = new Map<string, IndexedArrayField[]>();\n for (const field of normalizedFields) {\n const parsed = parseIndexedArrayFieldKey(field.key);\n if (!parsed) {\n continue;\n }\n\n const list = grouped.get(parsed.arrayPath) ?? [];\n list.push({\n source: field,\n arrayPath: parsed.arrayPath,\n index: parsed.index,\n fieldPath: parsed.fieldPath,\n });\n grouped.set(parsed.arrayPath, list);\n }\n\n const consumedFieldKeys = new Set<string>();\n const arrays: ConsolidatedArrayDescriptor[] = [];\n\n for (const [arrayPath, entries] of grouped) {\n const descriptor = buildPersistedArrayDescriptor(arrayPath, entries);\n if (!descriptor) {\n continue;\n }\n\n arrays.push(descriptor);\n for (const entry of entries) {\n consumedFieldKeys.add(entry.source.key);\n }\n }\n\n const root: PersistedOpensteerExtractionObjectNode = {};\n\n for (const field of normalizedFields) {\n if (!field.key || consumedFieldKeys.has(field.key)) {\n continue;\n }\n insertNodeAtPath(root, field.key, createNodeFromPersistableField(field));\n }\n\n for (const descriptor of arrays.sort((left, right) => left.path.localeCompare(right.path))) {\n if (!descriptor.variants.length) {\n continue;\n }\n\n insertNodeAtPath(root, descriptor.path, {\n $array: {\n variants: descriptor.variants.map((variant) => ({\n itemParentPath: cloneElementPath(variant.itemParentPath),\n item: buildArrayItemNode(variant.fields),\n })),\n },\n });\n }\n\n return root;\n}\n\nfunction normalizePersistableFields(\n fields: readonly PersistableOpensteerExtractionField[],\n): PersistableOpensteerExtractionField[] {\n return fields.map((field) => {\n const key = String(field.key || \"\").trim();\n if (!isPersistablePathField(field)) {\n return {\n key,\n source: \"current_url\",\n };\n }\n\n return {\n key,\n path: sanitizeElementPath(field.path),\n ...(field.attribute === undefined ? {} : { attribute: field.attribute }),\n };\n });\n}\n\nfunction buildPersistedArrayDescriptor(\n arrayPath: string,\n entries: readonly IndexedArrayField[],\n): ConsolidatedArrayDescriptor | null {\n const fieldsByIndex = new Map<number, IndexedArrayField[]>();\n for (const entry of entries) {\n const list = fieldsByIndex.get(entry.index) ?? [];\n list.push(entry);\n fieldsByIndex.set(entry.index, list);\n }\n\n if (!fieldsByIndex.size) {\n return null;\n }\n\n const perIndexDescriptors: PerIndexDescriptor[] = [];\n for (const [index, indexEntries] of fieldsByIndex) {\n const descriptor = buildPerIndexDescriptor(index, indexEntries);\n if (!descriptor) {\n continue;\n }\n perIndexDescriptors.push(descriptor);\n }\n\n if (!perIndexDescriptors.length) {\n return null;\n }\n\n const variantsByCluster = new Map<string, PerIndexDescriptor[]>();\n for (const descriptor of perIndexDescriptors) {\n const clusterKey = buildVariantClusterKey(descriptor);\n const list = variantsByCluster.get(clusterKey) ?? [];\n list.push(descriptor);\n variantsByCluster.set(clusterKey, list);\n }\n\n const variants: ConsolidatedArrayVariantDescriptor[] = [];\n for (const descriptors of variantsByCluster.values()) {\n const variant = buildVariantDescriptorFromCluster(descriptors);\n if (!variant) {\n continue;\n }\n variants.push(variant);\n }\n\n if (!variants.length) {\n return null;\n }\n\n variants.sort((left, right) =>\n buildVariantSortKey(left).localeCompare(buildVariantSortKey(right)),\n );\n\n return {\n path: arrayPath,\n variants,\n };\n}\n\nfunction buildPerIndexDescriptor(\n index: number,\n entries: readonly IndexedArrayField[],\n): PerIndexDescriptor | null {\n if (!entries.length) {\n return null;\n }\n\n const root = buildItemRootForArrayIndex(entries);\n if (!root) {\n return null;\n }\n\n const fieldsByPath = new Map<string, ConsolidatedArrayField>();\n for (const entry of entries) {\n if (!entry.fieldPath && !isPersistablePathField(entry.source)) {\n fieldsByPath.set(\"\", {\n path: \"\",\n node: createSourceNode(\"current_url\"),\n });\n continue;\n }\n\n if (!isPersistablePathField(entry.source)) {\n fieldsByPath.set(entry.fieldPath, {\n path: entry.fieldPath,\n node: createSourceNode(\"current_url\"),\n });\n continue;\n }\n\n const relativePath = toRelativeElementPath(entry.source.path, root);\n if (!relativePath) {\n continue;\n }\n\n fieldsByPath.set(entry.fieldPath, {\n path: entry.fieldPath,\n node: createValueNode({\n elementPath: relativePath,\n ...(entry.source.attribute === undefined ? {} : { attribute: entry.source.attribute }),\n }),\n });\n }\n\n const fields = [...fieldsByPath.values()].sort((left, right) =>\n left.path.localeCompare(right.path),\n );\n if (!fields.length) {\n return null;\n }\n\n return {\n index,\n itemRoot: root,\n fields,\n };\n}\n\nfunction buildVariantClusterKey(descriptor: PerIndexDescriptor): string {\n const rootStructure = buildPathStructureKey(descriptor.itemRoot);\n const fieldStructure = descriptor.fields\n .map((field) => {\n const node = field.node;\n if (isPersistedOpensteerExtractionSourceNode(node)) {\n return `${field.path}::source:current_url`;\n }\n if (isPersistedOpensteerExtractionValueNode(node)) {\n return `${field.path}::path:${buildPathStructureKey(node.$path)}::attr:${String(node.attribute || \"\")}`;\n }\n return `${field.path}::other:${canonicalJsonString(node)}`;\n })\n .sort();\n\n return `${CLUSTER_FALLBACK_PREFIX}:${rootStructure}::${fieldStructure.join(\"|\")}`;\n}\n\nfunction buildVariantDescriptorFromCluster(\n descriptors: readonly PerIndexDescriptor[],\n): ConsolidatedArrayVariantDescriptor | null {\n if (!descriptors.length) {\n return null;\n }\n\n const clusterSize = descriptors.length;\n const threshold = clusterSize === 1 ? 1 : majorityThreshold(clusterSize);\n\n const rootPaths = descriptors.map((descriptor) => descriptor.itemRoot);\n const mergedItemPath =\n clusterSize === 1\n ? relaxPathForSingleSample(rootPaths[0]!, \"item-root\")\n : (mergeElementPathsByMajority(rootPaths) ?? sanitizeElementPath(rootPaths[0]!));\n const normalizedItemPath = minimizePathMatchClauses(mergedItemPath, \"item-root\");\n\n const keyStats = new Map<\n string,\n {\n readonly indices: Set<number>;\n readonly pathNodes: ElementPath[];\n readonly attributes: Array<string | undefined>;\n readonly sources: Array<\"current_url\">;\n }\n >();\n\n for (const descriptor of descriptors) {\n for (const field of descriptor.fields) {\n const stat = keyStats.get(field.path) ?? {\n indices: new Set<number>(),\n pathNodes: [],\n attributes: [],\n sources: [],\n };\n\n stat.indices.add(descriptor.index);\n if (isPersistedOpensteerExtractionValueNode(field.node)) {\n stat.pathNodes.push(field.node.$path);\n stat.attributes.push(field.node.attribute);\n } else if (isPersistedOpensteerExtractionSourceNode(field.node)) {\n stat.sources.push(\"current_url\");\n }\n\n keyStats.set(field.path, stat);\n }\n }\n\n const mergedFields: ConsolidatedArrayField[] = [];\n for (const [fieldPath, stat] of keyStats) {\n if (stat.indices.size < threshold) {\n continue;\n }\n\n if (stat.pathNodes.length >= threshold) {\n let mergedFieldPath: ElementPath | null =\n stat.pathNodes.length === 1\n ? sanitizeElementPath(stat.pathNodes[0]!)\n : mergeElementPathsByMajority(stat.pathNodes);\n if (!mergedFieldPath) {\n continue;\n }\n\n if (clusterSize === 1) {\n mergedFieldPath = relaxPathForSingleSample(mergedFieldPath, \"field\");\n }\n mergedFieldPath = minimizePathMatchClauses(mergedFieldPath, \"field\");\n\n const attrThreshold =\n stat.pathNodes.length === 1 ? 1 : majorityThreshold(stat.pathNodes.length);\n const attribute = pickModeString(stat.attributes, attrThreshold);\n\n mergedFields.push({\n path: fieldPath,\n node: createValueNode({\n elementPath: mergedFieldPath,\n ...(attribute === undefined ? {} : { attribute }),\n }),\n });\n continue;\n }\n\n const dominantSource = pickModeString(stat.sources, threshold);\n if (dominantSource === \"current_url\") {\n mergedFields.push({\n path: fieldPath,\n node: createSourceNode(\"current_url\"),\n });\n }\n }\n\n if (!mergedFields.length) {\n return null;\n }\n\n mergedFields.sort((left, right) => left.path.localeCompare(right.path));\n return {\n itemParentPath: normalizedItemPath,\n fields: mergedFields,\n };\n}\n\nfunction minimizePathMatchClauses(path: ElementPath, mode: \"item-root\" | \"field\"): ElementPath {\n const normalized = sanitizeElementPath(path);\n const nodes = normalized.nodes.map((node, index) => {\n const isLast = index === normalized.nodes.length - 1;\n const attrs = node.attrs || {};\n\n const attrClauses = dedupeMatchClauses(\n (node.match || [])\n .filter((clause): clause is MatchClause => clause?.kind === \"attr\")\n .map((clause) => normalizeAttrClauseForMinimization(clause, attrs))\n .filter((clause): clause is MatchClause => clause !== null),\n );\n\n const positionClauses = (node.match || []).filter(\n (clause): clause is MatchClause => clause?.kind === \"position\",\n );\n\n let keptPositions: MatchClause[] = [];\n if (mode === \"field\") {\n keptPositions = pickMinimalPositionClauses(positionClauses);\n } else if (!attrClauses.length) {\n keptPositions = pickMinimalPositionClauses(positionClauses);\n } else if (mode === \"item-root\" && !isLast) {\n keptPositions = [];\n }\n\n let match = dedupeMatchClauses([...attrClauses, ...keptPositions]);\n if (!match.length) {\n const seeded = seedMinimalAttrClause(attrs);\n match = seeded ? [seeded] : pickMinimalPositionClauses(positionClauses);\n }\n\n return {\n ...node,\n attrs,\n match: match.sort(compareMatchClauses),\n };\n });\n\n return sanitizeElementPath({\n resolution: \"deterministic\",\n context: clonePathContext(normalized.context),\n nodes,\n });\n}\n\nfunction normalizeAttrClauseForMinimization(\n clause: MatchClause,\n attrs: Record<string, string>,\n): MatchClause | null {\n if (clause.kind !== \"attr\") {\n return null;\n }\n\n const key = String(clause.key || \"\")\n .trim()\n .toLowerCase();\n if (!key || !Object.hasOwn(attrs, key)) {\n return null;\n }\n\n if (key === \"class\") {\n const classValue = sanitizeClassValueForSelector(String(attrs.class || \"\"));\n if (!classValue) {\n return null;\n }\n return {\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: classValue,\n };\n }\n\n return {\n kind: \"attr\",\n key,\n op: clause.op === \"startsWith\" || clause.op === \"contains\" ? clause.op : \"exact\",\n ...(typeof clause.value === \"string\" && clause.value.trim() ? { value: clause.value } : {}),\n };\n}\n\nfunction pickMinimalPositionClauses(clauses: readonly MatchClause[]): MatchClause[] {\n const nthOfType = clauses.find(\n (clause) => clause.kind === \"position\" && clause.axis === \"nthOfType\",\n );\n if (nthOfType) {\n return [nthOfType];\n }\n\n const nthChild = clauses.find(\n (clause) => clause.kind === \"position\" && clause.axis === \"nthChild\",\n );\n return nthChild ? [nthChild] : [];\n}\n\nfunction seedMinimalAttrClause(attrs: Record<string, string>): MatchClause | null {\n const id = String(attrs.id || \"\").trim();\n if (id) {\n return {\n kind: \"attr\",\n key: \"id\",\n op: \"exact\",\n };\n }\n\n const classValue = sanitizeClassValueForSelector(String(attrs.class || \"\"));\n if (classValue) {\n return {\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: classValue,\n };\n }\n\n for (const key of [\"data-testid\", \"data-test\", \"data-qa\", \"data-cy\"]) {\n const value = String(attrs[key] || \"\").trim();\n if (!value) {\n continue;\n }\n return {\n kind: \"attr\",\n key,\n op: \"exact\",\n };\n }\n\n return null;\n}\n\nfunction relaxPathForSingleSample(path: ElementPath, mode: \"item-root\" | \"field\"): ElementPath {\n const normalized = sanitizeElementPath(path);\n\n const relaxedNodes = normalized.nodes.map((node, index) => {\n const isLast = index === normalized.nodes.length - 1;\n const attrs = normalizeAttrsForSingleSample(node.attrs || {});\n\n const match = (node.match || [])\n .filter((clause) => {\n if (!clause || typeof clause !== \"object\") {\n return false;\n }\n\n if (clause.kind === \"position\") {\n if (mode === \"field\") {\n return true;\n }\n return !isLast;\n }\n\n if (clause.kind === \"text\") {\n return false;\n }\n\n const key = String(clause.key || \"\")\n .trim()\n .toLowerCase();\n if (!key || !shouldKeepAttrForSingleSample(key)) {\n return false;\n }\n if (key === \"class\") {\n return typeof attrs.class === \"string\" && attrs.class.trim().length > 0;\n }\n return Object.hasOwn(attrs, key);\n })\n .map((clause) => {\n if (clause.kind !== \"attr\" || clause.key !== \"class\") {\n return clause;\n }\n return {\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n ...(attrs.class === undefined ? {} : { value: attrs.class }),\n } satisfies MatchClause;\n });\n\n if (!match.length && typeof attrs.class === \"string\" && attrs.class) {\n match.push({\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: attrs.class,\n });\n }\n\n return {\n ...node,\n attrs,\n match,\n };\n });\n\n return sanitizeElementPath({\n resolution: \"deterministic\",\n context: clonePathContext(normalized.context),\n nodes: relaxedNodes,\n });\n}\n\nfunction normalizeAttrsForSingleSample(attrs: Record<string, string>): Record<string, string> {\n const out: Record<string, string> = {};\n\n for (const [rawKey, rawValue] of Object.entries(attrs || {})) {\n const key = String(rawKey || \"\")\n .trim()\n .toLowerCase();\n if (!key || !shouldKeepAttrForSingleSample(key)) {\n continue;\n }\n\n let value = String(rawValue || \"\").trim();\n if (!value) {\n continue;\n }\n\n if (key === \"class\") {\n value = sanitizeClassValueForSelector(value);\n if (!value) {\n continue;\n }\n }\n\n out[key] = value;\n }\n\n return out;\n}\n\nfunction shouldKeepAttrForSingleSample(key: string): boolean {\n if (!key) {\n return false;\n }\n if (SINGLE_SAMPLE_DROP_ATTR_KEYS.has(key)) {\n return false;\n }\n if (key.startsWith(\"data-\") && !DATA_TEST_ATTR_KEYS.has(key)) {\n return false;\n }\n return true;\n}\n\nfunction buildPathStructureKey(path: ElementPath): string {\n const normalized = sanitizeElementPath(path);\n return canonicalJsonString({\n context: (normalized.context || []).map((hop) => ({\n kind: hop.kind,\n host: (hop.host || []).map((node) => buildNodeStructure(node)),\n })),\n nodes: (normalized.nodes || []).map((node) => buildNodeStructure(node)),\n });\n}\n\nfunction buildNodeStructure(node: PathNode): Record<string, unknown> {\n const tag = String(node.tag || \"*\").toLowerCase();\n const attrs = node.attrs || {};\n const structuralAttrs: Record<string, string> = {};\n\n for (const [rawKey, rawValue] of Object.entries(attrs)) {\n const key = String(rawKey || \"\")\n .trim()\n .toLowerCase();\n if (!STRUCTURAL_ATTR_KEYS.has(key)) {\n continue;\n }\n\n let value = String(rawValue || \"\").trim();\n if (!value) {\n continue;\n }\n\n if (key === \"class\") {\n value = normalizeClassValueForStructure(value);\n if (!value) {\n continue;\n }\n }\n\n structuralAttrs[key] = value;\n }\n\n const matchClauses = (node.match || [])\n .map((clause) => {\n if (clause.kind === \"position\") return `position:${clause.axis}`;\n if (clause.kind === \"text\") return `text:${clause.value}`;\n return `attr:${String(clause.key || \"\")\n .trim()\n .toLowerCase()}`;\n })\n .sort();\n\n return {\n tag,\n attrs: structuralAttrs,\n match: matchClauses,\n depthHint: Number(node.position?.nthOfType || 0) > 0 ? \"typed\" : \"any\",\n };\n}\n\nfunction sanitizeClassValueForSelector(value: string): string {\n return tokenizeStableClassValue(value).join(\" \");\n}\n\nfunction normalizeClassValueForStructure(value: string): string {\n const tokens = tokenizeStableClassValue(value);\n if (!tokens.length) {\n return \"\";\n }\n return [...tokens].sort((left, right) => left.localeCompare(right)).join(\" \");\n}\n\nfunction tokenizeStableClassValue(value: string): string[] {\n const seen = new Set<string>();\n const out: string[] = [];\n\n for (const token of String(value || \"\").split(/\\s+/)) {\n const trimmed = token.trim();\n if (!trimmed) {\n continue;\n }\n\n const normalized = trimmed.toLowerCase();\n if (VOLATILE_CLASS_TOKENS.has(normalized)) {\n continue;\n }\n if (VOLATILE_LAZY_CLASS_TOKENS.has(normalized)) {\n continue;\n }\n if (seen.has(trimmed)) {\n continue;\n }\n\n seen.add(trimmed);\n out.push(trimmed);\n }\n\n return out;\n}\n\nfunction buildVariantSortKey(descriptor: ConsolidatedArrayVariantDescriptor): string {\n const root = buildPathStructureKey(descriptor.itemParentPath);\n const fields = descriptor.fields\n .map((field) => {\n if (isPersistedOpensteerExtractionSourceNode(field.node)) {\n return `${field.path}:source`;\n }\n if (isPersistedOpensteerExtractionValueNode(field.node)) {\n return `${field.path}:path:${buildPathStructureKey(field.node.$path)}:${String(field.node.attribute || \"\")}`;\n }\n return `${field.path}:other`;\n })\n .sort()\n .join(\"|\");\n\n return `${root}::${fields}`;\n}\n\nfunction createValueNode(selector: {\n readonly elementPath: ElementPath;\n readonly attribute?: string;\n}): PersistedOpensteerExtractionValueNode {\n return {\n $path: cloneElementPath(selector.elementPath),\n ...(selector.attribute === undefined ? {} : { attribute: selector.attribute }),\n };\n}\n\nfunction createSourceNode(source: \"current_url\"): PersistedOpensteerExtractionSourceNode {\n return {\n $source: source,\n };\n}\n\nfunction createNodeFromPersistableField(\n field: PersistableOpensteerExtractionField,\n): PersistedOpensteerExtractionNode {\n if (!isPersistablePathField(field)) {\n return createSourceNode(\"current_url\");\n }\n\n return createValueNode({\n elementPath: field.path,\n ...(field.attribute === undefined ? {} : { attribute: field.attribute }),\n });\n}\n\nfunction buildArrayItemNode(\n fields: readonly ConsolidatedArrayField[],\n): PersistedOpensteerExtractionNode {\n if (!fields.length) {\n throw new Error(\n \"Unable to build persisted extraction array item descriptor: no fields were consolidated.\",\n );\n }\n\n if (fields.length === 1 && String(fields[0]?.path || \"\").trim() === \"\") {\n return clonePersistedOpensteerExtractionNode(fields[0]!.node);\n }\n\n const node: Record<string, PersistedOpensteerExtractionNode> = {};\n for (const field of fields) {\n const fieldPath = String(field.path || \"\").trim();\n if (!fieldPath) {\n throw new Error(\n \"Unable to build persisted extraction array item descriptor: mixed primitive and object field paths.\",\n );\n }\n insertNodeAtPath(node, fieldPath, clonePersistedOpensteerExtractionNode(field.node));\n }\n\n return node;\n}\n\nfunction insertNodeAtPath(\n root: Record<string, PersistedOpensteerExtractionNode>,\n path: string,\n node: PersistedOpensteerExtractionNode,\n): void {\n const tokens = parseDataPath(path);\n if (!tokens || !tokens.length) {\n throw new Error(\n `Invalid persisted extraction path \"${path}\": expected a non-empty object path.`,\n );\n }\n\n if (tokens.some((token) => token.kind === \"index\")) {\n throw new Error(\n `Invalid persisted extraction path \"${path}\": nested array indices are not supported in cached descriptors.`,\n );\n }\n\n let current = root;\n for (let index = 0; index < tokens.length; index += 1) {\n const token = tokens[index];\n if (!token || token.kind !== \"prop\") {\n throw new Error(`Invalid persisted extraction path \"${path}\": expected object segment.`);\n }\n\n const isLast = index === tokens.length - 1;\n if (isLast) {\n const existing = current[token.key];\n if (existing) {\n throw new Error(\n `Conflicting persisted extraction path \"${path}\" detected while building descriptor tree.`,\n );\n }\n current[token.key] = node;\n return;\n }\n\n const next = current[token.key];\n if (!next) {\n const created: Record<string, PersistedOpensteerExtractionNode> = {};\n current[token.key] = created;\n current = created;\n continue;\n }\n\n if (!isPersistedObjectNode(next)) {\n throw new Error(\n `Conflicting persisted extraction path \"${path}\" detected at \"${token.key}\".`,\n );\n }\n current = next;\n }\n}\n\nfunction parseIndexedArrayFieldKey(\n key: string,\n): { readonly arrayPath: string; readonly index: number; readonly fieldPath: string } | null {\n const tokens = parseDataPath(key);\n if (!tokens || !tokens.length) {\n return null;\n }\n\n const firstArrayIndex = tokens.findIndex((token) => token.kind === \"index\");\n if (firstArrayIndex <= 0) {\n return null;\n }\n\n const indexToken = tokens[firstArrayIndex];\n if (!indexToken || indexToken.kind !== \"index\") {\n return null;\n }\n\n const arrayPath = encodeDataPath(tokens.slice(0, firstArrayIndex));\n if (!arrayPath) {\n return null;\n }\n\n return {\n arrayPath,\n index: indexToken.index,\n fieldPath: encodeDataPath(tokens.slice(firstArrayIndex + 1)),\n };\n}\n\nfunction buildItemRootForArrayIndex(entries: readonly IndexedArrayField[]): ElementPath | null {\n if (!entries.length) {\n return null;\n }\n\n const paths = entries\n .map((entry) =>\n isPersistablePathField(entry.source) ? sanitizeElementPath(entry.source.path) : null,\n )\n .filter((path): path is ElementPath => path !== null);\n if (!paths.length) {\n return null;\n }\n\n const prefixLength = getCommonPathPrefixLength(paths);\n if (prefixLength <= 0) {\n return null;\n }\n\n const base = paths[0];\n if (!base) {\n return null;\n }\n\n return sanitizeElementPath({\n resolution: \"deterministic\",\n context: clonePathContext(base.context),\n nodes: clonePathNodes(base.nodes.slice(0, prefixLength)),\n });\n}\n\nfunction getCommonPathPrefixLength(paths: readonly ElementPath[]): number {\n if (!paths.length) {\n return 0;\n }\n\n const nodeChains = paths.map((path) => path.nodes);\n const minLength = Math.min(...nodeChains.map((nodes) => nodes.length));\n if (!Number.isFinite(minLength) || minLength <= 0) {\n return 0;\n }\n\n for (let index = 0; index < minLength; index += 1) {\n const first = nodeChains[0]?.[index];\n if (!first) {\n return index;\n }\n\n for (let nodeIndex = 1; nodeIndex < nodeChains.length; nodeIndex += 1) {\n const candidate = nodeChains[nodeIndex]?.[index];\n if (!candidate || !arePathNodesEquivalent(first, candidate)) {\n return index;\n }\n }\n }\n\n return minLength;\n}\n\nfunction arePathNodesEquivalent(left: PathNode, right: PathNode): boolean {\n if (String(left.tag || \"*\").toLowerCase() !== String(right.tag || \"*\").toLowerCase()) {\n return false;\n }\n\n if (Number(left.position?.nthChild || 0) !== Number(right.position?.nthChild || 0)) {\n return false;\n }\n\n if (Number(left.position?.nthOfType || 0) !== Number(right.position?.nthOfType || 0)) {\n return false;\n }\n\n const leftId = String(left.attrs?.id || \"\");\n const rightId = String(right.attrs?.id || \"\");\n if ((leftId || rightId) && leftId !== rightId) {\n return false;\n }\n\n const leftClass = String(left.attrs?.class || \"\");\n const rightClass = String(right.attrs?.class || \"\");\n if ((leftClass || rightClass) && leftClass !== rightClass) {\n return false;\n }\n\n return true;\n}\n\nfunction toRelativeElementPath(absolute: ElementPath, root: ElementPath): ElementPath | null {\n const normalizedAbsolute = sanitizeElementPath(absolute);\n const normalizedRoot = sanitizeElementPath(root);\n\n if (\n canonicalJsonString(normalizedAbsolute.context) !== canonicalJsonString(normalizedRoot.context)\n ) {\n return null;\n }\n\n const absoluteNodes = normalizedAbsolute.nodes;\n const rootNodes = normalizedRoot.nodes;\n if (rootNodes.length > absoluteNodes.length) {\n return null;\n }\n\n for (let index = 0; index < rootNodes.length; index += 1) {\n const absoluteNode = absoluteNodes[index];\n const rootNode = rootNodes[index];\n if (!absoluteNode || !rootNode || !arePathNodesEquivalent(absoluteNode, rootNode)) {\n return null;\n }\n }\n\n return {\n resolution: \"deterministic\",\n context: [],\n nodes: clonePathNodes(absoluteNodes.slice(rootNodes.length)),\n };\n}\n\nfunction mergeElementPathsByMajority(paths: readonly ElementPath[]): ElementPath | null {\n if (!paths.length) {\n return null;\n }\n\n const normalized = paths.map((path) => sanitizeElementPath(path));\n const contextKey = pickModeString(\n normalized.map((path) => canonicalJsonString(path.context)),\n 1,\n );\n if (!contextKey) {\n return null;\n }\n\n const sameContext = normalized.filter((path) => canonicalJsonString(path.context) === contextKey);\n if (!sameContext.length) {\n return null;\n }\n\n const targetLength =\n pickModeNumber(\n sameContext.map((path) => path.nodes.length),\n 1,\n ) ??\n sameContext[0]?.nodes.length ??\n 0;\n const aligned = sameContext.filter((path) => path.nodes.length === targetLength);\n if (!aligned.length) {\n return null;\n }\n\n const threshold = majorityThreshold(aligned.length);\n const nodes: PathNode[] = [];\n for (let index = 0; index < targetLength; index += 1) {\n const nodesAtIndex = aligned\n .map((path) => path.nodes[index])\n .filter((node): node is PathNode => node !== undefined);\n if (!nodesAtIndex.length) {\n return null;\n }\n nodes.push(mergePathNodeByMajority(nodesAtIndex, threshold));\n }\n\n return sanitizeElementPath({\n resolution: \"deterministic\",\n context: clonePathContext(sameContext[0]?.context || []),\n nodes,\n });\n}\n\nfunction mergePathNodeByMajority(nodes: readonly PathNode[], threshold: number): PathNode {\n const tag =\n pickModeString(\n nodes.map((node) => String(node.tag || \"*\").toLowerCase()),\n threshold,\n ) || \"*\";\n const attrs = mergeAttributesByMajority(\n nodes.map((node) => node.attrs || {}),\n threshold,\n );\n const mergedPosition = mergePositionByMajority(\n nodes.map((node) => node.position),\n threshold,\n );\n const match = mergeMatchByMajority(\n nodes.map((node) => [...(node.match || [])]),\n attrs,\n threshold,\n {\n hasNthChild: mergedPosition.hasNthChild,\n hasNthOfType: mergedPosition.hasNthOfType,\n },\n );\n\n return {\n tag,\n attrs,\n position: mergedPosition.position,\n match,\n };\n}\n\nfunction mergeAttributesByMajority(\n attrsList: readonly Record<string, string>[],\n threshold: number,\n): Record<string, string> {\n const keys = new Set<string>();\n for (const attrs of attrsList) {\n for (const key of Object.keys(attrs || {})) {\n keys.add(key);\n }\n }\n\n const out: Record<string, string> = {};\n for (const key of keys) {\n const value = pickModeString(\n attrsList.map((attrs) => (typeof attrs[key] === \"string\" ? attrs[key] : undefined)),\n threshold,\n );\n if (!value) {\n continue;\n }\n out[key] = value;\n }\n\n return out;\n}\n\nfunction mergePositionByMajority(\n positions: readonly (PathNode[\"position\"] | undefined)[],\n threshold: number,\n): {\n readonly position: PathNode[\"position\"];\n readonly hasNthChild: boolean;\n readonly hasNthOfType: boolean;\n} {\n const nthChild = pickModeNumber(\n positions.map((position) => position?.nthChild),\n threshold,\n );\n const nthOfType = pickModeNumber(\n positions.map((position) => position?.nthOfType),\n threshold,\n );\n\n return {\n position: {\n nthChild: nthChild ?? 1,\n nthOfType: nthOfType ?? 1,\n },\n hasNthChild: nthChild != null,\n hasNthOfType: nthOfType != null,\n };\n}\n\nfunction mergeMatchByMajority(\n matchLists: readonly MatchClause[][],\n attrs: Record<string, string>,\n threshold: number,\n positionFlags: { readonly hasNthChild: boolean; readonly hasNthOfType: boolean } = {\n hasNthChild: true,\n hasNthOfType: true,\n },\n): MatchClause[] {\n const counts = new Map<string, number>();\n for (const list of matchLists) {\n const unique = new Set<string>();\n for (const clause of list || []) {\n if (!clause || typeof clause !== \"object\") {\n continue;\n }\n unique.add(JSON.stringify(clause));\n }\n for (const key of unique) {\n counts.set(key, (counts.get(key) || 0) + 1);\n }\n }\n\n const merged: MatchClause[] = [];\n for (const [encoded, count] of counts) {\n if (count < threshold) {\n continue;\n }\n\n let clause: MatchClause | null = null;\n try {\n clause = JSON.parse(encoded) as MatchClause;\n } catch {\n clause = null;\n }\n if (!clause) {\n continue;\n }\n\n if (clause.kind === \"attr\") {\n const key = String(clause.key || \"\").trim();\n if (!key) {\n continue;\n }\n if (clause.value === undefined && attrs[key] === undefined) {\n continue;\n }\n merged.push({\n kind: \"attr\",\n key,\n op: clause.op === \"startsWith\" || clause.op === \"contains\" ? clause.op : \"exact\",\n ...(clause.value === undefined ? {} : { value: clause.value }),\n });\n continue;\n }\n\n if (clause.kind === \"text\") {\n continue;\n }\n\n if (clause.axis === \"nthOfType\") {\n if (positionFlags.hasNthOfType) {\n merged.push({ kind: \"position\", axis: \"nthOfType\" });\n }\n continue;\n }\n\n if (positionFlags.hasNthChild) {\n merged.push({ kind: \"position\", axis: \"nthChild\" });\n }\n }\n\n if (!merged.length) {\n if (attrs.id) {\n merged.push({ kind: \"attr\", key: \"id\", op: \"exact\" });\n }\n if (attrs.class) {\n merged.push({\n kind: \"attr\",\n key: \"class\",\n op: \"exact\",\n value: attrs.class,\n });\n }\n }\n\n merged.sort(compareMatchClauses);\n return dedupeMatchClauses(merged);\n}\n\nfunction compareMatchClauses(left: MatchClause, right: MatchClause): number {\n if (left.kind !== right.kind) {\n return left.kind === \"attr\" ? -1 : 1;\n }\n\n if (left.kind === \"position\" && right.kind === \"position\") {\n if (left.axis === right.axis) {\n return 0;\n }\n return left.axis === \"nthOfType\" ? -1 : 1;\n }\n\n if (left.kind === \"attr\" && right.kind === \"attr\") {\n const rank = (key: string): number => {\n if (key === \"id\") {\n return 0;\n }\n if (key === \"class\") {\n return 1;\n }\n return 2;\n };\n\n const leftRank = rank(left.key);\n const rightRank = rank(right.key);\n if (leftRank !== rightRank) {\n return leftRank - rightRank;\n }\n return left.key.localeCompare(right.key);\n }\n\n return 0;\n}\n\nfunction dedupeMatchClauses(clauses: readonly MatchClause[]): MatchClause[] {\n const seen = new Set<string>();\n const out: MatchClause[] = [];\n for (const clause of clauses) {\n const key = JSON.stringify(clause);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n out.push(clause);\n }\n return out;\n}\n\nfunction majorityThreshold(count: number): number {\n return Math.floor(count / 2) + 1;\n}\n\nfunction pickModeString(\n values: readonly (string | undefined)[],\n minCount: number,\n): string | undefined {\n const counts = new Map<string, number>();\n let best: string | undefined;\n let bestCount = 0;\n\n for (const value of values) {\n if (value == null || value === \"\") {\n continue;\n }\n const count = (counts.get(value) || 0) + 1;\n counts.set(value, count);\n if (count > bestCount) {\n best = value;\n bestCount = count;\n }\n }\n\n if (best == null || bestCount < minCount) {\n return undefined;\n }\n return best;\n}\n\nfunction pickModeNumber(\n values: readonly (number | undefined)[],\n minCount: number,\n): number | undefined {\n const counts = new Map<number, number>();\n let best: number | undefined;\n let bestCount = 0;\n\n for (const value of values) {\n if (!Number.isFinite(value) || value == null) {\n continue;\n }\n const normalized = Math.trunc(value);\n if (normalized <= 0) {\n continue;\n }\n const count = (counts.get(normalized) || 0) + 1;\n counts.set(normalized, count);\n if (count > bestCount) {\n best = normalized;\n bestCount = count;\n }\n }\n\n if (best == null || bestCount < minCount) {\n return undefined;\n }\n return best;\n}\n\nfunction clonePathContext(\n context: readonly ElementPath[\"context\"][number][],\n): ElementPath[\"context\"] {\n return JSON.parse(JSON.stringify(context || [])) as ElementPath[\"context\"];\n}\n\nfunction clonePathNodes(nodes: readonly PathNode[]): PathNode[] {\n return JSON.parse(JSON.stringify(nodes || [])) as PathNode[];\n}\n\nfunction cloneElementPath(path: ElementPath): ElementPath {\n return JSON.parse(JSON.stringify(path)) as ElementPath;\n}\n\nfunction clonePersistedOpensteerExtractionNode(\n node: PersistedOpensteerExtractionNode,\n): PersistedOpensteerExtractionNode {\n return JSON.parse(JSON.stringify(node)) as PersistedOpensteerExtractionNode;\n}\n\nfunction isPersistablePathField(\n field: PersistableOpensteerExtractionField,\n): field is PersistableOpensteerPathField {\n return \"path\" in field;\n}\n\nfunction isPersistedOpensteerExtractionValueNode(\n node: PersistedOpensteerExtractionNode | undefined,\n): node is PersistedOpensteerExtractionValueNode {\n return !!node && typeof node === \"object\" && !Array.isArray(node) && \"$path\" in node;\n}\n\nfunction isPersistedOpensteerExtractionSourceNode(\n node: PersistedOpensteerExtractionNode | undefined,\n): node is PersistedOpensteerExtractionSourceNode {\n return !!node && typeof node === \"object\" && !Array.isArray(node) && \"$source\" in node;\n}\n\nfunction isPersistedOpensteerExtractionArrayNode(\n node: PersistedOpensteerExtractionNode | undefined,\n): node is PersistedOpensteerExtractionArrayNode {\n return !!node && typeof node === \"object\" && !Array.isArray(node) && \"$array\" in node;\n}\n\nfunction isPersistedObjectNode(\n node: PersistedOpensteerExtractionNode | undefined,\n): node is PersistedOpensteerExtractionObjectNode {\n return (\n !!node &&\n typeof node === \"object\" &&\n !Array.isArray(node) &&\n !isPersistedOpensteerExtractionValueNode(node) &&\n !isPersistedOpensteerExtractionSourceNode(node) &&\n !isPersistedOpensteerExtractionArrayNode(node)\n );\n}\n","import { createHash, randomUUID } from \"node:crypto\";\n\nimport type { PageRef } from \"@opensteer/browser-core\";\n\nimport type { JsonValue } from \"../json.js\";\nimport { canonicalJsonString, toCanonicalJsonValue } from \"../json.js\";\nimport type { DescriptorRecord, DescriptorRegistryStore } from \"../registry.js\";\nimport type { FilesystemOpensteerWorkspace } from \"../root.js\";\nimport {\n buildArrayFieldPathCandidates,\n sanitizeElementPath,\n type DomArrayFieldSelector,\n type DomArraySelector,\n type DomRuntime,\n type ElementPath,\n} from \"../runtimes/dom/index.js\";\nimport {\n buildPersistedOpensteerExtractionPayload,\n type PersistableOpensteerExtractionField,\n} from \"./extraction-consolidation.js\";\nimport {\n appendDataPathIndex,\n inflateDataPathObject,\n joinDataPath,\n} from \"./extraction-data-path.js\";\n\ninterface OpensteerTemplateFieldByCounter {\n readonly c: number;\n readonly attribute?: string;\n}\n\ninterface OpensteerTemplateFieldBySelector {\n readonly selector: string;\n readonly attribute?: string;\n}\n\ninterface OpensteerTemplateFieldBySource {\n readonly source: \"current_url\";\n}\n\ntype OpensteerTemplateField =\n | OpensteerTemplateFieldByCounter\n | OpensteerTemplateFieldBySelector\n | OpensteerTemplateFieldBySource;\n\ntype OpensteerTemplateNode =\n | OpensteerTemplateField\n | readonly OpensteerTemplateNode[]\n | { readonly [key: string]: OpensteerTemplateNode };\n\ninterface OpensteerExtractionPathFieldTarget {\n readonly key: string;\n readonly path: ElementPath;\n readonly attribute?: string;\n}\n\ninterface OpensteerExtractionSourceFieldTarget {\n readonly key: string;\n readonly source: \"current_url\";\n}\n\ntype OpensteerExtractionFieldTarget =\n | OpensteerExtractionPathFieldTarget\n | OpensteerExtractionSourceFieldTarget;\n\nexport interface PersistedOpensteerExtractionValueNode {\n readonly $path: ElementPath;\n readonly attribute?: string;\n}\n\nexport interface PersistedOpensteerExtractionSourceNode {\n readonly $source: \"current_url\";\n}\n\nexport interface PersistedOpensteerExtractionArrayVariantNode {\n readonly itemParentPath: ElementPath;\n readonly item: PersistedOpensteerExtractionNode;\n}\n\nexport interface PersistedOpensteerExtractionArrayNode {\n readonly $array: {\n readonly variants: readonly PersistedOpensteerExtractionArrayVariantNode[];\n };\n}\n\nexport interface PersistedOpensteerExtractionObjectNode {\n readonly [key: string]: PersistedOpensteerExtractionNode;\n}\n\nexport type PersistedOpensteerExtractionNode =\n | PersistedOpensteerExtractionValueNode\n | PersistedOpensteerExtractionSourceNode\n | PersistedOpensteerExtractionArrayNode\n | PersistedOpensteerExtractionObjectNode;\n\nexport type PersistedOpensteerExtractionPayload = PersistedOpensteerExtractionObjectNode;\n\nexport interface OpensteerExtractionDescriptorPayload {\n readonly kind: \"dom-extraction\";\n readonly persist: string;\n readonly root: PersistedOpensteerExtractionPayload;\n readonly templateHash?: string;\n readonly sourceUrl?: string;\n}\n\nexport interface OpensteerExtractionDescriptorRecord {\n readonly id: string;\n readonly key: string;\n readonly version: string;\n readonly createdAt: number;\n readonly updatedAt: number;\n readonly payload: OpensteerExtractionDescriptorPayload;\n}\n\nexport interface OpensteerExtractionDescriptorStore {\n read(input: {\n readonly persist: string;\n }): Promise<OpensteerExtractionDescriptorRecord | undefined>;\n write(input: {\n readonly persist: string;\n readonly root: PersistedOpensteerExtractionPayload;\n readonly templateHash?: string;\n readonly sourceUrl?: string;\n readonly createdAt?: number;\n readonly updatedAt?: number;\n }): Promise<OpensteerExtractionDescriptorRecord>;\n}\n\ninterface ArrayItemPathDescriptor {\n readonly kind: \"path\";\n readonly path: string;\n readonly selector: {\n readonly elementPath?: ElementPath;\n readonly attribute?: string;\n };\n}\n\ninterface ArrayItemSourceDescriptor {\n readonly kind: \"source\";\n readonly path: string;\n readonly source: \"current_url\";\n}\n\ntype ArrayItemDescriptor = ArrayItemPathDescriptor | ArrayItemSourceDescriptor;\n\ninterface MergedVariantRow {\n readonly identity: string;\n readonly order: number;\n readonly coverage: number;\n readonly value: JsonValue;\n}\n\nexport function assertValidOpensteerExtractionTemplateRoot(template: unknown): asserts template is {\n readonly [key: string]: OpensteerTemplateNode;\n} {\n if (!template || typeof template !== \"object\" || Array.isArray(template)) {\n throw new Error(\"Invalid extraction template: expected a JSON object at the top level.\");\n }\n}\n\nexport function isPersistedOpensteerExtractionValueNode(\n value: unknown,\n): value is PersistedOpensteerExtractionValueNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return \"$path\" in value;\n}\n\nexport function isPersistedOpensteerExtractionSourceNode(\n value: unknown,\n): value is PersistedOpensteerExtractionSourceNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return (value as { readonly $source?: unknown }).$source === \"current_url\";\n}\n\nexport function isPersistedOpensteerExtractionArrayNode(\n value: unknown,\n): value is PersistedOpensteerExtractionArrayNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return false;\n }\n\n return \"$array\" in value;\n}\n\nexport async function compileOpensteerExtractionPayload(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly template: Readonly<Record<string, unknown>>;\n}): Promise<PersistedOpensteerExtractionPayload> {\n assertValidOpensteerExtractionTemplateRoot(options.template);\n const fieldTargets = await compileOpensteerExtractionFieldTargets({\n dom: options.dom,\n pageRef: options.pageRef,\n template: options.template,\n });\n return compilePersistedOpensteerExtractionPayloadFromFieldTargets({\n pageRef: options.pageRef,\n dom: options.dom,\n fieldTargets,\n });\n}\n\nexport async function compileOpensteerExtractionFieldTargets(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly template: Readonly<Record<string, unknown>>;\n}): Promise<readonly OpensteerExtractionFieldTarget[]> {\n assertValidOpensteerExtractionTemplateRoot(options.template);\n const fields: OpensteerExtractionFieldTarget[] = [];\n await collectFieldTargetsFromTemplateObject({\n dom: options.dom,\n pageRef: options.pageRef,\n value: options.template,\n path: \"\",\n fields,\n insideArray: false,\n });\n return fields;\n}\n\nexport async function extractOpensteerExtractionFieldTargets(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly fieldTargets: readonly OpensteerExtractionFieldTarget[];\n}): Promise<Readonly<Record<string, string | null>>> {\n return options.dom.extractFields({\n pageRef: options.pageRef,\n fields: options.fieldTargets.map((field) => {\n if (\"source\" in field) {\n return {\n key: field.key,\n source: \"current_url\",\n };\n }\n\n return {\n key: field.key,\n target: {\n kind: \"path\" as const,\n path: field.path,\n },\n ...(field.attribute === undefined ? {} : { attribute: field.attribute }),\n };\n }),\n });\n}\n\nexport async function compilePersistedOpensteerExtractionPayloadFromFieldTargets(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly fieldTargets: readonly OpensteerExtractionFieldTarget[];\n}): Promise<PersistedOpensteerExtractionPayload> {\n const fields = await resolvePersistableFieldTargets({\n pageRef: options.pageRef,\n dom: options.dom,\n fieldTargets: options.fieldTargets,\n });\n const payload = buildPersistedOpensteerExtractionPayload(fields);\n return stripRedundantPositionClausesFromPersistedExtraction({\n pageRef: options.pageRef,\n dom: options.dom,\n payload,\n });\n}\n\nexport async function replayOpensteerExtractionPayload(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly payload: PersistedOpensteerExtractionPayload;\n}): Promise<JsonValue> {\n return extractPersistedObjectNode(options.pageRef, options.dom, options.payload);\n}\n\nexport function createOpensteerExtractionDescriptorStore(options: {\n readonly root?: FilesystemOpensteerWorkspace;\n readonly namespace?: string;\n}): OpensteerExtractionDescriptorStore {\n const namespace = normalizeNamespace(options.namespace);\n if (options.root) {\n return new FilesystemOpensteerExtractionDescriptorStore(\n options.root.registry.descriptors,\n namespace,\n );\n }\n\n return new MemoryOpensteerExtractionDescriptorStore(namespace);\n}\n\nasync function collectFieldTargetsFromTemplateObject(options: {\n readonly dom: DomRuntime;\n readonly pageRef: PageRef;\n readonly value: Readonly<Record<string, unknown>>;\n readonly path: string;\n readonly fields: OpensteerExtractionFieldTarget[];\n readonly insideArray: boolean;\n}): Promise<void> {\n for (const [key, childValue] of Object.entries(options.value)) {\n const normalizedKey = normalizeKey(key);\n if (!normalizedKey) {\n continue;\n }\n\n await collectFieldTargetsFromTemplateValue({\n dom: options.dom,\n pageRef: options.pageRef,\n value: childValue,\n path: joinDataPath(options.path, normalizedKey),\n fields: options.fields,\n insideArray: options.insideArray,\n });\n }\n}\n\nasync function collectFieldTargetsFromTemplateValue(options: {\n readonly dom: DomRuntime;\n readonly pageRef: PageRef;\n readonly value: unknown;\n readonly path: string;\n readonly fields: OpensteerExtractionFieldTarget[];\n readonly insideArray: boolean;\n}): Promise<void> {\n const normalizedField = normalizeTemplateField(options.value);\n if (normalizedField !== null) {\n options.fields.push(\n await compileFieldTarget({\n dom: options.dom,\n pageRef: options.pageRef,\n field: normalizedField,\n path: options.path,\n }),\n );\n return;\n }\n\n if (Array.isArray(options.value)) {\n if (options.insideArray) {\n throw new Error(\n `Nested arrays are not supported in extraction template at \"${labelForPath(options.path)}\".`,\n );\n }\n if (options.value.length === 0) {\n throw new Error(\n `Extraction array \"${labelForPath(options.path)}\" must include at least one representative template item.`,\n );\n }\n\n for (let index = 0; index < options.value.length; index += 1) {\n const itemValue = options.value[index];\n if (!itemValue || typeof itemValue !== \"object\" || Array.isArray(itemValue)) {\n throw new Error(\n `Extraction array \"${labelForPath(options.path)}\" item ${String(index)} must be an object.`,\n );\n }\n\n const fieldCountBeforeItem = options.fields.length;\n await collectFieldTargetsFromTemplateObject({\n dom: options.dom,\n pageRef: options.pageRef,\n value: itemValue as Record<string, unknown>,\n path: appendDataPathIndex(options.path, index),\n fields: options.fields,\n insideArray: true,\n });\n\n const itemFields = options.fields.slice(fieldCountBeforeItem);\n if (!itemFields.some((field) => !(\"source\" in field))) {\n throw new Error(\n `Extraction array \"${labelForPath(options.path)}\" item ${String(index)} must include at least one element number or selector field.`,\n );\n }\n }\n return;\n }\n\n if (!options.value || typeof options.value !== \"object\") {\n throw new Error(\n `Invalid extraction template value at \"${labelForPath(options.path)}\": expected an object, array, or field descriptor.`,\n );\n }\n\n await collectFieldTargetsFromTemplateObject({\n dom: options.dom,\n pageRef: options.pageRef,\n value: options.value as Record<string, unknown>,\n path: options.path,\n fields: options.fields,\n insideArray: options.insideArray,\n });\n}\n\nasync function compileFieldTarget(options: {\n readonly dom: DomRuntime;\n readonly pageRef: PageRef;\n readonly field: OpensteerTemplateField;\n readonly path: string;\n}): Promise<OpensteerExtractionFieldTarget> {\n if (\"source\" in options.field) {\n return {\n key: options.path,\n source: \"current_url\",\n };\n }\n\n if (\"selector\" in options.field) {\n return {\n key: options.path,\n path: await resolveSelectorFieldPath({\n dom: options.dom,\n pageRef: options.pageRef,\n selector: options.field.selector,\n }),\n ...(options.field.attribute === undefined ? {} : { attribute: options.field.attribute }),\n };\n }\n\n return {\n key: options.path,\n path: await resolveSelectorFieldPath({\n dom: options.dom,\n pageRef: options.pageRef,\n selector: `[c=\"${String(options.field.c)}\"]`,\n }),\n ...(options.field.attribute === undefined ? {} : { attribute: options.field.attribute }),\n };\n}\n\nasync function resolveSelectorFieldPath(options: {\n readonly dom: DomRuntime;\n readonly pageRef: PageRef;\n readonly selector: string;\n}): Promise<ElementPath> {\n const resolved = await options.dom.resolveTarget({\n pageRef: options.pageRef,\n method: \"extract\",\n target: {\n kind: \"selector\",\n selector: options.selector,\n },\n });\n return (\n resolved.replayPath ??\n (await options.dom.buildPath({\n locator: resolved.locator,\n }))\n );\n}\n\nasync function resolvePersistableFieldTargets(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly fieldTargets: readonly OpensteerExtractionFieldTarget[];\n}): Promise<PersistableOpensteerExtractionField[]> {\n const fields: PersistableOpensteerExtractionField[] = [];\n\n for (const field of options.fieldTargets) {\n if (\"source\" in field) {\n fields.push({\n key: field.key,\n source: \"current_url\",\n });\n continue;\n }\n\n fields.push({\n key: field.key,\n path: sanitizeElementPath(field.path),\n ...(field.attribute === undefined ? {} : { attribute: field.attribute }),\n });\n }\n\n return fields;\n}\n\nasync function stripRedundantPositionClausesFromPersistedExtraction(options: {\n readonly pageRef: PageRef;\n readonly dom: DomRuntime;\n readonly payload: PersistedOpensteerExtractionPayload;\n}): Promise<PersistedOpensteerExtractionPayload> {\n const cloned = structuredClone(options.payload);\n await processPersistedExtractionObjectNode(options.pageRef, options.dom, cloned);\n return cloned;\n}\n\nasync function processPersistedExtractionNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionNode,\n): Promise<void> {\n if (isPersistedOpensteerExtractionArrayNode(node)) {\n await processPersistedExtractionArrayNode(pageRef, dom, node);\n return;\n }\n\n if (isPersistedObjectNode(node)) {\n await processPersistedExtractionObjectNode(pageRef, dom, node);\n }\n}\n\nasync function processPersistedExtractionObjectNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionObjectNode,\n): Promise<void> {\n for (const child of Object.values(node)) {\n await processPersistedExtractionNode(pageRef, dom, child);\n }\n}\n\nasync function processPersistedExtractionArrayNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionArrayNode,\n): Promise<void> {\n for (const variant of node.$array.variants) {\n await pruneVariantFieldPositions(pageRef, dom, variant);\n await processPersistedExtractionNode(pageRef, dom, variant.item);\n }\n}\n\nasync function pruneVariantFieldPositions(\n pageRef: PageRef,\n dom: DomRuntime,\n variant: PersistedOpensteerExtractionArrayVariantNode,\n): Promise<void> {\n const refs = collectPersistedValueNodeRefs(variant.item).filter((ref) =>\n hasPositionClause(ref.path),\n );\n if (!refs.length) {\n return;\n }\n\n const plans = refs\n .map((ref, index) => {\n const withPositions = buildArrayFieldPathCandidates(ref.path);\n const strippedPath = stripPositionClauses(ref.path);\n const withoutPositions = buildArrayFieldPathCandidates(strippedPath);\n if (sameSelectorList(withPositions, withoutPositions)) {\n return null;\n }\n\n return {\n key: String(index),\n originalPath: ref.path,\n strippedPath,\n replacePath: ref.replacePath,\n };\n })\n .filter(\n (\n plan,\n ): plan is {\n readonly key: string;\n readonly originalPath: ElementPath;\n readonly strippedPath: ElementPath;\n readonly replacePath: (path: ElementPath) => void;\n } => plan !== null,\n );\n if (!plans.length) {\n return;\n }\n\n let validated: Readonly<Record<string, boolean>>;\n try {\n validated = await dom.validateArrayFieldPositionStripping({\n pageRef,\n itemParentPath: variant.itemParentPath,\n fields: plans.map((plan) => ({\n key: plan.key,\n originalPath: plan.originalPath,\n strippedPath: plan.strippedPath,\n })),\n });\n } catch {\n return;\n }\n\n for (const plan of plans) {\n if (!validated[plan.key]) {\n continue;\n }\n plan.replacePath(plan.strippedPath);\n }\n}\n\nfunction collectPersistedValueNodeRefs(node: PersistedOpensteerExtractionNode): Array<{\n readonly path: ElementPath;\n readonly replacePath: (path: ElementPath) => void;\n}> {\n if (isPersistedOpensteerExtractionValueNode(node)) {\n return [\n {\n path: sanitizeElementPath(node.$path),\n replacePath: (path) => {\n (node as { $path: ElementPath }).$path = sanitizeElementPath(path);\n },\n },\n ];\n }\n\n if (!isPersistedObjectNode(node)) {\n return [];\n }\n\n const refs: Array<{\n readonly path: ElementPath;\n readonly replacePath: (path: ElementPath) => void;\n }> = [];\n\n for (const child of Object.values(node)) {\n refs.push(...collectPersistedValueNodeRefs(child));\n }\n\n return refs;\n}\n\nfunction hasPositionClause(path: ElementPath): boolean {\n return path.nodes.some((node) => node.match.some((clause) => clause.kind === \"position\"));\n}\n\nfunction stripPositionClauses(path: ElementPath): ElementPath {\n return sanitizeElementPath({\n resolution: \"deterministic\",\n context: path.context,\n nodes: path.nodes.map((node) => ({\n ...node,\n match: node.match.filter((clause) => clause.kind !== \"position\"),\n })),\n });\n}\n\nfunction sameSelectorList(left: readonly string[], right: readonly string[]): boolean {\n if (left.length !== right.length) {\n return false;\n }\n\n for (let index = 0; index < left.length; index += 1) {\n if (left[index] !== right[index]) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction isPersistedObjectNode(value: unknown): value is PersistedOpensteerExtractionObjectNode {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !isPersistedOpensteerExtractionValueNode(value) &&\n !isPersistedOpensteerExtractionSourceNode(value) &&\n !isPersistedOpensteerExtractionArrayNode(value)\n );\n}\n\nasync function extractPersistedObjectNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionObjectNode,\n): Promise<JsonValue> {\n const out: Record<string, JsonValue> = {};\n\n for (const [key, child] of Object.entries(node)) {\n out[key] = await extractPersistedNode(pageRef, dom, child);\n }\n\n return out;\n}\n\nasync function extractPersistedNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionNode,\n): Promise<JsonValue> {\n if (isPersistedOpensteerExtractionValueNode(node)) {\n const resolved = await dom.resolveTarget({\n pageRef,\n method: \"extract\",\n target: {\n kind: \"path\",\n path: node.$path,\n },\n });\n const values = await dom.extractFields({\n pageRef,\n fields: [\n {\n key: \"value\",\n target: {\n kind: \"live\",\n locator: resolved.locator,\n anchor: resolved.anchor,\n },\n ...(node.attribute === undefined ? {} : { attribute: node.attribute }),\n },\n ],\n });\n return values.value ?? null;\n }\n\n if (isPersistedOpensteerExtractionSourceNode(node)) {\n const values = await dom.extractFields({\n pageRef,\n fields: [\n {\n key: \"value\",\n source: \"current_url\",\n },\n ],\n });\n return values.value ?? null;\n }\n\n if (isPersistedOpensteerExtractionArrayNode(node)) {\n return extractPersistedArrayNode(pageRef, dom, node);\n }\n\n return extractPersistedObjectNode(pageRef, dom, node);\n}\n\nasync function extractPersistedArrayNode(\n pageRef: PageRef,\n dom: DomRuntime,\n node: PersistedOpensteerExtractionArrayNode,\n): Promise<JsonValue> {\n const rowsByIdentity = new Map<string, MergedVariantRow>();\n\n for (const variant of node.$array.variants) {\n const descriptors = collectArrayItemDescriptors(variant.item);\n const pathFields = descriptors\n .filter((descriptor): descriptor is ArrayItemPathDescriptor => descriptor.kind === \"path\")\n .map((descriptor) => ({\n key: descriptor.path,\n ...(descriptor.selector.elementPath === undefined\n ? {}\n : { path: descriptor.selector.elementPath }),\n ...(descriptor.selector.attribute === undefined\n ? {}\n : { attribute: descriptor.selector.attribute }),\n })) satisfies readonly DomArrayFieldSelector[];\n const sourceFields = descriptors\n .filter((descriptor): descriptor is ArrayItemSourceDescriptor => descriptor.kind === \"source\")\n .map((descriptor) => ({\n key: descriptor.path,\n source: \"current_url\",\n })) satisfies readonly DomArrayFieldSelector[];\n\n const extracted = await dom.extractArrayRows({\n pageRef,\n array: {\n itemParentPath: variant.itemParentPath,\n fields: [...pathFields, ...sourceFields] satisfies DomArraySelector[\"fields\"],\n },\n });\n const primitiveArray = descriptors.every((descriptor) => descriptor.path.length === 0);\n\n for (const row of extracted) {\n const value = primitiveArray\n ? toCanonicalJsonValue(row.values[\"\"] ?? row.values.value ?? null)\n : toCanonicalJsonValue(inflateDataPathObject(row.values));\n const coverage = computeArrayRowCoverage(row.values, value);\n const existing = rowsByIdentity.get(row.meta.key);\n if (!existing || coverage > existing.coverage) {\n rowsByIdentity.set(row.meta.key, {\n identity: row.meta.key,\n order: row.meta.order,\n coverage,\n value,\n });\n }\n }\n }\n\n return [...rowsByIdentity.values()]\n .sort((left, right) => {\n if (left.order !== right.order) {\n return left.order - right.order;\n }\n return left.identity.localeCompare(right.identity);\n })\n .map((row) => row.value);\n}\n\nfunction collectArrayItemDescriptors(\n node: PersistedOpensteerExtractionNode,\n prefix = \"\",\n): ArrayItemDescriptor[] {\n if (isPersistedOpensteerExtractionValueNode(node)) {\n return [\n {\n kind: \"path\",\n path: prefix,\n selector:\n node.$path.nodes.length === 0 && node.$path.context.length === 0\n ? {\n ...(node.attribute === undefined ? {} : { attribute: node.attribute }),\n }\n : {\n elementPath: node.$path,\n ...(node.attribute === undefined ? {} : { attribute: node.attribute }),\n },\n },\n ];\n }\n\n if (isPersistedOpensteerExtractionSourceNode(node)) {\n return [\n {\n kind: \"source\",\n path: prefix,\n source: \"current_url\",\n },\n ];\n }\n\n if (isPersistedOpensteerExtractionArrayNode(node)) {\n throw new Error(\"Nested persisted extraction arrays are not supported.\");\n }\n\n const out: ArrayItemDescriptor[] = [];\n for (const [key, child] of Object.entries(node)) {\n out.push(...collectArrayItemDescriptors(child, joinDataPath(prefix, key)));\n }\n return out;\n}\n\nfunction computeArrayRowCoverage(\n flat: Readonly<Record<string, string | null>>,\n value: JsonValue,\n): number {\n const flatCoverage = Object.values(flat).reduce<number>(\n (count, current) => (current == null ? count : count + 1),\n 0,\n );\n if (flatCoverage > 0) {\n return flatCoverage;\n }\n\n return countNonNullLeaves(value);\n}\n\nfunction countNonNullLeaves(value: JsonValue): number {\n if (value === null) {\n return 0;\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return 1;\n }\n if (Array.isArray(value)) {\n return value.reduce<number>((sum, item) => sum + countNonNullLeaves(item), 0);\n }\n return Object.values(value).reduce<number>((sum, item) => sum + countNonNullLeaves(item), 0);\n}\n\nfunction normalizeTemplateField(value: unknown): OpensteerTemplateField | null {\n if (typeof value === \"number\") {\n return {\n c: normalizeExtractionCounter(value),\n };\n }\n\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n\n const raw = value as Record<string, unknown>;\n const hasCounter = raw.c !== undefined || raw.element !== undefined;\n const hasSelector = raw.selector !== undefined;\n const hasSource = raw.source !== undefined;\n const targetCount = Number(hasCounter) + Number(hasSelector) + Number(hasSource);\n if (targetCount === 0) {\n return null;\n }\n if (targetCount !== 1) {\n throw new Error(\n \"Extraction field descriptors must specify exactly one of c/element, selector, or source.\",\n );\n }\n\n const attribute =\n raw.attr !== undefined\n ? normalizeNonEmptyString(\"attr\", raw.attr)\n : raw.attribute === undefined\n ? undefined\n : normalizeNonEmptyString(\"attribute\", raw.attribute);\n\n if (hasSource) {\n if (raw.source !== \"current_url\") {\n throw new Error(`Unsupported extraction source \"${String(raw.source)}\".`);\n }\n return {\n source: \"current_url\",\n };\n }\n\n if (hasSelector) {\n return {\n selector: normalizeNonEmptyString(\"selector\", raw.selector),\n ...(attribute === undefined ? {} : { attribute }),\n };\n }\n\n return {\n c: normalizeExtractionCounter(raw.c ?? raw.element),\n ...(attribute === undefined ? {} : { attribute }),\n };\n}\n\nfunction normalizeExtractionCounter(value: unknown): number {\n const counter = Number(value);\n if (!Number.isInteger(counter) || counter < 1) {\n throw new Error(\n `Extraction element number must be a positive integer, received ${String(value)}.`,\n );\n }\n return counter;\n}\n\nfunction normalizeNamespace(namespace: string | undefined): string {\n const normalized = String(namespace ?? \"default\").trim();\n return normalized.length === 0 ? \"default\" : normalized;\n}\n\nfunction persistKey(namespace: string, persist: string): string {\n return `extract:${namespace}:${sha256Hex(persist.trim())}`;\n}\n\nexport function parseExtractionDescriptorRecord(\n record: DescriptorRecord,\n): OpensteerExtractionDescriptorRecord | undefined {\n const payload = record.payload;\n if (!payload || typeof payload !== \"object\" || Array.isArray(payload)) {\n return undefined;\n }\n\n const raw = payload as Record<string, unknown>;\n if (raw.kind !== \"dom-extraction\" || typeof raw.persist !== \"string\") {\n return undefined;\n }\n\n const root = normalizePersistedExtractionNode(raw.root, \"root\");\n if (!isPersistedObjectNode(root)) {\n throw new Error(`descriptor ${record.id} root payload is not an object node`);\n }\n\n return {\n id: record.id,\n key: record.key,\n version: record.version,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n payload: {\n kind: \"dom-extraction\",\n persist: raw.persist,\n root,\n ...(typeof raw.templateHash === \"string\"\n ? { templateHash: raw.templateHash }\n : typeof raw.schemaHash === \"string\"\n ? { templateHash: raw.schemaHash }\n : {}),\n ...(typeof raw.sourceUrl === \"string\" ? { sourceUrl: raw.sourceUrl } : {}),\n },\n };\n}\n\nfunction normalizePersistedExtractionNode(\n value: unknown,\n label: string,\n): PersistedOpensteerExtractionNode {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(`Invalid persisted extraction node at \"${label}\".`);\n }\n\n const record = value as Record<string, unknown>;\n if (\"$path\" in record) {\n const rawPath = record.$path;\n if (\n !rawPath ||\n typeof rawPath !== \"object\" ||\n Array.isArray(rawPath) ||\n (rawPath as { readonly resolution?: unknown }).resolution !== \"deterministic\"\n ) {\n throw new Error(`Invalid persisted extraction path node at \"${label}\".`);\n }\n return {\n $path: sanitizeElementPath(rawPath as ElementPath),\n ...(typeof record.attribute === \"string\" ? { attribute: record.attribute } : {}),\n };\n }\n\n if (record.$source === \"current_url\") {\n return {\n $source: \"current_url\",\n };\n }\n\n if (\"$array\" in record) {\n const rawArray = record.$array;\n if (!rawArray || typeof rawArray !== \"object\" || Array.isArray(rawArray)) {\n throw new Error(`Invalid persisted extraction array node at \"${label}\".`);\n }\n\n const variantsRaw = (rawArray as { readonly variants?: unknown }).variants;\n if (!Array.isArray(variantsRaw) || variantsRaw.length === 0) {\n throw new Error(`Persisted extraction array \"${label}\" must contain variants.`);\n }\n\n return {\n $array: {\n variants: variantsRaw.map((variant, index) => {\n if (!variant || typeof variant !== \"object\" || Array.isArray(variant)) {\n throw new Error(\n `Invalid persisted extraction array variant at \"${label}[${String(index)}]\".`,\n );\n }\n\n const rawVariant = variant as Record<string, unknown>;\n const itemParentPath = rawVariant.itemParentPath;\n if (\n !itemParentPath ||\n typeof itemParentPath !== \"object\" ||\n Array.isArray(itemParentPath) ||\n (itemParentPath as { readonly resolution?: unknown }).resolution !== \"deterministic\"\n ) {\n throw new Error(\n `Invalid persisted extraction array item parent path at \"${label}[${String(index)}]\".`,\n );\n }\n return {\n itemParentPath: sanitizeElementPath(itemParentPath as ElementPath),\n item: normalizePersistedExtractionNode(\n rawVariant.item,\n `${label}[${String(index)}].item`,\n ),\n };\n }),\n },\n };\n }\n\n const out: Record<string, PersistedOpensteerExtractionNode> = {};\n for (const [key, child] of Object.entries(record)) {\n const normalizedKey = normalizeKey(key);\n if (!normalizedKey) {\n continue;\n }\n out[normalizedKey] = normalizePersistedExtractionNode(child, `${label}.${normalizedKey}`);\n }\n return out;\n}\n\nclass FilesystemOpensteerExtractionDescriptorStore implements OpensteerExtractionDescriptorStore {\n constructor(\n private readonly registry: DescriptorRegistryStore,\n private readonly namespace: string,\n ) {}\n\n async read(input: {\n readonly persist: string;\n }): Promise<OpensteerExtractionDescriptorRecord | undefined> {\n const record = await this.registry.resolve({\n key: persistKey(this.namespace, input.persist),\n });\n return record === undefined ? undefined : parseExtractionDescriptorRecord(record);\n }\n\n async write(input: {\n readonly persist: string;\n readonly root: PersistedOpensteerExtractionPayload;\n readonly templateHash?: string;\n readonly sourceUrl?: string;\n readonly createdAt?: number;\n readonly updatedAt?: number;\n }): Promise<OpensteerExtractionDescriptorRecord> {\n const payload: OpensteerExtractionDescriptorPayload = {\n kind: \"dom-extraction\",\n persist: input.persist,\n root: input.root,\n ...(input.templateHash === undefined ? {} : { templateHash: input.templateHash }),\n ...(input.sourceUrl === undefined ? {} : { sourceUrl: input.sourceUrl }),\n };\n const key = persistKey(this.namespace, input.persist);\n const version = sha256Hex(canonicalJsonString(payload));\n const existing = await this.registry.resolve({ key, version });\n if (existing) {\n const parsed = parseExtractionDescriptorRecord(existing);\n if (!parsed) {\n throw new Error(`descriptor ${existing.id} has an invalid extraction payload`);\n }\n return parsed;\n }\n\n const now = Date.now();\n const record = await this.registry.write({\n id: `descriptor:${randomUUID()}`,\n key,\n version,\n createdAt: input.createdAt ?? now,\n updatedAt: input.updatedAt ?? input.createdAt ?? now,\n tags: [\"dom-runtime\", \"extract\"],\n provenance: {\n source: \"opensteer.extract\",\n sourceId: key,\n ...(input.sourceUrl === undefined ? {} : { notes: input.sourceUrl }),\n },\n payload: toCanonicalJsonValue(payload),\n });\n const parsed = parseExtractionDescriptorRecord(record);\n if (!parsed) {\n throw new Error(`descriptor ${record.id} could not be parsed after write`);\n }\n return parsed;\n }\n}\n\nclass MemoryOpensteerExtractionDescriptorStore implements OpensteerExtractionDescriptorStore {\n private readonly latestByKey = new Map<string, OpensteerExtractionDescriptorRecord>();\n private readonly recordsByKey = new Map<\n string,\n Map<string, OpensteerExtractionDescriptorRecord>\n >();\n\n constructor(private readonly namespace: string) {}\n\n async read(input: {\n readonly persist: string;\n }): Promise<OpensteerExtractionDescriptorRecord | undefined> {\n return this.latestByKey.get(persistKey(this.namespace, input.persist));\n }\n\n async write(input: {\n readonly persist: string;\n readonly root: PersistedOpensteerExtractionPayload;\n readonly templateHash?: string;\n readonly sourceUrl?: string;\n readonly createdAt?: number;\n readonly updatedAt?: number;\n }): Promise<OpensteerExtractionDescriptorRecord> {\n const payload: OpensteerExtractionDescriptorPayload = {\n kind: \"dom-extraction\",\n persist: input.persist,\n root: input.root,\n ...(input.templateHash === undefined ? {} : { templateHash: input.templateHash }),\n ...(input.sourceUrl === undefined ? {} : { sourceUrl: input.sourceUrl }),\n };\n const key = persistKey(this.namespace, input.persist);\n const version = sha256Hex(canonicalJsonString(payload));\n const existing = this.recordsByKey.get(key)?.get(version);\n if (existing) {\n return existing;\n }\n\n const now = Date.now();\n const record: OpensteerExtractionDescriptorRecord = {\n id: `descriptor:${randomUUID()}`,\n key,\n version,\n createdAt: input.createdAt ?? now,\n updatedAt: input.updatedAt ?? input.createdAt ?? now,\n payload,\n };\n\n const versions =\n this.recordsByKey.get(key) ?? new Map<string, OpensteerExtractionDescriptorRecord>();\n versions.set(version, record);\n this.recordsByKey.set(key, versions);\n this.latestByKey.set(key, record);\n return record;\n }\n}\n\nfunction normalizeNonEmptyString(name: string, value: unknown): string {\n const normalized = String(value ?? \"\").trim();\n if (normalized.length === 0) {\n throw new Error(`${name} must not be empty`);\n }\n return normalized;\n}\n\nfunction normalizeKey(value: string): string {\n return String(value ?? \"\").trim();\n}\n\nfunction labelForPath(path: string): string {\n return path.trim().length === 0 ? \"$\" : path;\n}\n\nfunction sha256Hex(value: string): string {\n return createHash(\"sha256\").update(value).digest(\"hex\");\n}\n\ninterface DataPathPropertyToken {\n readonly kind: \"prop\";\n readonly key: string;\n}\n\ninterface DataPathIndexToken {\n readonly kind: \"index\";\n readonly index: number;\n}\n\ntype DataPathToken = DataPathPropertyToken | DataPathIndexToken;\n","import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\nconst ENV_FILENAMES = [\".env\", \".env.local\"] as const;\nconst OPENSTEER_ENV_PREFIX = \"OPENSTEER_\";\n\ninterface CachedOpensteerEnvironment {\n readonly signature: string;\n readonly values: OpensteerEnvironment;\n}\n\nexport type OpensteerEnvironment = Record<string, string | undefined>;\nconst opensteerEnvironmentCache = new Map<string, CachedOpensteerEnvironment>();\n\nexport function resolveOpensteerEnvironment(\n cwd: string = process.cwd(),\n baseEnv: NodeJS.ProcessEnv = process.env,\n): OpensteerEnvironment {\n const resolvedCwd = path.resolve(cwd);\n const signature = buildEnvironmentSignature(baseEnv, isOpensteerEnvironmentKey);\n const cached = opensteerEnvironmentCache.get(resolvedCwd);\n if (cached && cached.signature === signature) {\n return { ...cached.values };\n }\n\n const resolved = resolveEnvironmentFiles(resolvedCwd, baseEnv, isOpensteerEnvironmentKey);\n opensteerEnvironmentCache.set(resolvedCwd, {\n signature,\n values: { ...resolved },\n });\n return { ...resolved };\n}\n\nexport function loadEnvironment(cwd: string = process.cwd()): void {\n const resolved = resolveEnvironmentFiles(path.resolve(cwd), process.env);\n for (const [key, value] of Object.entries(resolved)) {\n process.env[key] = value;\n }\n}\n\nfunction collectDirectories(cwd: string): string[] {\n const directories: string[] = [];\n let current = path.resolve(cwd);\n for (;;) {\n directories.unshift(current);\n const parent = path.dirname(current);\n if (parent === current) {\n return directories;\n }\n current = parent;\n }\n}\n\nexport function parseEnvFile(contents: string): Record<string, string> {\n const parsed: Record<string, string> = {};\n\n for (const rawLine of contents.split(/\\r?\\n/u)) {\n const trimmed = rawLine.trim();\n if (!trimmed || trimmed.startsWith(\"#\")) {\n continue;\n }\n\n const line = trimmed.startsWith(\"export \") ? trimmed.slice(\"export \".length) : trimmed;\n const separatorIndex = line.indexOf(\"=\");\n if (separatorIndex <= 0) {\n continue;\n }\n\n const key = line.slice(0, separatorIndex).trim();\n if (!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(key)) {\n continue;\n }\n\n const rawValue = line.slice(separatorIndex + 1).trim();\n parsed[key] = parseEnvValue(rawValue);\n }\n\n return parsed;\n}\n\nfunction parseEnvValue(rawValue: string): string {\n if (rawValue.length >= 2 && rawValue.startsWith('\"') && rawValue.endsWith('\"')) {\n return rawValue\n .slice(1, -1)\n .replace(/\\\\n/g, \"\\n\")\n .replace(/\\\\r/g, \"\\r\")\n .replace(/\\\\t/g, \"\\t\")\n .replace(/\\\\\"/g, '\"');\n }\n\n if (rawValue.length >= 2 && rawValue.startsWith(\"'\") && rawValue.endsWith(\"'\")) {\n return rawValue.slice(1, -1);\n }\n\n return rawValue.replace(/\\s+#.*$/u, \"\").trimEnd();\n}\n\nfunction resolveEnvironmentFiles(\n cwd: string,\n baseEnv: NodeJS.ProcessEnv,\n predicate?: (key: string) => boolean,\n): OpensteerEnvironment {\n const resolved = collectEnvironment(baseEnv, predicate);\n const protectedKeys = new Set(Object.keys(resolved));\n const directories = collectDirectories(cwd);\n\n for (const directory of directories) {\n for (const filename of ENV_FILENAMES) {\n const filePath = path.join(directory, filename);\n if (!existsSync(filePath)) {\n continue;\n }\n const parsed = parseEnvFile(readFileSync(filePath, \"utf8\"));\n for (const [key, value] of Object.entries(parsed)) {\n if ((predicate && !predicate(key)) || protectedKeys.has(key)) {\n continue;\n }\n resolved[key] = value;\n }\n }\n }\n\n return resolved;\n}\n\nfunction collectEnvironment(\n baseEnv: NodeJS.ProcessEnv,\n predicate?: (key: string) => boolean,\n): OpensteerEnvironment {\n const resolved: OpensteerEnvironment = {};\n for (const [key, value] of Object.entries(baseEnv)) {\n if ((predicate && !predicate(key)) || value === undefined) {\n continue;\n }\n resolved[key] = value;\n }\n return resolved;\n}\n\nfunction buildEnvironmentSignature(\n baseEnv: NodeJS.ProcessEnv,\n predicate: (key: string) => boolean,\n): string {\n return Object.entries(baseEnv)\n .filter(([key, value]) => predicate(key) && value !== undefined)\n .sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))\n .map(([key, value]) => `${key}=${value}`)\n .join(\"\\n\");\n}\n\nfunction isOpensteerEnvironmentKey(key: string): boolean {\n return key.startsWith(OPENSTEER_ENV_PREFIX);\n}\n","import { OpensteerProtocolError, type CloudBrowserProfilePreference } from \"@opensteer/protocol\";\n\nexport const OPENSTEER_PROVIDER_MODES = [\"local\", \"cloud\"] as const;\n\nexport type OpensteerProviderMode = (typeof OPENSTEER_PROVIDER_MODES)[number];\nexport type OpensteerProviderSource = \"explicit\" | \"env\" | \"default\";\n\nexport interface OpensteerLocalProviderOptions {\n readonly mode: \"local\";\n}\n\nexport interface OpensteerCloudProviderOptions {\n readonly mode: \"cloud\";\n readonly apiKey?: string;\n readonly baseUrl?: string;\n readonly appBaseUrl?: string;\n readonly browserProfile?: CloudBrowserProfilePreference;\n readonly region?: string;\n readonly sessionId?: string;\n}\n\nexport type OpensteerProviderOptions =\n | OpensteerLocalProviderOptions\n | OpensteerCloudProviderOptions;\n\nexport interface OpensteerResolvedProvider {\n readonly mode: OpensteerProviderMode;\n readonly source: OpensteerProviderSource;\n}\n\nexport function assertProviderSupportsEngine(\n provider: OpensteerProviderMode,\n engine: string,\n): void {\n if (engine !== \"abp\") {\n return;\n }\n\n if (provider === \"cloud\") {\n throw new OpensteerProtocolError(\n \"invalid-argument\",\n \"ABP is not supported for provider=cloud. Cloud provider currently requires Playwright.\",\n );\n }\n}\n\nexport function normalizeOpensteerProviderMode(\n value: string,\n source = \"OPENSTEER_PROVIDER\",\n): OpensteerProviderMode {\n const normalized = value.trim().toLowerCase();\n if (normalized === OPENSTEER_PROVIDER_MODES[0] || normalized === OPENSTEER_PROVIDER_MODES[1]) {\n return normalized;\n }\n\n throw new OpensteerProtocolError(\n \"invalid-argument\",\n `${source} must be one of ${OPENSTEER_PROVIDER_MODES.join(\", \")}; received \"${value}\".`,\n );\n}\n\nexport function resolveOpensteerProvider(\n input: {\n readonly provider?: OpensteerProviderOptions;\n readonly environmentProvider?: string;\n } = {},\n): OpensteerResolvedProvider {\n if (input.provider) {\n return {\n mode: input.provider.mode,\n source: \"explicit\",\n };\n }\n\n if (input.environmentProvider !== undefined && input.environmentProvider.trim().length > 0) {\n return {\n mode: normalizeOpensteerProviderMode(input.environmentProvider),\n source: \"env\",\n };\n }\n\n return {\n mode: \"local\",\n source: \"default\",\n };\n}\n","import { execFile as execFileCallback } from \"node:child_process\";\nimport { createDecipheriv, pbkdf2Sync } from \"node:crypto\";\nimport { copyFile, mkdtemp, readFile, rm } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { tmpdir } from \"node:os\";\nimport { promisify } from \"node:util\";\nimport type { DatabaseSync as NodeSqliteDatabaseSync, SQLOutputValue } from \"node:sqlite\";\n\nimport {\n type BrowserBrandId,\n type BrowserBrandRecord,\n detectInstalledBrowserBrands,\n getBrowserBrand,\n resolveBrandUserDataDir,\n} from \"./browser-brands.js\";\nimport type { BrowserProfileSyncCookie } from \"../cloud/cookie-sync.js\";\n\nconst execFile = promisify(execFileCallback);\n\nconst NODE_SQLITE_SPECIFIER = `node:${\"sqlite\"}`;\nconst CHROME_EPOCH_OFFSET = 11644473600000000n;\nconst CHROME_HMAC_PREFIX_LENGTH = 32;\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nexport interface ReadBrowserCookiesInput {\n readonly brandId?: BrowserBrandId;\n readonly userDataDir?: string;\n readonly profileDirectory?: string;\n}\n\nexport interface ReadBrowserCookiesResult {\n readonly cookies: readonly BrowserProfileSyncCookie[];\n readonly brandId: BrowserBrandId;\n readonly brandDisplayName: string;\n readonly userDataDir: string;\n readonly profileDirectory: string;\n}\n\nexport async function readBrowserCookies(\n input: ReadBrowserCookiesInput = {},\n): Promise<ReadBrowserCookiesResult> {\n const brand = resolveRequestedBrand(input);\n const userDataDir = resolveBrandUserDataDir(brand, input.userDataDir);\n const profileDirectory = input.profileDirectory ?? \"Default\";\n const cookiesPath = join(userDataDir, profileDirectory, \"Cookies\");\n\n if (!existsSync(cookiesPath)) {\n throw new Error(\n `Cookies database not found at \"${cookiesPath}\". ` +\n `Verify the browser brand, user-data-dir, and profile-directory are correct.`,\n );\n }\n\n const tempDir = await mkdtemp(join(tmpdir(), \"opensteer-cookies-\"));\n\n try {\n await copyCookiesDatabase(cookiesPath, tempDir);\n\n const decryptionKey = await resolveDecryptionKey(brand.id, userDataDir);\n const rows = queryAllCookies(join(tempDir, \"Cookies\"));\n const cookies = decryptCookieRows(rows, decryptionKey);\n\n return {\n cookies,\n brandId: brand.id,\n brandDisplayName: brand.displayName,\n userDataDir,\n profileDirectory,\n };\n } finally {\n await rm(tempDir, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\n// ---------------------------------------------------------------------------\n// Brand resolution\n// ---------------------------------------------------------------------------\n\nfunction resolveRequestedBrand(input: ReadBrowserCookiesInput): BrowserBrandRecord {\n if (input.brandId !== undefined) {\n return getBrowserBrand(input.brandId);\n }\n\n const installed = detectInstalledBrowserBrands()[0];\n if (!installed) {\n throw new Error(\n \"No Chromium browser found. Install a supported browser or pass brandId explicitly.\",\n );\n }\n return installed.brand;\n}\n\n// ---------------------------------------------------------------------------\n// Database copy (WAL-lock workaround)\n// ---------------------------------------------------------------------------\n\nasync function copyCookiesDatabase(cookiesPath: string, destDir: string): Promise<void> {\n await copyFile(cookiesPath, join(destDir, \"Cookies\"));\n\n for (const suffix of [\"-wal\", \"-journal\", \"-shm\"]) {\n const src = cookiesPath + suffix;\n if (existsSync(src)) {\n await copyFile(src, join(destDir, \"Cookies\" + suffix)).catch(() => undefined);\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// SQLite query\n// ---------------------------------------------------------------------------\n\ninterface RawCookieRow {\n readonly host_key: string;\n readonly name: string;\n readonly value: string;\n readonly encrypted_value: Buffer | Uint8Array;\n readonly path: string;\n readonly expires_utc: number | bigint;\n readonly is_secure: number | bigint;\n readonly is_httponly: number | bigint;\n readonly samesite: number | bigint;\n readonly is_persistent: number | bigint;\n}\n\nfunction queryAllCookies(dbPath: string): readonly RawCookieRow[] {\n let DatabaseSync: typeof import(\"node:sqlite\").DatabaseSync;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n ({ DatabaseSync } = require(NODE_SQLITE_SPECIFIER) as typeof import(\"node:sqlite\"));\n } catch {\n throw new Error(\n \"Reading browser cookies requires Node's built-in SQLite support. \" +\n \"Use Node 22.5+ or a build with node:sqlite enabled.\",\n );\n }\n\n const database: NodeSqliteDatabaseSync = new DatabaseSync(dbPath, { readOnly: true });\n try {\n const stmt = database.prepare(\n `SELECT host_key, name, value, encrypted_value, path,\n expires_utc, is_secure, is_httponly, samesite, is_persistent\n FROM cookies`,\n );\n stmt.setReadBigInts(true);\n return stmt.all().map(toRawCookieRow);\n } finally {\n database.close();\n }\n}\n\nfunction toRawCookieRow(row: Record<string, SQLOutputValue>): RawCookieRow {\n return {\n host_key: row.host_key as string,\n name: row.name as string,\n value: row.value as string,\n encrypted_value: row.encrypted_value as Buffer | Uint8Array,\n path: row.path as string,\n expires_utc: row.expires_utc as number | bigint,\n is_secure: row.is_secure as number | bigint,\n is_httponly: row.is_httponly as number | bigint,\n samesite: row.samesite as number | bigint,\n is_persistent: row.is_persistent as number | bigint,\n };\n}\n\n// ---------------------------------------------------------------------------\n// Decryption key resolution\n// ---------------------------------------------------------------------------\n\ninterface DecryptionKey {\n readonly platform: \"darwin\" | \"linux\" | \"win32\";\n readonly key: Buffer;\n readonly algorithm: \"aes-128-cbc\" | \"aes-256-gcm\";\n}\n\nasync function resolveDecryptionKey(\n brandId: BrowserBrandId,\n userDataDir: string,\n): Promise<DecryptionKey> {\n if (process.platform === \"darwin\") {\n const password = await resolveKeychainPassword(brandId);\n const key = pbkdf2Sync(password, \"saltysalt\", 1003, 16, \"sha1\");\n return { platform: \"darwin\", key, algorithm: \"aes-128-cbc\" };\n }\n\n if (process.platform === \"linux\") {\n const key = pbkdf2Sync(\"peanuts\", \"saltysalt\", 1, 16, \"sha1\");\n return { platform: \"linux\", key, algorithm: \"aes-128-cbc\" };\n }\n\n if (process.platform === \"win32\") {\n const key = await resolveWindowsMasterKey(userDataDir);\n return { platform: \"win32\", key, algorithm: \"aes-256-gcm\" };\n }\n\n throw new Error(`Unsupported platform \"${process.platform}\" for cookie decryption.`);\n}\n\n// ---------------------------------------------------------------------------\n// macOS Keychain\n// ---------------------------------------------------------------------------\n\nconst BRAND_KEYCHAIN_SERVICE: Record<BrowserBrandId, string> = {\n chrome: \"Chrome Safe Storage\",\n \"chrome-canary\": \"Chrome Safe Storage\",\n chromium: \"Chromium Safe Storage\",\n brave: \"Brave Safe Storage\",\n edge: \"Microsoft Edge Safe Storage\",\n vivaldi: \"Chrome Safe Storage\",\n helium: \"Chrome Safe Storage\",\n};\n\nasync function resolveKeychainPassword(brandId: BrowserBrandId): Promise<string> {\n const service = BRAND_KEYCHAIN_SERVICE[brandId];\n try {\n const { stdout } = await execFile(\"security\", [\"find-generic-password\", \"-s\", service, \"-w\"]);\n return stdout.trim();\n } catch {\n throw new Error(\n `Failed to retrieve \"${service}\" from macOS Keychain. ` +\n \"Ensure the browser has been opened at least once and Keychain access is allowed.\",\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Windows DPAPI master key\n// ---------------------------------------------------------------------------\n\nasync function resolveWindowsMasterKey(userDataDir: string): Promise<Buffer> {\n const localStatePath = join(userDataDir, \"Local State\");\n let localState: { os_crypt?: { encrypted_key?: string } };\n try {\n localState = JSON.parse(await readFile(localStatePath, \"utf8\"));\n } catch {\n throw new Error(\n `Failed to read \"${localStatePath}\". Ensure the browser has been opened at least once.`,\n );\n }\n\n const encodedKey = localState.os_crypt?.encrypted_key;\n if (!encodedKey) {\n throw new Error(`No encrypted key found in \"${localStatePath}\".`);\n }\n\n const rawKey = Buffer.from(encodedKey, \"base64\").subarray(5);\n\n const psScript = `\n Add-Type -AssemblyName System.Security\n $bytes = [byte[]]@(${Array.from(rawKey).join(\",\")})\n $decrypted = [System.Security.Cryptography.ProtectedData]::Unprotect($bytes, $null, 'CurrentUser')\n [Convert]::ToBase64String($decrypted)\n `;\n\n try {\n const { stdout } = await execFile(\"powershell\", [\n \"-NoProfile\",\n \"-NonInteractive\",\n \"-Command\",\n psScript,\n ]);\n return Buffer.from(stdout.trim(), \"base64\");\n } catch {\n throw new Error(\n \"Failed to decrypt browser master key via Windows DPAPI. \" +\n \"Ensure you are running as the same user who owns the browser profile.\",\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Cookie row decryption and mapping\n// ---------------------------------------------------------------------------\n\nfunction decryptCookieRows(\n rows: readonly RawCookieRow[],\n decryptionKey: DecryptionKey,\n): BrowserProfileSyncCookie[] {\n const cookies: BrowserProfileSyncCookie[] = [];\n const nowSeconds = Math.floor(Date.now() / 1000);\n\n for (const row of rows) {\n const name = row.name.trim();\n const domain = row.host_key.trim();\n if (!name || !domain) {\n continue;\n }\n\n const value = decryptCookieValue(row, decryptionKey);\n if (value === null) {\n continue;\n }\n\n const expiresSeconds = chromeDateToUnixSeconds(row.expires_utc);\n const isSession = expiresSeconds <= 0;\n\n if (!isSession && expiresSeconds < nowSeconds) {\n continue;\n }\n\n const sameSite = chromeSameSiteToString(row.samesite);\n let secure = Number(row.is_secure) === 1;\n\n // CDP requires Secure=true when SameSite=None.\n if (sameSite === \"None\") {\n secure = true;\n }\n\n cookies.push({\n name,\n value,\n domain,\n path: row.path || \"/\",\n secure,\n httpOnly: Number(row.is_httponly) === 1,\n ...(isSession ? {} : { expires: expiresSeconds }),\n ...(sameSite !== undefined ? { sameSite } : {}),\n });\n }\n\n return cookies;\n}\n\nfunction decryptCookieValue(row: RawCookieRow, decryptionKey: DecryptionKey): string | null {\n if (row.value && row.value.length > 0) {\n return row.value;\n }\n\n const encrypted = Buffer.isBuffer(row.encrypted_value)\n ? row.encrypted_value\n : Buffer.from(row.encrypted_value);\n\n if (encrypted.length === 0) {\n return \"\";\n }\n\n const prefix = encrypted.subarray(0, 3).toString(\"ascii\");\n if (prefix !== \"v10\" && prefix !== \"v11\") {\n return encrypted.toString(\"utf8\");\n }\n\n const ciphertext = encrypted.subarray(3);\n\n if (decryptionKey.algorithm === \"aes-128-cbc\") {\n return decryptAes128Cbc(ciphertext, decryptionKey.key);\n }\n\n if (decryptionKey.algorithm === \"aes-256-gcm\") {\n return decryptAes256Gcm(ciphertext, decryptionKey.key);\n }\n\n return null;\n}\n\n// ---------------------------------------------------------------------------\n// AES decryption\n// ---------------------------------------------------------------------------\n\nfunction decryptAes128Cbc(ciphertext: Buffer, key: Buffer): string | null {\n try {\n const iv = Buffer.alloc(16, 0x20);\n const decipher = createDecipheriv(\"aes-128-cbc\", key, iv);\n let decrypted = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n\n // Chrome 130+ prepends a 32-byte HMAC to the plaintext before encrypting.\n // Detect by checking whether the first 32 bytes contain non-printable bytes.\n if (\n decrypted.length > CHROME_HMAC_PREFIX_LENGTH &&\n containsNonPrintableAscii(decrypted, CHROME_HMAC_PREFIX_LENGTH)\n ) {\n decrypted = decrypted.subarray(CHROME_HMAC_PREFIX_LENGTH);\n }\n\n // Cookies encrypted with a rotated or app-bound key produce undecryptable output.\n if (containsNonPrintableAscii(decrypted, decrypted.length)) {\n return null;\n }\n\n return decrypted.toString(\"utf8\");\n } catch {\n return null;\n }\n}\n\nfunction decryptAes256Gcm(ciphertext: Buffer, key: Buffer): string | null {\n try {\n const nonce = ciphertext.subarray(0, 12);\n const authTag = ciphertext.subarray(ciphertext.length - 16);\n const encrypted = ciphertext.subarray(12, ciphertext.length - 16);\n\n const decipher = createDecipheriv(\"aes-256-gcm\", key, nonce);\n decipher.setAuthTag(authTag);\n const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);\n\n if (containsNonPrintableAscii(decrypted, decrypted.length)) {\n return null;\n }\n\n return decrypted.toString(\"utf8\");\n } catch {\n return null;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction containsNonPrintableAscii(buffer: Buffer, length: number): boolean {\n const end = Math.min(length, buffer.length);\n for (let i = 0; i < end; i++) {\n const byte = buffer[i]!;\n if (byte < 0x20 || byte > 0x7e) {\n return true;\n }\n }\n return false;\n}\n\nfunction chromeDateToUnixSeconds(chromeTimestamp: number | bigint): number {\n const ts = BigInt(chromeTimestamp);\n if (ts <= 0n) {\n return -1;\n }\n return Number((ts - CHROME_EPOCH_OFFSET) / 1000000n);\n}\n\nfunction chromeSameSiteToString(\n value: number | bigint,\n): BrowserProfileSyncCookie[\"sameSite\"] | undefined {\n const v = Number(value);\n if (v === 0) return \"None\";\n if (v === 1) return \"Lax\";\n if (v === 2) return \"Strict\";\n return undefined;\n}\n","import type { PortableBrowserProfileCookieRecord } from \"@opensteer/protocol\";\n\n// Keep this helper engine-agnostic so opensteer does not depend on Playwright types.\nexport interface BrowserProfileSyncCookie {\n readonly name: string;\n readonly value: string;\n readonly domain: string;\n readonly path?: string;\n readonly secure: boolean;\n readonly httpOnly: boolean;\n readonly expires?: number;\n readonly sameSite?: \"Strict\" | \"Lax\" | \"None\";\n readonly partitionKey?: string;\n}\n\nexport interface PrepareBrowserProfileSyncCookiesInput {\n readonly cookies: readonly BrowserProfileSyncCookie[];\n readonly domains?: readonly string[];\n}\n\nexport interface PreparedBrowserProfileSyncCookies {\n readonly cookies: readonly PortableBrowserProfileCookieRecord[];\n}\n\nexport function prepareBrowserProfileSyncCookies(\n input: PrepareBrowserProfileSyncCookiesInput,\n): PreparedBrowserProfileSyncCookies {\n const filteredDomains = [\n ...new Set((input.domains ?? []).map(normalizeCookieDomain).filter(Boolean)),\n ];\n const deduped = new Map<string, PortableBrowserProfileCookieRecord>();\n\n for (const cookie of input.cookies) {\n if (!cookieMatchesDomainFilters(cookie, filteredDomains)) {\n continue;\n }\n\n const normalized = toPortableBrowserProfileCookieRecord(cookie);\n if (!normalized) {\n continue;\n }\n\n const dedupeKey = [\n normalized.name,\n normalizeCookieDomain(normalized.domain),\n normalized.path || \"/\",\n ].join(\"\\u0001\");\n deduped.set(dedupeKey, normalized);\n }\n\n const syncedCookies = [...deduped.values()];\n return {\n cookies: syncedCookies,\n };\n}\n\nexport function normalizeCookieDomain(value: string): string {\n return value.trim().toLowerCase().replace(/^\\.+/, \"\");\n}\n\nfunction cookieMatchesDomainFilters(\n cookie: Pick<BrowserProfileSyncCookie, \"domain\">,\n filteredDomains: readonly string[],\n): boolean {\n if (filteredDomains.length === 0) {\n return true;\n }\n\n const cookieDomain = extractCookieDomain(cookie);\n if (!cookieDomain) {\n return false;\n }\n\n return filteredDomains.some((domain) => {\n return cookieDomain === domain || cookieDomain.endsWith(`.${domain}`);\n });\n}\n\nfunction extractCookieDomain(cookie: Pick<BrowserProfileSyncCookie, \"domain\">): string | null {\n if (typeof cookie.domain !== \"string\" || cookie.domain.trim().length === 0) {\n return null;\n }\n\n return normalizeCookieDomain(cookie.domain);\n}\n\nfunction toPortableBrowserProfileCookieRecord(\n cookie: BrowserProfileSyncCookie,\n): PortableBrowserProfileCookieRecord | null {\n const name = typeof cookie.name === \"string\" ? cookie.name.trim() : \"\";\n const domain = typeof cookie.domain === \"string\" ? cookie.domain.trim() : \"\";\n if (!name || !domain) {\n return null;\n }\n\n const path = typeof cookie.path === \"string\" && cookie.path.trim().length > 0 ? cookie.path : \"/\";\n const expiresAt =\n typeof cookie.expires === \"number\" && Number.isFinite(cookie.expires) && cookie.expires > 0\n ? Math.floor(cookie.expires * 1000)\n : null;\n const sameSite = normalizeSameSite(cookie.sameSite);\n\n return {\n name,\n value: cookie.value,\n domain,\n path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(sameSite === undefined ? {} : { sameSite }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: expiresAt === null,\n ...(expiresAt === null ? { expiresAt: null } : { expiresAt }),\n };\n}\n\nfunction normalizeSameSite(\n value: BrowserProfileSyncCookie[\"sameSite\"],\n): PortableBrowserProfileCookieRecord[\"sameSite\"] {\n if (value === \"Strict\") return \"strict\";\n if (value === \"Lax\") return \"lax\";\n if (value === \"None\") return \"none\";\n return undefined;\n}\n","import { promisify } from \"node:util\";\nimport { gzip as gzipCallback } from \"node:zlib\";\n\nimport type { PortableBrowserProfileSnapshot } from \"@opensteer/protocol\";\n\nimport type { BrowserBrandId } from \"../local-browser/browser-brands.js\";\nimport { readBrowserCookies } from \"../local-browser/cookie-reader.js\";\nimport { prepareBrowserProfileSyncCookies } from \"./cookie-sync.js\";\nimport type { OpensteerCloudClient } from \"./client.js\";\n\nconst gzip = promisify(gzipCallback);\n\nconst DEFAULT_POLL_INTERVAL_MS = 1_000;\nconst DEFAULT_POLL_TIMEOUT_MS = 5 * 60_000;\n\nexport interface SyncBrowserProfileCookiesInput {\n readonly profileId: string;\n readonly brandId?: BrowserBrandId;\n readonly userDataDir?: string;\n readonly profileDirectory?: string;\n readonly domains?: readonly string[];\n}\n\nexport async function syncBrowserProfileCookies(\n client: OpensteerCloudClient,\n input: SyncBrowserProfileCookiesInput,\n): Promise<Awaited<ReturnType<OpensteerCloudClient[\"getBrowserProfileImport\"]>>> {\n const result = await readBrowserCookies({\n ...(input.brandId === undefined ? {} : { brandId: input.brandId }),\n ...(input.userDataDir === undefined ? {} : { userDataDir: input.userDataDir }),\n ...(input.profileDirectory === undefined ? {} : { profileDirectory: input.profileDirectory }),\n });\n\n const prepared = prepareBrowserProfileSyncCookies({\n cookies: result.cookies,\n ...(input.domains === undefined ? {} : { domains: input.domains }),\n });\n\n if (prepared.cookies.length === 0) {\n throw new Error(\"No syncable cookies found for the selected browser and scope.\");\n }\n\n const snapshot: PortableBrowserProfileSnapshot = {\n version: \"portable-cookies-v1\",\n source: {\n browserFamily: \"chromium\",\n browserBrand: result.brandId,\n captureMethod: \"sqlite\",\n platform: normalizePlatform(process.platform),\n capturedAt: Date.now(),\n },\n cookies: prepared.cookies,\n };\n\n const payload = await gzip(Buffer.from(JSON.stringify(snapshot), \"utf8\"));\n\n const created = await client.createBrowserProfileImport({\n profileId: input.profileId,\n });\n\n if (payload.length > created.maxUploadBytes) {\n throw new Error(\n `Compressed cookie snapshot is ${String(payload.length)} bytes, exceeding the ${String(created.maxUploadBytes)} byte upload limit.`,\n );\n }\n\n const uploaded = await client.uploadBrowserProfileImportPayload({\n uploadUrl: created.uploadUrl,\n payload,\n });\n\n return uploaded.status === \"ready\"\n ? uploaded\n : waitForBrowserProfileImport(client, created.importId);\n}\n\nasync function waitForBrowserProfileImport(\n client: OpensteerCloudClient,\n importId: string,\n): Promise<Awaited<ReturnType<OpensteerCloudClient[\"getBrowserProfileImport\"]>>> {\n const deadline = Date.now() + DEFAULT_POLL_TIMEOUT_MS;\n while (Date.now() < deadline) {\n const current = await client.getBrowserProfileImport(importId);\n if (current.status === \"ready\") {\n return current;\n }\n if (current.status === \"failed\") {\n throw new Error(current.error ?? \"Browser profile sync failed.\");\n }\n await sleep(DEFAULT_POLL_INTERVAL_MS);\n }\n\n throw new Error(`Timed out waiting for browser profile sync \"${importId}\" to finish.`);\n}\n\nfunction normalizePlatform(platform: NodeJS.Platform): string {\n if (platform === \"darwin\") return \"macos\";\n if (platform === \"win32\") return \"windows\";\n return platform;\n}\n\nasync function sleep(ms: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type { OpensteerCloudConfig } from \"./config.js\";\nimport type {\n BrowserProfileImportCreateRequest,\n BrowserProfileImportCreateResponse,\n BrowserProfileImportDescriptor,\n CloudSessionRecordingState,\n CloudBrowserProfilePreference,\n CloudRequestPlanImportRequest,\n CloudRegistryImportEntry,\n CloudRegistryImportResponse,\n OpensteerSessionAccessGrantResponse,\n OpensteerSessionGrant,\n OpensteerSessionGrantKind,\n OpensteerBrowserContextOptions,\n OpensteerBrowserLaunchOptions,\n ObservabilityConfig,\n} from \"@opensteer/protocol\";\nimport { syncBrowserProfileCookies, type SyncBrowserProfileCookiesInput } from \"./profile-sync.js\";\n\nexport interface OpensteerCloudSessionCreateInput {\n readonly name?: string;\n readonly browser?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n readonly browserProfile?: CloudBrowserProfilePreference;\n readonly observability?: Partial<ObservabilityConfig>;\n readonly sourceType?: \"manual\" | \"local-cloud\";\n readonly sourceRef?: string;\n readonly localWorkspaceRootPath?: string;\n}\n\nexport interface OpensteerCloudSessionDescriptor {\n readonly sessionId: string;\n readonly status?: string;\n readonly baseUrl?: string;\n readonly initialGrants?: Partial<Record<OpensteerSessionGrantKind, OpensteerSessionGrant>>;\n readonly initialGrantExpiresAt?: number;\n}\n\nexport interface OpensteerCloudSessionState {\n readonly status?: string;\n readonly runtimeWorkerId?: string;\n readonly registryDesiredRevision?: number;\n readonly registryLoadedRevision?: number;\n readonly idleTimeoutMs?: number;\n readonly absoluteTtlMs?: number;\n readonly expiresAt?: number;\n}\n\ninterface OpensteerCloudSessionCloseDescriptor {\n readonly status?: string;\n}\n\ninterface OpensteerCloudErrorPayload {\n readonly error?: string;\n readonly code?: string;\n readonly details?: unknown;\n}\n\ninterface CloudRequestOptions {\n readonly signal?: AbortSignal | undefined;\n readonly timeoutMs?: number | undefined;\n}\n\nconst CLOUD_CLOSE_TIMEOUT_MS = 60_000;\nconst CLOUD_CLOSE_POLL_INTERVAL_MS = 250;\n\nexport type { SyncBrowserProfileCookiesInput };\n\nexport class OpensteerCloudRequestError extends Error {\n readonly statusCode: number;\n readonly code: string | undefined;\n readonly details: unknown;\n readonly method: string;\n readonly pathname: string;\n readonly url: string;\n\n constructor(args: {\n readonly statusCode: number;\n readonly code?: string;\n readonly details?: unknown;\n readonly method: string;\n readonly pathname: string;\n readonly url: string;\n readonly message: string;\n }) {\n super(args.message);\n this.name = \"OpensteerCloudRequestError\";\n this.statusCode = args.statusCode;\n this.code = args.code;\n this.details = args.details;\n this.method = args.method;\n this.pathname = args.pathname;\n this.url = args.url;\n }\n}\n\nexport class OpensteerCloudClient {\n constructor(private readonly config: OpensteerCloudConfig) {}\n\n getConfig(): OpensteerCloudConfig {\n return this.config;\n }\n\n async createSession(\n input: OpensteerCloudSessionCreateInput = {},\n options: CloudRequestOptions = {},\n ): Promise<OpensteerCloudSessionDescriptor> {\n const response = await this.request(\n \"/v1/sessions\",\n {\n method: \"POST\",\n body: {\n ...(input.name === undefined ? {} : { name: input.name }),\n ...(input.browser === undefined ? {} : { browser: input.browser }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(input.browserProfile === undefined ? {} : { browserProfile: input.browserProfile }),\n ...(input.observability === undefined ? {} : { observability: input.observability }),\n ...(input.sourceType === undefined ? {} : { sourceType: input.sourceType }),\n ...(input.sourceRef === undefined ? {} : { sourceRef: input.sourceRef }),\n ...(input.localWorkspaceRootPath === undefined\n ? {}\n : { localWorkspaceRootPath: input.localWorkspaceRootPath }),\n },\n },\n options,\n );\n\n return (await response.json()) as OpensteerCloudSessionDescriptor;\n }\n\n async listSessions(): Promise<unknown> {\n const response = await this.request(\"/v1/sessions\", {\n method: \"GET\",\n });\n return response.json();\n }\n\n async getSession(\n sessionId: string,\n options: CloudRequestOptions = {},\n ): Promise<OpensteerCloudSessionState> {\n const response = await this.request(\n `/v1/sessions/${encodeURIComponent(sessionId)}`,\n {\n method: \"GET\",\n },\n options,\n );\n return (await response.json()) as OpensteerCloudSessionState;\n }\n\n async issueAccess(\n sessionId: string,\n capabilities: readonly OpensteerSessionGrantKind[],\n options: CloudRequestOptions = {},\n ): Promise<OpensteerSessionAccessGrantResponse> {\n const response = await this.request(\n `/v1/sessions/${encodeURIComponent(sessionId)}/access`,\n {\n method: \"POST\",\n body: {\n capabilities,\n },\n },\n options,\n );\n return (await response.json()) as OpensteerSessionAccessGrantResponse;\n }\n\n async getSessionRecording(sessionId: string): Promise<CloudSessionRecordingState> {\n const response = await this.request(`/v1/sessions/${encodeURIComponent(sessionId)}/recording`, {\n method: \"GET\",\n });\n return (await response.json()) as CloudSessionRecordingState;\n }\n\n async startSessionRecording(sessionId: string): Promise<CloudSessionRecordingState> {\n const response = await this.request(\n `/v1/sessions/${encodeURIComponent(sessionId)}/recording/start`,\n {\n method: \"POST\",\n },\n );\n return (await response.json()) as CloudSessionRecordingState;\n }\n\n async stopSessionRecording(sessionId: string): Promise<CloudSessionRecordingState> {\n const response = await this.request(\n `/v1/sessions/${encodeURIComponent(sessionId)}/recording/stop`,\n {\n method: \"POST\",\n },\n );\n return (await response.json()) as CloudSessionRecordingState;\n }\n\n async closeSession(sessionId: string): Promise<void> {\n const response = await this.request(`/v1/sessions/${encodeURIComponent(sessionId)}`, {\n method: \"DELETE\",\n });\n const payload = (await response.json()) as OpensteerCloudSessionCloseDescriptor;\n if (payload.status === \"closed\") {\n return;\n }\n\n if (payload.status !== \"closing\") {\n throw new Error(`Unexpected cloud close status \"${String(payload.status)}\".`);\n }\n\n await this.waitForSessionClosed(sessionId);\n }\n\n async createBrowserProfileImport(\n input: BrowserProfileImportCreateRequest,\n ): Promise<BrowserProfileImportCreateResponse> {\n const response = await this.request(\"/v1/browser-profiles/imports\", {\n method: \"POST\",\n body: input,\n });\n return (await response.json()) as BrowserProfileImportCreateResponse;\n }\n\n async uploadBrowserProfileImportPayload(input: {\n readonly uploadUrl: string;\n readonly payload: Buffer | Uint8Array;\n }): Promise<BrowserProfileImportDescriptor> {\n let response: Response;\n try {\n response = await fetch(input.uploadUrl, {\n method: \"PUT\",\n headers: {\n authorization: this.buildAuthorizationHeader(),\n \"content-type\": \"application/octet-stream\",\n },\n body: input.payload,\n signal: AbortSignal.timeout(10 * 60_000),\n });\n } catch (error) {\n throw wrapCloudFetchError(error, {\n method: \"PUT\",\n url: input.uploadUrl,\n });\n }\n if (!response.ok) {\n throw new Error(`PUT ${input.uploadUrl} failed with ${String(response.status)}.`);\n }\n\n return (await response.json()) as BrowserProfileImportDescriptor;\n }\n\n async getBrowserProfileImport(importId: string): Promise<BrowserProfileImportDescriptor> {\n const response = await this.request(\n `/v1/browser-profiles/imports/${encodeURIComponent(importId)}`,\n {\n method: \"GET\",\n },\n );\n return (await response.json()) as BrowserProfileImportDescriptor;\n }\n\n async syncBrowserProfileCookies(\n input: SyncBrowserProfileCookiesInput,\n ): Promise<BrowserProfileImportDescriptor> {\n return syncBrowserProfileCookies(this, input);\n }\n\n async importDescriptors(\n entries: readonly CloudRegistryImportEntry[],\n ): Promise<CloudRegistryImportResponse> {\n const response = await this.request(\"/registry/descriptors/import\", {\n method: \"POST\",\n body: { entries },\n });\n return (await response.json()) as CloudRegistryImportResponse;\n }\n\n async importRequestPlans(\n input: CloudRequestPlanImportRequest,\n ): Promise<CloudRegistryImportResponse> {\n const response = await this.request(\"/registry/request-plans/import\", {\n method: \"POST\",\n body: input,\n });\n return (await response.json()) as CloudRegistryImportResponse;\n }\n\n buildAuthorizationHeader(): string {\n return `Bearer ${this.config.apiKey}`;\n }\n\n private buildHeaders(): Record<string, string> {\n return {\n authorization: this.buildAuthorizationHeader(),\n \"content-type\": \"application/json; charset=utf-8\",\n };\n }\n\n private async request(\n pathname: string,\n init: {\n readonly method: \"GET\" | \"POST\" | \"DELETE\";\n readonly body?: unknown;\n },\n options: CloudRequestOptions = {},\n ): Promise<Response> {\n const url = `${this.config.baseUrl}${pathname}`;\n let response: Response;\n try {\n response = await fetch(url, {\n method: init.method,\n headers: this.buildHeaders(),\n ...(init.body === undefined ? {} : { body: JSON.stringify(init.body) }),\n signal: createRequestSignal(options),\n });\n } catch (error) {\n throw wrapCloudFetchError(error, {\n method: init.method,\n url,\n });\n }\n if (!response.ok) {\n throw await createCloudRequestError(response, {\n method: init.method,\n pathname,\n url,\n });\n }\n return response;\n }\n\n private async waitForSessionClosed(sessionId: string): Promise<void> {\n const deadline = Date.now() + CLOUD_CLOSE_TIMEOUT_MS;\n\n while (Date.now() < deadline) {\n const session = await this.getSession(sessionId);\n if (session.status === \"closed\") {\n return;\n }\n if (session.status !== \"closing\") {\n throw new Error(\n `Unexpected cloud session status \"${String(session.status)}\" while waiting for close.`,\n );\n }\n await delay(CLOUD_CLOSE_POLL_INTERVAL_MS);\n }\n\n throw new Error(`Timed out waiting for cloud session ${sessionId} to close.`);\n }\n}\n\nfunction createRequestSignal(options: CloudRequestOptions): AbortSignal {\n const timeoutSignal = AbortSignal.timeout(options.timeoutMs ?? 30_000);\n if (options.signal === undefined) {\n return timeoutSignal;\n }\n return AbortSignal.any([options.signal, timeoutSignal]);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\nfunction wrapCloudFetchError(\n error: unknown,\n input: {\n readonly method: string;\n readonly url: string;\n },\n): Error {\n if (!(error instanceof Error)) {\n return new Error(\n `Failed to reach Opensteer cloud endpoint ${input.method} ${input.url}. Check the configured Opensteer cloud base URL and network reachability from this environment.`,\n );\n }\n\n const wrapped = new Error(\n `Failed to reach Opensteer cloud endpoint ${input.method} ${input.url}. Check the configured Opensteer cloud base URL and network reachability from this environment.`,\n {\n cause: error,\n },\n );\n wrapped.name = error.name;\n return wrapped;\n}\n\nasync function createCloudRequestError(\n response: Response,\n input: {\n readonly method: string;\n readonly pathname: string;\n readonly url: string;\n },\n): Promise<OpensteerCloudRequestError> {\n const payload = await readCloudErrorPayload(response);\n return new OpensteerCloudRequestError({\n statusCode: response.status,\n method: input.method,\n pathname: input.pathname,\n url: input.url,\n message:\n payload?.error ?? `${input.method} ${input.pathname} failed with ${String(response.status)}.`,\n ...(payload?.code === undefined ? {} : { code: payload.code }),\n ...(payload?.details === undefined ? {} : { details: payload.details }),\n });\n}\n\nasync function readCloudErrorPayload(\n response: Response,\n): Promise<OpensteerCloudErrorPayload | undefined> {\n try {\n return asCloudErrorPayload(await response.json());\n } catch {\n return undefined;\n }\n}\n\nfunction asCloudErrorPayload(value: unknown): OpensteerCloudErrorPayload | undefined {\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n\n const payload = value as Record<string, unknown>;\n return {\n ...(typeof payload.error === \"string\" ? { error: payload.error } : {}),\n ...(typeof payload.code === \"string\" ? { code: payload.code } : {}),\n ...(\"details\" in payload ? { details: payload.details } : {}),\n };\n}\n","import type { CloudBrowserProfilePreference } from \"@opensteer/protocol\";\nimport type { OpensteerEnvironment } from \"../env.js\";\nimport {\n resolveOpensteerProvider,\n type OpensteerCloudProviderOptions,\n type OpensteerProviderOptions,\n} from \"../provider/config.js\";\n\nexport const DEFAULT_OPENSTEER_CLOUD_BASE_URL = \"https://api.opensteer.com\";\n\nexport interface OpensteerCloudConfig {\n readonly apiKey: string;\n readonly baseUrl: string;\n readonly appBaseUrl?: string;\n readonly browserProfile?: CloudBrowserProfilePreference;\n}\n\nexport function resolveCloudConfig(\n input: {\n readonly provider?: OpensteerProviderOptions;\n readonly environment?: OpensteerEnvironment;\n } = {},\n): OpensteerCloudConfig | undefined {\n const provider = resolveOpensteerProvider({\n ...(input.provider === undefined ? {} : { provider: input.provider }),\n ...(input.environment?.OPENSTEER_PROVIDER === undefined\n ? {}\n : { environmentProvider: input.environment.OPENSTEER_PROVIDER }),\n });\n if (provider.mode !== \"cloud\") {\n return undefined;\n }\n\n const cloudProvider =\n input.provider?.mode === \"cloud\"\n ? (input.provider as OpensteerCloudProviderOptions)\n : undefined;\n const apiKey =\n normalizeOptionalCloudConfigValue(cloudProvider?.apiKey) ??\n normalizeOptionalCloudConfigValue(input.environment?.OPENSTEER_API_KEY);\n if (apiKey === undefined) {\n throw new Error(\"provider=cloud requires OPENSTEER_API_KEY or provider.apiKey.\");\n }\n const baseUrl =\n normalizeOptionalCloudConfigValue(cloudProvider?.baseUrl) ??\n normalizeOptionalCloudConfigValue(input.environment?.OPENSTEER_BASE_URL) ??\n DEFAULT_OPENSTEER_CLOUD_BASE_URL;\n const appBaseUrl =\n normalizeOptionalCloudConfigValue(cloudProvider?.appBaseUrl) ??\n normalizeOptionalCloudConfigValue(input.environment?.OPENSTEER_CLOUD_APP_BASE_URL);\n\n return {\n apiKey,\n baseUrl,\n ...(appBaseUrl === undefined ? {} : { appBaseUrl }),\n ...(cloudProvider?.browserProfile === undefined\n ? {}\n : { browserProfile: cloudProvider.browserProfile }),\n };\n}\n\nexport function requireCloudAppBaseUrl(\n cloudConfig: Pick<OpensteerCloudConfig, \"appBaseUrl\">,\n): string {\n const appBaseUrl = normalizeOptionalCloudConfigValue(cloudConfig.appBaseUrl);\n if (appBaseUrl === undefined) {\n throw new Error(\n 'record with provider=cloud requires OPENSTEER_CLOUD_APP_BASE_URL or \"--cloud-app-base-url\".',\n );\n }\n return appBaseUrl;\n}\n\nfunction normalizeOptionalCloudConfigValue(value: string | undefined): string | undefined {\n if (typeof value !== \"string\") {\n return undefined;\n }\n\n const normalized = value.trim().replace(/\\/+$/, \"\");\n return normalized.length === 0 ? undefined : normalized;\n}\n","import type { OpensteerSemanticOperationName } from \"@opensteer/protocol\";\n\nimport type { OpensteerSemanticRuntime } from \"./semantic-runtime.js\";\n\nexport async function dispatchSemanticOperation(\n runtime: OpensteerSemanticRuntime,\n operation: OpensteerSemanticOperationName,\n input: unknown,\n options: {\n readonly signal?: AbortSignal;\n readonly timeoutMs?: number;\n } = {},\n): Promise<unknown> {\n switch (operation) {\n case \"session.open\":\n return runtime.open(input as Parameters<OpensteerSemanticRuntime[\"open\"]>[0], options);\n case \"page.list\":\n return runtime.listPages(\n input as Parameters<OpensteerSemanticRuntime[\"listPages\"]>[0],\n options,\n );\n case \"page.new\":\n return runtime.newPage(input as Parameters<OpensteerSemanticRuntime[\"newPage\"]>[0], options);\n case \"page.activate\":\n return runtime.activatePage(\n input as Parameters<OpensteerSemanticRuntime[\"activatePage\"]>[0],\n options,\n );\n case \"page.close\":\n return runtime.closePage(\n input as Parameters<OpensteerSemanticRuntime[\"closePage\"]>[0],\n options,\n );\n case \"page.goto\":\n return runtime.goto(input as Parameters<OpensteerSemanticRuntime[\"goto\"]>[0], options);\n case \"page.evaluate\":\n return runtime.evaluate(\n input as Parameters<OpensteerSemanticRuntime[\"evaluate\"]>[0],\n options,\n );\n case \"page.add-init-script\":\n return runtime.addInitScript(\n input as Parameters<OpensteerSemanticRuntime[\"addInitScript\"]>[0],\n options,\n );\n case \"page.snapshot\":\n return runtime.snapshot(\n input as Parameters<OpensteerSemanticRuntime[\"snapshot\"]>[0],\n options,\n );\n case \"dom.click\":\n return runtime.click(input as Parameters<OpensteerSemanticRuntime[\"click\"]>[0], options);\n case \"dom.hover\":\n return runtime.hover(input as Parameters<OpensteerSemanticRuntime[\"hover\"]>[0], options);\n case \"dom.input\":\n return runtime.input(input as Parameters<OpensteerSemanticRuntime[\"input\"]>[0], options);\n case \"dom.scroll\":\n return runtime.scroll(input as Parameters<OpensteerSemanticRuntime[\"scroll\"]>[0], options);\n case \"dom.extract\":\n return runtime.extract(input as Parameters<OpensteerSemanticRuntime[\"extract\"]>[0], options);\n case \"network.query\":\n return runtime.queryNetwork(\n input as Parameters<OpensteerSemanticRuntime[\"queryNetwork\"]>[0],\n options,\n );\n case \"network.detail\":\n return runtime.getNetworkDetail(\n input as Parameters<OpensteerSemanticRuntime[\"getNetworkDetail\"]>[0],\n options,\n );\n case \"interaction.capture\":\n return runtime.captureInteraction(\n input as Parameters<OpensteerSemanticRuntime[\"captureInteraction\"]>[0],\n options,\n );\n case \"interaction.get\":\n return runtime.getInteraction(\n input as Parameters<OpensteerSemanticRuntime[\"getInteraction\"]>[0],\n options,\n );\n case \"interaction.diff\":\n return runtime.diffInteraction(\n input as Parameters<OpensteerSemanticRuntime[\"diffInteraction\"]>[0],\n options,\n );\n case \"interaction.replay\":\n return runtime.replayInteraction(\n input as Parameters<OpensteerSemanticRuntime[\"replayInteraction\"]>[0],\n options,\n );\n case \"artifact.read\":\n return runtime.readArtifact(\n input as Parameters<OpensteerSemanticRuntime[\"readArtifact\"]>[0],\n options,\n );\n case \"session.cookies\":\n return runtime.getCookies(\n input as Parameters<OpensteerSemanticRuntime[\"getCookies\"]>[0],\n options,\n );\n case \"session.storage\":\n return runtime.getStorageSnapshot(\n input as Parameters<OpensteerSemanticRuntime[\"getStorageSnapshot\"]>[0],\n options,\n );\n case \"session.state\":\n return runtime.getBrowserState(\n input as Parameters<OpensteerSemanticRuntime[\"getBrowserState\"]>[0],\n options,\n );\n case \"session.fetch\":\n return runtime.fetch(input as Parameters<OpensteerSemanticRuntime[\"fetch\"]>[0], options);\n case \"scripts.capture\":\n return runtime.captureScripts(\n input as Parameters<OpensteerSemanticRuntime[\"captureScripts\"]>[0],\n options,\n );\n case \"scripts.beautify\":\n return runtime.beautifyScript(\n input as Parameters<OpensteerSemanticRuntime[\"beautifyScript\"]>[0],\n options,\n );\n case \"scripts.deobfuscate\":\n return runtime.deobfuscateScript(\n input as Parameters<OpensteerSemanticRuntime[\"deobfuscateScript\"]>[0],\n options,\n );\n case \"scripts.sandbox\":\n return runtime.sandboxScript(\n input as Parameters<OpensteerSemanticRuntime[\"sandboxScript\"]>[0],\n options,\n );\n case \"captcha.solve\":\n return runtime.solveCaptcha(\n input as Parameters<OpensteerSemanticRuntime[\"solveCaptcha\"]>[0],\n options,\n );\n case \"computer.execute\":\n return runtime.computerExecute(\n input as Parameters<OpensteerSemanticRuntime[\"computerExecute\"]>[0],\n options,\n );\n case \"session.close\":\n return runtime.close(options);\n }\n}\n","{\n \"name\": \"@opensteer/runtime-core\",\n \"version\": \"0.2.7\",\n \"description\": \"Shared semantic runtime for Opensteer local and cloud execution.\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"sideEffects\": false,\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/steerlabs/opensteer.git\",\n \"directory\": \"packages/runtime-core\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/steerlabs/opensteer/issues\"\n },\n \"homepage\": \"https://github.com/steerlabs/opensteer/tree/main/packages/runtime-core#readme\",\n \"keywords\": [\n \"opensteer\",\n \"runtime\",\n \"agents\",\n \"browser-automation\"\n ],\n \"engines\": {\n \"node\": \">=22\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"import\": {\n \"types\": \"./dist/index.d.ts\",\n \"default\": \"./dist/index.js\"\n },\n \"require\": {\n \"types\": \"./dist/index.d.cts\",\n \"default\": \"./dist/index.cjs\"\n }\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"dependencies\": {\n \"@opensteer/browser-core\": \"workspace:*\",\n \"@opensteer/protocol\": \"workspace:*\",\n \"cheerio\": \"^1.1.2\",\n \"css-select\": \"^6.0.0\",\n \"domhandler\": \"^5.0.3\",\n \"prettier\": \"^3.8.1\",\n \"sharp\": \"^0.34.5\",\n \"skills\": \"^1.4.6\"\n },\n \"optionalDependencies\": {\n \"webcrack\": \"^2.15.1\"\n },\n \"devDependencies\": {},\n \"scripts\": {\n \"build\": \"tsup\",\n \"clean\": \"rimraf dist\",\n \"typecheck\": \"tsc --noEmit -p tsconfig.json\"\n }\n}\n","import runtimeCorePackage from \"../package.json\" with { type: \"json\" };\n\nexport const OPENSTEER_RUNTIME_CORE_VERSION = runtimeCorePackage.version;\n","import { isBrowserCoreError } from \"@opensteer/browser-core\";\nimport {\n createOpensteerError,\n isOpensteerProtocolError,\n toOpensteerError,\n type OpensteerError,\n} from \"@opensteer/protocol\";\n\nexport function normalizeThrownOpensteerError(\n error: unknown,\n fallbackMessage: string,\n): OpensteerError {\n if (isOpensteerProtocolError(error)) {\n return toOpensteerError(error);\n }\n\n if (isBrowserCoreError(error)) {\n return createOpensteerError(error.code, error.message, {\n retriable: error.retriable,\n ...(error.details === undefined ? {} : { details: error.details }),\n });\n }\n\n if (error instanceof Error) {\n return createOpensteerError(\"operation-failed\", error.message, {\n details: {\n name: error.name,\n },\n });\n }\n\n return createOpensteerError(\"internal\", fallbackMessage, {\n details: {\n value: error,\n },\n });\n}\n","import sharp from \"sharp\";\nimport {\n createBodyPayload,\n createDevicePixelRatio,\n createPageScaleFactor,\n createPageZoomFactor,\n createPoint,\n createScrollOffset,\n createSize,\n type Point,\n type ScreenshotArtifact,\n type Size,\n type ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport {\n opensteerComputerAnnotationNames,\n type OpensteerComputerAction,\n type OpensteerComputerAnnotation,\n type OpensteerComputerDisplayScale,\n type OpensteerComputerTraceEnrichment,\n} from \"@opensteer/protocol\";\n\nexport const OPENSTEER_COMPUTER_DISPLAY_PROFILE = {\n preferredViewport: {\n width: 1280,\n height: 800,\n },\n maxImageDimension: 1568,\n maxImagePixels: 1.15 * 1024 * 1024,\n defaultScreenshotFormat: \"webp\" as const,\n defaultIncludeCursor: true,\n defaultAnnotations: opensteerComputerAnnotationNames,\n};\n\nexport interface ComputerDisplayTransform {\n readonly nativeSize: Size;\n readonly displaySize: Size;\n readonly nativeToDisplay: OpensteerComputerDisplayScale;\n readonly displayToNative: OpensteerComputerDisplayScale;\n}\n\nexport function createComputerDisplayTransform(\n nativeViewport: ViewportMetrics,\n): ComputerDisplayTransform {\n const nativeSize = nativeViewport.visualViewport.size;\n const pixels = nativeSize.width * nativeSize.height;\n const shrink = Math.min(\n OPENSTEER_COMPUTER_DISPLAY_PROFILE.maxImageDimension / nativeSize.width,\n OPENSTEER_COMPUTER_DISPLAY_PROFILE.maxImageDimension / nativeSize.height,\n Math.sqrt(OPENSTEER_COMPUTER_DISPLAY_PROFILE.maxImagePixels / pixels),\n 1,\n );\n const displayWidth = Math.max(1, Math.round(nativeSize.width * shrink));\n const displayHeight = Math.max(1, Math.round(nativeSize.height * shrink));\n const nativeToDisplay = {\n x: roundScale(displayWidth / nativeSize.width),\n y: roundScale(displayHeight / nativeSize.height),\n } satisfies OpensteerComputerDisplayScale;\n const displayToNative = {\n x: roundScale(nativeSize.width / displayWidth),\n y: roundScale(nativeSize.height / displayHeight),\n } satisfies OpensteerComputerDisplayScale;\n\n return {\n nativeSize,\n displaySize: createSize(displayWidth, displayHeight),\n nativeToDisplay,\n displayToNative,\n };\n}\n\nexport function toDisplayViewportMetrics(\n nativeViewport: ViewportMetrics,\n transform: ComputerDisplayTransform,\n): ViewportMetrics {\n return {\n layoutViewport: {\n origin: scalePoint(nativeViewport.layoutViewport.origin, transform.nativeToDisplay),\n size: createSize(\n scaleNumber(nativeViewport.layoutViewport.size.width, transform.nativeToDisplay.x),\n scaleNumber(nativeViewport.layoutViewport.size.height, transform.nativeToDisplay.y),\n ),\n },\n visualViewport: {\n origin: scalePoint(nativeViewport.visualViewport.origin, transform.nativeToDisplay),\n offsetWithinLayoutViewport: createScrollOffset(\n scaleNumber(\n nativeViewport.visualViewport.offsetWithinLayoutViewport.x,\n transform.nativeToDisplay.x,\n ),\n scaleNumber(\n nativeViewport.visualViewport.offsetWithinLayoutViewport.y,\n transform.nativeToDisplay.y,\n ),\n ),\n size: createSize(transform.displaySize.width, transform.displaySize.height),\n },\n scrollOffset: createScrollOffset(\n scaleNumber(nativeViewport.scrollOffset.x, transform.nativeToDisplay.x),\n scaleNumber(nativeViewport.scrollOffset.y, transform.nativeToDisplay.y),\n ),\n contentSize: createSize(\n scaleNumber(nativeViewport.contentSize.width, transform.nativeToDisplay.x),\n scaleNumber(nativeViewport.contentSize.height, transform.nativeToDisplay.y),\n ),\n devicePixelRatio: createDevicePixelRatio(1),\n pageScaleFactor: createPageScaleFactor(1),\n pageZoomFactor: createPageZoomFactor(1),\n };\n}\n\nexport function toNativeComputerAction(\n action: OpensteerComputerAction,\n transform: ComputerDisplayTransform,\n): OpensteerComputerAction {\n switch (action.type) {\n case \"click\":\n return {\n ...action,\n ...scaleXY(action, transform.displayToNative),\n };\n case \"move\":\n return {\n ...action,\n ...scaleXY(action, transform.displayToNative),\n };\n case \"scroll\":\n return {\n ...action,\n ...scaleXY(action, transform.displayToNative),\n deltaX: scaleNumber(action.deltaX, transform.displayToNative.x),\n deltaY: scaleNumber(action.deltaY, transform.displayToNative.y),\n };\n case \"drag\":\n return {\n ...action,\n start: scalePoint(action.start, transform.displayToNative),\n end: scalePoint(action.end, transform.displayToNative),\n };\n case \"key\":\n case \"screenshot\":\n case \"type\":\n case \"wait\":\n return action;\n }\n}\n\nexport function toDisplayComputerTrace(\n trace: OpensteerComputerTraceEnrichment | undefined,\n transform: ComputerDisplayTransform,\n): OpensteerComputerTraceEnrichment | undefined {\n if (trace === undefined) {\n return undefined;\n }\n\n return {\n points: trace.points.map((entry) => ({\n ...entry,\n point: scalePoint(entry.point, transform.nativeToDisplay),\n })),\n };\n}\n\nexport async function normalizeComputerScreenshot(input: {\n readonly screenshot: ScreenshotArtifact;\n readonly transform: ComputerDisplayTransform;\n}): Promise<ScreenshotArtifact> {\n const source = Buffer.from(input.screenshot.payload.bytes);\n\n let pipeline = sharp(source, {\n failOn: \"error\",\n });\n if (\n input.transform.displaySize.width !== input.transform.nativeSize.width ||\n input.transform.displaySize.height !== input.transform.nativeSize.height\n ) {\n pipeline = pipeline.resize(\n input.transform.displaySize.width,\n input.transform.displaySize.height,\n );\n }\n\n const normalized = await pipeline.webp({ quality: 80 }).toBuffer();\n\n return {\n ...input.screenshot,\n payload: createBodyPayload(new Uint8Array(normalized), {\n mimeType: \"image/webp\",\n }),\n format: \"webp\",\n size: input.transform.displaySize,\n coordinateSpace: \"computer-display-css\",\n };\n}\n\nexport function resolveComputerAnnotations(\n disableAnnotations: readonly OpensteerComputerAnnotation[] | undefined,\n): readonly OpensteerComputerAnnotation[] {\n const disabled = new Set(disableAnnotations ?? []);\n return OPENSTEER_COMPUTER_DISPLAY_PROFILE.defaultAnnotations.filter(\n (annotation) => !disabled.has(annotation),\n );\n}\n\nfunction scaleXY(\n point: {\n readonly x: number;\n readonly y: number;\n },\n scale: OpensteerComputerDisplayScale,\n): {\n readonly x: number;\n readonly y: number;\n} {\n return {\n x: scaleNumber(point.x, scale.x),\n y: scaleNumber(point.y, scale.y),\n };\n}\n\nfunction scalePoint(point: Point, scale: OpensteerComputerDisplayScale): Point {\n return createPoint(scaleNumber(point.x, scale.x), scaleNumber(point.y, scale.y));\n}\n\nfunction scaleNumber(value: number, scale: number): number {\n return roundScale(value * scale);\n}\n\nfunction roundScale(value: number): number {\n return Number(value.toFixed(6));\n}\n","import {\n createNodeLocator,\n type BrowserCoreEngine,\n type PageRef,\n type Point,\n} from \"@opensteer/browser-core\";\nimport type {\n OpensteerComputerAction,\n OpensteerComputerTraceEnrichment,\n OpensteerComputerTracePoint,\n OpensteerResolvedTarget,\n} from \"@opensteer/protocol\";\n\nimport { buildPathSelectorHint, type DomRuntime, type ResolvedDomTarget } from \"../dom/index.js\";\n\nexport async function enrichComputerUseTrace(input: {\n readonly action: OpensteerComputerAction;\n readonly pageRef: PageRef;\n readonly engine: BrowserCoreEngine;\n readonly dom: DomRuntime;\n}): Promise<OpensteerComputerTraceEnrichment | undefined> {\n const tracePoints = toTracePoints(input.action);\n if (tracePoints.length === 0) {\n return undefined;\n }\n\n const points = await Promise.all(\n tracePoints.map(async ({ role, point }) => {\n const enriched: OpensteerComputerTracePoint = {\n role,\n point,\n };\n\n try {\n const hitTest = await input.engine.hitTest({\n pageRef: input.pageRef,\n point,\n coordinateSpace: \"layout-viewport-css\",\n });\n const target = await resolveTraceTarget(input.dom, hitTest).catch(() => undefined);\n return {\n ...enriched,\n hitTest,\n ...(target === undefined ? {} : { target }),\n } satisfies OpensteerComputerTracePoint;\n } catch {\n return enriched;\n }\n }),\n );\n\n return {\n points,\n };\n}\n\nfunction toTracePoints(action: OpensteerComputerAction): readonly {\n readonly role: OpensteerComputerTracePoint[\"role\"];\n readonly point: Point;\n}[] {\n switch (action.type) {\n case \"click\":\n case \"move\":\n case \"scroll\":\n return [\n {\n role: \"point\",\n point: {\n x: action.x,\n y: action.y,\n },\n },\n ];\n case \"drag\":\n return [\n {\n role: \"start\",\n point: action.start,\n },\n {\n role: \"end\",\n point: action.end,\n },\n ];\n case \"key\":\n case \"screenshot\":\n case \"type\":\n case \"wait\":\n return [];\n }\n}\n\nasync function resolveTraceTarget(\n dom: DomRuntime,\n hitTest: Awaited<ReturnType<BrowserCoreEngine[\"hitTest\"]>>,\n): Promise<OpensteerResolvedTarget | undefined> {\n if (hitTest.nodeRef === undefined) {\n return undefined;\n }\n\n const resolved = await dom.resolveTarget({\n pageRef: hitTest.pageRef,\n method: \"computer.execute\",\n target: {\n kind: \"live\",\n locator: createNodeLocator(hitTest.documentRef, hitTest.documentEpoch, hitTest.nodeRef),\n },\n });\n return toOpensteerResolvedTarget(resolved);\n}\n\nfunction toOpensteerResolvedTarget(target: ResolvedDomTarget): OpensteerResolvedTarget {\n return {\n pageRef: target.pageRef,\n frameRef: target.frameRef,\n documentRef: target.documentRef,\n documentEpoch: target.documentEpoch,\n nodeRef: target.nodeRef,\n tagName: toOpensteerTagName(target.node.nodeName),\n pathHint: buildPathSelectorHint(target.replayPath ?? target.anchor),\n ...(target.persist === undefined ? {} : { persist: target.persist }),\n ...(target.selectorUsed === undefined ? {} : { selectorUsed: target.selectorUsed }),\n };\n}\n\nfunction toOpensteerTagName(nodeName: string): string {\n const tagName = String(nodeName).trim().toLowerCase();\n return tagName.length === 0 ? \"element\" : tagName;\n}\n","import type {\n BrowserCoreEngine,\n PageRef,\n ScreenshotArtifact as BrowserCoreScreenshotArtifact,\n ViewportMetrics,\n} from \"@opensteer/browser-core\";\nimport {\n OpensteerProtocolError,\n type OpensteerComputerAction,\n type OpensteerComputerDisplayScale,\n type OpensteerComputerExecuteInput,\n type OpensteerComputerExecuteTiming,\n type OpensteerComputerTraceEnrichment,\n type OpensteerEvent,\n} from \"@opensteer/protocol\";\n\nimport {\n settleWithPolicy,\n type OpensteerPolicy,\n type TimeoutExecutionContext,\n} from \"../../policy/index.js\";\nimport {\n captureActionBoundarySnapshot,\n createActionBoundaryDiagnostics,\n isSoftSettleTimeoutError,\n recordActionBoundaryDiagnostics,\n} from \"../../action-boundary.js\";\nimport type { DomRuntime } from \"../dom/index.js\";\nimport {\n resolveComputerUseBridge,\n type ComputerUseBridge,\n type NormalizedComputerScreenshotOptions,\n} from \"./bridge.js\";\nimport {\n OPENSTEER_COMPUTER_DISPLAY_PROFILE,\n createComputerDisplayTransform,\n normalizeComputerScreenshot,\n resolveComputerAnnotations,\n toDisplayComputerTrace,\n toDisplayViewportMetrics,\n toNativeComputerAction,\n} from \"./display.js\";\nimport { enrichComputerUseTrace } from \"./trace-enrichment.js\";\n\nexport interface ComputerUseRuntime {\n execute(input: {\n readonly pageRef: PageRef;\n readonly input: OpensteerComputerExecuteInput;\n readonly timeout: TimeoutExecutionContext;\n }): Promise<ComputerUseRuntimeOutput>;\n}\n\nexport interface ComputerUseRuntimeOutput {\n readonly action: OpensteerComputerAction;\n readonly pageRef: PageRef;\n readonly screenshot: BrowserCoreScreenshotArtifact;\n readonly displayViewport: ViewportMetrics;\n readonly nativeViewport: ViewportMetrics;\n readonly displayScale: OpensteerComputerDisplayScale;\n readonly events: readonly OpensteerEvent[];\n readonly timing: OpensteerComputerExecuteTiming;\n readonly trace?: OpensteerComputerTraceEnrichment;\n}\n\nexport function createComputerUseRuntime(options: {\n readonly engine: BrowserCoreEngine;\n readonly dom: DomRuntime;\n readonly policy: OpensteerPolicy;\n}): ComputerUseRuntime {\n return new DefaultComputerUseRuntime(options);\n}\n\nclass DefaultComputerUseRuntime implements ComputerUseRuntime {\n private readonly bridge: ComputerUseBridge | undefined;\n\n constructor(\n private readonly options: {\n readonly engine: BrowserCoreEngine;\n readonly dom: DomRuntime;\n readonly policy: OpensteerPolicy;\n },\n ) {\n this.bridge = resolveComputerUseBridge(options.engine);\n }\n\n async execute(input: {\n readonly pageRef: PageRef;\n readonly input: OpensteerComputerExecuteInput;\n readonly timeout: TimeoutExecutionContext;\n }): Promise<ComputerUseRuntimeOutput> {\n const bridge = this.requireBridge();\n const preActionNativeViewport = await input.timeout.runStep(() =>\n this.options.engine.getViewportMetrics({\n pageRef: input.pageRef,\n }),\n );\n const preActionDisplay = createComputerDisplayTransform(preActionNativeViewport);\n const nativeAction = toNativeComputerAction(input.input.action, preActionDisplay);\n const screenshot = normalizeScreenshotOptions(input.input.screenshot);\n const snapshot = await input.timeout.runStep(() =>\n captureActionBoundarySnapshot(this.options.engine, input.pageRef),\n );\n let visualSettled = true;\n\n const executed = await input.timeout.runStep(() =>\n bridge.execute({\n pageRef: input.pageRef,\n snapshot,\n action: nativeAction,\n screenshot,\n signal: input.timeout.signal,\n remainingMs: () => input.timeout.remainingMs(),\n policySettle: async (pageRef, trigger, boundary) => {\n try {\n await settleWithPolicy(this.options.policy.settle, {\n operation: \"computer.execute\",\n trigger,\n engine: this.options.engine,\n pageRef,\n signal: input.timeout.signal,\n remainingMs: input.timeout.remainingMs(),\n ...(boundary?.observedMutationQuietMs === undefined\n ? {}\n : { observedMutationQuietMs: boundary.observedMutationQuietMs }),\n ...(boundary?.postLoadHandled === true ? { postLoadHandled: true } : {}),\n });\n } catch (error) {\n if (\n pageRef === input.pageRef &&\n isSoftSettleTimeoutError(error, input.timeout.signal)\n ) {\n visualSettled = false;\n return;\n }\n throw error;\n }\n },\n }),\n );\n if (executed.boundary !== undefined && executed.pageRef === input.pageRef) {\n recordActionBoundaryDiagnostics(\n input.timeout.signal,\n createActionBoundaryDiagnostics({\n boundary: executed.boundary,\n visualSettled,\n }),\n );\n }\n\n let trace = undefined;\n if (!input.timeout.signal.aborted) {\n try {\n trace = await input.timeout.runStep(() =>\n enrichComputerUseTrace({\n action: nativeAction,\n pageRef: input.pageRef,\n engine: this.options.engine,\n dom: this.options.dom,\n }),\n );\n } catch {\n trace = undefined;\n }\n }\n\n const postActionDisplay = createComputerDisplayTransform(executed.viewport);\n const screenshotArtifact = await input.timeout.runStep(() =>\n normalizeComputerScreenshot({\n screenshot: executed.screenshot,\n transform: postActionDisplay,\n }),\n );\n const displayTrace = toDisplayComputerTrace(trace, preActionDisplay);\n\n return {\n action: input.input.action,\n pageRef: executed.pageRef,\n screenshot: screenshotArtifact,\n displayViewport: toDisplayViewportMetrics(executed.viewport, postActionDisplay),\n nativeViewport: executed.viewport,\n displayScale: postActionDisplay.nativeToDisplay,\n events: executed.events,\n timing: executed.timing,\n ...(displayTrace === undefined ? {} : { trace: displayTrace }),\n };\n }\n\n private requireBridge(): ComputerUseBridge {\n if (this.bridge !== undefined) {\n return this.bridge;\n }\n\n throw new OpensteerProtocolError(\n \"unsupported-capability\",\n \"current engine does not expose a computer-use bridge\",\n {\n details: {\n operation: \"computer.execute\",\n },\n },\n );\n }\n}\n\nfunction normalizeScreenshotOptions(\n input: OpensteerComputerExecuteInput[\"screenshot\"] | undefined,\n): NormalizedComputerScreenshotOptions {\n return {\n format: input?.format ?? OPENSTEER_COMPUTER_DISPLAY_PROFILE.defaultScreenshotFormat,\n includeCursor: input?.includeCursor ?? OPENSTEER_COMPUTER_DISPLAY_PROFILE.defaultIncludeCursor,\n annotations: [...resolveComputerAnnotations(input?.disableAnnotations)],\n };\n}\n","import type {\n BodyPayload as BrowserBodyPayload,\n HeaderEntry as BrowserHeaderEntry,\n NetworkRecord as BrowserNetworkRecord,\n SessionTransportRequest,\n SessionTransportResponse,\n} from \"@opensteer/browser-core\";\nimport {\n createBodyPayload,\n createHeaderEntry,\n type BodyPayload as ProtocolBodyPayload,\n type HeaderEntry as ProtocolHeaderEntry,\n type NetworkRecord as ProtocolNetworkRecord,\n type OpensteerRequestScalar,\n type OpensteerRequestScalarMap,\n type OpensteerRequestTransportResult,\n type OpensteerRequestResponseResult,\n} from \"@opensteer/protocol\";\n\nconst REDACTED_HEADER_VALUE = \"[redacted]\";\nconst HTTP_HEADER_NAME_PATTERN = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;\n\nconst SECRET_HEADER_NAMES = new Set([\n \"api-key\",\n \"authorization\",\n \"cookie\",\n \"proxy-authorization\",\n \"set-cookie\",\n \"x-api-key\",\n \"x-auth-token\",\n \"x-authorization\",\n]);\n\nconst NON_REPLAYABLE_INFERRED_HEADER_NAMES = new Set([\n \"accept-encoding\",\n \"accept-language\",\n \"connection\",\n \"content-length\",\n \"host\",\n \"origin\",\n \"priority\",\n \"referer\",\n \"user-agent\",\n \"csrf-token\",\n \"x-csrf-token\",\n \"x-csrftoken\",\n \"x-xsrf-token\",\n]);\n\nconst HOP_BY_HOP_HEADER_NAMES = new Set([\n \"connection\",\n \"keep-alive\",\n \"proxy-authenticate\",\n \"proxy-authorization\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n]);\n\nexport function normalizeHeaderName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nexport function isValidHttpHeaderName(name: string): boolean {\n const normalized = name.trim();\n return (\n normalized.length > 0 &&\n !normalized.startsWith(\":\") &&\n HTTP_HEADER_NAME_PATTERN.test(normalized)\n );\n}\n\nexport function isSecretHeaderName(name: string): boolean {\n return SECRET_HEADER_NAMES.has(normalizeHeaderName(name));\n}\n\nexport function isReplayableInferredHeaderName(name: string): boolean {\n const normalized = normalizeHeaderName(name);\n if (!isValidHttpHeaderName(name)) {\n return false;\n }\n if (isSecretHeaderName(normalized)) {\n return false;\n }\n if (HOP_BY_HOP_HEADER_NAMES.has(normalized)) {\n return false;\n }\n if (NON_REPLAYABLE_INFERRED_HEADER_NAMES.has(normalized)) {\n return false;\n }\n if (normalized.startsWith(\"sec-\") || normalized.startsWith(\"proxy-\")) {\n return false;\n }\n return true;\n}\n\nexport function redactHeaderEntries(\n entries: readonly BrowserHeaderEntry[] | readonly ProtocolHeaderEntry[],\n): ProtocolHeaderEntry[] {\n return entries.map((entry) =>\n isSecretHeaderName(entry.name)\n ? createHeaderEntry(entry.name, REDACTED_HEADER_VALUE)\n : createHeaderEntry(entry.name, entry.value),\n );\n}\n\nexport function toProtocolBodyPayload(body: BrowserBodyPayload): ProtocolBodyPayload {\n return createBodyPayload(Buffer.from(body.bytes).toString(\"base64\"), {\n encoding: body.encoding,\n ...(body.mimeType === undefined ? {} : { mimeType: body.mimeType }),\n ...(body.charset === undefined ? {} : { charset: body.charset }),\n truncated: body.truncated,\n ...(body.originalByteLength === undefined\n ? {}\n : { originalByteLength: body.originalByteLength }),\n });\n}\n\nexport function toProtocolNetworkRecord(\n record: BrowserNetworkRecord,\n options: {\n readonly redactSecretHeaders?: boolean;\n } = {},\n): ProtocolNetworkRecord {\n const headers = (options.redactSecretHeaders ?? false) ? redactHeaderEntries : cloneHeaders;\n const requestBody =\n record.requestBody === undefined ? undefined : toProtocolBodyPayload(record.requestBody);\n const responseBody =\n record.responseBody === undefined ? undefined : toProtocolBodyPayload(record.responseBody);\n\n return {\n kind: record.kind,\n requestId: record.requestId,\n sessionRef: record.sessionRef,\n ...(record.pageRef === undefined ? {} : { pageRef: record.pageRef }),\n ...(record.frameRef === undefined ? {} : { frameRef: record.frameRef }),\n ...(record.documentRef === undefined ? {} : { documentRef: record.documentRef }),\n method: record.method,\n url: record.url,\n requestHeaders: headers(record.requestHeaders),\n responseHeaders: headers(record.responseHeaders),\n ...(record.status === undefined ? {} : { status: record.status }),\n ...(record.statusText === undefined ? {} : { statusText: record.statusText }),\n resourceType: record.resourceType,\n ...(record.redirectFromRequestId === undefined\n ? {}\n : { redirectFromRequestId: record.redirectFromRequestId }),\n ...(record.redirectToRequestId === undefined\n ? {}\n : { redirectToRequestId: record.redirectToRequestId }),\n navigationRequest: record.navigationRequest,\n ...(record.initiator === undefined ? {} : { initiator: record.initiator }),\n ...(record.timing === undefined ? {} : { timing: record.timing }),\n ...(record.transfer === undefined ? {} : { transfer: record.transfer }),\n ...(record.source === undefined ? {} : { source: record.source }),\n captureState: record.captureState,\n requestBodyState: record.requestBodyState,\n responseBodyState: record.responseBodyState,\n ...(record.requestBodySkipReason === undefined\n ? {}\n : { requestBodySkipReason: record.requestBodySkipReason }),\n ...(record.responseBodySkipReason === undefined\n ? {}\n : { responseBodySkipReason: record.responseBodySkipReason }),\n ...(record.requestBodyError === undefined ? {} : { requestBodyError: record.requestBodyError }),\n ...(record.responseBodyError === undefined\n ? {}\n : { responseBodyError: record.responseBodyError }),\n ...(requestBody === undefined ? {} : { requestBody }),\n ...(responseBody === undefined ? {} : { responseBody }),\n };\n}\n\nexport function toProtocolRequestTransportResult(\n request: SessionTransportRequest,\n): OpensteerRequestTransportResult {\n const body = request.body === undefined ? undefined : toProtocolBodyPayload(request.body);\n\n return {\n method: request.method,\n url: request.url,\n headers: cloneHeaders(request.headers ?? []),\n ...(body === undefined ? {} : { body }),\n };\n}\n\nexport function toProtocolRequestResponseResult(\n response: SessionTransportResponse,\n): OpensteerRequestResponseResult {\n const body = response.body === undefined ? undefined : toProtocolBodyPayload(response.body);\n\n return {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers: cloneHeaders(response.headers),\n ...(body === undefined ? {} : { body }),\n redirected: response.redirected,\n };\n}\n\nexport function cloneHeaders(\n headers: readonly BrowserHeaderEntry[] | readonly ProtocolHeaderEntry[],\n): ProtocolHeaderEntry[] {\n return headers.map((header) => createHeaderEntry(header.name, header.value));\n}\n\nexport function filterValidHttpHeaders(\n headers: readonly BrowserHeaderEntry[] | readonly ProtocolHeaderEntry[],\n): ProtocolHeaderEntry[] {\n return cloneHeaders(headers).filter((header) => isValidHttpHeaderName(header.name));\n}\n\nexport function stringifyRequestScalar(value: OpensteerRequestScalar): string {\n return typeof value === \"string\" ? value : String(value);\n}\n\nexport function entriesFromScalarMap(\n values: OpensteerRequestScalarMap | undefined,\n): readonly { readonly name: string; readonly value: string }[] {\n if (values === undefined) {\n return [];\n }\n\n return Object.entries(values).map(([name, value]) => ({\n name,\n value: stringifyRequestScalar(value),\n }));\n}\n\nexport function parseMimeType(value: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (value === undefined) {\n return {};\n }\n\n const [mimeTypePart, ...parts] = value.split(\";\");\n const mimeType = mimeTypePart?.trim();\n let charset: string | undefined;\n for (const part of parts) {\n const [name, rawValue] = part.split(\"=\");\n if (name?.trim().toLowerCase() === \"charset\" && rawValue) {\n charset = rawValue.trim();\n }\n }\n\n return {\n ...(mimeType === undefined || mimeType.length === 0 ? {} : { mimeType }),\n ...(charset === undefined || charset.length === 0 ? {} : { charset }),\n };\n}\n\nexport function headerValue(\n headers: readonly BrowserHeaderEntry[] | readonly ProtocolHeaderEntry[],\n name: string,\n): string | undefined {\n const normalized = normalizeHeaderName(name);\n for (const header of headers) {\n if (normalizeHeaderName(header.name) === normalized) {\n return header.value;\n }\n }\n return undefined;\n}\n\nexport function decodeBodyText(body: BrowserBodyPayload | undefined): string | undefined {\n if (body === undefined) {\n return undefined;\n }\n\n return Buffer.from(body.bytes).toString(resolveTextEncoding(body.charset));\n}\n\nexport function parseStructuredResponseData(response: SessionTransportResponse): unknown {\n const contentType = headerValue(response.headers, \"content-type\") ?? response.body?.mimeType;\n if (response.body === undefined || contentType === undefined) {\n return undefined;\n }\n\n const { mimeType } = parseMimeType(contentType);\n const normalizedMimeType = mimeType?.toLowerCase();\n const text = decodeBodyText(response.body);\n if (text === undefined) {\n return undefined;\n }\n\n if (normalizedMimeType === undefined) {\n return undefined;\n }\n\n if (normalizedMimeType === \"application/json\" || normalizedMimeType.endsWith(\"+json\")) {\n try {\n return JSON.parse(text);\n } catch {\n return undefined;\n }\n }\n\n if (normalizedMimeType.startsWith(\"text/\")) {\n return text;\n }\n\n return undefined;\n}\n\nfunction resolveTextEncoding(charset: string | undefined): BufferEncoding {\n switch (charset?.trim().toLowerCase()) {\n case \"ascii\":\n case \"latin1\":\n case \"utf16le\":\n case \"utf-16le\":\n return charset.replace(\"-\", \"\").toLowerCase() as BufferEncoding;\n case \"utf8\":\n case \"utf-8\":\n default:\n return \"utf8\";\n }\n}\n","import type { BodyPayload, HeaderEntry } from \"@opensteer/browser-core\";\nimport type { TransportKind } from \"@opensteer/protocol\";\n\nimport { isValidHttpHeaderName, normalizeHeaderName } from \"../requests/shared.js\";\n\nconst ALWAYS_OMIT_HEADER_NAMES = new Set([\"content-length\", \"host\", \"priority\"]);\n\nconst BROWSER_OWNED_HEADER_PREFIXES = [\"sec-\"];\n\nexport interface MaterializedTransportRequest {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BodyPayload;\n readonly followRedirects?: boolean;\n}\n\nexport function isManagedRequestHeaderName(name: string, transport?: TransportKind): boolean {\n const normalized = normalizeHeaderName(name);\n if (!isValidHttpHeaderName(name)) {\n return true;\n }\n if (normalized.startsWith(\":\")) {\n return true;\n }\n if (ALWAYS_OMIT_HEADER_NAMES.has(normalized)) {\n return true;\n }\n if (transport !== undefined && (transport === \"page-http\" || transport === \"session-http\")) {\n if (BROWSER_OWNED_HEADER_PREFIXES.some((prefix) => normalized.startsWith(prefix))) {\n return true;\n }\n }\n return false;\n}\n\nexport function stripManagedRequestHeaders(\n headers: readonly HeaderEntry[] | undefined,\n transport?: TransportKind,\n): HeaderEntry[] | undefined {\n if (headers === undefined || headers.length === 0) {\n return undefined;\n }\n\n const filtered = headers.filter((header) => !isManagedRequestHeaderName(header.name, transport));\n return filtered.length === 0 ? undefined : filtered.map((header) => ({ ...header }));\n}\n\nexport function finalizeMaterializedTransportRequest(\n request: MaterializedTransportRequest,\n transport: TransportKind,\n): MaterializedTransportRequest {\n const headers = stripManagedRequestHeaders(request.headers, transport);\n return {\n ...request,\n ...(headers === undefined ? {} : { headers }),\n };\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport type { NetworkRecord as BrowserNetworkRecord, PageRef } from \"@opensteer/browser-core\";\nimport type { NetworkQueryRecord } from \"@opensteer/protocol\";\n\nimport type { SavedNetworkBodyWriteMode, SavedNetworkStore } from \"./saved-store.js\";\nimport { toProtocolNetworkRecord } from \"../requests/shared.js\";\n\ninterface NetworkRecordMetadata {\n readonly recordId: string;\n readonly observedAt: number;\n savedAt?: number;\n capture?: string;\n pageRef?: PageRef;\n readonly tags: Set<string>;\n}\n\nexport class NetworkHistory {\n private readonly metadataByRequestId = new Map<string, NetworkRecordMetadata>();\n private readonly requestIdByRecordId = new Map<string, string>();\n private readonly requestIdsByCapture = new Map<string, Set<string>>();\n private readonly requestIdsByTag = new Map<string, Set<string>>();\n private readonly tombstonedRequestIds = new Set<string>();\n\n materialize(\n records: readonly BrowserNetworkRecord[],\n options: {\n readonly redactSecretHeaders?: boolean;\n } = {},\n ): readonly NetworkQueryRecord[] {\n const observedAt = Date.now();\n const materialized: NetworkQueryRecord[] = [];\n for (const record of records) {\n const entry = this.materializeRecord(record, observedAt, options);\n if (entry !== undefined) {\n materialized.push(entry);\n }\n }\n return materialized;\n }\n\n async persist(\n records: readonly BrowserNetworkRecord[],\n store: SavedNetworkStore,\n options: {\n readonly bodyWriteMode: SavedNetworkBodyWriteMode;\n readonly observedAt?: number;\n readonly redactSecretHeaders?: boolean;\n },\n ): Promise<readonly NetworkQueryRecord[]> {\n const observedAt = options.observedAt ?? Date.now();\n const metadataToSave = new Set<NetworkRecordMetadata>();\n const persisted: NetworkQueryRecord[] = [];\n for (const record of records) {\n const entry = this.materializeRecord(record, observedAt, {\n ...(options.redactSecretHeaders === undefined\n ? {}\n : { redactSecretHeaders: options.redactSecretHeaders }),\n });\n if (entry === undefined) {\n continue;\n }\n\n const requestId = entry.record.requestId;\n const metadata = this.metadataByRequestId.get(requestId);\n if (metadata === undefined) {\n continue;\n }\n const savedAt = metadata.savedAt ?? observedAt;\n metadataToSave.add(metadata);\n persisted.push({\n ...entry,\n savedAt,\n });\n }\n\n if (persisted.length > 0) {\n await store.save(persisted, {\n bodyWriteMode: options.bodyWriteMode,\n });\n for (const metadata of metadataToSave) {\n metadata.savedAt ??= observedAt;\n }\n }\n return persisted;\n }\n\n assignCapture(records: readonly NetworkQueryRecord[], capture: string): void {\n for (const record of records) {\n const metadata = this.metadataByRequestId.get(record.record.requestId);\n if (!metadata || metadata.capture === capture) {\n continue;\n }\n\n if (metadata.capture !== undefined) {\n this.requestIdsByCapture.get(metadata.capture)?.delete(record.record.requestId);\n }\n metadata.capture = capture;\n this.addIndexedRequestId(this.requestIdsByCapture, capture, record.record.requestId);\n }\n }\n\n addTag(records: readonly NetworkQueryRecord[], tag: string): void {\n for (const record of records) {\n const metadata = this.metadataByRequestId.get(record.record.requestId);\n if (!metadata || metadata.tags.has(tag)) {\n continue;\n }\n\n metadata.tags.add(tag);\n this.addIndexedRequestId(this.requestIdsByTag, tag, record.record.requestId);\n }\n }\n\n getObservedAt(recordId: string): number | undefined {\n const requestId = this.requestIdByRecordId.get(recordId);\n return requestId === undefined\n ? undefined\n : this.metadataByRequestId.get(requestId)?.observedAt;\n }\n\n getRequestId(recordId: string): string | undefined {\n return this.requestIdByRecordId.get(recordId);\n }\n\n getRequestIdsForCapture(capture: string): ReadonlySet<string> {\n return new Set(this.requestIdsByCapture.get(capture) ?? []);\n }\n\n getRequestIdsForTag(tag: string): ReadonlySet<string> {\n return new Set(this.requestIdsByTag.get(tag) ?? []);\n }\n\n getPageRefForRequestId(requestId: string): PageRef | undefined {\n return this.metadataByRequestId.get(requestId)?.pageRef;\n }\n\n getKnownRequestIds(): ReadonlySet<string> {\n return new Set(this.metadataByRequestId.keys());\n }\n\n tombstoneRequestIds(requestIds: Iterable<string>): void {\n for (const requestId of requestIds) {\n this.tombstonedRequestIds.add(requestId);\n const metadata = this.metadataByRequestId.get(requestId);\n if (!metadata) {\n continue;\n }\n\n this.metadataByRequestId.delete(requestId);\n this.requestIdByRecordId.delete(metadata.recordId);\n if (metadata.capture !== undefined) {\n this.requestIdsByCapture.get(metadata.capture)?.delete(requestId);\n }\n for (const tag of metadata.tags) {\n this.requestIdsByTag.get(tag)?.delete(requestId);\n }\n }\n }\n\n clear(): void {\n this.metadataByRequestId.clear();\n this.requestIdByRecordId.clear();\n this.requestIdsByCapture.clear();\n this.requestIdsByTag.clear();\n this.tombstonedRequestIds.clear();\n }\n\n private materializeRecord(\n record: BrowserNetworkRecord,\n observedAt: number,\n options: {\n readonly redactSecretHeaders?: boolean;\n },\n ): NetworkQueryRecord | undefined {\n if (this.tombstonedRequestIds.has(record.requestId)) {\n return undefined;\n }\n\n let metadata = this.metadataByRequestId.get(record.requestId);\n if (!metadata) {\n metadata = {\n recordId: `record:${randomUUID()}`,\n observedAt,\n ...(record.pageRef === undefined ? {} : { pageRef: record.pageRef }),\n tags: new Set<string>(),\n };\n this.metadataByRequestId.set(record.requestId, metadata);\n this.requestIdByRecordId.set(metadata.recordId, record.requestId);\n } else if (metadata.pageRef === undefined && record.pageRef !== undefined) {\n metadata.pageRef = record.pageRef;\n }\n\n return {\n recordId: metadata.recordId,\n ...(metadata.capture === undefined ? {} : { capture: metadata.capture }),\n ...(metadata.tags.size === 0 ? {} : { tags: [...metadata.tags].sort() }),\n ...(metadata.savedAt === undefined ? {} : { savedAt: metadata.savedAt }),\n record: toProtocolNetworkRecord(record, {\n redactSecretHeaders: options.redactSecretHeaders ?? true,\n }),\n };\n }\n\n private addIndexedRequestId(\n index: Map<string, Set<string>>,\n key: string,\n requestId: string,\n ): void {\n const requestIds = index.get(key) ?? new Set<string>();\n requestIds.add(requestId);\n index.set(key, requestIds);\n }\n}\n","import { mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { spawn } from \"node:child_process\";\n\nimport {\n createBodyPayload,\n type BodyPayload,\n type HeaderEntry,\n type SessionTransportResponse,\n} from \"@opensteer/browser-core\";\nimport type { CookieRecord } from \"@opensteer/protocol\";\n\nconst MATCHED_TLS_BINARY_NAMES = [\"curl-impersonate-chrome\", \"curl_chrome\"] as const;\n\nexport async function executeMatchedTlsTransportRequest(input: {\n readonly request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BodyPayload;\n readonly followRedirects?: boolean;\n };\n readonly cookies?: readonly CookieRecord[];\n readonly signal: AbortSignal;\n}): Promise<SessionTransportResponse> {\n const binary = await resolveMatchedTlsBinary();\n const workingDirectory = await mkdtemp(path.join(tmpdir(), \"opensteer-matched-tls-\"));\n const headersPath = path.join(workingDirectory, \"headers.txt\");\n const bodyPath = path.join(workingDirectory, \"body.bin\");\n const cookiesPath = path.join(workingDirectory, \"cookies.txt\");\n const requestBodyPath = path.join(workingDirectory, \"request-body.bin\");\n\n try {\n await writeFile(cookiesPath, toNetscapeCookieJar(input.cookies ?? []), \"utf8\");\n if (input.request.body !== undefined) {\n await writeFile(requestBodyPath, input.request.body.bytes);\n }\n\n const args = [\n \"--silent\",\n \"--show-error\",\n \"--compressed\",\n \"--request\",\n input.request.method,\n \"--url\",\n input.request.url,\n \"--dump-header\",\n headersPath,\n \"--output\",\n bodyPath,\n \"--cookie\",\n cookiesPath,\n \"--cookie-jar\",\n cookiesPath,\n ...(input.request.followRedirects === false ? [] : [\"--location\"]),\n ...(input.request.body === undefined ? [] : [\"--data-binary\", `@${requestBodyPath}`]),\n ...flattenHeaders(input.request.headers ?? []),\n \"--write-out\",\n \"%{url_effective}\\n%{num_redirects}\\n\",\n ];\n\n const { stdout, stderr } = await spawnAndCollect(binary, args, input.signal);\n const metadata = stdout.trim().split(\"\\n\");\n const effectiveUrl = metadata[0] ?? input.request.url;\n const redirectCount = Number.parseInt(metadata[1] ?? \"0\", 10);\n const rawHeaders = await readFile(headersPath, \"utf8\");\n const parsedHeaders = parseCurlHeaderBlocks(rawHeaders);\n const responseBlock = parsedHeaders.at(-1);\n if (responseBlock === undefined) {\n throw new Error(\n `matched-tls transport did not emit response headers${stderr.length === 0 ? \"\" : `: ${stderr.trim()}`}`,\n );\n }\n\n const bodyBytes = await readFile(bodyPath).catch(() => Buffer.alloc(0));\n const contentType = responseBlock.headers.find(\n (header) => header.name.toLowerCase() === \"content-type\",\n )?.value;\n\n return {\n url: effectiveUrl,\n status: responseBlock.status,\n statusText: responseBlock.statusText,\n headers: responseBlock.headers,\n ...(bodyBytes.byteLength === 0\n ? {}\n : { body: createBodyPayload(new Uint8Array(bodyBytes), parseContentType(contentType)) }),\n redirected: Number.isFinite(redirectCount) && redirectCount > 0,\n };\n } finally {\n await rm(workingDirectory, { recursive: true, force: true }).catch(() => undefined);\n }\n}\n\nasync function resolveMatchedTlsBinary(): Promise<string> {\n const pathEntries = (process.env.PATH ?? \"\")\n .split(path.delimiter)\n .filter((entry) => entry.length > 0);\n for (const directory of pathEntries) {\n for (const name of MATCHED_TLS_BINARY_NAMES) {\n const candidate = path.join(directory, name);\n if (await isExecutable(candidate)) {\n return candidate;\n }\n }\n\n const files = await readDirSafe(directory);\n const discovered = files.find((file) => file.startsWith(\"curl_chrome\"));\n if (discovered !== undefined) {\n const candidate = path.join(directory, discovered);\n if (await isExecutable(candidate)) {\n return candidate;\n }\n }\n }\n\n throw new Error(\n 'matched-tls transport requires a curl-impersonate Chrome binary in PATH (for example \"curl-impersonate-chrome\" or a \"curl_chrome*\" wrapper). Install curl-impersonate and retry.',\n );\n}\n\nasync function spawnAndCollect(\n command: string,\n args: readonly string[],\n signal: AbortSignal,\n): Promise<{\n readonly stdout: string;\n readonly stderr: string;\n}> {\n return await new Promise((resolve, reject) => {\n const child = spawn(command, args, {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n const abort = () => {\n child.kill(\"SIGKILL\");\n reject(new Error(\"matched-tls request aborted\"));\n };\n\n signal.addEventListener(\"abort\", abort, { once: true });\n child.stdout.setEncoding(\"utf8\");\n child.stderr.setEncoding(\"utf8\");\n child.stdout.on(\"data\", (chunk) => {\n stdout += chunk;\n });\n child.stderr.on(\"data\", (chunk) => {\n stderr += chunk;\n });\n child.on(\"error\", (error) => {\n signal.removeEventListener(\"abort\", abort);\n reject(error);\n });\n child.on(\"close\", (code) => {\n signal.removeEventListener(\"abort\", abort);\n if (code !== 0) {\n reject(\n new Error(\n `matched-tls transport exited with code ${String(code)}${stderr.length === 0 ? \"\" : `: ${stderr.trim()}`}`,\n ),\n );\n return;\n }\n resolve({ stdout, stderr });\n });\n });\n}\n\nfunction flattenHeaders(headers: readonly HeaderEntry[]): string[] {\n return headers.flatMap((header) => [\"--header\", `${header.name}: ${header.value}`]);\n}\n\nfunction toNetscapeCookieJar(cookies: readonly CookieRecord[]): string {\n const lines = [\n \"# Netscape HTTP Cookie File\",\n \"# This file is generated by Opensteer matched-tls transport.\",\n ];\n for (const cookie of cookies) {\n lines.push(\n [\n cookie.domain,\n cookie.domain.startsWith(\".\") ? \"TRUE\" : \"FALSE\",\n cookie.path,\n cookie.secure ? \"TRUE\" : \"FALSE\",\n cookie.expiresAt === undefined || cookie.expiresAt === null\n ? \"0\"\n : String(Math.floor(cookie.expiresAt / 1000)),\n cookie.name,\n cookie.value,\n ].join(\"\\t\"),\n );\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction parseCurlHeaderBlocks(raw: string): readonly {\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n}[] {\n return raw\n .split(/\\r?\\n\\r?\\n/)\n .map((block) => block.trim())\n .filter((block) => block.startsWith(\"HTTP/\"))\n .map((block) => {\n const [statusLine, ...headerLines] = block.split(/\\r?\\n/);\n const statusMatch = statusLine?.match(/^HTTP\\/\\d+(?:\\.\\d+)?\\s+(\\d{3})(?:\\s+(.*))?$/);\n if (!statusMatch) {\n throw new Error(`invalid matched-tls status line: ${statusLine ?? \"<missing>\"}`);\n }\n return {\n status: Number.parseInt(statusMatch[1]!, 10),\n statusText: statusMatch[2] ?? \"\",\n headers: headerLines\n .map((line) => {\n const separator = line.indexOf(\":\");\n if (separator <= 0) {\n return undefined;\n }\n return {\n name: line.slice(0, separator).trim(),\n value: line.slice(separator + 1).trim(),\n } satisfies HeaderEntry;\n })\n .filter((header): header is HeaderEntry => header !== undefined),\n };\n });\n}\n\nfunction parseContentType(contentType: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (contentType === undefined) {\n return {};\n }\n const [mimeTypePart, ...parts] = contentType.split(\";\");\n const mimeType = mimeTypePart?.trim();\n const charsetPart = parts.find((part) => part.trim().toLowerCase().startsWith(\"charset=\"));\n const charset = charsetPart?.split(\"=\")[1]?.trim();\n return {\n ...(mimeType === undefined || mimeType.length === 0 ? {} : { mimeType }),\n ...(charset === undefined || charset.length === 0 ? {} : { charset }),\n };\n}\n\nasync function isExecutable(candidate: string): Promise<boolean> {\n try {\n const { access, constants } = await import(\"node:fs/promises\");\n await access(candidate, constants.X_OK);\n return true;\n } catch {\n return false;\n }\n}\n\nasync function readDirSafe(directory: string): Promise<readonly string[]> {\n try {\n const { readdir } = await import(\"node:fs/promises\");\n return await readdir(directory);\n } catch {\n return [];\n }\n}\n","export const OPENSTEER_INTERACTIVE_ATTR = \"data-opensteer-interactive\";\nexport const OPENSTEER_HIDDEN_ATTR = \"data-opensteer-hidden\";\nexport const OPENSTEER_SELF_HIDDEN_ATTR = \"data-opensteer-hidden-self\";\nexport const OPENSTEER_SCROLLABLE_ATTR = \"data-opensteer-scrollable\";\n\nexport const OPENSTEER_NODE_ID_ATTR = \"data-os-node-id\";\nexport const OPENSTEER_SPARSE_COUNTER_ATTR = \"data-os-c\";\nexport const OPENSTEER_BOUNDARY_ATTR = \"data-os-boundary\";\nexport const OPENSTEER_UNAVAILABLE_ATTR = \"data-os-unavailable\";\nexport const OPENSTEER_IFRAME_BOUNDARY_TAG = \"os-iframe-root\";\nexport const OPENSTEER_SHADOW_BOUNDARY_TAG = \"os-shadow-root\";\n\nexport const NATIVE_INTERACTIVE_TAGS: ReadonlySet<string> = new Set([\n \"a\",\n \"button\",\n \"input\",\n \"select\",\n \"textarea\",\n]);\n\nexport const INTERACTIVE_ROLE_TOKENS: readonly string[] = [\n \"button\",\n \"link\",\n \"menuitem\",\n \"option\",\n \"radio\",\n \"checkbox\",\n \"tab\",\n \"textbox\",\n \"combobox\",\n \"slider\",\n \"spinbutton\",\n \"search\",\n \"searchbox\",\n];\n\nexport const INTERACTIVE_ROLE_SET: ReadonlySet<string> = new Set(INTERACTIVE_ROLE_TOKENS);\n\nexport const INTERACTIVE_SELECTOR_PARTS: readonly string[] = [\n \"a[href]\",\n \"button\",\n \"input\",\n \"textarea\",\n \"select\",\n '[role=\"button\"]',\n '[role=\"link\"]',\n '[role=\"menuitem\"]',\n '[role=\"option\"]',\n '[role=\"radio\"]',\n '[role=\"checkbox\"]',\n '[role=\"tab\"]',\n '[contenteditable=\"true\"]',\n \"[onclick]\",\n \"[onmousedown]\",\n \"[onmouseup]\",\n] as const;\n\nexport const INTERACTIVE_SELECTOR = INTERACTIVE_SELECTOR_PARTS.join(\",\");\n\nexport const NON_NEGATIVE_TAB_INDEX_MIN = 0;\n\nexport const ROOT_TAGS = new Set([\"html\", \"body\"]);\n\nexport const BOUNDARY_TAGS = new Set([\n OPENSTEER_IFRAME_BOUNDARY_TAG,\n OPENSTEER_SHADOW_BOUNDARY_TAG,\n]);\n\nexport function isBoundaryTag(tag: string): boolean {\n return BOUNDARY_TAGS.has(tag);\n}\n\nexport function hasNonNegativeTabIndex(value: string | null | undefined): boolean {\n if (value == null) {\n return false;\n }\n\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) && parsed >= NON_NEGATIVE_TAB_INDEX_MIN;\n}\n\nexport function isVoidHtmlTag(tag: string): boolean {\n return VOID_TAGS.has(tag);\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n","import * as cheerio from \"cheerio\";\nimport type { AnyNode, Element } from \"domhandler\";\nimport type { Cheerio, CheerioAPI } from \"cheerio\";\n\nimport {\n INTERACTIVE_ROLE_SET,\n NATIVE_INTERACTIVE_TAGS,\n OPENSTEER_BOUNDARY_ATTR,\n OPENSTEER_HIDDEN_ATTR,\n OPENSTEER_IFRAME_BOUNDARY_TAG,\n OPENSTEER_INTERACTIVE_ATTR,\n OPENSTEER_NODE_ID_ATTR,\n OPENSTEER_SCROLLABLE_ATTR,\n OPENSTEER_SELF_HIDDEN_ATTR,\n OPENSTEER_SHADOW_BOUNDARY_TAG,\n OPENSTEER_SPARSE_COUNTER_ATTR,\n ROOT_TAGS,\n hasNonNegativeTabIndex,\n isBoundaryTag,\n} from \"./constants.js\";\n\nconst STRIP_TAGS = new Set([\"script\", \"style\", \"noscript\", \"meta\", \"link\", \"template\"]);\n\nconst TEXT_ATTR_MAX = 150;\nconst SRCSET_ATTR_MAX = 160;\nconst MIDDLE_TRUNCATED_URL_ATTRS = new Set([\"href\", \"src\"]);\nconst TEXT_ATTRS = new Set([\"alt\", \"title\", \"aria-label\", \"placeholder\", \"value\"]);\nconst TRUNCATION_SUFFIX = \"...\";\nconst MIDDLE_TRUNCATION_MARKER = \"...\";\nconst MIDDLE_TRUNCATION_HEAD_MAX = 40;\nconst MIDDLE_TRUNCATION_TAIL_MAX = 20;\nconst SRCSET_CANDIDATE_HEAD_MAX = 36;\nconst SRCSET_CANDIDATE_TAIL_MAX = 12;\nconst SRCSET_COMPACT_CANDIDATE_HEAD_MAX = 20;\nconst SRCSET_COMPACT_CANDIDATE_TAIL_MAX = 8;\nconst SRCSET_FALLBACK_HEAD_MAX = 56;\nconst SRCSET_FALLBACK_TAIL_MAX = 20;\n\nconst NOISE_SELECTORS = [\n `[${OPENSTEER_HIDDEN_ATTR}]`,\n \"[hidden]\",\n \"[style*='display: none']\",\n \"[style*='display:none']\",\n];\n\ninterface ClickableContext {\n readonly hasPreMarked: boolean;\n}\n\ninterface SrcsetCandidateSummary {\n readonly url: string;\n readonly descriptorText: string;\n readonly width: number | null;\n readonly density: number | null;\n}\n\nfunction compactHtml(html: string): string {\n return html\n .replace(/<!--.*?-->/gs, \"\")\n .replace(/>\\s+</g, \"><\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .join(\"\\n\")\n .replace(/\\n\\s*\\n/g, \"\\n\")\n .trim();\n}\n\nfunction getSerializedLength(value: string): number {\n let serializedLength = 0;\n\n for (const char of value) {\n if (char === \"&\") {\n serializedLength += 5;\n continue;\n }\n if (char === \"<\" || char === \">\") {\n serializedLength += 4;\n continue;\n }\n if (char === '\"') {\n serializedLength += 6;\n continue;\n }\n\n serializedLength += 1;\n }\n\n return serializedLength;\n}\n\nfunction takeValueWithinSerializedLength(value: string, max: number): string {\n let serializedLength = 0;\n let result = \"\";\n\n for (const char of value) {\n let nextLength = 1;\n if (char === \"&\") {\n nextLength = 5;\n } else if (char === \"<\" || char === \">\") {\n nextLength = 4;\n } else if (char === '\"') {\n nextLength = 6;\n }\n\n if (serializedLength + nextLength > max) {\n break;\n }\n\n result += char;\n serializedLength += nextLength;\n }\n\n return result;\n}\n\nfunction truncateValue(value: string, max: number): string {\n if (getSerializedLength(value) <= max) {\n return value;\n }\n\n const suffixLength = getSerializedLength(TRUNCATION_SUFFIX);\n if (suffixLength >= max) {\n return takeValueWithinSerializedLength(TRUNCATION_SUFFIX, max);\n }\n\n const head = takeValueWithinSerializedLength(value, max - suffixLength).replace(/\\s+$/u, \"\");\n if (head.length === 0) {\n return TRUNCATION_SUFFIX.trimStart();\n }\n\n return `${head}${TRUNCATION_SUFFIX}`;\n}\n\nfunction takeValueWithinSerializedLengthFromEnd(value: string, max: number): string {\n let serializedLength = 0;\n const chars: string[] = [];\n\n for (let index = value.length - 1; index >= 0; index -= 1) {\n const char = value[index]!;\n\n let nextLength = 1;\n if (char === \"&\") {\n nextLength = 5;\n } else if (char === \"<\" || char === \">\") {\n nextLength = 4;\n } else if (char === '\"') {\n nextLength = 6;\n }\n\n if (serializedLength + nextLength > max) {\n break;\n }\n\n chars.push(char);\n serializedLength += nextLength;\n }\n\n return chars.reverse().join(\"\");\n}\n\nfunction truncateValueInMiddle(\n value: string,\n headMax: number,\n tailMax: number,\n marker: string = MIDDLE_TRUNCATION_MARKER,\n): string {\n const markerLength = getSerializedLength(marker);\n const max = headMax + markerLength + tailMax;\n if (getSerializedLength(value) <= max) {\n return value;\n }\n\n const head = takeValueWithinSerializedLength(value, headMax).replace(/\\s+$/u, \"\");\n const tail = takeValueWithinSerializedLengthFromEnd(value, tailMax).replace(/^\\s+/u, \"\");\n\n if (head.length === 0) {\n return tail.length === 0 ? marker : `${marker}${tail}`;\n }\n if (tail.length === 0) {\n return `${head}${marker}`;\n }\n\n return `${head}${marker}${tail}`;\n}\n\nfunction getAttrLimit(attr: string): number | undefined {\n if (attr === \"srcset\") {\n return SRCSET_ATTR_MAX;\n }\n if (TEXT_ATTRS.has(attr)) {\n return TEXT_ATTR_MAX;\n }\n return undefined;\n}\n\nfunction shouldBoundAttr(attr: string): boolean {\n return MIDDLE_TRUNCATED_URL_ATTRS.has(attr) || getAttrLimit(attr) !== undefined;\n}\n\nfunction setBoundedAttr(el: Cheerio<Element>, attr: string, value: string): void {\n if (MIDDLE_TRUNCATED_URL_ATTRS.has(attr)) {\n el.attr(\n attr,\n truncateValueInMiddle(value, MIDDLE_TRUNCATION_HEAD_MAX, MIDDLE_TRUNCATION_TAIL_MAX),\n );\n return;\n }\n\n const limit = getAttrLimit(attr);\n if (attr === \"srcset\" && limit !== undefined) {\n el.attr(attr, truncateSrcsetValue(value, limit));\n return;\n }\n\n el.attr(attr, limit === undefined ? value : truncateValue(value, limit));\n}\n\nfunction truncateSrcsetValue(value: string, max: number): string {\n if (getSerializedLength(value) <= max) {\n return value;\n }\n\n const candidates = parseSrcsetCandidates(value);\n if (candidates.length === 0) {\n return truncateValueInMiddle(value, SRCSET_FALLBACK_HEAD_MAX, SRCSET_FALLBACK_TAIL_MAX);\n }\n\n for (const [headMax, tailMax, includeBest] of [\n [SRCSET_CANDIDATE_HEAD_MAX, SRCSET_CANDIDATE_TAIL_MAX, true],\n [SRCSET_COMPACT_CANDIDATE_HEAD_MAX, SRCSET_COMPACT_CANDIDATE_TAIL_MAX, true],\n [SRCSET_COMPACT_CANDIDATE_HEAD_MAX, SRCSET_COMPACT_CANDIDATE_TAIL_MAX, false],\n ] as const) {\n const compact = buildTruncatedSrcsetValue(candidates, headMax, tailMax, includeBest);\n if (getSerializedLength(compact) <= max) {\n return compact;\n }\n }\n\n return truncateValueInMiddle(value, SRCSET_FALLBACK_HEAD_MAX, SRCSET_FALLBACK_TAIL_MAX);\n}\n\nfunction buildTruncatedSrcsetValue(\n candidates: readonly SrcsetCandidateSummary[],\n headMax: number,\n tailMax: number,\n includeBest: boolean,\n): string {\n const kept = getPreferredSrcsetCandidateIndices(candidates, includeBest);\n const parts: string[] = [];\n let previousIndex: number | undefined;\n\n for (const candidateIndex of kept) {\n if (previousIndex !== undefined && candidateIndex - previousIndex > 1) {\n parts.push(MIDDLE_TRUNCATION_MARKER);\n }\n\n parts.push(formatSrcsetCandidate(candidates[candidateIndex]!, headMax, tailMax));\n previousIndex = candidateIndex;\n }\n\n return parts.join(\", \");\n}\n\nfunction getPreferredSrcsetCandidateIndices(\n candidates: readonly SrcsetCandidateSummary[],\n includeBest: boolean,\n): number[] {\n if (candidates.length === 0) {\n return [];\n }\n\n const kept = new Set<number>([0, candidates.length - 1]);\n if (includeBest) {\n kept.add(pickBestSrcsetCandidateIndex(candidates));\n }\n\n return [...kept].filter((index) => index >= 0 && index < candidates.length).sort((a, b) => a - b);\n}\n\nfunction pickBestSrcsetCandidateIndex(candidates: readonly SrcsetCandidateSummary[]): number {\n let bestWidthIndex = -1;\n let bestWidth = -1;\n let bestDensityIndex = -1;\n let bestDensity = -1;\n\n for (let index = 0; index < candidates.length; index += 1) {\n const candidate = candidates[index]!;\n\n if (\n typeof candidate.width === \"number\" &&\n Number.isFinite(candidate.width) &&\n candidate.width > bestWidth\n ) {\n bestWidth = candidate.width;\n bestWidthIndex = index;\n }\n\n if (\n typeof candidate.density === \"number\" &&\n Number.isFinite(candidate.density) &&\n candidate.density > bestDensity\n ) {\n bestDensity = candidate.density;\n bestDensityIndex = index;\n }\n }\n\n if (bestWidthIndex >= 0) {\n return bestWidthIndex;\n }\n if (bestDensityIndex >= 0) {\n return bestDensityIndex;\n }\n\n return candidates.length - 1;\n}\n\nfunction formatSrcsetCandidate(\n candidate: SrcsetCandidateSummary,\n headMax: number,\n tailMax: number,\n): string {\n const url = truncateValueInMiddle(candidate.url, headMax, tailMax);\n return candidate.descriptorText ? `${url} ${candidate.descriptorText}` : url;\n}\n\nfunction parseSrcsetCandidates(raw: string): SrcsetCandidateSummary[] {\n const text = raw.trim();\n if (!text) {\n return [];\n }\n\n const out: SrcsetCandidateSummary[] = [];\n let index = 0;\n\n while (index < text.length) {\n index = skipSrcsetSeparators(text, index);\n if (index >= text.length) {\n break;\n }\n\n const urlToken = readSrcsetUrlToken(text, index);\n index = urlToken.nextIndex;\n const url = urlToken.value.trim();\n if (!url) {\n continue;\n }\n\n index = skipSrcsetWhitespace(text, index);\n const descriptors: string[] = [];\n while (index < text.length && text[index] !== \",\") {\n const descriptorToken = readSrcsetDescriptorToken(text, index);\n if (!descriptorToken.value) {\n index = descriptorToken.nextIndex;\n continue;\n }\n descriptors.push(descriptorToken.value);\n index = descriptorToken.nextIndex;\n index = skipSrcsetWhitespace(text, index);\n }\n if (index < text.length && text[index] === \",\") {\n index += 1;\n }\n\n let width: number | null = null;\n let density: number | null = null;\n for (const descriptor of descriptors) {\n const token = descriptor.trim().toLowerCase();\n if (!token) {\n continue;\n }\n\n const widthMatch = token.match(/^(\\d+)w$/);\n if (widthMatch) {\n const parsed = Number.parseInt(widthMatch[1]!, 10);\n if (Number.isFinite(parsed)) {\n width = parsed;\n }\n continue;\n }\n\n const densityMatch = token.match(/^(\\d*\\.?\\d+)x$/);\n if (densityMatch) {\n const parsed = Number.parseFloat(densityMatch[1]!);\n if (Number.isFinite(parsed)) {\n density = parsed;\n }\n }\n }\n\n out.push({\n url,\n descriptorText: descriptors.join(\" \"),\n width,\n density,\n });\n }\n\n return out;\n}\n\nfunction skipSrcsetWhitespace(value: string, index: number): number {\n let cursor = index;\n while (cursor < value.length && /\\s/u.test(value[cursor]!)) {\n cursor += 1;\n }\n return cursor;\n}\n\nfunction skipSrcsetSeparators(value: string, index: number): number {\n let cursor = skipSrcsetWhitespace(value, index);\n while (cursor < value.length && value[cursor] === \",\") {\n cursor += 1;\n cursor = skipSrcsetWhitespace(value, cursor);\n }\n return cursor;\n}\n\nfunction readSrcsetUrlToken(value: string, index: number): { value: string; nextIndex: number } {\n let cursor = index;\n let out = \"\";\n const isDataUrl = value\n .slice(index, index + 5)\n .toLowerCase()\n .startsWith(\"data:\");\n\n while (cursor < value.length) {\n const char = value[cursor]!;\n if (/\\s/u.test(char)) {\n break;\n }\n if (char === \",\" && !isDataUrl) {\n break;\n }\n out += char;\n cursor += 1;\n }\n\n if (isDataUrl && out.endsWith(\",\") && cursor < value.length) {\n out = out.slice(0, -1);\n }\n\n return {\n value: out,\n nextIndex: cursor,\n };\n}\n\nfunction readSrcsetDescriptorToken(\n value: string,\n index: number,\n): { value: string; nextIndex: number } {\n let cursor = skipSrcsetWhitespace(value, index);\n let out = \"\";\n\n while (cursor < value.length) {\n const char = value[cursor]!;\n if (char === \",\" || /\\s/u.test(char)) {\n break;\n }\n out += char;\n cursor += 1;\n }\n\n return {\n value: out.trim(),\n nextIndex: cursor,\n };\n}\n\nfunction removeNoise($: CheerioAPI): void {\n for (const tag of STRIP_TAGS) {\n $(tag).remove();\n }\n\n $(NOISE_SELECTORS.join(\", \")).remove();\n}\n\nfunction removeComments($: CheerioAPI): void {\n $(\"*\")\n .contents()\n .each(function removeComment(this: AnyNode) {\n if (this.type === \"comment\") {\n $(this).remove();\n }\n });\n}\n\nfunction markInlineSelfHiddenFallback($: CheerioAPI): void {\n $(\n \"[style*='visibility: hidden'], [style*='visibility:hidden'], [style*='visibility: collapse'], [style*='visibility:collapse']\",\n ).each(function markInlineVisibilityHidden() {\n const el = $(this as Element);\n if (el.attr(OPENSTEER_HIDDEN_ATTR) === undefined) {\n el.attr(OPENSTEER_SELF_HIDDEN_ATTR, \"1\");\n }\n });\n}\n\nfunction pruneSelfHiddenNodes($: CheerioAPI): void {\n for (const node of getElementsInReverseDocumentOrder($)) {\n if (node.attribs?.[OPENSTEER_SELF_HIDDEN_ATTR] === undefined) {\n continue;\n }\n\n const el = $(node);\n el.contents().each(function removeSelfHiddenText(this: AnyNode) {\n if (this.type === \"text\") {\n $(this).remove();\n }\n });\n\n if (!hasElementChildren(node)) {\n el.remove();\n }\n }\n}\n\nfunction getChildNodes(node: AnyNode | undefined): readonly AnyNode[] {\n return (node as { readonly children?: readonly AnyNode[] } | undefined)?.children ?? [];\n}\n\nfunction isElementLikeNode(node: AnyNode | undefined): node is Element {\n return node?.type === \"tag\" || node?.type === \"script\" || node?.type === \"style\";\n}\n\nfunction hasDirectText(node: Element | undefined): boolean {\n if (!node) {\n return false;\n }\n\n for (const child of getChildNodes(node)) {\n if (child.type === \"text\" && ((child as { readonly data?: string }).data || \"\").trim() !== \"\") {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasElementChildren(node: Element | undefined): boolean {\n if (!node) {\n return false;\n }\n\n for (const child of getChildNodes(node)) {\n if (isElementLikeNode(child)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasTextDeepNode(node: AnyNode | undefined): boolean {\n if (!node) {\n return false;\n }\n\n if (node.type === \"text\") {\n return ((node as { readonly data?: string }).data || \"\").trim() !== \"\";\n }\n\n for (const child of getChildNodes(node)) {\n if (hasTextDeepNode(child)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction hasActionLabel(attrs: Record<string, string | undefined>): boolean {\n return (\n (typeof attrs[\"aria-label\"] === \"string\" && attrs[\"aria-label\"].trim() !== \"\") ||\n (typeof attrs[\"aria-labelledby\"] === \"string\" && attrs[\"aria-labelledby\"].trim() !== \"\") ||\n (typeof attrs[\"aria-describedby\"] === \"string\" && attrs[\"aria-describedby\"].trim() !== \"\") ||\n (typeof attrs.title === \"string\" && attrs.title.trim() !== \"\") ||\n (typeof attrs.placeholder === \"string\" && attrs.placeholder.trim() !== \"\") ||\n (typeof attrs.value === \"string\" && attrs.value.trim() !== \"\")\n );\n}\n\nfunction unwrapActionNode($: CheerioAPI, el: Cheerio<Element>): void {\n if (hasTextDeepNode(el[0])) {\n if (el.prev().length > 0) {\n el.before(\" \");\n }\n if (el.next().length > 0) {\n el.after(\" \");\n }\n }\n\n el.replaceWith(el.contents());\n}\n\nfunction stripToAttrs(el: Cheerio<Element>, keep: Set<string>): void {\n const attrs = el.attr() || {};\n for (const attr of Object.keys(attrs)) {\n if (!keep.has(attr)) {\n el.removeAttr(attr);\n continue;\n }\n\n const value = el.attr(attr);\n if (typeof value !== \"string\") {\n continue;\n }\n\n if (shouldBoundAttr(attr)) {\n setBoundedAttr(el, attr, value);\n }\n }\n}\n\nfunction restoreBoundedAttr(el: Cheerio<Element>, attr: string, value: string | undefined): void {\n if (typeof value !== \"string\") {\n return;\n }\n\n const trimmed = value.trim();\n if (trimmed === \"\") {\n return;\n }\n\n setBoundedAttr(el, attr, value);\n}\n\nfunction deduplicateImagesInDom($: CheerioAPI): void {\n const seen = new Set<string>();\n\n $(\"img\").each(function deduplicateDomImage() {\n const el = $(this as Element);\n if (el.attr(\"c\") !== undefined) {\n return;\n }\n\n const srcValue = el.attr(\"src\")?.trim();\n const srcsetValue = el.attr(\"srcset\");\n const src =\n srcValue && srcValue.length > 0\n ? srcValue\n : srcsetValue?.split(\",\")[0]?.trim().split(/\\s+/u)[0];\n if (!src) {\n return;\n }\n\n if (seen.has(src)) {\n el.remove();\n return;\n }\n\n seen.add(src);\n });\n}\n\nfunction hasAttribute(node: Element | undefined, attr: string): boolean {\n return node?.attribs?.[attr] !== undefined;\n}\n\nfunction hasPictureAncestor(node: Element | undefined): boolean {\n let current = node?.parent;\n while (current) {\n if (isElementLikeNode(current) && (current.tagName || \"\").toLowerCase() === \"picture\") {\n return true;\n }\n current = current.parent;\n }\n return false;\n}\n\nfunction pictureHasPreservedDescendant(node: Element | undefined): boolean {\n if (!node) {\n return false;\n }\n\n for (const child of getChildNodes(node)) {\n if (!isElementLikeNode(child)) {\n continue;\n }\n\n const tag = (child.tagName || \"\").toLowerCase();\n if (tag === \"img\") {\n return true;\n }\n if (\n tag === \"source\" &&\n typeof child.attribs?.src === \"string\" &&\n child.attribs.src.trim() !== \"\"\n ) {\n return true;\n }\n if (\n tag === \"source\" &&\n typeof child.attribs?.srcset === \"string\" &&\n child.attribs.srcset.trim() !== \"\"\n ) {\n return true;\n }\n if (pictureHasPreservedDescendant(child)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isPreservedImageElement(node: Element | undefined): boolean {\n const tag = (node?.tagName || \"\").toLowerCase();\n if (tag === \"img\") {\n return true;\n }\n\n if (tag === \"picture\") {\n return pictureHasPreservedDescendant(node);\n }\n\n if (tag === \"source\") {\n const inPicture = hasPictureAncestor(node);\n const hasSrc =\n (typeof node?.attribs?.src === \"string\" && node.attribs.src.trim() !== \"\") ||\n (typeof node?.attribs?.srcset === \"string\" && node.attribs.srcset.trim() !== \"\");\n return inPicture && hasSrc;\n }\n\n return false;\n}\n\nfunction getElementsInReverseDocumentOrder($: CheerioAPI): Element[] {\n return $.root()\n .find(\"*\")\n .toArray()\n .reverse()\n .filter((node): node is Element => node.type === \"tag\");\n}\n\nfunction flattenExtractionTree($: CheerioAPI): void {\n for (const node of getElementsInReverseDocumentOrder($)) {\n const el = $(node);\n const tag = (node.tagName || \"\").toLowerCase();\n if (ROOT_TAGS.has(tag) || isBoundaryTag(tag) || isPreservedImageElement(node)) {\n continue;\n }\n\n if (tag === \"a\" || hasDirectText(node)) {\n continue;\n }\n\n if (!hasElementChildren(node)) {\n el.remove();\n continue;\n }\n\n el.replaceWith(el.contents());\n }\n}\n\nfunction isIndicatorImage(node: Element | undefined): boolean {\n return (\n (node?.tagName || \"\").toLowerCase() === \"img\" &&\n (hasAttribute(node, \"alt\") || hasAttribute(node, \"src\") || hasAttribute(node, \"srcset\"))\n );\n}\n\nfunction isIndicatorPictureSource(node: Element | undefined): boolean {\n return (\n (node?.tagName || \"\").toLowerCase() === \"source\" &&\n hasPictureAncestor(node) &&\n (hasAttribute(node, \"src\") || hasAttribute(node, \"srcset\"))\n );\n}\n\nfunction isSemanticIndicator(node: Element | undefined): boolean {\n const tag = (node?.tagName || \"\").toLowerCase();\n if (tag === \"svg\") {\n return true;\n }\n\n return (\n hasAttribute(node, \"aria-label\") ||\n hasAttribute(node, \"title\") ||\n hasAttribute(node, \"data-icon\") ||\n node?.attribs?.role === \"img\"\n );\n}\n\nfunction findIndicatorDescendant(root: Element | undefined): Element | undefined {\n if (!root) {\n return undefined;\n }\n\n let firstImage: Element | undefined;\n let firstSource: Element | undefined;\n let firstSemantic: Element | undefined;\n\n const visit = (node: AnyNode): boolean => {\n if (!isElementLikeNode(node)) {\n return false;\n }\n\n if (isIndicatorImage(node)) {\n firstImage = node;\n return true;\n }\n if (firstSource === undefined && isIndicatorPictureSource(node)) {\n firstSource = node;\n }\n if (firstSemantic === undefined && isSemanticIndicator(node)) {\n firstSemantic = node;\n }\n\n for (const child of getChildNodes(node)) {\n if (visit(child)) {\n return true;\n }\n }\n\n return false;\n };\n\n for (const child of getChildNodes(root)) {\n if (visit(child)) {\n return firstImage;\n }\n }\n\n return firstImage ?? firstSource ?? firstSemantic;\n}\n\nfunction serializeForExtraction($: CheerioAPI, root: AnyNode): string {\n const lines: string[] = [];\n\n function escapeHtml(value: string): string {\n if (!value) {\n return \"\";\n }\n\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n }\n\n function traverse(node: AnyNode, depth: number): void {\n if (node.type === \"text\") {\n const text = ((node as { readonly data?: string }).data || \"\").replace(/\\s+/g, \" \").trim();\n if (text) {\n lines.push(`${\" \".repeat(depth)}${escapeHtml(text)}`);\n }\n return;\n }\n\n if (node.type === \"comment\") {\n return;\n }\n\n if (node.type === \"root\") {\n for (const child of (node as { readonly children?: readonly AnyNode[] }).children ?? []) {\n traverse(child, depth);\n }\n return;\n }\n\n if (node.type !== \"tag\" && node.type !== \"script\" && node.type !== \"style\") {\n return;\n }\n\n const element = node as Element;\n const tagName = element.tagName || element.name;\n if (!tagName) {\n return;\n }\n\n if (tagName === \"html\" || tagName === \"head\" || tagName === \"body\") {\n for (const child of element.children ?? []) {\n traverse(child as AnyNode, depth);\n }\n return;\n }\n\n const attrs = element.attribs || {};\n const attrKeys = Object.keys(attrs);\n const attrText =\n attrKeys.length === 0\n ? \"\"\n : ` ${attrKeys.map((key) => `${key}=\"${escapeHtml(attrs[key] || \"\")}\"`).join(\" \")}`;\n\n if (VOID_TAGS.has(tagName)) {\n lines.push(`${\" \".repeat(depth)}<${tagName}${attrText} />`);\n return;\n }\n\n const childNodes = (element.children || []).filter(\n (child: AnyNode) =>\n child.type !== \"comment\" &&\n (child.type !== \"text\" || ((child as { readonly data?: string }).data || \"\").trim() !== \"\"),\n );\n\n if (childNodes.length === 0) {\n lines.push(`${\" \".repeat(depth)}<${tagName}${attrText}></${tagName}>`);\n return;\n }\n\n if (childNodes.length === 1 && childNodes[0]?.type === \"text\") {\n const text = ((childNodes[0] as { readonly data?: string }).data || \"\")\n .replace(/\\s+/g, \" \")\n .trim();\n if (text.length < 80 && !text.includes(\"\\n\")) {\n lines.push(`${\" \".repeat(depth)}<${tagName}${attrText}>${escapeHtml(text)}</${tagName}>`);\n return;\n }\n }\n\n lines.push(`${\" \".repeat(depth)}<${tagName}${attrText}>`);\n for (const child of childNodes) {\n traverse(child as AnyNode, depth + 1);\n }\n lines.push(`${\" \".repeat(depth)}</${tagName}>`);\n }\n\n traverse(root, 0);\n return lines\n .map((l) => l.trim())\n .filter((l) => l.length > 0)\n .join(\"\");\n}\n\nfunction isClickable(el: Cheerio<Element>, context: ClickableContext): boolean {\n if (context.hasPreMarked) {\n return el.attr(OPENSTEER_INTERACTIVE_ATTR) !== undefined;\n }\n\n const tag = ((el[0] as Element | undefined)?.tagName || \"\").toLowerCase();\n if (!tag || ROOT_TAGS.has(tag)) {\n return false;\n }\n\n if (NATIVE_INTERACTIVE_TAGS.has(tag)) {\n if (tag === \"input\" && String(el.attr(\"type\") || \"\").toLowerCase() === \"hidden\") {\n return false;\n }\n\n return true;\n }\n\n const attrs = el.attr() || {};\n if (\n attrs.onclick !== undefined ||\n attrs.onmousedown !== undefined ||\n attrs.onmouseup !== undefined ||\n attrs[\"data-action\"] !== undefined ||\n attrs[\"data-click\"] !== undefined ||\n attrs[\"data-toggle\"] !== undefined\n ) {\n return true;\n }\n\n if (hasNonNegativeTabIndex(attrs.tabindex)) {\n return true;\n }\n\n const role = String(attrs.role || \"\").toLowerCase();\n if (INTERACTIVE_ROLE_SET.has(role)) {\n return true;\n }\n\n const className = String(attrs.class || \"\").toLowerCase();\n const id = String(attrs.id || \"\").toLowerCase();\n for (const token of [\"search\", \"magnify\", \"glass\", \"lookup\", \"find\", \"query\"]) {\n if (className.includes(token) || id.includes(token)) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function prepareExtractionSnapshotDom(html: string): CheerioAPI | undefined {\n if (!html.trim()) {\n return undefined;\n }\n\n const $ = cheerio.load(html, { xmlMode: false });\n removeNoise($);\n removeComments($);\n markInlineSelfHiddenFallback($);\n pruneSelfHiddenNodes($);\n\n $(\"*\").each(function stripAndRestoreExtractionAttrs() {\n const el = $(this as Element);\n const node = el[0];\n if (!node) {\n return;\n }\n\n const tag = (node.tagName || \"\").toLowerCase();\n const cValue = el.attr(\"c\");\n const osBoundary = el.attr(OPENSTEER_BOUNDARY_ATTR);\n const osNodeId = el.attr(OPENSTEER_NODE_ID_ATTR);\n const osSparseCounter = el.attr(OPENSTEER_SPARSE_COUNTER_ATTR);\n const srcValue = el.attr(\"src\");\n const srcsetValue = el.attr(\"srcset\");\n const altValue = el.attr(\"alt\");\n const hrefValue = el.attr(\"href\");\n\n const isPictureSource =\n tag === \"source\" &&\n (srcValue != null || srcsetValue != null) &&\n el.parents(\"picture\").length > 0;\n\n for (const attr of Object.keys(el.attr() || {})) {\n el.removeAttr(attr);\n }\n\n if (cValue !== undefined) {\n el.attr(\"c\", cValue);\n }\n if (osBoundary !== undefined) {\n el.attr(OPENSTEER_BOUNDARY_ATTR, osBoundary);\n }\n if (osNodeId !== undefined) {\n el.attr(OPENSTEER_NODE_ID_ATTR, osNodeId);\n }\n if (osSparseCounter !== undefined) {\n el.attr(OPENSTEER_SPARSE_COUNTER_ATTR, osSparseCounter);\n }\n\n if (tag === \"img\") {\n restoreBoundedAttr(el, \"src\", srcValue);\n restoreBoundedAttr(el, \"srcset\", srcsetValue);\n restoreBoundedAttr(el, \"alt\", altValue);\n } else if (isPictureSource) {\n restoreBoundedAttr(el, \"src\", srcValue);\n restoreBoundedAttr(el, \"srcset\", srcsetValue);\n } else if (tag === \"a\") {\n restoreBoundedAttr(el, \"href\", hrefValue);\n }\n });\n\n flattenExtractionTree($);\n deduplicateImagesInDom($);\n return $;\n}\n\nexport function serializePreparedExtractionSnapshot($: CheerioAPI): string {\n const root = $.root()[0];\n if (root === undefined) {\n return \"\";\n }\n\n return serializeForExtraction($, root);\n}\n\nexport function cleanForExtraction(html: string): string {\n const prepared = prepareExtractionSnapshotDom(html);\n if (!prepared) {\n return \"\";\n }\n\n return serializePreparedExtractionSnapshot(prepared);\n}\n\nexport function prepareActionSnapshotDom(html: string): CheerioAPI | undefined {\n if (!html.trim()) {\n return undefined;\n }\n\n const $ = cheerio.load(html, { xmlMode: false });\n removeNoise($);\n removeComments($);\n markInlineSelfHiddenFallback($);\n pruneSelfHiddenNodes($);\n\n const clickableMark = \"data-clickable-marker\";\n const indicatorMark = \"data-keep-indicator\";\n const context: ClickableContext = {\n hasPreMarked: $(`[${OPENSTEER_INTERACTIVE_ATTR}]`).length > 0,\n };\n\n $(\"*\").each(function markClickables() {\n const el = $(this as Element);\n if (isClickable(el, context)) {\n el.attr(clickableMark, \"1\");\n }\n });\n\n $(`[${clickableMark}]`).each(function markIndicators() {\n const el = $(this as Element);\n const wrapperAttrs = el.attr() || {};\n if (hasTextDeepNode(el[0]) || hasActionLabel(wrapperAttrs)) {\n return;\n }\n\n const indicatorNode = findIndicatorDescendant(el[0]);\n if (indicatorNode !== undefined) {\n $(indicatorNode).attr(indicatorMark, \"1\");\n }\n });\n\n $(`[${clickableMark}]`).each(function removeEmptyClickable() {\n const el = $(this as Element);\n const node = el[0];\n const tag = (node?.tagName || \"\").toLowerCase();\n if (NATIVE_INTERACTIVE_TAGS.has(tag) || tag === \"a\") {\n return;\n }\n if (hasElementChildren(node) || hasDirectText(node)) {\n return;\n }\n\n const wrapperAttrs = el.attr() || {};\n if (!hasActionLabel(wrapperAttrs)) {\n el.remove();\n }\n });\n\n for (const node of getElementsInReverseDocumentOrder($)) {\n const el = $(node);\n const tag = (node.tagName || \"\").toLowerCase();\n if (ROOT_TAGS.has(tag) || isBoundaryTag(tag)) {\n continue;\n }\n\n if (el.attr(clickableMark) !== undefined || el.attr(indicatorMark) !== undefined) {\n continue;\n }\n\n const hasContent = hasElementChildren(node) || hasDirectText(node);\n\n if (!hasContent) {\n el.remove();\n continue;\n }\n\n unwrapActionNode($, el);\n }\n\n $.root()\n .find(\"*\")\n .contents()\n .each(function normalizeActionTextNodes(this: AnyNode) {\n if (this.type !== \"text\") {\n return;\n }\n\n const currentText = (this as { data?: string }).data ?? \"\";\n const normalized = currentText.replace(/\\s+/g, \" \");\n if (normalized.trim() === \"\") {\n const previous = (this as { prev?: AnyNode | null }).prev;\n const next = (this as { next?: AnyNode | null }).next;\n if (previous != null && next != null) {\n (this as { data?: string }).data = \" \";\n } else {\n $(this).remove();\n }\n return;\n }\n\n (this as { data?: string }).data = normalized;\n });\n\n $.root()\n .find(\"*\")\n .each(function collapseActionTextRuns() {\n const parent = $(this as Element);\n const children = parent.contents().toArray();\n let run: AnyNode[] = [];\n\n const flush = () => {\n if (run.length === 0) {\n return;\n }\n\n const first = run[0];\n if (!first || first.type !== \"text\") {\n run = [];\n return;\n }\n\n const combined = run\n .map((node) => (node as { data?: string }).data ?? \"\")\n .join(\"\")\n .replace(/\\s+/g, \" \");\n const startsParent = children[0] === first;\n const endsParent = children[children.length - 1] === run[run.length - 1];\n let normalized = combined;\n if (startsParent) {\n normalized = normalized.replace(/^\\s+/, \"\");\n }\n if (endsParent) {\n normalized = normalized.replace(/\\s+$/, \"\");\n }\n\n if (normalized === \"\") {\n for (const node of run) {\n $(node).remove();\n }\n } else {\n (first as { data?: string }).data = normalized;\n for (const node of run.slice(1)) {\n $(node).remove();\n }\n }\n\n run = [];\n };\n\n for (const child of children) {\n if (child.type === \"text\") {\n run.push(child);\n continue;\n }\n\n flush();\n }\n\n flush();\n });\n\n $(\"*\").each(function stripActionAttrs() {\n const el = $(this as Element);\n const node = el[0];\n if (!node) {\n return;\n }\n\n const tag = (node.tagName || \"\").toLowerCase();\n const clickable = el.attr(clickableMark) !== undefined;\n const indicator = el.attr(indicatorMark) !== undefined;\n const keep = new Set<string>([\n \"c\",\n OPENSTEER_BOUNDARY_ATTR,\n OPENSTEER_NODE_ID_ATTR,\n OPENSTEER_SPARSE_COUNTER_ATTR,\n ]);\n\n if (clickable) {\n for (const attr of [\"href\", \"role\", \"type\", \"title\", \"placeholder\", \"value\", \"aria-label\"]) {\n keep.add(attr);\n }\n }\n\n if (indicator) {\n for (const attr of [\"alt\", \"src\", \"srcset\", \"aria-label\", \"title\", \"data-icon\", \"role\"]) {\n keep.add(attr);\n }\n }\n\n stripToAttrs(el, keep);\n if (tag === \"img\" && !indicator) {\n el.remove();\n return;\n }\n\n el.removeAttr(clickableMark);\n el.removeAttr(indicatorMark);\n el.removeAttr(OPENSTEER_INTERACTIVE_ATTR);\n el.removeAttr(OPENSTEER_HIDDEN_ATTR);\n el.removeAttr(OPENSTEER_SCROLLABLE_ATTR);\n el.removeAttr(OPENSTEER_SELF_HIDDEN_ATTR);\n });\n\n deduplicateImagesInDom($);\n return $;\n}\n\nexport function serializePreparedActionSnapshot($: CheerioAPI): string {\n const normalized = compactHtml($.html());\n if (normalized.length === 0) {\n return \"\";\n }\n\n return cheerio.load(normalized, { xmlMode: false }).html();\n}\n\nexport function cleanForAction(html: string): string {\n const prepared = prepareActionSnapshotDom(html);\n if (!prepared) {\n return \"\";\n }\n\n return serializePreparedActionSnapshot(prepared);\n}\n\nconst VOID_TAGS = new Set([\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n]);\n","import type { BrowserCoreEngine, FrameRef, PageRef } from \"@opensteer/browser-core\";\n\nimport {\n INTERACTIVE_ROLE_TOKENS,\n INTERACTIVE_SELECTOR,\n NON_NEGATIVE_TAB_INDEX_MIN,\n OPENSTEER_HIDDEN_ATTR,\n OPENSTEER_INTERACTIVE_ATTR,\n OPENSTEER_SCROLLABLE_ATTR,\n OPENSTEER_SELF_HIDDEN_ATTR,\n} from \"./constants.js\";\n\nconst MARK_SNAPSHOT_SEMANTICS_SCRIPT = `({\n hiddenAttr,\n selfHiddenAttr,\n interactiveAttr,\n scrollableAttr,\n interactiveSelector,\n interactiveRoles,\n nonNegativeTabIndexMin,\n}) => {\n const interactiveRolesSet = new Set(interactiveRoles);\n\n function isSubtreeHidden(el, style) {\n if (el.hasAttribute(\"hidden\")) {\n return true;\n }\n if (el.tagName === \"INPUT\" && String(el.getAttribute(\"type\") || \"\").toLowerCase() === \"hidden\") {\n return true;\n }\n if (style.display === \"none\") {\n return true;\n }\n const opacity = Number.parseFloat(style.opacity);\n return Number.isFinite(opacity) && opacity <= 0;\n }\n\n function hasVisibleOutOfFlowChild(el) {\n const children = el.children;\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n const childStyle = window.getComputedStyle(child);\n if (childStyle.position !== \"fixed\" && childStyle.position !== \"absolute\") {\n continue;\n }\n const childRect = child.getBoundingClientRect();\n if (childRect.width > 0 && childRect.height > 0) {\n return true;\n }\n }\n return false;\n }\n\n function isSelfHidden(el, style) {\n if (style.visibility === \"hidden\" || style.visibility === \"collapse\") {\n return true;\n }\n if (style.display === \"contents\") {\n return false;\n }\n const rect = el.getBoundingClientRect();\n if (rect.width > 0 && rect.height > 0) {\n return false;\n }\n return !hasVisibleOutOfFlowChild(el);\n }\n\n function hasInteractiveTabIndex(el) {\n const value = el.getAttribute(\"tabindex\");\n if (value == null) {\n return false;\n }\n const parsed = Number.parseInt(value, 10);\n return Number.isFinite(parsed) && parsed >= nonNegativeTabIndexMin;\n }\n\n const roots = [document];\n while (roots.length > 0) {\n const root = roots.pop();\n if (!root) {\n continue;\n }\n\n const elements = Array.from(root.querySelectorAll(\"*\"));\n for (const el of elements) {\n el.removeAttribute(hiddenAttr);\n el.removeAttribute(selfHiddenAttr);\n el.removeAttribute(interactiveAttr);\n el.removeAttribute(scrollableAttr);\n\n const style = window.getComputedStyle(el);\n const subtreeHidden = isSubtreeHidden(el, style);\n const selfHidden = !subtreeHidden && isSelfHidden(el, style);\n if (subtreeHidden) {\n el.setAttribute(hiddenAttr, \"1\");\n } else if (selfHidden) {\n el.setAttribute(selfHiddenAttr, \"1\");\n } else {\n let interactive = false;\n if (el.matches(interactiveSelector)) {\n interactive = true;\n } else if (hasInteractiveTabIndex(el)) {\n interactive = true;\n } else {\n const role = (el.getAttribute(\"role\") || \"\").toLowerCase();\n if (interactiveRolesSet.has(role)) {\n interactive = true;\n }\n }\n\n if (interactive) {\n el.setAttribute(interactiveAttr, \"1\");\n }\n\n const canScrollY =\n (style.overflowY === \"auto\" || style.overflowY === \"scroll\") &&\n el.scrollHeight > el.clientHeight + 1;\n const canScrollX =\n (style.overflowX === \"auto\" || style.overflowX === \"scroll\") &&\n el.scrollWidth > el.clientWidth + 1;\n\n let scrollDirection = null;\n if (canScrollX && canScrollY) {\n scrollDirection = \"xy\";\n } else if (canScrollX) {\n scrollDirection = \"x\";\n } else if (canScrollY) {\n scrollDirection = \"y\";\n } else {\n const inferredY = el.scrollHeight > el.clientHeight + 5;\n const inferredX = el.scrollWidth > el.clientWidth + 5;\n if (inferredX && inferredY) {\n scrollDirection = \"xy\";\n } else if (inferredX) {\n scrollDirection = \"x\";\n } else if (inferredY) {\n scrollDirection = \"y\";\n }\n }\n\n if (scrollDirection) {\n el.setAttribute(scrollableAttr, scrollDirection);\n } else {\n el.removeAttribute(scrollableAttr);\n }\n }\n\n if (el.shadowRoot) {\n roots.push(el.shadowRoot);\n }\n }\n }\n\n return true;\n}`;\n\nconst CLEAR_SNAPSHOT_SEMANTICS_SCRIPT = `({\n hiddenAttr,\n selfHiddenAttr,\n interactiveAttr,\n scrollableAttr,\n}) => {\n const roots = [document];\n while (roots.length > 0) {\n const root = roots.pop();\n if (!root) {\n continue;\n }\n\n const elements = Array.from(root.querySelectorAll(\"*\"));\n for (const el of elements) {\n el.removeAttribute(hiddenAttr);\n el.removeAttribute(selfHiddenAttr);\n el.removeAttribute(interactiveAttr);\n el.removeAttribute(scrollableAttr);\n if (el.shadowRoot) {\n roots.push(el.shadowRoot);\n }\n }\n }\n\n return true;\n}`;\n\nconst SNAPSHOT_SEMANTIC_ARGS = [\n {\n hiddenAttr: OPENSTEER_HIDDEN_ATTR,\n selfHiddenAttr: OPENSTEER_SELF_HIDDEN_ATTR,\n interactiveAttr: OPENSTEER_INTERACTIVE_ATTR,\n scrollableAttr: OPENSTEER_SCROLLABLE_ATTR,\n interactiveSelector: INTERACTIVE_SELECTOR,\n interactiveRoles: [...INTERACTIVE_ROLE_TOKENS],\n nonNegativeTabIndexMin: NON_NEGATIVE_TAB_INDEX_MIN,\n },\n] as const;\n\nconst CLEAR_SNAPSHOT_SEMANTIC_ARGS = [\n {\n hiddenAttr: OPENSTEER_HIDDEN_ATTR,\n selfHiddenAttr: OPENSTEER_SELF_HIDDEN_ATTR,\n interactiveAttr: OPENSTEER_INTERACTIVE_ATTR,\n scrollableAttr: OPENSTEER_SCROLLABLE_ATTR,\n },\n] as const;\n\nasync function evaluateFrameBestEffort(\n engine: BrowserCoreEngine,\n frameRef: FrameRef,\n script: string,\n args: readonly unknown[],\n): Promise<void> {\n try {\n await engine.evaluateFrame({\n frameRef,\n script,\n args,\n });\n } catch {\n // Best effort: frames may detach or navigate while marking semantics.\n }\n}\n\nexport async function markLiveSnapshotSemantics(options: {\n readonly engine: BrowserCoreEngine;\n readonly pageRef: PageRef;\n}): Promise<() => Promise<void>> {\n const frames = await options.engine.listFrames({\n pageRef: options.pageRef,\n });\n\n await Promise.all(\n frames.map((frame) =>\n evaluateFrameBestEffort(\n options.engine,\n frame.frameRef,\n MARK_SNAPSHOT_SEMANTICS_SCRIPT,\n SNAPSHOT_SEMANTIC_ARGS,\n ),\n ),\n );\n\n return async () => {\n await Promise.all(\n frames.map((frame) =>\n evaluateFrameBestEffort(\n options.engine,\n frame.frameRef,\n CLEAR_SNAPSHOT_SEMANTICS_SCRIPT,\n CLEAR_SNAPSHOT_SEMANTIC_ARGS,\n ),\n ),\n );\n };\n}\n","import type { CheerioAPI } from \"cheerio\";\n\nimport {\n type BrowserCoreEngine,\n type DocumentEpoch,\n type DocumentRef,\n type DomSnapshot,\n type DomSnapshotNode,\n type FrameRef,\n type NodeRef,\n type PageRef,\n} from \"@opensteer/browser-core\";\nimport type { OpensteerSnapshotCounter, OpensteerSnapshotMode } from \"@opensteer/protocol\";\n\nimport {\n prepareActionSnapshotDom,\n prepareExtractionSnapshotDom,\n serializePreparedActionSnapshot,\n serializePreparedExtractionSnapshot,\n} from \"./cleaner.js\";\nimport {\n OPENSTEER_BOUNDARY_ATTR,\n OPENSTEER_HIDDEN_ATTR,\n OPENSTEER_IFRAME_BOUNDARY_TAG,\n OPENSTEER_INTERACTIVE_ATTR,\n OPENSTEER_NODE_ID_ATTR,\n OPENSTEER_SCROLLABLE_ATTR,\n OPENSTEER_SELF_HIDDEN_ATTR,\n OPENSTEER_SHADOW_BOUNDARY_TAG,\n OPENSTEER_SPARSE_COUNTER_ATTR,\n OPENSTEER_UNAVAILABLE_ATTR,\n INTERACTIVE_ROLE_SET,\n NATIVE_INTERACTIVE_TAGS,\n hasNonNegativeTabIndex,\n isVoidHtmlTag,\n} from \"./constants.js\";\nimport { markLiveSnapshotSemantics } from \"./marking.js\";\n\ninterface CompiledOpensteerSnapshotCounterRecord extends Omit<OpensteerSnapshotCounter, \"nodeRef\"> {\n readonly nodeRef: NodeRef;\n readonly sparseCounter?: number;\n readonly liveCounterSyncEligible: boolean;\n}\n\nexport interface CompiledOpensteerSnapshot {\n readonly url: string;\n readonly title: string;\n readonly mode: OpensteerSnapshotMode;\n readonly html: string;\n readonly counters: readonly OpensteerSnapshotCounter[];\n}\n\ninterface RenderDepth {\n readonly iframeDepth: number;\n readonly shadowDepth: number;\n}\n\ninterface RenderedNodeMetadata {\n readonly pageRef: PageRef;\n readonly frameRef: FrameRef;\n readonly documentRef: DocumentRef;\n readonly documentEpoch: DocumentEpoch;\n readonly nodeRef: NodeRef;\n readonly tagName: string;\n readonly attributes?: readonly {\n readonly name: string;\n readonly value: string;\n }[];\n readonly iframeDepth: number;\n readonly shadowDepth: number;\n readonly interactive: boolean;\n readonly liveCounterSyncEligible: boolean;\n readonly textContent?: string;\n}\n\ninterface CompiledCounterHtml {\n readonly counterRecords: ReadonlyMap<number, CompiledOpensteerSnapshotCounterRecord>;\n readonly sparseToDirectMapping: ReadonlyMap<number, number>;\n}\n\nconst EXTRACTION_SKIPPED_COUNTER_TAGS = new Set([\"html\", \"head\", \"body\"]);\n\nconst INTERNAL_SNAPSHOT_ATTRIBUTE_NAMES = new Set([\n \"c\",\n OPENSTEER_BOUNDARY_ATTR,\n OPENSTEER_HIDDEN_ATTR,\n OPENSTEER_INTERACTIVE_ATTR,\n OPENSTEER_NODE_ID_ATTR,\n OPENSTEER_SCROLLABLE_ATTR,\n OPENSTEER_SELF_HIDDEN_ATTR,\n OPENSTEER_SPARSE_COUNTER_ATTR,\n OPENSTEER_UNAVAILABLE_ATTR,\n]);\n\nconst MAX_LIVE_COUNTER_SYNC_ATTEMPTS = 4;\n\nconst CLEAR_LIVE_COUNTERS_SCRIPT = `(({ sparseCounterAttr }) => {\n const walk = (root) => {\n for (const child of Array.from(root?.children || [])) {\n child.removeAttribute(\"c\");\n child.removeAttribute(sparseCounterAttr);\n walk(child);\n if (child.shadowRoot) {\n walk(child.shadowRoot);\n }\n }\n };\n\n walk(document);\n return true;\n})`;\n\nconst ASSIGN_SPARSE_COUNTERS_SCRIPT = `(({ sparseCounterAttr, startCounter }) => {\n let counter = startCounter;\n const walk = (root) => {\n for (const child of Array.from(root?.children || [])) {\n child.setAttribute(sparseCounterAttr, String(counter++));\n walk(child);\n if (child.shadowRoot) {\n walk(child.shadowRoot);\n }\n }\n };\n\n walk(document);\n return counter;\n})`;\n\nconst APPLY_DENSE_COUNTERS_SCRIPT = `(({ sparseCounterAttr, mapping }) => {\n const walk = (root) => {\n for (const child of Array.from(root?.children || [])) {\n child.removeAttribute(\"c\");\n const sparse = child.getAttribute(sparseCounterAttr);\n if (sparse !== null) {\n const dense = mapping[sparse];\n if (dense !== undefined) {\n child.setAttribute(\"c\", String(dense));\n }\n child.removeAttribute(sparseCounterAttr);\n }\n walk(child);\n if (child.shadowRoot) {\n walk(child.shadowRoot);\n }\n }\n };\n\n walk(document);\n return true;\n})`;\n\nclass LiveCounterSyncError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"LiveCounterSyncError\";\n }\n}\n\nfunction isLiveCounterSyncError(error: unknown): error is LiveCounterSyncError {\n return error instanceof LiveCounterSyncError;\n}\n\nfunction isDetachedFrameSyncError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n const message = error.message.toLowerCase();\n return (\n message.includes(\"not attached to a live page\") ||\n message.includes(\"frame has been detached\") ||\n message.includes(\"frame was detached\") ||\n message.includes(\"frame not found\")\n );\n}\n\nfunction describeError(error: unknown): string {\n return error instanceof Error ? error.message : \"unknown error\";\n}\n\nfunction buildLiveCounterSyncError(\n action: string,\n failures: readonly string[],\n): LiveCounterSyncError {\n const preview = failures.slice(0, 3).join(\" \");\n const remaining = failures.length > 3 ? ` (+${String(failures.length - 3)} more)` : \"\";\n return new LiveCounterSyncError(\n `Failed to ${action} across frame snapshots: ${preview}${remaining}`,\n );\n}\n\nfunction ensureSparseCountersForAllRecords(\n counterRecords: ReadonlyMap<number, CompiledOpensteerSnapshotCounterRecord>,\n): void {\n const missingSparseCounters = [...counterRecords.values()].filter(\n (record) => record.liveCounterSyncEligible && record.sparseCounter === undefined,\n );\n if (missingSparseCounters.length === 0) {\n return;\n }\n\n throw buildLiveCounterSyncError(\n \"bind dense counters to every snapshot record\",\n missingSparseCounters.map(\n (record) =>\n `counter ${String(record.element)} (${record.pathHint}) was captured without a sparse live-DOM marker.`,\n ),\n );\n}\n\nexport async function clearOpensteerLiveCounters(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<void> {\n const frames = await engine.listFrames({ pageRef });\n const failures: string[] = [];\n\n await Promise.all(\n frames.map(async (frame) => {\n try {\n await engine.evaluateFrame({\n frameRef: frame.frameRef,\n script: CLEAR_LIVE_COUNTERS_SCRIPT,\n args: [{ sparseCounterAttr: OPENSTEER_SPARSE_COUNTER_ATTR }],\n });\n } catch (error) {\n if (isDetachedFrameSyncError(error)) {\n return;\n }\n failures.push(`frame ${frame.frameRef} could not be cleared (${describeError(error)}).`);\n }\n }),\n );\n\n if (failures.length > 0) {\n throw buildLiveCounterSyncError(\"clear live counters\", failures);\n }\n}\n\nasync function assignSparseCountersToLiveDom(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<void> {\n const frames = await engine.listFrames({ pageRef });\n const failures: string[] = [];\n let nextCounter = 1;\n\n for (const frame of frames) {\n try {\n const evaluated = await engine.evaluateFrame({\n frameRef: frame.frameRef,\n script: ASSIGN_SPARSE_COUNTERS_SCRIPT,\n args: [\n {\n sparseCounterAttr: OPENSTEER_SPARSE_COUNTER_ATTR,\n startCounter: nextCounter,\n },\n ],\n });\n const returnedCounter = Number(evaluated.data);\n if (!Number.isSafeInteger(returnedCounter) || returnedCounter < nextCounter) {\n failures.push(`frame ${frame.frameRef} returned an invalid sparse counter boundary.`);\n continue;\n }\n nextCounter = returnedCounter;\n } catch (error) {\n if (isDetachedFrameSyncError(error)) {\n continue;\n }\n failures.push(\n `frame ${frame.frameRef} could not be assigned sparse counters (${describeError(error)}).`,\n );\n }\n }\n\n if (failures.length > 0) {\n throw buildLiveCounterSyncError(\"assign sparse counters\", failures);\n }\n}\n\nasync function syncDenseCountersToLiveDom(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n sparseToDirectMapping: ReadonlyMap<number, number>,\n): Promise<void> {\n const frames = await engine.listFrames({ pageRef });\n const failures: string[] = [];\n const mappingObj = Object.fromEntries(\n [...sparseToDirectMapping.entries()].map(([sparseCounter, denseCounter]) => [\n String(sparseCounter),\n denseCounter,\n ]),\n );\n\n await Promise.all(\n frames.map(async (frame) => {\n try {\n await engine.evaluateFrame({\n frameRef: frame.frameRef,\n script: APPLY_DENSE_COUNTERS_SCRIPT,\n args: [\n {\n sparseCounterAttr: OPENSTEER_SPARSE_COUNTER_ATTR,\n mapping: mappingObj,\n },\n ],\n });\n } catch (error) {\n if (isDetachedFrameSyncError(error)) {\n return;\n }\n failures.push(\n `frame ${frame.frameRef} could not be synchronized (${describeError(error)}).`,\n );\n }\n }),\n );\n\n if (failures.length > 0) {\n throw buildLiveCounterSyncError(\"synchronize dense counters\", failures);\n }\n}\n\nexport async function compileOpensteerSnapshot(options: {\n readonly engine: BrowserCoreEngine;\n readonly pageRef: PageRef;\n readonly mode: OpensteerSnapshotMode;\n}): Promise<CompiledOpensteerSnapshot> {\n let lastCounterSyncError: LiveCounterSyncError | undefined;\n\n for (let attempt = 1; attempt <= MAX_LIVE_COUNTER_SYNC_ATTEMPTS; attempt += 1) {\n let cleanupLiveSemantics: () => Promise<void> = async () => {};\n\n try {\n cleanupLiveSemantics = await markLiveSnapshotSemantics({\n engine: options.engine,\n pageRef: options.pageRef,\n });\n\n await clearOpensteerLiveCounters(options.engine, options.pageRef);\n await assignSparseCountersToLiveDom(options.engine, options.pageRef);\n\n const pageInfo = await options.engine.getPageInfo({ pageRef: options.pageRef });\n const { mainSnapshot, snapshotsByDocumentRef } = await getPageDocumentSnapshots(\n options.engine,\n options.pageRef,\n );\n\n await cleanupLiveSemantics();\n cleanupLiveSemantics = async () => {};\n\n const renderedNodes = new Map<string, RenderedNodeMetadata>();\n const rawHtml = renderDocumentSnapshot(\n mainSnapshot.documentRef,\n snapshotsByDocumentRef,\n renderedNodes,\n {\n iframeDepth: 0,\n shadowDepth: 0,\n },\n );\n\n const preparedSnapshotDom =\n options.mode === \"extraction\"\n ? prepareExtractionSnapshotDom(rawHtml)\n : prepareActionSnapshotDom(rawHtml);\n const compiledHtml = assignCountersInDom(preparedSnapshotDom, renderedNodes, options.mode);\n const finalHtml =\n preparedSnapshotDom === undefined\n ? \"\"\n : options.mode === \"extraction\"\n ? serializePreparedExtractionSnapshot(preparedSnapshotDom)\n : serializePreparedActionSnapshot(preparedSnapshotDom);\n\n ensureSparseCountersForAllRecords(compiledHtml.counterRecords);\n await syncDenseCountersToLiveDom(\n options.engine,\n options.pageRef,\n compiledHtml.sparseToDirectMapping,\n );\n\n return {\n url: pageInfo.url,\n title: pageInfo.title,\n mode: options.mode,\n html: finalHtml,\n counters: [...compiledHtml.counterRecords.values()].map(toPublicCounterRecord),\n };\n } catch (error) {\n await clearOpensteerLiveCounters(options.engine, options.pageRef).catch(() => undefined);\n if (attempt < MAX_LIVE_COUNTER_SYNC_ATTEMPTS && isLiveCounterSyncError(error)) {\n lastCounterSyncError = error;\n continue;\n }\n throw error;\n } finally {\n await cleanupLiveSemantics();\n }\n }\n\n throw (\n lastCounterSyncError ??\n new LiveCounterSyncError(\"Failed to prepare snapshot after retrying counter sync.\")\n );\n}\n\nasync function getMainDocumentSnapshot(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<DomSnapshot> {\n const frames = await engine.listFrames({ pageRef });\n const mainFrame = frames.find((frame) => frame.isMainFrame);\n if (!mainFrame) {\n throw new Error(`page ${pageRef} does not expose a main frame`);\n }\n\n return engine.getDomSnapshot({ frameRef: mainFrame.frameRef });\n}\n\nasync function getPageDocumentSnapshots(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<{\n readonly mainSnapshot: DomSnapshot;\n readonly snapshotsByDocumentRef: ReadonlyMap<DocumentRef, DomSnapshot>;\n}> {\n const bundleEngine = engine as BrowserCoreEngine & {\n getPageDomSnapshots?: (input: { readonly pageRef: PageRef }) => Promise<readonly DomSnapshot[]>;\n };\n const bundledSnapshots = await bundleEngine.getPageDomSnapshots?.({ pageRef });\n if (bundledSnapshots && bundledSnapshots.length > 0) {\n const mainSnapshot =\n bundledSnapshots.find((snapshot) => snapshot.parentDocumentRef === undefined) ??\n bundledSnapshots[0]!;\n return {\n mainSnapshot,\n snapshotsByDocumentRef: new Map(\n bundledSnapshots.map((snapshot) => [snapshot.documentRef, snapshot]),\n ),\n };\n }\n\n const mainSnapshot = await getMainDocumentSnapshot(engine, pageRef);\n const snapshotsByDocumentRef = await collectDocumentSnapshots(engine, mainSnapshot);\n return {\n mainSnapshot,\n snapshotsByDocumentRef,\n };\n}\n\nasync function collectDocumentSnapshots(\n engine: BrowserCoreEngine,\n mainSnapshot: DomSnapshot,\n): Promise<ReadonlyMap<DocumentRef, DomSnapshot>> {\n const snapshotsByDocumentRef = new Map<DocumentRef, DomSnapshot>([\n [mainSnapshot.documentRef, mainSnapshot],\n ]);\n const queue: DomSnapshot[] = [mainSnapshot];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n for (const node of current.nodes) {\n if (\n node.contentDocumentRef === undefined ||\n snapshotsByDocumentRef.has(node.contentDocumentRef)\n ) {\n continue;\n }\n\n const childSnapshot = await engine.getDomSnapshot({ documentRef: node.contentDocumentRef });\n snapshotsByDocumentRef.set(childSnapshot.documentRef, childSnapshot);\n queue.push(childSnapshot);\n }\n }\n\n return snapshotsByDocumentRef;\n}\n\nfunction renderDocumentSnapshot(\n documentRef: DocumentRef,\n snapshotsByDocumentRef: ReadonlyMap<DocumentRef, DomSnapshot>,\n renderedNodes: Map<string, RenderedNodeMetadata>,\n depth: RenderDepth,\n): string {\n const snapshot = snapshotsByDocumentRef.get(documentRef);\n if (!snapshot) {\n return \"\";\n }\n\n const nodesById = new Map(snapshot.nodes.map((node) => [node.snapshotNodeId, node]));\n const rootNode = nodesById.get(snapshot.rootSnapshotNodeId);\n if (!rootNode) {\n throw new Error(\n `snapshot ${snapshot.documentRef} is missing root node ${String(snapshot.rootSnapshotNodeId)}`,\n );\n }\n\n return renderNode(snapshot, rootNode, nodesById, snapshotsByDocumentRef, renderedNodes, depth);\n}\n\nfunction renderNode(\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n nodesById: ReadonlyMap<number, DomSnapshotNode>,\n snapshotsByDocumentRef: ReadonlyMap<DocumentRef, DomSnapshot>,\n renderedNodes: Map<string, RenderedNodeMetadata>,\n depth: RenderDepth,\n): string {\n if (node.nodeType === 3) {\n return escapeHtml(node.nodeValue || node.textContent || \"\");\n }\n\n if (node.nodeType === 8 || node.nodeType === 10) {\n return \"\";\n }\n\n if (node.nodeType === 9 || node.nodeType === 11) {\n return renderChildren(snapshot, node, nodesById, snapshotsByDocumentRef, renderedNodes, depth);\n }\n\n if (node.nodeType !== 1) {\n return renderChildren(snapshot, node, nodesById, snapshotsByDocumentRef, renderedNodes, depth);\n }\n\n const tagName = normalizeTagName(node.nodeName);\n if (isPseudoElementTagName(tagName)) {\n return renderChildren(snapshot, node, nodesById, snapshotsByDocumentRef, renderedNodes, depth);\n }\n\n // Flatten structural root tags (html, head, body) inside iframe/shadow boundaries.\n // HTML5 parsers merge duplicate <html> attributes into the first <html> element,\n // which can cause attributes like data-opensteer-hidden from an iframe's <html>\n // to pollute the main document's <html> element.\n if (\n (depth.iframeDepth > 0 || depth.shadowDepth > 0) &&\n (tagName === \"html\" || tagName === \"head\" || tagName === \"body\")\n ) {\n return renderChildren(snapshot, node, nodesById, snapshotsByDocumentRef, renderedNodes, depth);\n }\n\n const snapshotAttributes = normalizeNodeAttributes(node.attributes);\n const snapshotAttributeIndex = indexNodeAttributes(snapshotAttributes);\n const authoredAttributes = stripInternalSnapshotAttributes(snapshotAttributes);\n const authoredAttributeIndex = indexNodeAttributes(authoredAttributes);\n const attributes = [...authoredAttributes];\n const subtreeHidden =\n snapshotAttributeIndex.has(OPENSTEER_HIDDEN_ATTR) || isLikelySubtreeHidden(node);\n const selfHidden =\n !subtreeHidden &&\n (snapshotAttributeIndex.has(OPENSTEER_SELF_HIDDEN_ATTR) || isLikelySelfHidden(node, nodesById));\n const interactive =\n !subtreeHidden &&\n !selfHidden &&\n (snapshotAttributeIndex.has(OPENSTEER_INTERACTIVE_ATTR) ||\n isLikelyInteractive(tagName, node, authoredAttributes, authoredAttributeIndex));\n\n if (interactive) {\n attributes.push({ name: OPENSTEER_INTERACTIVE_ATTR, value: \"1\" });\n }\n if (subtreeHidden) {\n attributes.push({ name: OPENSTEER_HIDDEN_ATTR, value: \"1\" });\n } else if (selfHidden) {\n attributes.push({ name: OPENSTEER_SELF_HIDDEN_ATTR, value: \"1\" });\n }\n const sparseCounter = snapshotAttributeIndex.get(OPENSTEER_SPARSE_COUNTER_ATTR);\n if (sparseCounter !== undefined) {\n attributes.push({ name: OPENSTEER_SPARSE_COUNTER_ATTR, value: sparseCounter });\n }\n if (tagName === \"iframe\" && node.contentDocumentRef === undefined) {\n attributes.push({ name: OPENSTEER_UNAVAILABLE_ATTR, value: \"iframe\" });\n }\n\n if (node.nodeRef !== undefined) {\n const syntheticNodeId = buildSyntheticNodeId(snapshot, node);\n attributes.push({ name: OPENSTEER_NODE_ID_ATTR, value: syntheticNodeId });\n renderedNodes.set(syntheticNodeId, {\n pageRef: snapshot.pageRef,\n frameRef: snapshot.frameRef,\n documentRef: snapshot.documentRef,\n documentEpoch: snapshot.documentEpoch,\n nodeRef: node.nodeRef,\n tagName: tagName.toUpperCase(),\n ...(authoredAttributes.length === 0 ? {} : { attributes: authoredAttributes }),\n iframeDepth: depth.iframeDepth,\n shadowDepth: depth.shadowDepth,\n interactive,\n liveCounterSyncEligible: isLiveCounterSyncEligible(node, nodesById),\n ...(node.textContent === undefined ? {} : { textContent: node.textContent }),\n });\n }\n\n const attributeText = attributesToHtml(attributes);\n const children = renderChildren(\n snapshot,\n node,\n nodesById,\n snapshotsByDocumentRef,\n renderedNodes,\n depth,\n );\n\n const elementHtml = isVoidHtmlTag(tagName)\n ? `<${tagName}${attributeText}>`\n : `<${tagName}${attributeText}>${children}</${tagName}>`;\n if (node.contentDocumentRef === undefined) {\n return elementHtml;\n }\n\n const iframeHtml = renderDocumentSnapshot(\n node.contentDocumentRef,\n snapshotsByDocumentRef,\n renderedNodes,\n {\n iframeDepth: depth.iframeDepth + 1,\n shadowDepth: depth.shadowDepth,\n },\n );\n if (iframeHtml.length === 0) {\n return elementHtml;\n }\n\n return `${elementHtml}<${OPENSTEER_IFRAME_BOUNDARY_TAG} ${OPENSTEER_BOUNDARY_ATTR}=\"iframe\">${iframeHtml}</${OPENSTEER_IFRAME_BOUNDARY_TAG}>`;\n}\n\nfunction renderChildren(\n snapshot: DomSnapshot,\n node: DomSnapshotNode,\n nodesById: ReadonlyMap<number, DomSnapshotNode>,\n snapshotsByDocumentRef: ReadonlyMap<DocumentRef, DomSnapshot>,\n renderedNodes: Map<string, RenderedNodeMetadata>,\n depth: RenderDepth,\n): string {\n const regularChildren: DomSnapshotNode[] = [];\n const shadowChildren: DomSnapshotNode[] = [];\n\n for (const childSnapshotNodeId of node.childSnapshotNodeIds) {\n const child = nodesById.get(childSnapshotNodeId);\n if (!child) {\n continue;\n }\n\n if (node.nodeRef !== undefined && child.shadowHostNodeRef === node.nodeRef) {\n shadowChildren.push(child);\n continue;\n }\n\n regularChildren.push(child);\n }\n\n const chunks: string[] = [];\n if (shadowChildren.length > 0) {\n const shadowHtml = shadowChildren\n .map((child) =>\n renderNode(snapshot, child, nodesById, snapshotsByDocumentRef, renderedNodes, {\n iframeDepth: depth.iframeDepth,\n shadowDepth: depth.shadowDepth + 1,\n }),\n )\n .join(\"\");\n chunks.push(\n `<${OPENSTEER_SHADOW_BOUNDARY_TAG} ${OPENSTEER_BOUNDARY_ATTR}=\"shadow\">${shadowHtml}</${OPENSTEER_SHADOW_BOUNDARY_TAG}>`,\n );\n }\n\n for (const child of regularChildren) {\n chunks.push(\n renderNode(snapshot, child, nodesById, snapshotsByDocumentRef, renderedNodes, depth),\n );\n }\n\n return chunks.join(\"\");\n}\n\nfunction assignCountersInDom(\n $: CheerioAPI | undefined,\n renderedNodes: ReadonlyMap<string, RenderedNodeMetadata>,\n mode: OpensteerSnapshotMode,\n): CompiledCounterHtml {\n const counterRecords = new Map<number, CompiledOpensteerSnapshotCounterRecord>();\n const sparseToDirectMapping = new Map<number, number>();\n let nextCounter = 1;\n\n if (!$) {\n return {\n counterRecords,\n sparseToDirectMapping,\n };\n }\n\n $(\"*\").each(function assignElementCounter() {\n const el = $(this);\n const syntheticNodeId = el.attr(OPENSTEER_NODE_ID_ATTR);\n if (!syntheticNodeId) {\n return;\n }\n\n const rendered = renderedNodes.get(syntheticNodeId);\n el.removeAttr(OPENSTEER_NODE_ID_ATTR);\n if (!rendered) {\n return;\n }\n\n if (\n mode === \"extraction\" &&\n EXTRACTION_SKIPPED_COUNTER_TAGS.has(rendered.tagName.toLowerCase())\n ) {\n el.removeAttr(OPENSTEER_SPARSE_COUNTER_ATTR);\n return;\n }\n\n const rawSparseCounter = el.attr(OPENSTEER_SPARSE_COUNTER_ATTR);\n el.removeAttr(OPENSTEER_SPARSE_COUNTER_ATTR);\n const sparseCounter = rawSparseCounter ? Number.parseInt(rawSparseCounter, 10) : undefined;\n const replayableSparseCounter =\n typeof sparseCounter === \"number\" && Number.isFinite(sparseCounter)\n ? sparseCounter\n : undefined;\n if (rendered.liveCounterSyncEligible && replayableSparseCounter === undefined) {\n return;\n }\n\n const counter = nextCounter++;\n el.attr(\"c\", String(counter));\n if (replayableSparseCounter !== undefined) {\n sparseToDirectMapping.set(replayableSparseCounter, counter);\n }\n const pathHint = buildPathHint(rendered.tagName.toLowerCase(), rendered.attributes ?? []);\n const text = buildTextSnippet(rendered.textContent);\n counterRecords.set(counter, {\n element: counter,\n pageRef: rendered.pageRef,\n frameRef: rendered.frameRef,\n documentRef: rendered.documentRef,\n documentEpoch: rendered.documentEpoch,\n nodeRef: rendered.nodeRef,\n tagName: rendered.tagName,\n pathHint,\n ...(text === undefined ? {} : { text }),\n ...(rendered.attributes === undefined ? {} : { attributes: rendered.attributes }),\n iframeDepth: rendered.iframeDepth,\n shadowDepth: rendered.shadowDepth,\n interactive: rendered.interactive,\n liveCounterSyncEligible: rendered.liveCounterSyncEligible,\n ...(replayableSparseCounter === undefined ? {} : { sparseCounter: replayableSparseCounter }),\n });\n });\n\n return {\n counterRecords,\n sparseToDirectMapping,\n };\n}\n\nfunction toPublicCounterRecord(\n record: CompiledOpensteerSnapshotCounterRecord,\n): OpensteerSnapshotCounter {\n return {\n element: record.element,\n pageRef: record.pageRef,\n frameRef: record.frameRef,\n documentRef: record.documentRef,\n documentEpoch: record.documentEpoch,\n nodeRef: record.nodeRef,\n tagName: record.tagName,\n pathHint: record.pathHint,\n ...(record.text === undefined ? {} : { text: record.text }),\n ...(record.attributes === undefined ? {} : { attributes: record.attributes }),\n iframeDepth: record.iframeDepth,\n shadowDepth: record.shadowDepth,\n interactive: record.interactive,\n };\n}\n\nfunction normalizeTagName(value: string): string {\n const tagName = String(value || \"\")\n .trim()\n .toLowerCase();\n return tagName.length === 0 ? \"div\" : tagName;\n}\n\nfunction isPseudoElementTagName(tagName: string): boolean {\n return tagName.startsWith(\"::\");\n}\n\nfunction normalizeNodeAttributes(\n attributes: readonly { readonly name: string; readonly value: string }[],\n): Array<{ name: string; value: string }> {\n return attributes\n .map((attribute) => ({\n name: String(attribute.name || \"\").trim(),\n value: String(attribute.value || \"\"),\n }))\n .filter((attribute) => attribute.name.length > 0);\n}\n\nfunction stripInternalSnapshotAttributes(\n attributes: readonly { readonly name: string; readonly value: string }[],\n): Array<{ name: string; value: string }> {\n return attributes.filter(\n (attribute) => !INTERNAL_SNAPSHOT_ATTRIBUTE_NAMES.has(attribute.name.toLowerCase()),\n );\n}\n\nfunction isLikelySubtreeHidden(node: DomSnapshotNode): boolean {\n const hiddenAttr = findAttributeValue(node.attributes, \"hidden\");\n if (hiddenAttr !== undefined) {\n return true;\n }\n\n if (\n normalizeTagName(node.nodeName) === \"input\" &&\n findAttributeValue(node.attributes, \"type\")?.toLowerCase() === \"hidden\"\n ) {\n return true;\n }\n\n const computedStyle = node.computedStyle;\n if (computedStyle?.display === \"none\") {\n return true;\n }\n if (parseOpacity(computedStyle?.opacity) <= 0) {\n return true;\n }\n return false;\n}\n\nfunction isLikelySelfHidden(\n node: DomSnapshotNode,\n nodesById: ReadonlyMap<number, DomSnapshotNode>,\n): boolean {\n const computedStyle = node.computedStyle;\n if (computedStyle?.visibility === \"hidden\" || computedStyle?.visibility === \"collapse\") {\n return true;\n }\n if (computedStyle?.display === \"contents\") {\n return false;\n }\n\n const rect = node.layout?.rect;\n if (rect === undefined) {\n return false;\n }\n\n if (rect.width > 0 && rect.height > 0) {\n return false;\n }\n\n return !hasVisibleOutOfFlowChild(node, nodesById);\n}\n\nfunction isLikelyInteractive(\n tagName: string,\n node: DomSnapshotNode,\n attributes: readonly { readonly name: string; readonly value: string }[],\n attributeIndex: ReadonlyMap<string, string>,\n): boolean {\n if (NATIVE_INTERACTIVE_TAGS.has(tagName)) {\n if (tagName === \"input\" && attributeIndex.get(\"type\")?.toLowerCase() === \"hidden\") {\n return false;\n }\n\n if (tagName !== \"a\") {\n return true;\n }\n }\n\n if (tagName === \"a\" && attributeIndex.has(\"href\")) {\n return true;\n }\n\n if (\n attributeIndex.has(\"onclick\") ||\n attributeIndex.has(\"onmousedown\") ||\n attributeIndex.has(\"onmouseup\") ||\n attributeIndex.has(\"data-action\") ||\n attributeIndex.has(\"data-click\") ||\n attributeIndex.has(\"data-toggle\")\n ) {\n return true;\n }\n\n if (hasNonNegativeTabIndex(attributeIndex.get(\"tabindex\"))) {\n return true;\n }\n\n if (attributeIndex.get(\"contenteditable\")?.toLowerCase() === \"true\") {\n return true;\n }\n\n const role = attributeIndex.get(\"role\")?.toLowerCase();\n return role !== undefined && INTERACTIVE_ROLE_SET.has(role);\n}\n\nfunction hasVisibleOutOfFlowChild(\n node: DomSnapshotNode,\n nodesById: ReadonlyMap<number, DomSnapshotNode>,\n): boolean {\n for (const childSnapshotNodeId of node.childSnapshotNodeIds) {\n const child = nodesById.get(childSnapshotNodeId);\n if (!child || child.nodeType !== 1) {\n continue;\n }\n\n if (isVisibleOutOfFlowNode(child)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction isLiveCounterSyncEligible(\n node: DomSnapshotNode,\n nodesById: ReadonlyMap<number, DomSnapshotNode>,\n): boolean {\n let current: DomSnapshotNode | undefined = node;\n while (current) {\n if (current.shadowRootType !== undefined && current.shadowRootType !== \"open\") {\n return false;\n }\n\n const parentSnapshotNodeId = current.parentSnapshotNodeId;\n if (parentSnapshotNodeId === undefined) {\n return true;\n }\n\n const parent = nodesById.get(parentSnapshotNodeId);\n if (!parent) {\n return true;\n }\n if (parent.shadowRootType !== undefined && parent.shadowRootType !== \"open\") {\n return false;\n }\n\n current = parent;\n }\n\n return true;\n}\n\nfunction isVisibleOutOfFlowNode(node: DomSnapshotNode): boolean {\n const position = node.computedStyle?.position;\n if (position !== \"absolute\" && position !== \"fixed\") {\n return false;\n }\n if (isExplicitlyHiddenByComputedStyle(node)) {\n return false;\n }\n\n const rect = node.layout?.rect;\n return rect !== undefined && rect.width > 0 && rect.height > 0;\n}\n\nfunction isExplicitlyHiddenByComputedStyle(node: DomSnapshotNode): boolean {\n if (node.computedStyle?.display === \"none\") {\n return true;\n }\n if (\n node.computedStyle?.visibility === \"hidden\" ||\n node.computedStyle?.visibility === \"collapse\"\n ) {\n return true;\n }\n return parseOpacity(node.computedStyle?.opacity) <= 0;\n}\n\nfunction parseOpacity(value: string | undefined): number {\n if (value === undefined) {\n return Number.NaN;\n }\n const parsed = Number.parseFloat(value);\n return Number.isFinite(parsed) ? parsed : Number.NaN;\n}\n\nfunction buildSyntheticNodeId(snapshot: DomSnapshot, node: DomSnapshotNode): string {\n return `${snapshot.documentRef}:${String(snapshot.documentEpoch)}:${String(node.snapshotNodeId)}`;\n}\n\nfunction buildPathHint(\n tagName: string,\n attributes: readonly { readonly name: string; readonly value: string }[],\n): string {\n const id = findAttributeValue(attributes, \"id\");\n if (id) {\n return `${tagName}#${sanitizeHintToken(id)}`;\n }\n\n const testId = findAttributeValue(attributes, \"data-testid\");\n if (testId) {\n return `${tagName}[data-testid=\"${sanitizeHintToken(testId)}\"]`;\n }\n\n const name = findAttributeValue(attributes, \"name\");\n if (name) {\n return `${tagName}[name=\"${sanitizeHintToken(name)}\"]`;\n }\n\n const role = findAttributeValue(attributes, \"role\");\n if (role) {\n return `${tagName}[role=\"${sanitizeHintToken(role)}\"]`;\n }\n\n const className = findAttributeValue(attributes, \"class\");\n if (className) {\n const firstClass = className.split(/\\s+/).find((token) => token.trim().length > 0);\n if (firstClass) {\n return `${tagName}.${sanitizeHintToken(firstClass)}`;\n }\n }\n\n return tagName;\n}\n\nfunction sanitizeHintToken(value: string): string {\n return value.replace(/\"/g, '\\\\\"').trim();\n}\n\nfunction buildTextSnippet(value: string | undefined): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n const normalized = value.replace(/\\s+/g, \" \").trim();\n if (normalized.length === 0) {\n return undefined;\n }\n\n return normalized.length <= 120 ? normalized : `${normalized.slice(0, 117)}...`;\n}\n\nfunction findAttributeValue(\n attributes: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n const normalizedName = name.toLowerCase();\n return attributes.find((attribute) => attribute.name.toLowerCase() === normalizedName)?.value;\n}\n\nfunction indexNodeAttributes(\n attributes: readonly { readonly name: string; readonly value: string }[],\n): ReadonlyMap<string, string> {\n const indexed = new Map<string, string>();\n for (const attribute of attributes) {\n indexed.set(attribute.name.toLowerCase(), attribute.value);\n }\n return indexed;\n}\n\nfunction attributesToHtml(\n attributes: readonly { readonly name: string; readonly value: string }[],\n): string {\n if (attributes.length === 0) {\n return \"\";\n }\n\n return attributes\n .map((attribute) => ` ${attribute.name}=\"${escapeAttribute(attribute.value)}\"`)\n .join(\"\");\n}\n\nfunction escapeAttribute(value: string): string {\n return value\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/\"/g, \"&quot;\");\n}\n\nfunction escapeHtml(value: string): string {\n return value.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n}\n","import * as prettier from \"prettier\";\n\nconst PRETTIER_SCRIPT_PARSERS = [\"babel\", \"babel-ts\", \"typescript\"] as const;\n\nexport async function beautifyScriptContent(content: string): Promise<string> {\n let lastError: unknown;\n for (const parser of PRETTIER_SCRIPT_PARSERS) {\n try {\n return await prettier.format(content, {\n parser,\n });\n } catch (error) {\n lastError = error;\n }\n }\n\n throw new Error(\"failed to beautify script with available Prettier parsers\", {\n cause: lastError,\n });\n}\n","export async function deobfuscateScriptContent(input: { readonly content: string }): Promise<{\n readonly content: string;\n readonly transforms: readonly string[];\n}> {\n const webcrack = await loadWebcrack();\n const result = await webcrack(input.content, {\n unpack: false,\n deobfuscate: true,\n unminify: true,\n jsx: true,\n mangle: false,\n });\n const content = result.code;\n return {\n content,\n transforms: inferTransforms(input.content, content),\n };\n}\n\nasync function loadWebcrack(): Promise<(typeof import(\"webcrack\"))[\"webcrack\"]> {\n try {\n const { webcrack } = await import(\"webcrack\");\n return webcrack;\n } catch (error) {\n if (isMissingPackageError(error, \"webcrack\")) {\n throw new Error(\n 'Script deobfuscation requires the optional \"webcrack\" dependency. Install it with `npm install webcrack` in the environment running Opensteer.',\n );\n }\n throw error;\n }\n}\n\nfunction isMissingPackageError(error: unknown, packageName: string): boolean {\n return (\n error instanceof Error &&\n \"code\" in error &&\n error.code === \"ERR_MODULE_NOT_FOUND\" &&\n error.message.includes(packageName)\n );\n}\n\nfunction inferTransforms(original: string, deobfuscated: string): readonly string[] {\n if (original === deobfuscated) {\n return [];\n }\n\n const inferred = new Set<string>();\n\n if (\n /\\b_0x[a-f0-9]+\\b/i.test(original) ||\n /stringArray/i.test(original) ||\n /\\[\\s*['\"`][^'\"`]+['\"`]\\s*(?:,\\s*['\"`][^'\"`]+['\"`]\\s*)+\\]/.test(original)\n ) {\n inferred.add(\"string-array\");\n }\n if (/\\bwhile\\s*\\([^)]*\\)\\s*\\{\\s*switch\\b/s.test(original)) {\n inferred.add(\"control-flow\");\n }\n if (/\\\\x[0-9a-f]{2}|\\\\u[0-9a-f]{4}/i.test(original)) {\n inferred.add(\"hex-decoding\");\n }\n if (/\\bif\\s*\\(\\s*(?:false|0)\\s*\\)/.test(original)) {\n inferred.add(\"dead-code\");\n }\n if (/console\\[['\"](?:log|warn|error|debug|info)['\"]\\]/.test(original)) {\n inferred.add(\"disable-console-output\");\n }\n if (/selfDefending|debugProtection|domainLock/i.test(original)) {\n inferred.add(\"runtime-guards\");\n }\n\n return [...inferred];\n}\n","export interface SandboxClockApi {\n now(): number;\n performanceNow(): number;\n setTimeout(callback: (...args: unknown[]) => void, delay?: number, ...args: unknown[]): number;\n setInterval(callback: (...args: unknown[]) => void, delay?: number, ...args: unknown[]): number;\n clearTimeout(timerId: number): void;\n clearInterval(timerId: number): void;\n advanceClock(ms: number): number;\n}\n\nexport interface MinimalSandboxShimOptions {\n readonly clock: SandboxClockApi;\n readonly console: Console;\n readonly globals?: Readonly<Record<string, unknown>>;\n}\n\nexport function createMinimalSandboxGlobals(\n options: MinimalSandboxShimOptions,\n): Record<string, unknown> {\n return {\n console: options.console,\n JSON,\n TextEncoder,\n TextDecoder,\n URL,\n URLSearchParams,\n AbortController,\n AbortSignal,\n crypto: globalThis.crypto,\n structuredClone,\n atob: globalThis.atob ?? ((value: string) => Buffer.from(value, \"base64\").toString(\"binary\")),\n btoa: globalThis.btoa ?? ((value: string) => Buffer.from(value, \"binary\").toString(\"base64\")),\n setTimeout: options.clock.setTimeout.bind(options.clock),\n setInterval: options.clock.setInterval.bind(options.clock),\n clearTimeout: options.clock.clearTimeout.bind(options.clock),\n clearInterval: options.clock.clearInterval.bind(options.clock),\n advanceClock: options.clock.advanceClock.bind(options.clock),\n ...options.globals,\n };\n}\n","import { createMinimalSandboxGlobals, type MinimalSandboxShimOptions } from \"./minimal.js\";\n\nexport interface SandboxAjaxRequest {\n readonly method: string;\n readonly url: string;\n readonly headers: Readonly<Record<string, string>>;\n readonly body?: string;\n}\n\nexport interface SandboxAjaxResponse {\n readonly status: number;\n readonly headers?: Readonly<Record<string, string>>;\n readonly body?: string;\n}\n\nexport interface SandboxAjaxDispatcher {\n dispatch(input: SandboxAjaxRequest): Promise<SandboxAjaxResponse>;\n}\n\nexport interface StandardSandboxShimOptions extends MinimalSandboxShimOptions {\n readonly ajax: SandboxAjaxDispatcher;\n readonly cookies?: Readonly<Record<string, string>>;\n readonly errors: string[];\n readonly pageUrl?: string;\n}\n\nexport function createStandardSandboxGlobals(\n options: StandardSandboxShimOptions,\n): Record<string, unknown> {\n const globals = createMinimalSandboxGlobals(options);\n const eventApi = createEventTargetApi();\n const documentEventApi = createEventTargetApi();\n const cookieJar = new Map(Object.entries(options.cookies ?? {}));\n const localStorage = createStorageArea();\n const sessionStorage = createStorageArea();\n const locationHref = options.pageUrl ?? \"https://sandbox.opensteer.invalid/\";\n\n class SandboxEvent {\n readonly type: string;\n readonly bubbles: boolean;\n readonly detail?: unknown;\n\n constructor(\n type: string,\n init: { readonly bubbles?: boolean; readonly detail?: unknown } = {},\n ) {\n this.type = type;\n this.bubbles = init.bubbles ?? false;\n this.detail = init.detail;\n }\n }\n\n class SandboxCustomEvent extends SandboxEvent {}\n\n const document = {\n URL: locationHref,\n documentURI: locationHref,\n readyState: \"complete\",\n createElement(tagName: string) {\n return createElementNode(tagName);\n },\n querySelector() {\n return null;\n },\n querySelectorAll() {\n return [];\n },\n addEventListener: documentEventApi.addEventListener,\n removeEventListener: documentEventApi.removeEventListener,\n dispatchEvent: documentEventApi.dispatchEvent,\n body: createElementNode(\"body\"),\n head: createElementNode(\"head\"),\n documentElement: createElementNode(\"html\"),\n get cookie() {\n return serializeCookieJar(cookieJar);\n },\n set cookie(value: string) {\n const separator = value.indexOf(\"=\");\n if (separator <= 0) {\n return;\n }\n const name = value.slice(0, separator).trim();\n const cookieValue =\n value\n .slice(separator + 1)\n .split(\";\")[0]\n ?.trim() ?? \"\";\n if (name.length === 0) {\n return;\n }\n cookieJar.set(name, cookieValue);\n },\n };\n\n const fetch = async (\n input: string | URL | Request,\n init: RequestInit = {},\n ): Promise<Response> => {\n const request = normalizeFetchRequest(input, init);\n const response = await options.ajax.dispatch(request);\n return new Response(response.body ?? \"\", {\n status: response.status,\n ...(response.headers === undefined ? {} : { headers: response.headers }),\n });\n };\n\n class XMLHttpRequest {\n static readonly UNSENT = 0;\n static readonly OPENED = 1;\n static readonly HEADERS_RECEIVED = 2;\n static readonly LOADING = 3;\n static readonly DONE = 4;\n\n readyState = XMLHttpRequest.UNSENT;\n status = 0;\n responseText = \"\";\n responseURL = \"\";\n onreadystatechange: ((this: XMLHttpRequest, event: SandboxEvent) => void) | null = null;\n onload: ((this: XMLHttpRequest, event: SandboxEvent) => void) | null = null;\n onerror: ((this: XMLHttpRequest, event: SandboxEvent) => void) | null = null;\n private readonly listeners = createEventTargetApi();\n private method = \"GET\";\n private url = \"\";\n private readonly headers = new Map<string, string>();\n\n open(method: string, url: string): void {\n this.method = method;\n this.url = new URL(url, locationHref).toString();\n this.readyState = XMLHttpRequest.OPENED;\n this.fire(\"readystatechange\");\n }\n\n setRequestHeader(name: string, value: string): void {\n this.headers.set(name, value);\n }\n\n addEventListener(type: string, listener: (...args: unknown[]) => void): void {\n this.listeners.addEventListener(type, listener);\n }\n\n removeEventListener(type: string, listener: (...args: unknown[]) => void): void {\n this.listeners.removeEventListener(type, listener);\n }\n\n async send(body?: unknown): Promise<void> {\n try {\n const response = await options.ajax.dispatch({\n method: this.method,\n url: this.url,\n headers: Object.fromEntries(this.headers),\n ...(body === undefined ? {} : { body: normalizeBody(body) }),\n });\n this.readyState = XMLHttpRequest.DONE;\n this.status = response.status;\n this.responseURL = this.url;\n this.responseText = response.body ?? \"\";\n this.fire(\"readystatechange\");\n this.fire(\"load\");\n } catch (error) {\n this.readyState = XMLHttpRequest.DONE;\n options.errors.push(normalizeErrorMessage(error));\n this.fire(\"readystatechange\");\n this.fire(\"error\");\n }\n }\n\n getResponseHeader(name: string): string | null {\n return null;\n }\n\n getAllResponseHeaders(): string {\n return \"\";\n }\n\n private fire(type: string): void {\n const event = new SandboxEvent(type);\n try {\n if (type === \"readystatechange\") {\n this.onreadystatechange?.call(this, event);\n } else if (type === \"load\") {\n this.onload?.call(this, event);\n } else if (type === \"error\") {\n this.onerror?.call(this, event);\n }\n this.listeners.dispatchEvent(event);\n } catch (error) {\n options.errors.push(normalizeErrorMessage(error));\n }\n }\n }\n\n return {\n ...globals,\n Event: SandboxEvent,\n CustomEvent: SandboxCustomEvent,\n Headers,\n Request,\n Response,\n EventTarget,\n fetch,\n XMLHttpRequest,\n addEventListener: eventApi.addEventListener,\n removeEventListener: eventApi.removeEventListener,\n dispatchEvent: eventApi.dispatchEvent,\n localStorage,\n sessionStorage,\n document,\n location: new URL(locationHref),\n navigator: {\n userAgent: \"OpensteerSandbox/1.0\",\n language: \"en-US\",\n languages: [\"en-US\"],\n platform: \"Linux x86_64\",\n cookieEnabled: true,\n maxTouchPoints: 0,\n },\n performance: {\n now: () => options.clock.performanceNow(),\n },\n };\n}\n\nfunction createElementNode(tagName: string): Record<string, unknown> {\n const eventApi = createEventTargetApi();\n return {\n tagName: tagName.toUpperCase(),\n style: {},\n dataset: {},\n children: [],\n appendChild(child: unknown) {\n (this.children as unknown[]).push(child);\n return child;\n },\n remove() {\n return undefined;\n },\n setAttribute(name: string, value: string) {\n (this as Record<string, unknown>)[name] = value;\n },\n getAttribute(name: string) {\n const value = (this as Record<string, unknown>)[name];\n return typeof value === \"string\" ? value : null;\n },\n addEventListener: eventApi.addEventListener,\n removeEventListener: eventApi.removeEventListener,\n dispatchEvent: eventApi.dispatchEvent,\n };\n}\n\nfunction createEventTargetApi(): {\n readonly addEventListener: (type: string, listener: (...args: unknown[]) => void) => void;\n readonly removeEventListener: (type: string, listener: (...args: unknown[]) => void) => void;\n readonly dispatchEvent: (event: { readonly type: string }) => boolean;\n} {\n const listeners = new Map<string, Set<(...args: unknown[]) => void>>();\n return {\n addEventListener(type, listener) {\n const current = listeners.get(type) ?? new Set<(...args: unknown[]) => void>();\n current.add(listener);\n listeners.set(type, current);\n },\n removeEventListener(type, listener) {\n listeners.get(type)?.delete(listener);\n },\n dispatchEvent(event) {\n for (const listener of listeners.get(event.type) ?? []) {\n listener(event);\n }\n return true;\n },\n };\n}\n\nfunction createStorageArea(): Storage {\n const storage = new Map<string, string>();\n return {\n get length() {\n return storage.size;\n },\n clear() {\n storage.clear();\n },\n getItem(key: string) {\n return storage.get(key) ?? null;\n },\n key(index: number) {\n return [...storage.keys()][index] ?? null;\n },\n removeItem(key: string) {\n storage.delete(key);\n },\n setItem(key: string, value: string) {\n storage.set(key, value);\n },\n };\n}\n\nfunction normalizeFetchRequest(\n input: string | URL | Request,\n init: RequestInit,\n): SandboxAjaxRequest {\n const url =\n input instanceof URL ? input.toString() : typeof input === \"string\" ? input : input.url;\n const headers = new Headers(\n init.headers ?? (input instanceof Request ? input.headers : undefined),\n );\n return {\n method: init.method ?? (input instanceof Request ? input.method : \"GET\"),\n url,\n headers: Object.fromEntries(headers.entries()),\n ...(init.body === undefined ? {} : { body: normalizeBody(init.body) }),\n };\n}\n\nfunction normalizeBody(body: unknown): string {\n if (typeof body === \"string\") {\n return body;\n }\n if (body instanceof URLSearchParams) {\n return body.toString();\n }\n if (body instanceof Uint8Array) {\n return Buffer.from(body).toString(\"base64\");\n }\n if (body instanceof ArrayBuffer) {\n return Buffer.from(body).toString(\"base64\");\n }\n return String(body);\n}\n\nfunction serializeCookieJar(cookieJar: ReadonlyMap<string, string>): string {\n return [...cookieJar.entries()].map(([name, value]) => `${name}=${value}`).join(\"; \");\n}\n\nfunction normalizeErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import { createStandardSandboxGlobals, type StandardSandboxShimOptions } from \"./standard.js\";\n\nexport interface FullSandboxShimOptions extends StandardSandboxShimOptions {\n readonly pageUrl?: string;\n}\n\nexport function createFullSandboxGlobals(options: FullSandboxShimOptions): Record<string, unknown> {\n const globals = createStandardSandboxGlobals(options);\n const eventListeners = new WeakMap<object, Map<string, Set<(...args: unknown[]) => void>>>();\n const pageUrl = new URL(options.pageUrl ?? \"https://sandbox.opensteer.invalid/\");\n\n function getListeners(target: object, type: string): Set<(...args: unknown[]) => void> {\n const byType =\n eventListeners.get(target) ?? new Map<string, Set<(...args: unknown[]) => void>>();\n eventListeners.set(target, byType);\n const current = byType.get(type) ?? new Set<(...args: unknown[]) => void>();\n byType.set(type, current);\n return current;\n }\n\n function makeWrapper(target: unknown) {\n const api = {\n length: target === null || target === undefined ? 0 : 1,\n on(type: string, listener: (...args: unknown[]) => void) {\n if (target !== null && typeof target === \"object\") {\n getListeners(target, type).add(listener);\n }\n return api;\n },\n trigger(type: string, detail?: unknown) {\n if (target !== null && typeof target === \"object\") {\n for (const listener of getListeners(target, type)) {\n listener({ type, detail, target });\n }\n }\n return api;\n },\n val(value?: string) {\n if (target === null || typeof target !== \"object\") {\n return value === undefined ? undefined : api;\n }\n if (value === undefined) {\n return (target as Record<string, unknown>).value;\n }\n (target as Record<string, unknown>).value = value;\n return api;\n },\n text(value?: string) {\n if (target === null || typeof target !== \"object\") {\n return value === undefined ? undefined : api;\n }\n if (value === undefined) {\n return (target as Record<string, unknown>).textContent;\n }\n (target as Record<string, unknown>).textContent = value;\n return api;\n },\n attr(name: string, value?: string) {\n if (target === null || typeof target !== \"object\") {\n return value === undefined ? undefined : api;\n }\n if (value === undefined) {\n return (target as Record<string, unknown>)[name];\n }\n (target as Record<string, unknown>)[name] = value;\n return api;\n },\n };\n return api;\n }\n\n const $ = ((target: unknown) => {\n if (\n typeof target === \"string\" &&\n typeof globals.document === \"object\" &&\n globals.document !== null\n ) {\n const querySelector = (\n globals.document as { readonly querySelector?: (selector: string) => unknown }\n ).querySelector;\n return makeWrapper(typeof querySelector === \"function\" ? querySelector(target) : null);\n }\n return makeWrapper(target);\n }) as ((target: unknown) => ReturnType<typeof makeWrapper>) & {\n ajax: (input: {\n readonly url: string;\n readonly method?: string;\n readonly headers?: Readonly<Record<string, string>>;\n readonly data?: unknown;\n readonly success?: (data: unknown, textStatus: string, response: Response) => void;\n readonly error?: (response: Response, textStatus: string, error: unknown) => void;\n }) => Promise<unknown>;\n };\n\n $.ajax = async (input) => {\n const response = await fetch(input.url, {\n method: input.method ?? \"GET\",\n ...(input.headers === undefined ? {} : { headers: input.headers }),\n ...(input.data === undefined\n ? {}\n : {\n body:\n typeof input.data === \"string\"\n ? input.data\n : input.data instanceof URLSearchParams\n ? input.data\n : JSON.stringify(input.data),\n }),\n });\n const text = await response.text();\n if (response.ok) {\n input.success?.(text, \"success\", response);\n return text;\n }\n input.error?.(response, \"error\", text);\n throw new Error(text || `ajax request failed with status ${String(response.status)}`);\n };\n\n return {\n ...globals,\n navigator: {\n userAgent:\n \"Mozilla/5.0 (Macintosh; Intel Mac OS X 14_4) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36\",\n language: \"en-US\",\n languages: [\"en-US\", \"en\"],\n platform: \"MacIntel\",\n cookieEnabled: true,\n maxTouchPoints: 0,\n },\n location: {\n href: pageUrl.href,\n origin: pageUrl.origin,\n protocol: pageUrl.protocol,\n host: pageUrl.host,\n hostname: pageUrl.hostname,\n pathname: pageUrl.pathname,\n search: pageUrl.search,\n hash: pageUrl.hash,\n assign(value: string) {\n void value;\n },\n replace(value: string) {\n void value;\n },\n reload() {\n return undefined;\n },\n },\n performance: {\n now: () => options.clock.performanceNow(),\n },\n $,\n jQuery: $,\n };\n}\n","import vm from \"node:vm\";\n\nimport type {\n OpensteerScriptSandboxInput,\n OpensteerScriptSandboxOutput,\n SandboxCapturedAjaxCall,\n} from \"@opensteer/protocol\";\n\nimport { toCanonicalJsonValue } from \"../json.js\";\nimport { createFullSandboxGlobals } from \"./sandbox-shims/full.js\";\nimport { createMinimalSandboxGlobals, type SandboxClockApi } from \"./sandbox-shims/minimal.js\";\nimport {\n createStandardSandboxGlobals,\n type SandboxAjaxDispatcher,\n type SandboxAjaxRequest,\n type SandboxAjaxResponse,\n} from \"./sandbox-shims/standard.js\";\n\nexport async function runScriptSandbox(\n input: OpensteerScriptSandboxInput & {\n readonly content: string;\n },\n): Promise<OpensteerScriptSandboxOutput> {\n const startedAt = Date.now();\n const errors: string[] = [];\n const capturedAjax: SandboxCapturedAjaxCall[] = [];\n const clock = new SandboxClock(input.clockMode ?? \"real\", (error) => {\n errors.push(normalizeErrorMessage(error));\n });\n const ajax = createSandboxAjaxDispatcher({\n routes: input.ajaxRoutes ?? [],\n capturedAjax,\n clock,\n });\n\n const baseGlobals = {\n ...(input.globals ?? {}),\n };\n const shimOptions = {\n clock,\n console,\n globals: baseGlobals,\n ajax,\n errors,\n ...(input.cookies === undefined ? {} : { cookies: input.cookies }),\n ...(typeof input.globals?.location === \"string\" ? { pageUrl: input.globals.location } : {}),\n };\n const globals =\n (input.fidelity ?? \"standard\") === \"minimal\"\n ? createMinimalSandboxGlobals(shimOptions)\n : (input.fidelity ?? \"standard\") === \"full\"\n ? createFullSandboxGlobals(shimOptions)\n : createStandardSandboxGlobals(shimOptions);\n\n const context = vm.createContext({\n ...globals,\n });\n Object.assign(context, {\n globalThis: context,\n self: context,\n window: context,\n });\n\n try {\n const script = new vm.Script(input.content, {\n filename: input.artifactId ?? \"sandboxed-script.js\",\n });\n const raw = script.runInContext(context, {\n timeout: input.timeoutMs,\n });\n const result = await withAsyncTimeout(Promise.resolve(raw), input.timeoutMs);\n await Promise.resolve();\n return {\n ...(result === undefined ? {} : { result: toCanonicalJsonValue(result) }),\n capturedAjax,\n errors,\n durationMs: Date.now() - startedAt,\n };\n } catch (error) {\n errors.push(normalizeErrorMessage(error));\n return {\n capturedAjax,\n errors,\n durationMs: Date.now() - startedAt,\n };\n } finally {\n clock.dispose();\n }\n}\n\nclass SandboxClock implements SandboxClockApi {\n private readonly startedAt = Date.now();\n private readonly performanceStartedAt =\n typeof globalThis.performance?.now === \"function\" ? globalThis.performance.now() : 0;\n private manualNow = this.startedAt;\n private nextTimerId = 1;\n private readonly timers = new Map<number, SandboxClockTimerRecord>();\n\n constructor(\n private readonly mode: \"real\" | \"manual\",\n private readonly onError: (error: unknown) => void,\n ) {}\n\n now(): number {\n return this.mode === \"manual\" ? this.manualNow : Date.now();\n }\n\n performanceNow(): number {\n return this.mode === \"manual\"\n ? this.manualNow - this.startedAt\n : (globalThis.performance?.now() ?? 0) - this.performanceStartedAt;\n }\n\n setTimeout(callback: (...args: unknown[]) => void, delay = 0, ...args: unknown[]): number {\n return this.registerTimer(false, callback, delay, args);\n }\n\n setInterval(callback: (...args: unknown[]) => void, delay = 0, ...args: unknown[]): number {\n return this.registerTimer(true, callback, delay, args);\n }\n\n clearTimeout(timerId: number): void {\n this.clearTimer(timerId);\n }\n\n clearInterval(timerId: number): void {\n this.clearTimer(timerId);\n }\n\n advanceClock(ms: number): number {\n if (this.mode !== \"manual\") {\n return this.now();\n }\n this.manualNow += Math.max(0, ms);\n this.flushManualTimers();\n return this.manualNow;\n }\n\n dispose(): void {\n for (const timerId of [...this.timers.keys()]) {\n this.clearTimer(timerId);\n }\n }\n\n private registerTimer(\n repeat: boolean,\n callback: (...args: unknown[]) => void,\n delay: number,\n args: readonly unknown[],\n ): number {\n const timerId = this.nextTimerId++;\n const normalizedDelay = Math.max(0, delay);\n const record: SandboxClockTimerRecord = {\n callback,\n args,\n delay: normalizedDelay,\n dueAt: this.now() + normalizedDelay,\n repeat,\n };\n if (this.mode === \"real\") {\n record.nativeTimer = (repeat ? setInterval : setTimeout)(() => {\n this.fireTimer(timerId);\n }, normalizedDelay);\n }\n this.timers.set(timerId, record);\n return timerId;\n }\n\n private clearTimer(timerId: number): void {\n const record = this.timers.get(timerId);\n if (record?.nativeTimer !== undefined) {\n if (record.repeat) {\n clearInterval(record.nativeTimer);\n } else {\n clearTimeout(record.nativeTimer);\n }\n }\n this.timers.delete(timerId);\n }\n\n private fireTimer(timerId: number): void {\n const record = this.timers.get(timerId);\n if (record === undefined) {\n return;\n }\n if (!record.repeat) {\n this.clearTimer(timerId);\n } else if (this.mode === \"manual\") {\n record.dueAt += record.delay;\n }\n try {\n record.callback(...record.args);\n } catch (error) {\n this.onError(error);\n }\n }\n\n private flushManualTimers(): void {\n let fired = true;\n while (fired) {\n fired = false;\n const dueTimers = [...this.timers.entries()]\n .filter(([, timer]) => timer.dueAt <= this.manualNow)\n .sort((left, right) => left[1].dueAt - right[1].dueAt);\n for (const [timerId] of dueTimers) {\n fired = true;\n this.fireTimer(timerId);\n }\n }\n }\n}\n\nfunction createSandboxAjaxDispatcher(input: {\n readonly routes: NonNullable<OpensteerScriptSandboxInput[\"ajaxRoutes\"]>;\n readonly capturedAjax: SandboxCapturedAjaxCall[];\n readonly clock: SandboxClockApi;\n}): SandboxAjaxDispatcher {\n return {\n async dispatch(request: SandboxAjaxRequest): Promise<SandboxAjaxResponse> {\n const route = input.routes.find((entry) => routeMatches(entry.urlPattern, request.url));\n const mode = route?.mode ?? \"passthrough\";\n const timestamp = input.clock.now();\n if (mode === \"capture\" || mode === \"passthrough\") {\n input.capturedAjax.push({\n method: request.method,\n url: request.url,\n headers: request.headers,\n ...(request.body === undefined ? {} : { body: request.body }),\n timestamp,\n });\n }\n if (mode === \"mock\" || mode === \"capture\") {\n return {\n status: route?.mockResponse?.status ?? 200,\n ...(route?.mockResponse?.headers === undefined\n ? {}\n : { headers: route.mockResponse.headers }),\n ...(route?.mockResponse?.body === undefined ? {} : { body: route.mockResponse.body }),\n };\n }\n\n const response = await fetch(request.url, {\n method: request.method,\n headers: request.headers,\n ...(request.body === undefined ? {} : { body: request.body }),\n });\n return {\n status: response.status,\n headers: Object.fromEntries(response.headers.entries()),\n body: await response.text(),\n };\n },\n };\n}\n\nfunction routeMatches(pattern: string, url: string): boolean {\n if (pattern.startsWith(\"/\") && pattern.lastIndexOf(\"/\") > 0) {\n const lastSlash = pattern.lastIndexOf(\"/\");\n const source = pattern.slice(1, lastSlash);\n const flags = pattern.slice(lastSlash + 1);\n return new RegExp(source, flags).test(url);\n }\n if (pattern.includes(\"*\")) {\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, \"\\\\$&\").replaceAll(\"*\", \".*\");\n return new RegExp(`^${escaped}$`).test(url);\n }\n return url.includes(pattern);\n}\n\nasync function withAsyncTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined): Promise<T> {\n if (timeoutMs === undefined) {\n return promise;\n }\n\n return await Promise.race([\n promise,\n new Promise<T>((_resolve, reject) => {\n const timeout = setTimeout(() => {\n clearTimeout(timeout);\n reject(new Error(`script sandbox timed out after ${String(timeoutMs)}ms`));\n }, timeoutMs);\n }),\n ]);\n}\n\nfunction normalizeErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\ninterface SandboxClockTimerRecord {\n callback: (...args: unknown[]) => void;\n args: readonly unknown[];\n delay: number;\n dueAt: number;\n repeat: boolean;\n nativeTimer?: NodeJS.Timeout;\n}\n","import type { CaptchaType } from \"@opensteer/protocol\";\n\nimport type { CaptchaSolveRequest, CaptchaSolverAdapter } from \"./types.js\";\n\nconst CAPSOLVER_CREATE_TASK_URL = \"https://api.capsolver.com/createTask\";\nconst CAPSOLVER_GET_TASK_RESULT_URL = \"https://api.capsolver.com/getTaskResult\";\n\nexport function createCapSolver(apiKey: string): CaptchaSolverAdapter {\n return {\n provider: \"capsolver\",\n solve: async (input) => {\n const taskId = await createTask(apiKey, input);\n const solution = await pollTask(apiKey, taskId, input.signal);\n return {\n token: extractCaptchaToken(solution),\n };\n },\n };\n}\n\nasync function createTask(apiKey: string, input: CaptchaSolveRequest): Promise<number | string> {\n const response = await fetch(CAPSOLVER_CREATE_TASK_URL, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n body: JSON.stringify({\n clientKey: apiKey,\n task: {\n type: toCapSolverTaskType(input.type),\n websiteURL: input.pageUrl,\n websiteKey: input.siteKey,\n },\n }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n const payload = (await response.json()) as {\n readonly errorId?: number;\n readonly errorCode?: string;\n readonly errorDescription?: string;\n readonly taskId?: number | string;\n };\n if (!response.ok || payload.errorId !== 0 || payload.taskId === undefined) {\n throw new Error(\n `CapSolver createTask failed${payload.errorCode === undefined ? \"\" : `: ${payload.errorCode}`}${payload.errorDescription === undefined ? \"\" : ` (${payload.errorDescription})`}`,\n );\n }\n return payload.taskId;\n}\n\nasync function pollTask(\n apiKey: string,\n taskId: number | string,\n signal: AbortSignal | undefined,\n): Promise<Record<string, unknown>> {\n const deadline = Date.now() + 120_000;\n while (Date.now() < deadline) {\n signal?.throwIfAborted?.();\n await sleep(3_000, signal);\n const response = await fetch(CAPSOLVER_GET_TASK_RESULT_URL, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n body: JSON.stringify({\n clientKey: apiKey,\n taskId,\n }),\n ...(signal === undefined ? {} : { signal }),\n });\n const payload = (await response.json()) as {\n readonly errorId?: number;\n readonly errorCode?: string;\n readonly errorDescription?: string;\n readonly status?: string;\n readonly solution?: Record<string, unknown>;\n };\n if (!response.ok || payload.errorId !== 0) {\n throw new Error(\n `CapSolver getTaskResult failed${payload.errorCode === undefined ? \"\" : `: ${payload.errorCode}`}${payload.errorDescription === undefined ? \"\" : ` (${payload.errorDescription})`}`,\n );\n }\n if (payload.status === \"ready\" && payload.solution !== undefined) {\n return payload.solution;\n }\n }\n throw new Error(\"CapSolver solve timed out\");\n}\n\nfunction toCapSolverTaskType(type: CaptchaType): string {\n switch (type) {\n case \"recaptcha-v2\":\n return \"ReCaptchaV2TaskProxyLess\";\n case \"hcaptcha\":\n return \"HCaptchaTaskProxyLess\";\n case \"turnstile\":\n return \"AntiTurnstileTaskProxyLess\";\n }\n}\n\nfunction extractCaptchaToken(solution: Record<string, unknown>): string {\n const token =\n readString(solution.token) ??\n readString(solution.gRecaptchaResponse) ??\n readString(solution.captchaKey);\n if (token === undefined) {\n throw new Error(\"CapSolver returned a solution without a token\");\n }\n return token;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n const abort = () => {\n clearTimeout(timeout);\n reject(new Error(\"captcha solve aborted\"));\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n}\n","import type { CaptchaProvider, CaptchaType } from \"@opensteer/protocol\";\n\nimport type { CaptchaSolveRequest, CaptchaSolverAdapter } from \"./types.js\";\n\nconst TWO_CAPTCHA_CREATE_TASK_URL = \"https://api.2captcha.com/createTask\";\nconst TWO_CAPTCHA_GET_TASK_RESULT_URL = \"https://api.2captcha.com/getTaskResult\";\n\nexport function createTwoCaptchaSolver(apiKey: string): CaptchaSolverAdapter {\n return {\n provider: \"2captcha\",\n solve: async (input) => {\n const taskId = await createTask(apiKey, input);\n const solution = await pollTask(apiKey, taskId, input.signal);\n return {\n token: extractCaptchaToken(solution),\n };\n },\n };\n}\n\nasync function createTask(apiKey: string, input: CaptchaSolveRequest): Promise<number | string> {\n const response = await fetch(TWO_CAPTCHA_CREATE_TASK_URL, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n body: JSON.stringify({\n clientKey: apiKey,\n task: {\n type: toTwoCaptchaTaskType(input.type),\n websiteURL: input.pageUrl,\n websiteKey: input.siteKey,\n },\n }),\n ...(input.signal === undefined ? {} : { signal: input.signal }),\n });\n const payload = (await response.json()) as {\n readonly errorId?: number;\n readonly errorCode?: string;\n readonly errorDescription?: string;\n readonly taskId?: number | string;\n };\n if (!response.ok || payload.errorId !== 0 || payload.taskId === undefined) {\n throw new Error(\n `2Captcha createTask failed${payload.errorCode === undefined ? \"\" : `: ${payload.errorCode}`}${payload.errorDescription === undefined ? \"\" : ` (${payload.errorDescription})`}`,\n );\n }\n return payload.taskId;\n}\n\nasync function pollTask(\n apiKey: string,\n taskId: number | string,\n signal: AbortSignal | undefined,\n): Promise<Record<string, unknown>> {\n const deadline = Date.now() + 120_000;\n while (Date.now() < deadline) {\n signal?.throwIfAborted?.();\n await sleep(5_000, signal);\n const response = await fetch(TWO_CAPTCHA_GET_TASK_RESULT_URL, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json; charset=utf-8\",\n },\n body: JSON.stringify({\n clientKey: apiKey,\n taskId,\n }),\n ...(signal === undefined ? {} : { signal }),\n });\n const payload = (await response.json()) as {\n readonly errorId?: number;\n readonly errorCode?: string;\n readonly errorDescription?: string;\n readonly status?: string;\n readonly solution?: Record<string, unknown>;\n };\n if (!response.ok || payload.errorId !== 0) {\n throw new Error(\n `2Captcha getTaskResult failed${payload.errorCode === undefined ? \"\" : `: ${payload.errorCode}`}${payload.errorDescription === undefined ? \"\" : ` (${payload.errorDescription})`}`,\n );\n }\n if (payload.status === \"ready\" && payload.solution !== undefined) {\n return payload.solution;\n }\n }\n throw new Error(\"2Captcha solve timed out\");\n}\n\nfunction toTwoCaptchaTaskType(type: CaptchaType): string {\n switch (type) {\n case \"recaptcha-v2\":\n return \"RecaptchaV2TaskProxyless\";\n case \"hcaptcha\":\n return \"HCaptchaTaskProxyless\";\n case \"turnstile\":\n return \"TurnstileTaskProxyless\";\n }\n}\n\nfunction extractCaptchaToken(solution: Record<string, unknown>): string {\n const token =\n readString(solution.token) ??\n readString(solution.gRecaptchaResponse) ??\n readString(solution.captchaKey) ??\n readString(solution.code);\n if (token === undefined) {\n throw new Error(\"2Captcha returned a solution without a token\");\n }\n return token;\n}\n\nfunction readString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.length > 0 ? value : undefined;\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(resolve, ms);\n const abort = () => {\n clearTimeout(timeout);\n reject(new Error(\"captcha solve aborted\"));\n };\n signal?.addEventListener(\"abort\", abort, { once: true });\n });\n}\n","import type { BrowserCoreEngine, PageRef } from \"@opensteer/browser-core\";\nimport type { CaptchaDetectionResult } from \"@opensteer/protocol\";\n\nconst CAPTCHA_DETECTION_SCRIPT = `(() => {\n const pageUrl = location.href;\n const findSiteKey = (selectors) => {\n for (const selector of selectors) {\n const element = document.querySelector(selector);\n if (!element) continue;\n const siteKey = element.getAttribute('data-sitekey') ||\n element.getAttribute('sitekey') ||\n element.getAttribute('data-key');\n if (siteKey) return siteKey;\n }\n return undefined;\n };\n const iframeSrc = Array.from(document.querySelectorAll('iframe'))\n .map((iframe) => iframe.getAttribute('src') || '')\n .find((src) => /recaptcha|hcaptcha|turnstile/i.test(src));\n const fromIframe = iframeSrc ? (() => {\n try {\n const url = new URL(iframeSrc, pageUrl);\n return url.searchParams.get('k') || url.searchParams.get('sitekey') || undefined;\n } catch {\n return undefined;\n }\n })() : undefined;\n\n const recaptchaSiteKey =\n findSiteKey(['.g-recaptcha', '[data-sitekey][data-callback]', 'div[data-sitekey]']) ||\n fromIframe ||\n window.___grecaptcha_cfg?.sitekey;\n if (window.grecaptcha || recaptchaSiteKey) {\n return { type: 'recaptcha-v2', siteKey: recaptchaSiteKey, pageUrl };\n }\n\n const hcaptchaSiteKey =\n findSiteKey(['.h-captcha', '[data-hcaptcha-response]', '[data-sitekey][data-theme]']) ||\n fromIframe;\n if (window.hcaptcha || hcaptchaSiteKey) {\n return { type: 'hcaptcha', siteKey: hcaptchaSiteKey, pageUrl };\n }\n\n const turnstileSiteKey =\n findSiteKey(['.cf-turnstile', '[data-sitekey][data-action]', '[name=\"cf-turnstile-response\"]']) ||\n fromIframe;\n if (window.turnstile || turnstileSiteKey) {\n return { type: 'turnstile', siteKey: turnstileSiteKey, pageUrl };\n }\n\n return null;\n})();`;\n\nexport async function detectCaptchaOnPage(\n engine: BrowserCoreEngine,\n pageRef: PageRef,\n): Promise<CaptchaDetectionResult | undefined> {\n const evaluated = await engine.evaluatePage({\n pageRef,\n script: CAPTCHA_DETECTION_SCRIPT,\n });\n const candidate = evaluated.data as CaptchaDetectionResult | null;\n if (\n candidate === null ||\n typeof candidate !== \"object\" ||\n typeof candidate.type !== \"string\" ||\n typeof candidate.siteKey !== \"string\" ||\n typeof candidate.pageUrl !== \"string\"\n ) {\n return undefined;\n }\n return candidate;\n}\n","import type { BrowserCoreEngine, PageRef } from \"@opensteer/browser-core\";\nimport type { CaptchaType } from \"@opensteer/protocol\";\n\nexport async function injectCaptchaToken(input: {\n readonly engine: BrowserCoreEngine;\n readonly pageRef: PageRef;\n readonly type: CaptchaType;\n readonly token: string;\n}): Promise<boolean> {\n const result = await input.engine.evaluatePage({\n pageRef: input.pageRef,\n script: CAPTCHA_INJECTION_SCRIPT,\n args: [\n {\n type: input.type,\n token: input.token,\n },\n ],\n });\n return result.data === true;\n}\n\nconst CAPTCHA_INJECTION_SCRIPT = `(({ type, token }) => {\n const writeValue = (selectors) => {\n for (const selector of selectors) {\n const elements = document.querySelectorAll(selector);\n for (const element of elements) {\n if (!(element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement)) continue;\n element.value = token;\n element.dispatchEvent(new Event('input', { bubbles: true }));\n element.dispatchEvent(new Event('change', { bubbles: true }));\n }\n }\n };\n const invokeCallbacks = () => {\n const callbacks = [];\n if (window.___grecaptcha_cfg?.clients) {\n callbacks.push(...Object.values(window.___grecaptcha_cfg.clients));\n }\n callbacks.push(window.onCaptchaSolved, window.cfCallback, window.turnstileCallback);\n for (const candidate of callbacks) {\n if (typeof candidate === 'function') {\n try {\n candidate(token);\n } catch {}\n }\n }\n };\n\n switch (type) {\n case 'recaptcha-v2':\n writeValue(['textarea[name=\"g-recaptcha-response\"]', '#g-recaptcha-response']);\n break;\n case 'hcaptcha':\n writeValue(['textarea[name=\"h-captcha-response\"]', '[name=\"h-captcha-response\"]']);\n break;\n case 'turnstile':\n writeValue(['input[name=\"cf-turnstile-response\"]', 'textarea[name=\"cf-turnstile-response\"]']);\n break;\n }\n invokeCallbacks();\n return true;\n})`;\n","import type {\n OpensteerInteractionDiffOutput,\n OpensteerInteractionTraceRecord,\n} from \"@opensteer/protocol\";\n\nexport function diffInteractionTraces(\n left: OpensteerInteractionTraceRecord,\n right: OpensteerInteractionTraceRecord,\n): OpensteerInteractionDiffOutput {\n const eventSequenceMismatches: string[] = [];\n const eventPropertyMismatches: string[] = [];\n const stateMismatches: string[] = [];\n const downstreamRequestMismatches: string[] = [];\n\n const maxEvents = Math.max(left.payload.events.length, right.payload.events.length);\n for (let index = 0; index < maxEvents; index += 1) {\n const leftEvent = left.payload.events[index];\n const rightEvent = right.payload.events[index];\n if (leftEvent === undefined || rightEvent === undefined) {\n eventSequenceMismatches.push(\n `event[${String(index)}] exists only on ${leftEvent === undefined ? \"right\" : \"left\"}`,\n );\n continue;\n }\n\n if (leftEvent.type !== rightEvent.type || leftEvent.targetPath !== rightEvent.targetPath) {\n eventSequenceMismatches.push(\n `event[${String(index)}] ${leftEvent.type}@${leftEvent.targetPath ?? \"<unknown>\"} != ${rightEvent.type}@${rightEvent.targetPath ?? \"<unknown>\"}`,\n );\n }\n\n for (const propertyName of new Set([\n ...Object.keys(leftEvent.properties),\n ...Object.keys(rightEvent.properties),\n ])) {\n const leftValue = leftEvent.properties[propertyName];\n const rightValue = rightEvent.properties[propertyName];\n if (JSON.stringify(leftValue) !== JSON.stringify(rightValue)) {\n eventPropertyMismatches.push(\n `event[${String(index)}].${propertyName}: ${JSON.stringify(leftValue)} != ${JSON.stringify(rightValue)}`,\n );\n }\n }\n }\n\n for (const field of [\n \"cookiesChanged\",\n \"storageChanged\",\n \"hiddenFieldsChanged\",\n \"globalsChanged\",\n ] as const) {\n const leftValues = new Set(left.payload.stateDelta?.[field] ?? []);\n const rightValues = new Set(right.payload.stateDelta?.[field] ?? []);\n for (const value of new Set([...leftValues, ...rightValues])) {\n if (!leftValues.has(value) || !rightValues.has(value)) {\n stateMismatches.push(`${field}.${value} differs`);\n }\n }\n }\n\n const leftRequests = new Set(left.payload.networkRecordIds);\n const rightRequests = new Set(right.payload.networkRecordIds);\n for (const value of new Set([...leftRequests, ...rightRequests])) {\n if (!leftRequests.has(value) || !rightRequests.has(value)) {\n downstreamRequestMismatches.push(`network.${value} differs`);\n }\n }\n\n return {\n summary: {\n eventCountDelta: Math.abs(left.payload.events.length - right.payload.events.length),\n propertyMismatchCount: eventPropertyMismatches.length,\n stateMismatchCount: stateMismatches.length,\n downstreamRequestMismatchCount: downstreamRequestMismatches.length,\n },\n eventSequenceMismatches,\n eventPropertyMismatches,\n stateMismatches,\n downstreamRequestMismatches,\n };\n}\n","import { AsyncLocalStorage } from \"node:async_hooks\";\nimport path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport { rm } from \"node:fs/promises\";\n\nimport {\n bodyPayloadFromUtf8,\n createBodyPayload,\n matchesNetworkRecordFilters,\n type BrowserCoreEngine,\n isBrowserCoreError,\n type BodyPayload as BrowserBodyPayload,\n type DocumentEpoch,\n type DocumentRef,\n type FrameRef,\n type NetworkRecord as BrowserNetworkRecord,\n type PageRef,\n type SessionRef,\n} from \"@opensteer/browser-core\";\nimport {\n OPENSTEER_PROTOCOL_VERSION,\n OpensteerProtocolError,\n assertValidSemanticOperationInput,\n createNetworkRequestId,\n createSessionRef,\n opensteerExposedSemanticOperationNames,\n type BodyPayload as ProtocolBodyPayload,\n type OpensteerArtifactReadInput,\n type OpensteerArtifactReadOutput,\n type CaptchaDetectionResult,\n type CookieRecord,\n type JsonValue,\n type OpensteerCaptchaSolveInput,\n type OpensteerCaptchaSolveOutput,\n type OpensteerActionResult,\n type OpensteerAddInitScriptInput,\n type OpensteerAddInitScriptOutput,\n type OpensteerBrowserOptions,\n type OpensteerBrowserContextOptions,\n type OpensteerBrowserLaunchOptions,\n type OpensteerComputerExecuteInput,\n type OpensteerComputerExecuteOutput,\n type OpensteerCaptureScriptsInput,\n type OpensteerCaptureScriptsOutput,\n type OpensteerDomClickInput,\n type OpensteerDomExtractInput,\n type OpensteerDomExtractOutput,\n type OpensteerDomHoverInput,\n type OpensteerDomInputInput,\n type OpensteerDomScrollInput,\n type OpensteerError,\n type OpensteerNetworkDetailInput,\n type OpensteerNetworkQueryInput,\n type OpensteerNetworkQueryOutput,\n type OpensteerNetworkDetailOutput,\n type OpensteerNetworkReplayInput,\n type OpensteerNetworkReplayOutput,\n type OpensteerNetworkRedirectHop,\n type OpensteerCookieQueryInput,\n type OpensteerCookieQueryOutput,\n type OpensteerStorageQueryInput,\n type OpensteerStorageQueryOutput,\n type OpensteerStateQueryInput,\n type OpensteerStateQueryOutput,\n type OpensteerSessionFetchInput,\n type OpensteerSessionFetchOutput,\n type OpensteerNetworkSummaryRecord,\n type OpensteerReplayAttempt,\n type OpensteerStorageDomainSnapshot,\n type OpensteerStateDomainSnapshot,\n type OpensteerHiddenField,\n type OpensteerNavigationSummary,\n type OpensteerPageActivateInput,\n type OpensteerPageActivateOutput,\n type OpensteerPageCloseInput,\n type OpensteerPageCloseOutput,\n type OpensteerPageEvaluateInput,\n type OpensteerPageEvaluateOutput,\n type OpensteerPageGotoInput,\n type OpensteerPageGotoOutput,\n type OpensteerPageListInput,\n type OpensteerPageListOutput,\n type OpensteerPageNewInput,\n type OpensteerPageNewOutput,\n type OpensteerPageSnapshotInput,\n type OpensteerPageSnapshotOutput,\n type OpensteerRawRequestOutput,\n type OpensteerRequestBodyInput,\n type OpensteerRequestTransportResult,\n type OpensteerRequestResponseResult,\n type NetworkQueryRecord,\n type OpensteerOpenInput,\n type OpensteerOpenOutput,\n type OpensteerResolvedTarget,\n type OpensteerScreenshotSummary,\n type OpensteerSemanticOperationName,\n type OpensteerSessionInfo,\n type OpensteerSessionCloseOutput,\n type OpensteerScriptBeautifyInput,\n type OpensteerScriptBeautifyOutput,\n type OpensteerScriptDeobfuscateInput,\n type OpensteerScriptDeobfuscateOutput,\n type OpensteerScriptSandboxInput,\n type OpensteerScriptSandboxOutput,\n type OpensteerSnapshotMode,\n type OpensteerTargetInput,\n type OpensteerInteractionCaptureInput,\n type OpensteerInteractionCaptureOutput,\n type OpensteerInteractionCaptureStep,\n type OpensteerInteractionDiffInput,\n type OpensteerInteractionDiffOutput,\n type OpensteerInteractionGetInput,\n type OpensteerInteractionGetOutput,\n type OpensteerInteractionReplayInput,\n type OpensteerInteractionReplayOutput,\n type OpensteerStateDelta,\n type OpensteerStateSnapshot,\n type OpensteerEvent,\n type AppendObservationEventInput,\n type ObservationSink,\n type ObservationContext,\n type ObservabilityConfig,\n type SessionObservationSink,\n type StorageSnapshot,\n type TraceContext,\n type TransportKind,\n type HeaderEntry,\n type ScriptSourceArtifactData,\n} from \"@opensteer/protocol\";\n\nimport { manifestToExternalBinaryLocation, type ArtifactManifest } from \"../artifacts.js\";\nimport {\n takeActionBoundaryDiagnostics,\n type ActionBoundaryDiagnostics,\n} from \"../action-boundary.js\";\nimport { normalizeThrownOpensteerError } from \"../internal/errors.js\";\nimport { normalizeNonEmptyString, sha256Hex } from \"../internal/filesystem.js\";\nimport { canonicalJsonString, toCanonicalJsonValue } from \"../json.js\";\nimport { normalizeObservationContext } from \"../observation-utils.js\";\nimport { normalizeObservabilityConfig } from \"../observations.js\";\nimport {\n delayWithSignal,\n defaultPolicy,\n runWithPolicyTimeout,\n settleWithPolicy,\n type OpensteerPolicy,\n type TimeoutExecutionContext,\n} from \"../policy/index.js\";\nimport { createFilesystemOpensteerWorkspace, type FilesystemOpensteerWorkspace } from \"../root.js\";\nimport { OPENSTEER_RUNTIME_CORE_VERSION } from \"../version.js\";\nimport {\n buildPathSelectorHint,\n createDomRuntime,\n type DomActionOutcome,\n type DomDescriptorStore,\n type DomRuntime,\n type DomTargetRef,\n type ResolvedDomTarget,\n} from \"../runtimes/dom/index.js\";\nimport {\n createComputerUseRuntime,\n type ComputerUseRuntime,\n type ComputerUseRuntimeOutput,\n} from \"../runtimes/computer-use/index.js\";\nimport type {\n OpensteerInterceptScriptOptions,\n OpensteerRouteOptions,\n OpensteerRouteRegistration,\n} from \"./instrumentation.js\";\nimport {\n filterValidHttpHeaders,\n headerValue,\n parseStructuredResponseData,\n toProtocolBodyPayload,\n toProtocolRequestResponseResult,\n toProtocolRequestTransportResult,\n} from \"../requests/shared.js\";\nimport { finalizeMaterializedTransportRequest } from \"../reverse/materialization.js\";\nimport { NetworkHistory } from \"../network/history.js\";\nimport type { SavedNetworkQueryInput } from \"../network/saved-store.js\";\nimport { executeMatchedTlsTransportRequest as executeMatchedTlsTransportRequestWithCurl } from \"../requests/execution/matched-tls/index.js\";\nimport {\n assertValidOpensteerExtractionTemplateRoot,\n compileOpensteerExtractionFieldTargets,\n compilePersistedOpensteerExtractionPayloadFromFieldTargets,\n createOpensteerExtractionDescriptorStore,\n extractOpensteerExtractionFieldTargets,\n replayOpensteerExtractionPayload,\n type OpensteerExtractionDescriptorStore,\n type OpensteerExtractionDescriptorRecord,\n} from \"./extraction.js\";\nimport { inflateDataPathObject } from \"./extraction-data-path.js\";\nimport { clearOpensteerLiveCounters, compileOpensteerSnapshot } from \"./snapshot/compiler.js\";\nimport type { InteractionTraceRecord } from \"../registry.js\";\nimport { beautifyScriptContent } from \"../scripts/beautify.js\";\nimport { deobfuscateScriptContent } from \"../scripts/deobfuscate.js\";\nimport { runScriptSandbox } from \"../scripts/sandbox.js\";\nimport { createCapSolver } from \"../captcha/solver-capsolver.js\";\nimport { createTwoCaptchaSolver } from \"../captcha/solver-2captcha.js\";\nimport { detectCaptchaOnPage } from \"../captcha/detect.js\";\nimport { injectCaptchaToken } from \"../captcha/inject.js\";\nimport { diffInteractionTraces } from \"../interaction/diff.js\";\n\ntype DisposableBrowserCoreEngine = BrowserCoreEngine & {\n dispose?: () => Promise<void>;\n};\n\nexport interface OpensteerEngineFactoryOptions {\n readonly browser?: OpensteerBrowserOptions;\n readonly launch?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n}\n\nexport type OpensteerEngineFactory = (\n options: OpensteerEngineFactoryOptions,\n) => Promise<BrowserCoreEngine>;\n\nexport type OpensteerRuntimeWorkspace = FilesystemOpensteerWorkspace;\n\nexport interface OpensteerSessionRuntimeOptions {\n readonly name: string;\n readonly workspace?: OpensteerRuntimeWorkspace;\n readonly workspaceName?: string;\n readonly rootPath?: string;\n readonly engine?: BrowserCoreEngine;\n readonly engineFactory?: OpensteerEngineFactory;\n readonly policy?: OpensteerPolicy;\n readonly descriptorStore?: DomDescriptorStore;\n readonly extractionDescriptorStore?: OpensteerExtractionDescriptorStore;\n readonly cleanupRootOnClose?: boolean;\n readonly sessionInfo?: Partial<Omit<OpensteerSessionInfo, \"sessionId\" | \"activePageRef\">>;\n readonly observability?: Partial<ObservabilityConfig>;\n readonly observationSessionId?: string;\n readonly observationSink?: ObservationSink;\n}\n\ninterface OpensteerTraceArtifacts {\n readonly manifests: readonly ArtifactManifest[];\n}\n\ninterface PersistedComputerArtifacts {\n readonly manifests: readonly ArtifactManifest[];\n readonly screenshot: OpensteerScreenshotSummary;\n}\n\ninterface OpensteerSessionTraceInput {\n readonly operation: string;\n readonly startedAt: number;\n readonly completedAt: number;\n readonly outcome: \"ok\" | \"error\";\n readonly events?: readonly OpensteerEvent[];\n readonly data?: unknown;\n readonly error?: unknown;\n readonly artifacts?: OpensteerTraceArtifacts;\n readonly context?: TraceContext;\n}\n\ninterface PendingOperationEventCapture {\n readonly operation: OpensteerSemanticOperationName;\n readonly startedAt: number;\n readonly completedAt: number;\n readonly events: readonly OpensteerEvent[];\n}\n\ntype ObservationSessionScope =\n | {\n readonly mode: \"session\";\n readonly sessionId: string;\n }\n | {\n readonly mode: \"disabled\";\n };\n\ninterface RuntimeOperationOptions {\n readonly signal?: AbortSignal;\n readonly timeoutMs?: number;\n}\n\ninterface RuntimeBrowserBinding {\n readonly sessionRef: SessionRef;\n readonly pageRef: PageRef;\n}\n\ninterface MutationCapturePlan {\n readonly baselineRequestIds: ReadonlySet<string>;\n readonly capture: string;\n}\n\ninterface MutationCaptureFinalizeDiagnostics {\n readonly finalizeError?: OpensteerError;\n}\n\nconst MUTATION_CAPTURE_FINALIZE_TIMEOUT_MS = 5_000;\nconst PERSISTED_NETWORK_FLUSH_TIMEOUT_MS = 5_000;\nconst PERSISTED_NETWORK_SETTLE_POLL_MS = 25;\nconst PENDING_OPERATION_EVENT_CAPTURE_LIMIT = 64;\nconst PENDING_OPERATION_EVENT_CAPTURE_SKEW_MS = 1_000;\nconst REPLAY_PROBE_MIN_ATTEMPT_TIMEOUT_MS = 3_000;\nconst REPLAY_PROBE_MAX_ATTEMPT_TIMEOUT_MS = 15_000;\nconst REPLAY_PROBE_POST_SUCCESS_ATTEMPT_TIMEOUT_MS = 5_000;\n\ninterface ScriptTransformSource {\n readonly content: string;\n readonly artifactId?: string;\n readonly data?: ScriptSourceArtifactData;\n readonly scope?: ArtifactManifest[\"scope\"];\n}\n\nexport class OpensteerSessionRuntime {\n readonly workspace: string;\n readonly rootPath: string;\n\n private readonly workspaceName: string | undefined;\n private readonly injectedEngine: BrowserCoreEngine | undefined;\n private readonly engineFactory: OpensteerEngineFactory | undefined;\n private readonly policy: OpensteerPolicy;\n private readonly injectedDescriptorStore: DomDescriptorStore | undefined;\n private readonly injectedExtractionDescriptorStore:\n | OpensteerExtractionDescriptorStore\n | undefined;\n private readonly cleanupRootOnClose: boolean;\n private readonly sessionInfoBase: Partial<\n Omit<OpensteerSessionInfo, \"sessionId\" | \"activePageRef\">\n >;\n private observationConfig: ObservabilityConfig;\n private readonly observationSessionId: string | undefined;\n private readonly injectedObservationSink: ObservationSink | undefined;\n\n private root: OpensteerRuntimeWorkspace | undefined;\n private engine: DisposableBrowserCoreEngine | undefined;\n private dom: DomRuntime | undefined;\n private computer: ComputerUseRuntime | undefined;\n private readonly networkHistory = new NetworkHistory();\n private extractionDescriptors: OpensteerExtractionDescriptorStore | undefined;\n private sessionRef: SessionRef | undefined;\n private pageRef: PageRef | undefined;\n private runId: string | undefined;\n private readonly observationSessions = new Map<string, SessionObservationSink>();\n private readonly openingObservationSessions = new Map<string, Promise<SessionObservationSink>>();\n private readonly openedObservationSessions = new Set<SessionObservationSink>();\n private readonly observationSessionStorage = new AsyncLocalStorage<ObservationSessionScope>();\n private readonly operationEventStorage = new AsyncLocalStorage<OpensteerEvent[]>();\n private readonly pendingOperationEventCaptures: PendingOperationEventCapture[] = [];\n private ownsEngine = false;\n\n constructor(options: OpensteerSessionRuntimeOptions) {\n this.workspace = normalizeNamespace(options.name);\n this.workspaceName =\n options.workspaceName?.trim() === undefined || options.workspaceName?.trim().length === 0\n ? undefined\n : options.workspaceName.trim();\n this.root = options.workspace;\n this.rootPath =\n options.workspace?.rootPath ??\n options.rootPath ??\n path.resolve(process.cwd(), \".opensteer\", \"temporary\", randomUUID());\n this.injectedEngine = options.engine;\n this.engineFactory = options.engineFactory;\n this.policy = options.policy ?? defaultPolicy();\n this.injectedDescriptorStore = options.descriptorStore;\n this.injectedExtractionDescriptorStore = options.extractionDescriptorStore;\n this.cleanupRootOnClose = options.cleanupRootOnClose ?? options.workspace === undefined;\n this.sessionInfoBase = options.sessionInfo ?? {};\n this.observationConfig = normalizeObservabilityConfig(options.observability);\n this.observationSessionId = options.observationSessionId;\n this.injectedObservationSink = options.observationSink;\n\n if (this.injectedEngine === undefined && this.engineFactory === undefined) {\n throw new Error(\"OpensteerSessionRuntime requires an engine or engineFactory.\");\n }\n }\n\n async info(): Promise<OpensteerSessionInfo> {\n const base = this.sessionInfoBase;\n return {\n provider: base.provider ?? {\n mode: \"local\",\n ownership: \"owned\",\n engine: \"playwright\",\n },\n ...(base.workspace === undefined ? {} : { workspace: base.workspace }),\n ...(this.sessionRef === undefined ? {} : { sessionId: this.sessionRef }),\n ...(this.pageRef === undefined ? {} : { activePageRef: this.pageRef }),\n reconnectable: base.reconnectable ?? !this.cleanupRootOnClose,\n capabilities: base.capabilities ?? {\n semanticOperations: opensteerExposedSemanticOperationNames,\n instrumentation: {\n route: true,\n interceptScript: true,\n networkStream: false,\n },\n },\n ...(base.grants === undefined ? {} : { grants: base.grants }),\n runtime: base.runtime ?? {\n protocolVersion: OPENSTEER_PROTOCOL_VERSION,\n runtimeCoreVersion: OPENSTEER_RUNTIME_CORE_VERSION,\n },\n };\n }\n\n async setObservabilityConfig(\n input: Partial<ObservabilityConfig> | undefined,\n ): Promise<ObservabilityConfig> {\n this.observationConfig = normalizeObservabilityConfig(input);\n await this.ensureConfiguredObservationSession();\n return this.observationConfig;\n }\n\n async withObservationSessionId<T>(sessionId: string, task: () => Promise<T>): Promise<T> {\n return await this.observationSessionStorage.run(\n {\n mode: \"session\",\n sessionId: normalizeNonEmptyString(\"sessionId\", sessionId),\n },\n task,\n );\n }\n\n async withoutObservationSession<T>(task: () => Promise<T>): Promise<T> {\n return await this.observationSessionStorage.run(\n {\n mode: \"disabled\",\n },\n task,\n );\n }\n\n async open(\n input: OpensteerOpenInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerOpenOutput> {\n assertValidSemanticOperationInput(\"session.open\", input);\n\n if (input.workspace !== undefined && normalizeNamespace(input.workspace) !== this.workspace) {\n throw new Error(\n `session.open requested workspace \"${input.workspace}\" but runtime is bound to \"${this.workspace}\"`,\n );\n }\n\n if ((await this.ensureLiveRuntimeBinding()) === \"live\") {\n if (input.url !== undefined) {\n return this.goto(\n {\n url: input.url,\n },\n options,\n );\n }\n return this.readNavigationSummary();\n }\n\n const startedAt = Date.now();\n const root = await this.ensureRoot();\n const engine = await this.ensureEngine({\n ...(input.browser === undefined ? {} : { browser: input.browser }),\n ...(input.launch === undefined ? {} : { launch: input.launch }),\n ...(input.context === undefined ? {} : { context: input.context }),\n });\n const run = await root.traces.createRun();\n this.runId = run.runId;\n let openedSessionRef: SessionRef | undefined;\n let openedPageRef: PageRef | undefined;\n\n try {\n const { state, frameRef } = await this.runWithOperationTimeout(\n \"session.open\",\n async (timeout) => {\n const sessionRef = await timeout.runStep(() => engine.createSession());\n openedSessionRef = sessionRef;\n const createdPage = await timeout.runStep(() =>\n engine.createPage({\n sessionRef,\n ...(input.url === undefined ? {} : { url: input.url }),\n }),\n );\n openedPageRef = createdPage.data.pageRef;\n\n timeout.throwIfAborted();\n this.sessionRef = sessionRef;\n this.pageRef = createdPage.data.pageRef;\n await timeout.runStep(() => this.ensureSemantics());\n\n let frameRef = createdPage.frameRef;\n if (input.url !== undefined) {\n await timeout.runStep(() =>\n settleWithPolicy(this.policy.settle, {\n operation: \"session.open\",\n trigger: \"navigation\",\n engine: this.requireEngine(),\n pageRef: createdPage.data.pageRef,\n signal: timeout.signal,\n remainingMs: timeout.remainingMs(),\n }),\n );\n }\n\n return {\n state: await timeout.runStep(() => this.readNavigationSummary()),\n frameRef,\n };\n },\n options,\n );\n await this.appendTrace({\n operation: \"session.open\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: state,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n ...(frameRef === undefined ? {} : { frameRef }),\n }),\n });\n return state;\n } catch (error) {\n await this.appendTrace({\n operation: \"session.open\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n });\n await this.cleanupSessionResources(engine, openedPageRef, openedSessionRef);\n await this.resetRuntimeState({\n disposeEngine: true,\n });\n throw error;\n }\n }\n\n async listPages(\n input: OpensteerPageListInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageListOutput> {\n assertValidSemanticOperationInput(\"page.list\", input);\n\n if ((await this.ensureLiveRuntimeBinding()) === \"unbound\") {\n return { pages: [] };\n }\n\n const startedAt = Date.now();\n const context = buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n });\n try {\n const output = await this.runWithOperationTimeout(\n \"page.list\",\n async (timeout) => {\n const pages = await timeout.runStep(() =>\n this.requireEngine().listPages({ sessionRef: this.requireSessionRef() }),\n );\n return {\n ...(this.pageRef === undefined ? {} : { activePageRef: this.pageRef }),\n pages,\n } satisfies OpensteerPageListOutput;\n },\n options,\n );\n const events = await this.drainPendingEngineEvents(context);\n\n await this.appendTrace({\n operation: \"page.list\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n ...(events === undefined ? {} : { events }),\n data: {\n count: output.pages.length,\n ...(output.activePageRef === undefined ? {} : { activePageRef: output.activePageRef }),\n },\n context,\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.list\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context,\n });\n throw error;\n }\n }\n\n async newPage(\n input: OpensteerPageNewInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageNewOutput> {\n assertValidSemanticOperationInput(\"page.new\", input);\n\n if ((await this.ensureLiveRuntimeBinding()) === \"unbound\") {\n if (input.openerPageRef !== undefined) {\n throw new OpensteerProtocolError(\n \"invalid-request\",\n \"page.new cannot use openerPageRef before a session exists\",\n );\n }\n const summary = await this.open(input.url === undefined ? {} : { url: input.url }, options);\n return {\n pageRef: await this.ensurePageRef(),\n ...summary,\n };\n }\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"page.new\",\n async (timeout) => {\n const created = await timeout.runStep(() =>\n this.requireEngine().createPage({\n sessionRef: this.requireSessionRef(),\n ...(input.openerPageRef === undefined ? {} : { openerPageRef: input.openerPageRef }),\n ...(input.url === undefined ? {} : { url: input.url }),\n }),\n );\n this.pageRef = created.data.pageRef;\n return this.readCreatedPageOutput(created.data.pageRef);\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"page.new\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: output,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.new\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async activatePage(\n input: OpensteerPageActivateInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageActivateOutput> {\n assertValidSemanticOperationInput(\"page.activate\", input);\n const startedAt = Date.now();\n\n try {\n const output = await this.runWithOperationTimeout(\n \"page.activate\",\n async (timeout) => {\n await timeout.runStep(() =>\n this.requireEngine().activatePage({ pageRef: input.pageRef }),\n );\n this.pageRef = input.pageRef;\n return this.readNavigationSummary(input.pageRef);\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"page.activate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: output,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.activate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async closePage(\n input: OpensteerPageCloseInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageCloseOutput> {\n assertValidSemanticOperationInput(\"page.close\", input);\n const targetPageRef = input.pageRef ?? (await this.ensurePageRef());\n const startedAt = Date.now();\n\n try {\n const output = await this.runWithOperationTimeout(\n \"page.close\",\n async (timeout) => {\n await timeout.runStep(() => this.requireEngine().closePage({ pageRef: targetPageRef }));\n let pages = await timeout.runStep(() =>\n this.requireEngine().listPages({ sessionRef: this.requireSessionRef() }),\n );\n let activePageRef =\n pages.find((page) => page.pageRef === this.pageRef)?.pageRef ?? pages.at(-1)?.pageRef;\n\n if (pages.length === 0) {\n const created = await timeout.runStep(() =>\n this.requireEngine().createPage({\n sessionRef: this.requireSessionRef(),\n }),\n );\n activePageRef = created.data.pageRef;\n pages = await timeout.runStep(() =>\n this.requireEngine().listPages({ sessionRef: this.requireSessionRef() }),\n );\n }\n\n if (activePageRef !== undefined) {\n await timeout.runStep(() =>\n this.requireEngine().activatePage({\n pageRef: activePageRef,\n }),\n );\n }\n\n this.pageRef = activePageRef;\n\n return {\n closedPageRef: targetPageRef,\n ...(activePageRef === undefined ? {} : { activePageRef }),\n pages,\n } satisfies OpensteerPageCloseOutput;\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"page.close\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n closedPageRef: output.closedPageRef,\n ...(output.activePageRef === undefined ? {} : { activePageRef: output.activePageRef }),\n count: output.pages.length,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.close\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async goto(\n input: OpensteerPageGotoInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageGotoOutput> {\n assertValidSemanticOperationInput(\"page.goto\", input);\n\n const pageRef = await this.ensurePageRef();\n const startedAt = Date.now();\n let mutationCaptureDiagnostics: MutationCaptureFinalizeDiagnostics | undefined;\n\n try {\n const { navigation, state } = await this.runMutationCapturedOperation(\n \"page.goto\",\n {\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n options,\n },\n async (timeout) => {\n const navigation = await this.navigatePage(\n {\n operation: \"page.goto\",\n pageRef,\n url: input.url,\n },\n timeout,\n );\n timeout.throwIfAborted();\n return {\n navigation,\n state: await timeout.runStep(() => this.readNavigationSummary(pageRef)),\n };\n },\n (diagnostics) => {\n mutationCaptureDiagnostics = diagnostics;\n },\n );\n await this.appendTrace({\n operation: \"page.goto\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n url: input.url,\n state,\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n frameRef: navigation.data.mainFrame.frameRef,\n }),\n });\n return state;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.goto\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n data: buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async evaluate(\n input: OpensteerPageEvaluateInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageEvaluateOutput> {\n assertValidSemanticOperationInput(\"page.evaluate\", input);\n const pageRef = input.pageRef ?? (await this.ensurePageRef());\n const startedAt = Date.now();\n let mutationCaptureDiagnostics: MutationCaptureFinalizeDiagnostics | undefined;\n\n try {\n const output = await this.runMutationCapturedOperation(\n \"page.evaluate\",\n { options },\n async (timeout) => {\n const remainingMs = timeout.remainingMs();\n const evaluated = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: input.script,\n ...(input.args === undefined ? {} : { args: input.args }),\n ...(remainingMs === undefined ? {} : { timeoutMs: remainingMs }),\n }),\n );\n\n return {\n pageRef,\n value: toJsonValueOrNull(evaluated.data),\n } satisfies OpensteerPageEvaluateOutput;\n },\n (diagnostics) => {\n mutationCaptureDiagnostics = diagnostics;\n },\n );\n\n await this.appendTrace({\n operation: \"page.evaluate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n pageRef: output.pageRef,\n value: output.value,\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.evaluate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n data: buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async addInitScript(\n input: OpensteerAddInitScriptInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerAddInitScriptOutput> {\n assertValidSemanticOperationInput(\"page.add-init-script\", input);\n const binding = await this.ensureBrowserTransportBinding();\n const pageRef = input.pageRef ?? binding.pageRef;\n const startedAt = Date.now();\n\n try {\n const output = await this.runWithOperationTimeout(\n \"page.add-init-script\",\n async () =>\n this.requireEngine().addInitScript({\n sessionRef: binding.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef }),\n script: input.script,\n ...(input.args === undefined ? {} : { args: input.args }),\n }),\n options,\n );\n\n await this.appendTrace({\n operation: \"page.add-init-script\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: output,\n context: buildRuntimeTraceContext({\n sessionRef: binding.sessionRef,\n pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.add-init-script\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: binding.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async snapshot(\n input: OpensteerPageSnapshotInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerPageSnapshotOutput> {\n assertValidSemanticOperationInput(\"page.snapshot\", input);\n\n const pageRef = await this.ensurePageRef();\n const mode: OpensteerSnapshotMode = input.mode ?? \"action\";\n const startedAt = Date.now();\n\n try {\n const { artifacts, output } = await this.runWithOperationTimeout(\n \"page.snapshot\",\n async (timeout) => {\n await timeout.runStep(() =>\n settleWithPolicy(this.policy.settle, {\n operation: \"page.snapshot\",\n trigger: \"snapshot\",\n engine: this.requireEngine(),\n pageRef,\n signal: timeout.signal,\n remainingMs: timeout.remainingMs(),\n }),\n );\n const compiled = await timeout.runStep(() =>\n compileOpensteerSnapshot({\n engine: this.requireEngine(),\n pageRef,\n mode,\n }),\n );\n timeout.throwIfAborted();\n const artifacts = await this.captureSnapshotArtifacts(\n pageRef,\n {\n includeHtmlSnapshot: true,\n },\n timeout,\n );\n\n const output: OpensteerPageSnapshotOutput = {\n url: compiled.url,\n title: compiled.title,\n mode,\n html: compiled.html,\n counters: compiled.counters,\n };\n\n return {\n artifacts,\n output,\n };\n },\n options,\n );\n const context = buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n });\n const events = await this.drainPendingEngineEvents(context);\n\n await this.appendTrace({\n operation: \"page.snapshot\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n artifacts,\n ...(events === undefined ? {} : { events }),\n data: {\n mode,\n url: output.url,\n title: output.title,\n counterCount: output.counters.length,\n },\n context,\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"page.snapshot\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async click(\n input: OpensteerDomClickInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerActionResult> {\n assertValidSemanticOperationInput(\"dom.click\", input);\n\n return this.runDomAction(\n \"dom.click\",\n input,\n async (pageRef, target, timeout) => {\n const result = await this.requireDom().click({\n pageRef,\n target,\n ...(input.button === undefined ? {} : { button: input.button }),\n ...(input.clickCount === undefined ? {} : { clickCount: input.clickCount }),\n ...(input.modifiers === undefined ? {} : { modifiers: input.modifiers }),\n timeout,\n });\n return {\n result,\n };\n },\n options,\n );\n }\n\n async hover(\n input: OpensteerDomHoverInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerActionResult> {\n assertValidSemanticOperationInput(\"dom.hover\", input);\n\n return this.runDomAction(\n \"dom.hover\",\n input,\n async (pageRef, target, timeout) => {\n const result = await this.requireDom().hover({\n pageRef,\n target,\n timeout,\n });\n return {\n result,\n };\n },\n options,\n );\n }\n\n async input(\n input: OpensteerDomInputInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerActionResult> {\n assertValidSemanticOperationInput(\"dom.input\", input);\n\n return this.runDomAction(\n \"dom.input\",\n input,\n async (pageRef, target, timeout) => {\n const resolved = await this.requireDom().input({\n pageRef,\n target,\n text: input.text,\n ...(input.pressEnter === undefined ? {} : { pressEnter: input.pressEnter }),\n timeout,\n });\n return {\n result: {\n resolved,\n point: undefined,\n },\n };\n },\n options,\n );\n }\n\n async scroll(\n input: OpensteerDomScrollInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerActionResult> {\n assertValidSemanticOperationInput(\"dom.scroll\", input);\n\n return this.runDomAction(\n \"dom.scroll\",\n input,\n async (pageRef, target, timeout) => {\n const result = await this.requireDom().scroll({\n pageRef,\n target,\n delta: directionToDelta(input.direction, input.amount),\n timeout,\n });\n return {\n result,\n };\n },\n options,\n );\n }\n\n async extract(\n input: OpensteerDomExtractInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerDomExtractOutput> {\n assertValidSemanticOperationInput(\"dom.extract\", input);\n\n const pageRef = await this.ensurePageRef();\n const startedAt = Date.now();\n\n try {\n const { artifacts, descriptor, output } = await this.runWithOperationTimeout(\n \"dom.extract\",\n async (timeout) => {\n let descriptor: OpensteerExtractionDescriptorRecord | undefined;\n let data: JsonValue;\n if (input.template !== undefined) {\n assertValidOpensteerExtractionTemplateRoot(input.template);\n const fieldTargets = await timeout.runStep(() =>\n compileOpensteerExtractionFieldTargets({\n pageRef,\n template: input.template as Record<string, unknown>,\n dom: this.requireDom(),\n }),\n );\n data = toCanonicalJsonValue(\n inflateDataPathObject(\n await timeout.runStep(() =>\n extractOpensteerExtractionFieldTargets({\n pageRef,\n dom: this.requireDom(),\n fieldTargets,\n }),\n ),\n ),\n );\n const payload = await timeout.runStep(() =>\n compilePersistedOpensteerExtractionPayloadFromFieldTargets({\n pageRef,\n dom: this.requireDom(),\n fieldTargets,\n }),\n );\n const pageInfo = await timeout.runStep(() =>\n this.requireEngine().getPageInfo({ pageRef }),\n );\n const persist = input.persist;\n if (persist !== undefined) {\n const descriptors = this.requireExtractionDescriptors();\n descriptor = await timeout.runStep(() =>\n descriptors.write({\n persist,\n root: payload,\n templateHash: canonicalJsonString(input.template),\n sourceUrl: pageInfo.url,\n }),\n );\n }\n } else {\n const persist = input.persist!;\n const descriptors = this.requireExtractionDescriptors();\n const storedDescriptor = await timeout.runStep(() =>\n descriptors.read({\n persist,\n }),\n );\n if (!storedDescriptor) {\n throw new OpensteerProtocolError(\n \"not-found\",\n `no stored extraction descriptor found for \"${persist}\"`,\n {\n details: {\n persist,\n workspace: this.workspace,\n kind: \"extraction-descriptor\",\n },\n },\n );\n }\n descriptor = storedDescriptor;\n data = await timeout.runStep(() =>\n replayOpensteerExtractionPayload({\n pageRef,\n dom: this.requireDom(),\n payload: storedDescriptor.payload.root,\n }),\n );\n }\n\n const artifacts = await this.captureSnapshotArtifacts(\n pageRef,\n {\n includeHtmlSnapshot: false,\n },\n timeout,\n );\n return {\n artifacts,\n descriptor,\n output: {\n data,\n } satisfies OpensteerDomExtractOutput,\n };\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"dom.extract\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n artifacts,\n data: {\n ...(input.persist === undefined ? {} : { persist: input.persist }),\n ...(descriptor?.payload.templateHash === undefined\n ? {}\n : { templateHash: descriptor.payload.templateHash }),\n data: output.data,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"dom.extract\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async queryNetwork(\n input: OpensteerNetworkQueryInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerNetworkQueryOutput> {\n const normalizedInput = normalizeNetworkQueryInput(input);\n assertValidSemanticOperationInput(\"network.query\", normalizedInput);\n\n const root = await this.ensureRoot();\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"network.query\",\n async (timeout) => {\n await this.syncPersistedNetworkSelection(timeout, normalizedInput, {\n includeBodies: false,\n });\n const rawRecords = await timeout.runStep(() =>\n root.registry.savedNetwork.query({\n ...this.toSavedNetworkQueryInput(normalizedInput),\n limit: Math.max(normalizedInput.limit ?? 50, 1000),\n }),\n );\n const filtered = filterNetworkSummaryRecords(rawRecords, normalizedInput);\n const sorted = sortPersistedNetworkRecordsChronologically(filtered);\n const sliced = sliceNetworkSummaryWindow(sorted, normalizedInput);\n const limited = sliced.slice(0, Math.max(1, Math.min(normalizedInput.limit ?? 50, 200)));\n const summaries = await this.buildNetworkSummaryRecords(limited, timeout);\n return {\n records: summaries,\n } satisfies OpensteerNetworkQueryOutput;\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"network.query\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n limit: normalizedInput.limit ?? 50,\n ...(normalizedInput.capture === undefined ? {} : { capture: normalizedInput.capture }),\n ...(normalizedInput.json === true ? { json: true } : {}),\n count: output.records.length,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"network.query\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async getNetworkDetail(\n input: OpensteerNetworkDetailInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerNetworkDetailOutput> {\n const normalizedRecordId = normalizeNetworkRecordId(input.recordId);\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"network.detail\",\n async (timeout) => {\n const record = await this.resolveNetworkRecordByRecordId(normalizedRecordId, timeout, {\n includeBodies: true,\n redactSecretHeaders: false,\n });\n const detail = await this.buildNetworkDetail(record, timeout);\n if (input.probe !== true) {\n return detail;\n }\n const transportProbe = await this.probeTransportsForRecord(record, timeout);\n return transportProbe === undefined ? detail : { ...detail, transportProbe };\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"network.detail\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n recordId: normalizedRecordId,\n ...(output.summary.status === undefined ? {} : { status: output.summary.status }),\n url: output.summary.url,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"network.detail\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async captureScripts(\n input: OpensteerCaptureScriptsInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerCaptureScriptsOutput> {\n assertValidSemanticOperationInput(\"scripts.capture\", input);\n const pageRef = input.pageRef ?? (await this.ensurePageRef());\n const startedAt = Date.now();\n\n try {\n const output = await this.runWithOperationTimeout(\n \"scripts.capture\",\n async (timeout) => this.captureScriptsInternal(pageRef, input, timeout),\n options,\n );\n\n await this.appendTrace({\n operation: \"scripts.capture\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n pageRef: output.pageRef,\n scriptCount: output.scripts.length,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"scripts.capture\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async readArtifact(\n input: OpensteerArtifactReadInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerArtifactReadOutput> {\n assertValidSemanticOperationInput(\"artifact.read\", input);\n return this.runWithOperationTimeout(\n \"artifact.read\",\n async () => {\n const artifact = await (\n await this.ensureRoot()\n ).artifacts.toProtocolArtifact(input.artifactId);\n if (artifact === undefined) {\n throw new OpensteerProtocolError(\n \"not-found\",\n `artifact ${input.artifactId} was not found`,\n {\n details: {\n artifactId: input.artifactId,\n },\n },\n );\n }\n return {\n artifact,\n } satisfies OpensteerArtifactReadOutput;\n },\n options,\n );\n }\n\n async captureInteraction(\n input: OpensteerInteractionCaptureInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerInteractionCaptureOutput> {\n assertValidSemanticOperationInput(\"interaction.capture\", input);\n if (input.script !== undefined && input.steps !== undefined) {\n throw new OpensteerProtocolError(\n \"invalid-argument\",\n \"interaction capture accepts either script or steps, not both\",\n );\n }\n\n return this.runWithOperationTimeout(\n \"interaction.capture\",\n async (timeout) => {\n const root = await this.ensureRoot();\n const pageRef = input.pageRef ?? (await this.ensurePageRef());\n const pageInfo = await this.requireEngine().getPageInfo({ pageRef });\n const baselineRequestIds = await this.readLiveRequestIds(timeout, {\n includeCurrentPageOnly: true,\n });\n const beforeState = await this.captureReverseStateSnapshot(pageRef, timeout, {\n includeStorage: input.includeStorage ?? true,\n includeSessionStorage: input.includeSessionStorage ?? false,\n includeIndexedDb: input.includeIndexedDb ?? false,\n ...(input.globalNames === undefined ? {} : { globalNames: input.globalNames }),\n });\n await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: INTERACTION_RECORDER_INSTALL_SCRIPT,\n }),\n );\n\n if (input.script !== undefined) {\n await this.runInteractionCaptureScript(pageRef, input.script, input.args, timeout);\n } else if (input.steps !== undefined) {\n await this.runInteractionCaptureSteps(pageRef, input.steps, timeout);\n } else {\n await delayWithSignal(input.durationMs ?? 2_000, timeout.signal);\n }\n\n const recorded = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: INTERACTION_RECORDER_READ_SCRIPT,\n }),\n );\n const afterState = await this.captureReverseStateSnapshot(pageRef, timeout, {\n includeStorage: input.includeStorage ?? true,\n includeSessionStorage: input.includeSessionStorage ?? false,\n includeIndexedDb: input.includeIndexedDb ?? false,\n ...(input.globalNames === undefined ? {} : { globalNames: input.globalNames }),\n });\n const deltaRecords = (\n await this.readLiveNetworkRecords(\n {\n includeBodies: true,\n includeCurrentPageOnly: true,\n },\n timeout.signal,\n )\n ).filter((record) => !baselineRequestIds.has(record.record.requestId));\n if (deltaRecords.length > 0) {\n await root.registry.savedNetwork.save(deltaRecords, {\n tag: `interaction:${pageRef}`,\n bodyWriteMode: \"authoritative\",\n });\n }\n\n const trace = await root.registry.interactionTraces.write({\n key: input.key ?? buildInteractionTraceKey(pageInfo.url),\n version: \"1.0.0\",\n ...(input.tags === undefined ? {} : { tags: input.tags }),\n provenance: {\n source: \"interaction.capture\",\n ...(pageInfo.url.length === 0 ? {} : { sourceId: pageInfo.url }),\n },\n payload: {\n mode: input.script === undefined ? \"manual\" : \"automated\",\n pageRef,\n url: pageInfo.url,\n startedAt: beforeState.capturedAt,\n completedAt: afterState.capturedAt,\n beforeState,\n afterState,\n stateDelta: buildStateDelta(beforeState, afterState),\n events: normalizeInteractionEvents(recorded.data),\n networkRecordIds: deltaRecords.map((record) => record.recordId),\n ...(input.caseId === undefined ? {} : { caseId: input.caseId }),\n ...(input.notes === undefined ? {} : { notes: input.notes }),\n },\n });\n\n return {\n trace,\n } satisfies OpensteerInteractionCaptureOutput;\n },\n options,\n );\n }\n\n async getInteraction(\n input: OpensteerInteractionGetInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerInteractionGetOutput> {\n assertValidSemanticOperationInput(\"interaction.get\", input);\n return this.runWithOperationTimeout(\n \"interaction.get\",\n async () => ({\n trace: await this.resolveInteractionTraceById(input.traceId),\n }),\n options,\n );\n }\n\n private async runInteractionCaptureScript(\n pageRef: PageRef,\n script: string,\n args: OpensteerInteractionCaptureInput[\"args\"],\n timeout: TimeoutExecutionContext,\n ): Promise<void> {\n await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script,\n ...(args === undefined ? {} : { args }),\n }),\n );\n }\n\n private async runInteractionCaptureSteps(\n pageRef: PageRef,\n steps: readonly OpensteerInteractionCaptureStep[],\n timeout: TimeoutExecutionContext,\n ): Promise<void> {\n for (const step of steps) {\n timeout.throwIfAborted();\n switch (step.kind) {\n case \"goto\":\n await this.navigatePage(\n {\n operation: \"page.goto\",\n pageRef,\n url: step.url,\n },\n timeout,\n );\n break;\n case \"click\": {\n const target = this.toDomTargetRef(step.target);\n await timeout.runStep(() =>\n this.requireDom().click({\n pageRef,\n target,\n timeout,\n }),\n );\n break;\n }\n case \"hover\": {\n const target = this.toDomTargetRef(step.target);\n await timeout.runStep(() =>\n this.requireDom().hover({\n pageRef,\n target,\n timeout,\n }),\n );\n break;\n }\n case \"input\": {\n const target = this.toDomTargetRef(step.target);\n await timeout.runStep(() =>\n this.requireDom().input({\n pageRef,\n target,\n text: step.text,\n ...(step.pressEnter === undefined ? {} : { pressEnter: step.pressEnter }),\n timeout,\n }),\n );\n break;\n }\n case \"scroll\": {\n const target = this.toDomTargetRef(step.target);\n await timeout.runStep(() =>\n this.requireDom().scroll({\n pageRef,\n target,\n delta: directionToDelta(step.direction, step.amount),\n timeout,\n }),\n );\n break;\n }\n case \"wait\":\n await delayWithSignal(step.durationMs, timeout.signal);\n break;\n }\n }\n }\n\n async diffInteraction(\n input: OpensteerInteractionDiffInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerInteractionDiffOutput> {\n assertValidSemanticOperationInput(\"interaction.diff\", input);\n return this.runWithOperationTimeout(\n \"interaction.diff\",\n async () => {\n const [left, right] = await Promise.all([\n this.resolveInteractionTraceById(input.leftTraceId),\n this.resolveInteractionTraceById(input.rightTraceId),\n ]);\n return diffInteractionTraces(left, right);\n },\n options,\n );\n }\n\n async replayInteraction(\n input: OpensteerInteractionReplayInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerInteractionReplayOutput> {\n assertValidSemanticOperationInput(\"interaction.replay\", input);\n return this.runWithOperationTimeout(\n \"interaction.replay\",\n async (timeout) => this.replayInteractionTraceById(input.traceId, input.pageRef, timeout),\n options,\n );\n }\n\n async beautifyScript(\n input: OpensteerScriptBeautifyInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerScriptBeautifyOutput> {\n assertValidSemanticOperationInput(\"scripts.beautify\", input);\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"scripts.beautify\",\n async () => {\n const source = await this.resolveScriptTransformSource(input);\n const content = await beautifyScriptContent(source.content);\n return this.buildScriptTransformOutput({\n source,\n transformedContent: content,\n persist: input.persist !== false,\n transform: \"beautify\",\n });\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"scripts.beautify\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n bytesBefore: output.bytesBefore,\n bytesAfter: output.bytesAfter,\n ...(output.artifactId === undefined ? {} : { artifactId: output.artifactId }),\n },\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"scripts.beautify\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n });\n throw error;\n }\n }\n\n async deobfuscateScript(\n input: OpensteerScriptDeobfuscateInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerScriptDeobfuscateOutput> {\n assertValidSemanticOperationInput(\"scripts.deobfuscate\", input);\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"scripts.deobfuscate\",\n async () => {\n const source = await this.resolveScriptTransformSource(input);\n const transformed = await deobfuscateScriptContent({\n content: source.content,\n });\n const persisted = await this.buildScriptTransformOutput({\n source,\n transformedContent: transformed.content,\n persist: input.persist !== false,\n transform: \"deobfuscate\",\n });\n return {\n ...persisted,\n transforms: transformed.transforms,\n } satisfies OpensteerScriptDeobfuscateOutput;\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"scripts.deobfuscate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n bytesBefore: output.bytesBefore,\n bytesAfter: output.bytesAfter,\n transforms: output.transforms,\n ...(output.artifactId === undefined ? {} : { artifactId: output.artifactId }),\n },\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"scripts.deobfuscate\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n });\n throw error;\n }\n }\n\n async sandboxScript(\n input: OpensteerScriptSandboxInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerScriptSandboxOutput> {\n assertValidSemanticOperationInput(\"scripts.sandbox\", input);\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"scripts.sandbox\",\n async () => {\n const source = await this.resolveScriptTransformSource(input);\n return runScriptSandbox({\n ...input,\n content: source.content,\n });\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"scripts.sandbox\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n capturedAjax: output.capturedAjax.length,\n errors: output.errors.length,\n durationMs: output.durationMs,\n },\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"scripts.sandbox\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n });\n throw error;\n }\n }\n\n async solveCaptcha(\n input: OpensteerCaptchaSolveInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerCaptchaSolveOutput> {\n assertValidSemanticOperationInput(\"captcha.solve\", input);\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"captcha.solve\",\n async (timeout) => {\n const pageRef = input.pageRef ?? (await this.ensurePageRef());\n const captcha =\n resolveExplicitCaptchaInput(input) ??\n (await detectCaptchaOnPage(this.requireEngine(), pageRef));\n if (captcha === undefined) {\n throw new OpensteerProtocolError(\n \"not-found\",\n \"no supported CAPTCHA challenge was detected on the current page\",\n );\n }\n\n const solver =\n input.provider === \"2captcha\"\n ? createTwoCaptchaSolver(input.apiKey)\n : createCapSolver(input.apiKey);\n const solved = await solver.solve({\n type: captcha.type,\n siteKey: captcha.siteKey,\n pageUrl: captcha.pageUrl,\n signal: timeout.signal,\n });\n const injected = await injectCaptchaToken({\n engine: this.requireEngine(),\n pageRef,\n type: captcha.type,\n token: solved.token,\n });\n return {\n captcha,\n token: solved.token,\n injected,\n provider: input.provider,\n } satisfies OpensteerCaptchaSolveOutput;\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"captcha.solve\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n provider: output.provider,\n captcha: output.captcha.type,\n injected: output.injected,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: input.pageRef ?? this.pageRef,\n }),\n });\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"captcha.solve\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n });\n throw error;\n }\n }\n\n async getCookies(\n input: OpensteerCookieQueryInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerCookieQueryOutput> {\n assertValidSemanticOperationInput(\"session.cookies\", input);\n\n const pageRef = await this.ensurePageRef();\n const sessionRef = this.requireSessionRef();\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"session.cookies\",\n async (timeout) => this.readCookieQueryOutput(sessionRef, pageRef, input.domain, timeout),\n options,\n );\n\n await this.appendTrace({\n operation: \"session.cookies\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n count: output.cookies.length,\n ...(input.domain === undefined ? {} : { domain: input.domain }),\n },\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"session.cookies\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async getStorageSnapshot(\n input: OpensteerStorageQueryInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerStorageQueryOutput> {\n assertValidSemanticOperationInput(\"session.storage\", input);\n\n const pageRef = await this.ensurePageRef();\n const sessionRef = this.requireSessionRef();\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"session.storage\",\n async (timeout) => this.readStorageQueryOutput(sessionRef, pageRef, input.domain, timeout),\n options,\n );\n\n await this.appendTrace({\n operation: \"session.storage\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n domains: output.domains.length,\n ...(input.domain === undefined ? {} : { domain: input.domain }),\n },\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"session.storage\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async getBrowserState(\n input: OpensteerStateQueryInput = {},\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerStateQueryOutput> {\n assertValidSemanticOperationInput(\"session.state\", input);\n\n const pageRef = await this.ensurePageRef();\n const sessionRef = this.requireSessionRef();\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"session.state\",\n async (timeout) => this.readBrowserStateOutput(sessionRef, pageRef, input.domain, timeout),\n options,\n );\n\n await this.appendTrace({\n operation: \"session.state\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n domains: output.domains.length,\n ...(input.domain === undefined ? {} : { domain: input.domain }),\n },\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"session.state\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n async fetch(\n input: OpensteerSessionFetchInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerSessionFetchOutput> {\n assertValidSemanticOperationInput(\"session.fetch\", input);\n\n const startedAt = Date.now();\n try {\n const output = await this.runWithOperationTimeout(\n \"session.fetch\",\n async (timeout) => {\n const request = buildSessionFetchTransportRequest(input);\n return this.executeSessionFetch(request, input, timeout);\n },\n options,\n );\n\n await this.appendTrace({\n operation: \"session.fetch\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n data: {\n ...(output.transport === undefined ? {} : { transport: output.transport }),\n attempts: output.attempts.length,\n ...(output.response === undefined ? {} : { status: output.response.status }),\n url: input.url,\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation: \"session.fetch\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async route(input: OpensteerRouteOptions): Promise<OpensteerRouteRegistration> {\n const binding = await this.ensureBrowserTransportBinding();\n const pageRef = input.pageRef ?? binding.pageRef;\n\n return this.requireEngine().registerRoute({\n sessionRef: binding.sessionRef,\n ...(input.pageRef === undefined ? {} : { pageRef }),\n urlPattern: input.urlPattern,\n ...(input.resourceTypes === undefined ? {} : { resourceTypes: input.resourceTypes }),\n ...(input.times === undefined ? {} : { times: input.times }),\n handler: async ({ request, fetchOriginal }) => {\n const decision = await input.handler({\n request,\n fetchOriginal,\n });\n\n if (decision.kind !== \"fulfill\") {\n return decision;\n }\n\n const routeBody =\n decision.body === undefined\n ? undefined\n : typeof decision.body === \"string\"\n ? bodyPayloadFromUtf8(decision.body, {\n ...(decision.contentType === undefined\n ? {}\n : { mimeType: decision.contentType.split(\";\")[0] }),\n })\n : createBodyPayload(new Uint8Array(decision.body));\n\n return {\n kind: \"fulfill\",\n ...(decision.status === undefined ? {} : { status: decision.status }),\n ...(decision.headers === undefined ? {} : { headers: decision.headers }),\n ...(routeBody === undefined ? {} : { body: routeBody }),\n ...(decision.contentType === undefined ? {} : { contentType: decision.contentType }),\n };\n },\n });\n }\n\n async interceptScript(\n input: OpensteerInterceptScriptOptions,\n ): Promise<OpensteerRouteRegistration> {\n return this.route({\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n resourceTypes: [\"script\"],\n ...(input.times === undefined ? {} : { times: input.times }),\n handler: async ({ request, fetchOriginal }) => {\n const original = await fetchOriginal();\n const content =\n original.body === undefined ? \"\" : Buffer.from(original.body.bytes).toString(\"utf8\");\n const body = await input.handler({\n url: request.url,\n content,\n headers: original.headers,\n status: original.status,\n });\n return {\n kind: \"fulfill\",\n status: original.status,\n headers: original.headers,\n body,\n contentType:\n original.headers.find((header) => header.name.toLowerCase() === \"content-type\")\n ?.value ?? \"application/javascript; charset=utf-8\",\n };\n },\n });\n }\n\n async computerExecute(\n input: OpensteerComputerExecuteInput,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerComputerExecuteOutput> {\n assertValidSemanticOperationInput(\"computer.execute\", input);\n\n const pageRef = await this.ensurePageRef();\n const startedAt = Date.now();\n let mutationCaptureDiagnostics: MutationCaptureFinalizeDiagnostics | undefined;\n let boundaryDiagnostics: ActionBoundaryDiagnostics | undefined;\n\n try {\n const { artifacts, output, result } = await this.runMutationCapturedOperation(\n \"computer.execute\",\n {\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n options,\n },\n async (timeout) => {\n try {\n const output = await this.requireComputer().execute({\n pageRef,\n input,\n timeout,\n });\n boundaryDiagnostics = takeActionBoundaryDiagnostics(timeout.signal);\n timeout.throwIfAborted();\n await this.invalidateLiveSnapshotCounters([pageRef, output.pageRef], timeout);\n this.pageRef = output.pageRef;\n const artifacts = await this.persistComputerArtifacts(output, timeout);\n const result = {\n ...(await timeout.runStep(() => this.readNavigationSummary(output.pageRef))),\n screenshot: artifacts.screenshot,\n } satisfies OpensteerComputerExecuteOutput;\n return {\n artifacts: { manifests: artifacts.manifests },\n output,\n result,\n };\n } catch (error) {\n boundaryDiagnostics ??= takeActionBoundaryDiagnostics(timeout.signal);\n throw error;\n }\n },\n (diagnostics) => {\n mutationCaptureDiagnostics = diagnostics;\n },\n );\n\n await this.appendTrace({\n operation: \"computer.execute\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n artifacts,\n events: output.events,\n data: {\n action: output.action,\n pageRef: output.pageRef,\n displayViewport: output.displayViewport,\n nativeViewport: output.nativeViewport,\n displayScale: output.displayScale,\n timing: output.timing,\n ...(boundaryDiagnostics === undefined ? {} : { settle: boundaryDiagnostics }),\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n ...(output.trace === undefined ? {} : { trace: output.trace }),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: output.pageRef,\n frameRef: output.screenshot.frameRef,\n documentRef: output.screenshot.documentRef,\n documentEpoch: output.screenshot.documentEpoch,\n }),\n });\n\n return result;\n } catch (error) {\n await this.appendTrace({\n operation: \"computer.execute\",\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n data: {\n ...(boundaryDiagnostics === undefined ? {} : { settle: boundaryDiagnostics }),\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n }),\n });\n throw error;\n }\n }\n\n async close(options: RuntimeOperationOptions = {}): Promise<OpensteerSessionCloseOutput> {\n const engine = this.engine;\n const pageRef = this.pageRef;\n const sessionRef = this.sessionRef;\n const startedAt = Date.now();\n let closeError: unknown;\n\n try {\n await this.runWithOperationTimeout(\n \"session.close\",\n async (timeout) => {\n await timeout.runStep(() => this.flushPersistedNetworkHistory());\n if (engine === undefined) {\n return;\n }\n if (pageRef !== undefined) {\n await timeout.runStep(async () => {\n try {\n await engine.closePage({\n pageRef,\n });\n } catch (error) {\n if (!isIgnorableRuntimeBindingError(error)) {\n throw error;\n }\n }\n });\n }\n if (sessionRef !== undefined) {\n await timeout.runStep(async () => {\n try {\n await engine.closeSession({\n sessionRef,\n });\n } catch (error) {\n if (!isIgnorableRuntimeBindingError(error)) {\n throw error;\n }\n }\n });\n }\n },\n options,\n );\n } catch (error) {\n closeError = error;\n }\n\n const completedAt = Date.now();\n try {\n await this.appendTrace({\n operation: \"session.close\",\n startedAt,\n completedAt,\n outcome: closeError === undefined ? \"ok\" : \"error\",\n ...(closeError === undefined ? {} : { error: closeError }),\n context: buildRuntimeTraceContext({\n sessionRef,\n pageRef,\n }),\n });\n } finally {\n if (closeError !== undefined && engine !== undefined) {\n await this.cleanupSessionResources(engine, pageRef, sessionRef);\n }\n await this.resetRuntimeState({\n disposeEngine: true,\n });\n if (this.cleanupRootOnClose) {\n await rm(this.rootPath, { recursive: true, force: true }).catch(() => undefined);\n }\n }\n\n if (closeError !== undefined) {\n throw closeError;\n }\n\n return {\n closed: true,\n };\n }\n\n async disconnect(): Promise<void> {\n try {\n await this.flushPersistedNetworkHistory();\n } finally {\n await this.resetRuntimeState({\n disposeEngine: true,\n });\n if (this.cleanupRootOnClose) {\n await rm(this.rootPath, { recursive: true, force: true }).catch(() => undefined);\n }\n }\n }\n\n isOpen(): boolean {\n return this.sessionRef !== undefined && this.pageRef !== undefined;\n }\n\n private async runDomAction<\n TInput extends {\n readonly target: OpensteerTargetInput;\n readonly persist?: string;\n readonly captureNetwork?: string;\n },\n >(\n operation: \"dom.click\" | \"dom.hover\" | \"dom.input\" | \"dom.scroll\",\n input: TInput,\n executor: (\n pageRef: PageRef,\n target: DomTargetRef,\n timeout: TimeoutExecutionContext,\n ) => Promise<{\n readonly result:\n | DomActionOutcome\n | {\n readonly resolved: ResolvedDomTarget;\n readonly point?: undefined;\n };\n }>,\n options: RuntimeOperationOptions = {},\n ): Promise<OpensteerActionResult> {\n const pageRef = await this.ensurePageRef();\n const startedAt = Date.now();\n let mutationCaptureDiagnostics: MutationCaptureFinalizeDiagnostics | undefined;\n let boundaryDiagnostics: ActionBoundaryDiagnostics | undefined;\n\n try {\n const { executed, preparedTarget } = await this.runMutationCapturedOperation(\n operation,\n {\n ...(input.captureNetwork === undefined ? {} : { captureNetwork: input.captureNetwork }),\n options,\n },\n async (timeout) => {\n const preparedTarget = await this.prepareDomTarget(\n pageRef,\n operation,\n input.target,\n input.persist,\n timeout,\n );\n try {\n const executed = await executor(pageRef, preparedTarget.target, timeout);\n boundaryDiagnostics = takeActionBoundaryDiagnostics(timeout.signal);\n return {\n executed,\n preparedTarget,\n };\n } catch (error) {\n boundaryDiagnostics ??= takeActionBoundaryDiagnostics(timeout.signal);\n throw error;\n }\n },\n (diagnostics) => {\n mutationCaptureDiagnostics = diagnostics;\n },\n );\n const output = toOpensteerActionResult(executed.result.resolved);\n const actionEvents = \"events\" in executed.result ? executed.result.events : undefined;\n const resolvedTarget = toOpensteerResolvedTarget(executed.result.resolved);\n\n await this.appendTrace({\n operation,\n startedAt,\n completedAt: Date.now(),\n outcome: \"ok\",\n ...(actionEvents === undefined ? {} : { events: actionEvents }),\n data: {\n target: resolvedTarget,\n ...(\"point\" in executed.result && executed.result.point !== undefined\n ? {\n point: {\n x: executed.result.point.x,\n y: executed.result.point.y,\n },\n }\n : {}),\n ...(boundaryDiagnostics === undefined ? {} : { settle: boundaryDiagnostics }),\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n frameRef: executed.result.resolved.frameRef,\n documentRef: executed.result.resolved.documentRef,\n documentEpoch: executed.result.resolved.documentEpoch,\n }),\n });\n\n return output;\n } catch (error) {\n await this.appendTrace({\n operation,\n startedAt,\n completedAt: Date.now(),\n outcome: \"error\",\n error,\n data: {\n ...(boundaryDiagnostics === undefined ? {} : { settle: boundaryDiagnostics }),\n ...buildMutationCaptureTraceData(mutationCaptureDiagnostics),\n },\n context: buildRuntimeTraceContext({\n sessionRef: this.sessionRef,\n pageRef,\n }),\n });\n throw error;\n }\n }\n\n private async prepareDomTarget(\n pageRef: PageRef,\n method: string,\n target: OpensteerTargetInput,\n persist: string | undefined,\n timeout: TimeoutExecutionContext,\n ): Promise<{\n readonly target: DomTargetRef;\n }> {\n const domTarget = this.toDomTargetRef(target);\n if (target.kind === \"persist\") {\n return {\n target: domTarget,\n };\n }\n\n if (persist === undefined) {\n return {\n target: domTarget,\n };\n }\n\n if (target.kind === \"element\") {\n const elementTarget: DomTargetRef = {\n kind: \"selector\",\n selector: `[c=\"${String(target.element)}\"]`,\n };\n\n const resolved = await timeout.runStep(() =>\n this.requireDom().resolveTarget({\n pageRef,\n method,\n target: elementTarget,\n }),\n );\n const stablePath =\n resolved.replayPath ??\n (await timeout.runStep(() =>\n this.requireDom().buildPath({\n locator: resolved.locator,\n }),\n ));\n\n await timeout.runStep(() =>\n this.requireDom().writeDescriptor({\n method,\n persist,\n path: stablePath,\n sourceUrl: resolved.snapshot.url,\n }),\n );\n return {\n target: {\n kind: \"descriptor\",\n persist,\n },\n };\n }\n\n const resolved = await timeout.runStep(() =>\n this.requireDom().resolveTarget({\n pageRef,\n method,\n target: domTarget,\n }),\n );\n const stablePath =\n resolved.replayPath ??\n (await timeout.runStep(() =>\n this.requireDom().buildPath({\n locator: resolved.locator,\n }),\n ));\n if (!stablePath) {\n throw new Error(\n `unable to persist \"${persist}\" because no stable DOM path could be built for ${method}`,\n );\n }\n\n await timeout.runStep(() =>\n this.requireDom().writeDescriptor({\n method,\n persist,\n path: stablePath,\n sourceUrl: resolved.snapshot.url,\n }),\n );\n\n return {\n target: {\n kind: \"descriptor\",\n persist,\n },\n };\n }\n\n private async queryLiveNetwork(\n input: OpensteerNetworkQueryInput,\n timeout: TimeoutExecutionContext,\n options: {\n readonly ignoreLimit?: boolean;\n readonly redactSecretHeaders?: boolean;\n } = {},\n ): Promise<readonly NetworkQueryRecord[]> {\n const requestIds = resolveLiveQueryRequestIds(input, this.networkHistory);\n if (requestIds !== undefined && requestIds.length === 0) {\n return [];\n }\n\n const pageRef = resolveLiveQueryPageRef(input, this.pageRef, requestIds, this.networkHistory);\n const includeCurrentPageOnly = pageRef === undefined && input.recordId === undefined;\n const metadataRecords = await timeout.runStep(() =>\n this.readLiveNetworkRecords(\n {\n ...(pageRef === undefined ? {} : { pageRef }),\n includeBodies: false,\n includeCurrentPageOnly,\n ...(requestIds === undefined ? {} : { requestIds }),\n ...(options.redactSecretHeaders === undefined\n ? {}\n : { redactSecretHeaders: options.redactSecretHeaders }),\n ...buildEngineNetworkRecordFilters(input),\n },\n timeout.signal,\n ),\n );\n const filtered = filterNetworkQueryRecords(metadataRecords, {\n ...(input.recordId === undefined ? {} : { recordId: input.recordId }),\n ...(input.requestId === undefined ? {} : { requestId: input.requestId }),\n ...(input.capture === undefined ? {} : { capture: input.capture }),\n ...(input.tag === undefined ? {} : { tag: input.tag }),\n ...(input.url === undefined ? {} : { url: input.url }),\n ...(input.hostname === undefined ? {} : { hostname: input.hostname }),\n ...(input.path === undefined ? {} : { path: input.path }),\n ...(input.method === undefined ? {} : { method: input.method }),\n ...(input.status === undefined ? {} : { status: input.status }),\n ...(input.resourceType === undefined ? {} : { resourceType: input.resourceType }),\n });\n const sorted = sortLiveNetworkRecords(filtered, this.networkHistory);\n const limit = options.ignoreLimit\n ? sorted.length\n : Math.max(1, Math.min(input.limit ?? 50, 200));\n const limited = sorted.slice(0, limit);\n\n if (!(input.includeBodies ?? false) || limited.length === 0) {\n return limited;\n }\n\n const withBodies = await timeout.runStep(() =>\n this.readLiveNetworkRecords(\n {\n ...(pageRef === undefined ? {} : { pageRef }),\n includeBodies: true,\n requestIds: limited.map((record) => record.record.requestId),\n includeCurrentPageOnly,\n ...(options.redactSecretHeaders === undefined\n ? {}\n : { redactSecretHeaders: options.redactSecretHeaders }),\n },\n timeout.signal,\n ),\n );\n const byRequestId = new Map(withBodies.map((record) => [record.record.requestId, record]));\n return limited.map((record) => byRequestId.get(record.record.requestId) ?? record);\n }\n\n private async invalidateLiveSnapshotCounters(\n pageRefs: readonly PageRef[],\n timeout: TimeoutExecutionContext,\n ): Promise<void> {\n const engine = this.requireEngine();\n for (const pageRef of new Set(pageRefs)) {\n try {\n await timeout.runStep(() => clearOpensteerLiveCounters(engine, pageRef));\n } catch (error) {\n if (!isIgnorableRuntimeBindingError(error)) {\n throw error;\n }\n }\n }\n }\n\n private async captureScriptsInternal(\n pageRef: PageRef,\n input: OpensteerCaptureScriptsInput,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerCaptureScriptsOutput> {\n const root = await this.ensureRoot();\n const evaluated = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: `() => {\n const navigationEntry = performance.getEntriesByType(\"navigation\")[0];\n const loadEventStart =\n navigationEntry && typeof navigationEntry.loadEventStart === \"number\"\n ? navigationEntry.loadEventStart\n : undefined;\n const scripts = Array.from(document.scripts).map((script, index) => ({\n loadOrder: index,\n url: script.src || undefined,\n type: script.type || undefined,\n source: script.src ? \"external\" : \"inline\",\n content: script.src ? \"\" : script.textContent || \"\",\n }));\n const resourceEntries = Array.from(performance.getEntriesByType(\"resource\"))\n .map((entry) => ({\n url: entry.name,\n initiatorType: entry.initiatorType || undefined,\n startTime: typeof entry.startTime === \"number\" ? entry.startTime : undefined,\n }))\n .filter((entry) => typeof entry.url === \"string\" && entry.url.length > 0);\n return { loadEventStart, scripts, resourceEntries };\n }`,\n }),\n );\n const pageScripts = normalizePageScriptScan(evaluated.data);\n const resourceEntriesByUrl = new Map(\n pageScripts.resourceEntries.map((entry) => [entry.url, entry]),\n );\n const workerUrls = new Set(\n pageScripts.resourceEntries\n .filter((entry) => entry.initiatorType === \"worker\")\n .map((entry) => entry.url),\n );\n const urlFilter = input.urlFilter?.trim();\n const networkRecords = await this.queryLiveNetwork(\n {\n pageRef,\n ...(input.includeWorkers === true ? {} : { resourceType: \"script\" }),\n includeBodies: true,\n },\n timeout,\n {\n ignoreLimit: true,\n },\n );\n const networkContentByUrl = new Map<string, string>();\n for (const record of networkRecords) {\n if (record.record.responseBody === undefined) {\n continue;\n }\n networkContentByUrl.set(\n record.record.url,\n Buffer.from(record.record.responseBody.data, \"base64\").toString(\"utf8\"),\n );\n }\n\n const scripts: OpensteerCaptureScriptsOutput[\"scripts\"][number][] = [];\n const domUrls = new Set<string>();\n let nextDynamicOrder = pageScripts.scripts.length;\n\n for (const script of pageScripts.scripts) {\n if (script.url !== undefined) {\n domUrls.add(script.url);\n }\n\n if (script.source === \"inline\") {\n if (input.includeInline === false) {\n continue;\n }\n if (urlFilter !== undefined) {\n continue;\n }\n scripts.push(\n await this.materializeCapturedScript(\n root,\n pageRef,\n {\n source: \"inline\",\n hash: sha256Hex(Buffer.from(script.content, \"utf8\")),\n loadOrder: script.loadOrder,\n content: script.content,\n ...(script.type === undefined ? {} : { type: script.type }),\n },\n input.persist !== false,\n ),\n );\n continue;\n }\n\n if (script.url === undefined) {\n continue;\n }\n if (urlFilter !== undefined && !script.url.includes(urlFilter)) {\n continue;\n }\n const resourceEntry = resourceEntriesByUrl.get(script.url);\n const source = workerUrls.has(script.url)\n ? \"worker\"\n : pageScripts.loadEventStart !== undefined &&\n resourceEntry?.startTime !== undefined &&\n resourceEntry.startTime >= pageScripts.loadEventStart\n ? \"dynamic\"\n : \"external\";\n if (source === \"external\" && input.includeExternal === false) {\n continue;\n }\n if (source === \"worker\" && input.includeWorkers !== true) {\n continue;\n }\n if (source === \"dynamic\" && input.includeDynamic === false) {\n continue;\n }\n const content = networkContentByUrl.get(script.url) ?? \"\";\n scripts.push(\n await this.materializeCapturedScript(\n root,\n pageRef,\n {\n source,\n url: script.url,\n hash: sha256Hex(Buffer.from(content, \"utf8\")),\n loadOrder: script.loadOrder,\n content,\n ...(script.type === undefined ? {} : { type: script.type }),\n },\n input.persist !== false,\n ),\n );\n }\n\n if (input.includeDynamic !== false || input.includeWorkers === true) {\n for (const record of networkRecords) {\n if (record.record.resourceType !== \"script\") {\n continue;\n }\n if (domUrls.has(record.record.url)) {\n continue;\n }\n if (urlFilter !== undefined && !record.record.url.includes(urlFilter)) {\n continue;\n }\n const source =\n workerUrls.has(record.record.url) ||\n record.record.source?.workerRef !== undefined ||\n (input.includeWorkers === true &&\n record.record.initiator?.type !== undefined &&\n record.record.initiator.type !== \"parser\" &&\n record.record.initiator.type !== \"script\")\n ? \"worker\"\n : \"dynamic\";\n if (source === \"worker\" ? input.includeWorkers !== true : input.includeDynamic === false) {\n continue;\n }\n const content = networkContentByUrl.get(record.record.url) ?? \"\";\n scripts.push(\n await this.materializeCapturedScript(\n root,\n pageRef,\n {\n source,\n url: record.record.url,\n hash: sha256Hex(Buffer.from(content, \"utf8\")),\n loadOrder: nextDynamicOrder++,\n content,\n },\n input.persist !== false,\n ),\n );\n }\n }\n\n return {\n pageRef,\n scripts,\n };\n }\n\n private async materializeCapturedScript(\n root: OpensteerRuntimeWorkspace,\n pageRef: PageRef,\n data: ScriptSourceArtifactData,\n persist: boolean,\n ): Promise<OpensteerCaptureScriptsOutput[\"scripts\"][number]> {\n if (!persist) {\n return data;\n }\n const manifest = await root.artifacts.writeStructured({\n kind: \"script-source\",\n scope: {\n ...(this.sessionRef === undefined ? {} : { sessionRef: this.sessionRef }),\n pageRef,\n },\n data,\n });\n return {\n ...data,\n artifactId: manifest.artifactId,\n };\n }\n\n private async runMutationCapturedOperation<T>(\n operation: OpensteerSemanticOperationName,\n input: {\n readonly captureNetwork?: string;\n readonly options?: RuntimeOperationOptions;\n },\n execute: (timeout: TimeoutExecutionContext) => Promise<T>,\n onFinalized?: (diagnostics: MutationCaptureFinalizeDiagnostics) => void,\n ): Promise<T> {\n let plan: MutationCapturePlan | undefined;\n\n try {\n const result = await this.runWithOperationTimeout(\n operation,\n async (timeout) => {\n plan = await this.beginMutationCapture(timeout, input.captureNetwork);\n return execute(timeout);\n },\n input.options,\n );\n const diagnostics = await this.finalizeMutationCaptureBestEffort(plan);\n onFinalized?.(diagnostics);\n return result;\n } catch (error) {\n const diagnostics = await this.finalizeMutationCaptureBestEffort(plan);\n onFinalized?.(diagnostics);\n throw error;\n }\n }\n\n private async beginMutationCapture(\n timeout: TimeoutExecutionContext,\n capture: string | undefined,\n ): Promise<MutationCapturePlan | undefined> {\n if (capture === undefined) {\n return undefined;\n }\n\n return {\n baselineRequestIds: await this.readLiveRequestIds(timeout, {\n includeCurrentPageOnly: true,\n }),\n capture,\n };\n }\n\n private async finalizeMutationCaptureBestEffort(\n plan: MutationCapturePlan | undefined,\n ): Promise<MutationCaptureFinalizeDiagnostics> {\n if (plan === undefined) {\n return {};\n }\n\n try {\n await withDetachedTimeoutSignal(MUTATION_CAPTURE_FINALIZE_TIMEOUT_MS, async (signal) => {\n await this.completeMutationCaptureWithSignal(signal, plan);\n });\n return {};\n } catch (error) {\n return {\n finalizeError: normalizeOpensteerError(error),\n };\n }\n }\n\n private async completeMutationCaptureWithSignal(\n signal: AbortSignal,\n plan: MutationCapturePlan,\n ): Promise<void> {\n const records = await this.readLiveNetworkRecords(\n {\n includeBodies: false,\n includeCurrentPageOnly: true,\n },\n signal,\n );\n const delta = records.filter((record) => !plan.baselineRequestIds.has(record.record.requestId));\n if (delta.length === 0) {\n return;\n }\n this.networkHistory.assignCapture(delta, plan.capture);\n await this.persistLiveRequestIdsWithSignal(\n delta.map((record) => record.record.requestId),\n signal,\n {\n includeCurrentPageOnly: true,\n },\n );\n }\n\n private async resolveNetworkRecordByRecordId(\n recordId: string,\n timeout: TimeoutExecutionContext,\n options: {\n readonly includeBodies: boolean;\n readonly redactSecretHeaders?: boolean;\n },\n ): Promise<NetworkQueryRecord> {\n const root = await this.ensureRoot();\n await this.syncPersistedNetworkSelection(\n timeout,\n {\n recordId,\n includeBodies: options.includeBodies,\n },\n {\n includeBodies: options.includeBodies,\n },\n );\n const saved = await timeout.runStep(() =>\n root.registry.savedNetwork.getByRecordId(recordId, {\n includeBodies: options.includeBodies,\n }),\n );\n if (saved) {\n return saved;\n }\n\n const live = await this.queryLiveNetwork(\n {\n recordId,\n includeBodies: options.includeBodies,\n limit: 1,\n },\n timeout,\n {\n ignoreLimit: true,\n ...(options.redactSecretHeaders === undefined\n ? {}\n : { redactSecretHeaders: options.redactSecretHeaders }),\n },\n );\n if (live[0] !== undefined) {\n return live[0];\n }\n throw new OpensteerProtocolError(\"not-found\", `network record ${recordId} was not found`, {\n details: {\n recordId,\n kind: \"network-record\",\n },\n });\n }\n\n private async buildNetworkSummaryRecords(\n records: readonly NetworkQueryRecord[],\n timeout: TimeoutExecutionContext,\n ): Promise<readonly OpensteerNetworkSummaryRecord[]> {\n const summaries: OpensteerNetworkSummaryRecord[] = [];\n for (const record of records) {\n let hydrated = record;\n if (looksLikeGraphqlRecord(record)) {\n hydrated = await this.resolveNetworkRecordByRecordId(record.recordId, timeout, {\n includeBodies: true,\n redactSecretHeaders: false,\n }).catch(() => record);\n }\n summaries.push(buildNetworkSummaryRecord(hydrated));\n }\n return summaries;\n }\n\n private async buildNetworkDetail(\n record: NetworkQueryRecord,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerNetworkDetailOutput> {\n const requestCookieHeader = headerValue(record.record.requestHeaders, \"cookie\");\n const graphql = extractGraphqlMetadata(record);\n const graphqlVariables =\n graphql?.variables === undefined ? undefined : truncateStructuredValue(graphql.variables);\n const graphqlSummary =\n graphql === undefined\n ? undefined\n : {\n ...(graphql.operationType === undefined\n ? {}\n : { operationType: graphql.operationType }),\n ...(graphql.operationName === undefined\n ? {}\n : { operationName: graphql.operationName }),\n ...(graphql.persisted === undefined ? {} : { persisted: graphql.persisted }),\n ...(graphqlVariables === undefined ? {} : { variables: graphqlVariables }),\n };\n const requestBody =\n shouldShowRequestBody(record.record.method) && record.record.requestBody !== undefined\n ? buildStructuredBodyPreview(record.record.requestBody, record.record.requestHeaders, {\n truncateData: false,\n })\n : undefined;\n const responseBody =\n record.record.responseBody === undefined\n ? undefined\n : buildStructuredBodyPreview(record.record.responseBody, record.record.responseHeaders);\n const notes = detectNetworkRecordNotes(record);\n\n return {\n recordId: record.recordId,\n ...(record.capture === undefined ? {} : { capture: record.capture }),\n ...(record.savedAt === undefined ? {} : { savedAt: record.savedAt }),\n summary: buildNetworkSummaryRecord(record),\n requestHeaders: record.record.requestHeaders.filter(\n (header) => normalizeHeaderName(header.name) !== \"cookie\",\n ),\n responseHeaders: record.record.responseHeaders,\n ...(requestCookieHeader === undefined\n ? {}\n : { cookiesSent: parseCookieHeaderEntries(requestCookieHeader) }),\n ...(requestBody === undefined ? {} : { requestBody }),\n ...(responseBody === undefined ? {} : { responseBody }),\n ...(graphqlSummary === undefined ? {} : { graphql: graphqlSummary }),\n ...(await this.buildRedirectChain(record, timeout)),\n ...(notes.length === 0 ? {} : { notes }),\n };\n }\n\n private async probeTransportsForRecord(\n record: NetworkQueryRecord,\n timeout: TimeoutExecutionContext,\n ): Promise<\n | { readonly recommended?: TransportKind; readonly attempts: readonly OpensteerReplayAttempt[] }\n | undefined\n > {\n if (record.record.status === undefined) {\n return undefined;\n }\n const request = buildReplayTransportRequest(record, { recordId: record.recordId });\n const fingerprint = buildCapturedRecordSuccessFingerprint(record);\n const attempts: OpensteerReplayAttempt[] = [];\n let recommended: TransportKind | undefined;\n\n for (const transport of REPLAY_TRANSPORT_LADDER) {\n const attemptStartedAt = Date.now();\n const attemptTimeoutMs = resolveReplayProbeAttemptTimeoutMs({\n remainingMs: timeout.remainingMs(),\n transportsRemaining: REPLAY_TRANSPORT_LADDER.length - attempts.length,\n recommendedFound: recommended !== undefined,\n });\n try {\n const output = await this.executeReplayTransportAttemptWithinBudget(\n transport,\n request,\n timeout,\n attemptTimeoutMs,\n );\n const ok = matchesSuccessFingerprintFromProtocolResponse(output.response, fingerprint);\n attempts.push({\n transport,\n status: output.response.status,\n ok,\n durationMs: Date.now() - attemptStartedAt,\n });\n if (ok && recommended === undefined) {\n recommended = transport;\n }\n } catch (error) {\n attempts.push({\n transport,\n ok: false,\n durationMs: Date.now() - attemptStartedAt,\n error: normalizeProbeTransportAttemptError(transport, error, attemptTimeoutMs),\n });\n }\n }\n\n return {\n ...(recommended === undefined ? {} : { recommended }),\n attempts,\n };\n }\n\n private async buildRedirectChain(\n record: NetworkQueryRecord,\n timeout: TimeoutExecutionContext,\n ): Promise<{\n readonly redirectChain?: readonly OpensteerNetworkRedirectHop[];\n }> {\n if (\n record.record.redirectFromRequestId === undefined &&\n record.record.redirectToRequestId === undefined\n ) {\n return {};\n }\n\n const root = await this.ensureRoot();\n const byRequestId = new Map<string, NetworkQueryRecord>();\n const seen = new Set<string>();\n const queue = [record.record.requestId];\n while (queue.length > 0) {\n const requestId = queue.shift()!;\n if (seen.has(requestId)) {\n continue;\n }\n seen.add(requestId);\n const [match] = await timeout.runStep(() =>\n root.registry.savedNetwork.query({\n requestId,\n includeBodies: false,\n limit: 1,\n }),\n );\n if (match === undefined) {\n continue;\n }\n byRequestId.set(requestId, match);\n if (match.record.redirectFromRequestId !== undefined) {\n queue.push(match.record.redirectFromRequestId);\n }\n if (match.record.redirectToRequestId !== undefined) {\n queue.push(match.record.redirectToRequestId);\n }\n }\n\n const chain = [...byRequestId.values()].sort((left, right) => {\n const leftTime = left.savedAt ?? 0;\n const rightTime = right.savedAt ?? 0;\n if (leftTime !== rightTime) {\n return leftTime - rightTime;\n }\n return left.recordId.localeCompare(right.recordId);\n });\n if (chain.length <= 1) {\n return {};\n }\n return {\n redirectChain: chain.map((entry) => ({\n method: entry.record.method,\n ...(entry.record.status === undefined ? {} : { status: entry.record.status }),\n url: entry.record.url,\n ...(headerValue(entry.record.responseHeaders, \"location\") === undefined\n ? {}\n : { location: headerValue(entry.record.responseHeaders, \"location\")! }),\n ...(collectSetCookieHeaders(entry.record.responseHeaders).length === 0\n ? {}\n : { setCookie: collectSetCookieHeaders(entry.record.responseHeaders) }),\n })),\n };\n }\n\n private async readCookieQueryOutput(\n sessionRef: SessionRef,\n pageRef: PageRef,\n domain: string | undefined,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerCookieQueryOutput> {\n const pageInfo = await timeout.runStep(() => this.requireEngine().getPageInfo({ pageRef }));\n const effectiveDomain = domain ?? hostnameFromUrl(pageInfo.url);\n const cookies = await timeout.runStep(() =>\n this.requireEngine().getCookies({\n sessionRef,\n }),\n );\n const filtered = filterCookieRecordsByDomain(cookies, effectiveDomain);\n return {\n ...(effectiveDomain === undefined ? {} : { domain: effectiveDomain }),\n cookies: [...filtered].sort(compareCookieRecords),\n };\n }\n\n private async readStorageQueryOutput(\n sessionRef: SessionRef,\n pageRef: PageRef,\n domain: string | undefined,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerStorageQueryOutput> {\n const pageInfo = await timeout.runStep(() => this.requireEngine().getPageInfo({ pageRef }));\n const effectiveDomain = domain ?? hostnameFromUrl(pageInfo.url);\n const snapshot = await timeout.runStep(() =>\n this.requireEngine().getStorageSnapshot({\n sessionRef,\n includeSessionStorage: true,\n includeIndexedDb: false,\n }),\n );\n return {\n domains: collapseStorageSnapshot(snapshot, effectiveDomain),\n };\n }\n\n private async readBrowserStateOutput(\n sessionRef: SessionRef,\n pageRef: PageRef,\n domain: string | undefined,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerStateQueryOutput> {\n const pageInfo = await timeout.runStep(() => this.requireEngine().getPageInfo({ pageRef }));\n const effectiveDomain = domain ?? hostnameFromUrl(pageInfo.url);\n const cookies = await timeout.runStep(() =>\n this.requireEngine().getCookies({\n sessionRef,\n }),\n );\n const storage = await timeout.runStep(() =>\n this.requireEngine().getStorageSnapshot({\n sessionRef,\n includeSessionStorage: true,\n includeIndexedDb: false,\n }),\n );\n const pageState = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: CAPTURE_PAGE_STATE_SCRIPT,\n args: [\n {\n globalNames: DEFAULT_STATE_GLOBAL_NAMES,\n },\n ],\n }),\n );\n\n const currentPageDomain = hostnameFromUrl(pageInfo.url);\n return {\n domains: buildBrowserStateDomains({\n ...(effectiveDomain === undefined ? {} : { effectiveDomain }),\n ...(currentPageDomain === undefined ? {} : { currentPageDomain }),\n cookies,\n storage,\n pageState: pageState.data,\n }),\n };\n }\n\n private async executeSessionFetch(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n input: OpensteerSessionFetchInput,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerSessionFetchOutput> {\n const attempts: OpensteerReplayAttempt[] = [];\n let lastOutput: OpensteerRawRequestOutput | undefined;\n const ladder = resolveSessionFetchTransportLadder(input.transport);\n\n for (const transport of ladder) {\n const attemptStartedAt = Date.now();\n try {\n const output = await this.executeFetchTransportAttempt(transport, request, timeout, input);\n lastOutput = output;\n const note = detectChallengeNoteFromResponse(output.response);\n const ok = shouldAcceptFetchResponse(output.response, transport, note);\n attempts.push({\n transport,\n status: output.response.status,\n ok,\n durationMs: Date.now() - attemptStartedAt,\n ...(note === undefined ? {} : { note }),\n });\n if (ok) {\n const fallbackNote =\n attempts.length > 1 ? buildReplayFallbackNote(attempts, transport) : undefined;\n const previewData = toStructuredPreviewData(output.data);\n return {\n transport,\n attempts,\n response: output.response,\n ...(previewData === undefined ? {} : { data: previewData }),\n ...(fallbackNote === undefined ? {} : { note: fallbackNote }),\n };\n }\n } catch (error) {\n attempts.push({\n transport,\n ok: false,\n durationMs: Date.now() - attemptStartedAt,\n error: normalizeRuntimeErrorMessage(error),\n });\n }\n }\n\n const previewData = toStructuredPreviewData(lastOutput?.data);\n return {\n attempts,\n ...(lastOutput?.response === undefined ? {} : { response: lastOutput.response }),\n ...(previewData === undefined ? {} : { data: previewData }),\n note: \"no transport completed successfully\",\n };\n }\n\n private async executeReplayTransportAttempt(\n transport: TransportKind,\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n explicitPageRef?: PageRef,\n ): Promise<OpensteerRawRequestOutput> {\n const normalized = finalizeMaterializedTransportRequest(request, transport);\n switch (transport) {\n case \"direct-http\":\n return this.executeDirectTransportRequestWithPersistence(normalized, timeout);\n case \"matched-tls\":\n return this.executeMatchedTlsTransportRequestWithPersistence(\n normalized,\n timeout,\n this.currentBinding(),\n );\n case \"context-http\":\n return this.executeContextTransportRequestWithPersistence(\n normalized,\n timeout,\n this.currentBinding(),\n );\n case \"page-http\": {\n const binding = await this.resolvePageHttpBinding(\n normalized.url,\n explicitPageRef ?? this.currentBinding()?.pageRef,\n false,\n );\n return this.executePageHttpTransportRequestWithPersistence(normalized, timeout, binding);\n }\n case \"session-http\": {\n const binding = this.currentBinding() ?? (await this.ensureBrowserTransportBinding());\n return this.executeTransportRequestWithJournal(normalized, timeout, binding.sessionRef);\n }\n }\n }\n\n private async executeReplayTransportAttemptWithinBudget(\n transport: TransportKind,\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n attemptTimeoutMs: number | undefined,\n ): Promise<OpensteerRawRequestOutput> {\n if (attemptTimeoutMs === undefined) {\n return this.executeReplayTransportAttempt(transport, request, timeout);\n }\n return runWithPolicyTimeout(\n {\n resolveTimeoutMs() {\n return attemptTimeoutMs;\n },\n },\n {\n operation: timeout.operation,\n signal: timeout.signal,\n },\n (attemptTimeout) => this.executeReplayTransportAttempt(transport, request, attemptTimeout),\n );\n }\n\n private async executeFetchTransportAttempt(\n transport: TransportKind,\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n input: OpensteerSessionFetchInput,\n ): Promise<OpensteerRawRequestOutput> {\n let prepared = finalizeMaterializedTransportRequest(request, transport);\n if (\n input.cookies !== false &&\n transport === \"direct-http\" &&\n this.currentBinding() !== undefined\n ) {\n const cookies = await this.requireEngine().getCookies({\n sessionRef: this.currentBinding()!.sessionRef,\n urls: [prepared.url],\n });\n prepared = applyBrowserCookiesToTransportRequest(prepared, cookies);\n }\n return this.executeReplayTransportAttempt(transport, prepared, timeout, input.pageRef);\n }\n\n private async resolveInteractionTraceById(traceId: string): Promise<InteractionTraceRecord> {\n const trace = await (await this.ensureRoot()).registry.interactionTraces.getById(traceId);\n if (trace === undefined) {\n throw new OpensteerProtocolError(\"not-found\", `interaction trace ${traceId} was not found`, {\n details: {\n traceId,\n kind: \"interaction-trace\",\n },\n });\n }\n return trace;\n }\n\n private async captureReverseStateSnapshot(\n pageRef: PageRef,\n timeout: TimeoutExecutionContext,\n options: {\n readonly includeStorage: boolean;\n readonly includeSessionStorage: boolean;\n readonly includeIndexedDb: boolean;\n readonly globalNames?: readonly string[];\n },\n ): Promise<OpensteerStateSnapshot> {\n const pageInfo = await timeout.runStep(() => this.requireEngine().getPageInfo({ pageRef }));\n const cookies = await timeout.runStep(() =>\n this.requireEngine().getCookies({\n sessionRef: pageInfo.sessionRef,\n urls: [pageInfo.url],\n }),\n );\n const storage = options.includeStorage\n ? await timeout.runStep(() =>\n this.requireEngine().getStorageSnapshot({\n sessionRef: pageInfo.sessionRef,\n includeSessionStorage: options.includeSessionStorage,\n includeIndexedDb: options.includeIndexedDb,\n }),\n )\n : undefined;\n const pageState = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: CAPTURE_PAGE_STATE_SCRIPT,\n args: [\n {\n globalNames: [...(options.globalNames ?? [])],\n },\n ],\n }),\n );\n\n return {\n id: `state:${randomUUID()}`,\n capturedAt: Date.now(),\n pageRef,\n url: pageInfo.url,\n cookies: cookies.map((cookie) => ({\n name: cookie.name,\n value: cookie.value,\n domain: cookie.domain,\n path: cookie.path,\n secure: cookie.secure,\n httpOnly: cookie.httpOnly,\n ...(cookie.sameSite === undefined ? {} : { sameSite: cookie.sameSite }),\n ...(cookie.priority === undefined ? {} : { priority: cookie.priority }),\n ...(cookie.partitionKey === undefined ? {} : { partitionKey: cookie.partitionKey }),\n session: cookie.session,\n ...(cookie.expiresAt === undefined ? {} : { expiresAt: cookie.expiresAt }),\n })),\n ...(storage === undefined ? {} : { storage }),\n ...(Array.isArray((pageState.data as { hiddenFields?: unknown }).hiddenFields)\n ? {\n hiddenFields: (\n pageState.data as {\n hiddenFields: readonly { path: string; name: string; value: string }[];\n }\n ).hiddenFields,\n }\n : {}),\n ...(pageState.data !== null &&\n typeof pageState.data === \"object\" &&\n !Array.isArray(pageState.data) &&\n \"globals\" in pageState.data\n ? {\n globals: (pageState.data as { globals?: Readonly<Record<string, unknown>> }).globals,\n }\n : {}),\n };\n }\n\n private async replayInteractionTraceById(\n traceId: string,\n explicitPageRef: PageRef | undefined,\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerInteractionReplayOutput> {\n const trace = await this.resolveInteractionTraceById(traceId);\n const pageRef = explicitPageRef ?? trace.payload.pageRef ?? (await this.ensurePageRef());\n try {\n const result = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef,\n script: INTERACTION_REPLAY_SCRIPT,\n args: [trace.payload.events],\n }),\n );\n const replayedEventCount =\n typeof (result.data as { replayedEventCount?: unknown }).replayedEventCount === \"number\"\n ? (result.data as { replayedEventCount: number }).replayedEventCount\n : trace.payload.events.length;\n return {\n traceId: trace.id,\n replayedEventCount,\n success: true,\n };\n } catch (error) {\n return {\n traceId: trace.id,\n replayedEventCount: 0,\n success: false,\n error: normalizeRuntimeErrorMessage(error),\n };\n }\n }\n\n private async readBrowserNetworkRecords(\n input: {\n readonly pageRef?: PageRef;\n readonly requestIds?: readonly string[];\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string | number;\n readonly resourceType?: NetworkQueryRecord[\"record\"][\"resourceType\"];\n readonly includeBodies: boolean;\n readonly includeCurrentPageOnly?: boolean;\n },\n signal: AbortSignal,\n ): Promise<readonly BrowserNetworkRecord[]> {\n const sessionRef = this.sessionRef;\n if (!sessionRef) {\n throw new Error(\"Opensteer session is not initialized\");\n }\n\n return this.requireEngine().getNetworkRecords({\n sessionRef,\n ...(input.includeCurrentPageOnly === false || input.pageRef !== undefined\n ? input.pageRef === undefined\n ? {}\n : { pageRef: input.pageRef }\n : this.pageRef === undefined\n ? {}\n : { pageRef: this.pageRef }),\n ...(input.requestIds === undefined ? {} : { requestIds: input.requestIds }),\n ...(input.url === undefined ? {} : { url: input.url }),\n ...(input.hostname === undefined ? {} : { hostname: input.hostname }),\n ...(input.path === undefined ? {} : { path: input.path }),\n ...(input.method === undefined ? {} : { method: input.method }),\n ...(input.status === undefined ? {} : { status: normalizeNetworkStatusFilter(input.status) }),\n ...(input.resourceType === undefined ? {} : { resourceType: input.resourceType }),\n includeBodies: input.includeBodies,\n signal,\n });\n }\n\n private async readLiveNetworkRecords(\n input: {\n readonly pageRef?: PageRef;\n readonly requestIds?: readonly string[];\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string | number;\n readonly resourceType?: NetworkQueryRecord[\"record\"][\"resourceType\"];\n readonly includeBodies: boolean;\n readonly includeCurrentPageOnly?: boolean;\n readonly redactSecretHeaders?: boolean;\n },\n signal: AbortSignal,\n ): Promise<readonly NetworkQueryRecord[]> {\n const records = await this.readBrowserNetworkRecords(input, signal);\n return this.networkHistory.materialize(records, {\n redactSecretHeaders: input.redactSecretHeaders ?? true,\n });\n }\n\n private async persistLiveRequestIds(\n requestIds: readonly string[],\n timeout: TimeoutExecutionContext,\n options: {\n readonly includeCurrentPageOnly: boolean;\n readonly pageRef?: PageRef;\n },\n ): Promise<readonly NetworkQueryRecord[]> {\n return timeout.runStep(() =>\n this.persistLiveRequestIdsWithSignal(requestIds, timeout.signal, options),\n );\n }\n\n private async persistLiveRequestIdsWithSignal(\n requestIds: readonly string[],\n signal: AbortSignal,\n options: {\n readonly includeCurrentPageOnly: boolean;\n readonly pageRef?: PageRef;\n },\n ): Promise<readonly NetworkQueryRecord[]> {\n if (requestIds.length === 0) {\n return [];\n }\n const root = await this.ensureRoot();\n let browserRecords: readonly BrowserNetworkRecord[] = [];\n\n for (;;) {\n browserRecords = await this.readBrowserNetworkRecords(\n {\n includeBodies: true,\n includeCurrentPageOnly: options.includeCurrentPageOnly,\n ...(options.pageRef === undefined ? {} : { pageRef: options.pageRef }),\n requestIds,\n },\n signal,\n );\n if (\n browserRecords.length === requestIds.length &&\n browserRecords.every((record) => record.captureState !== \"pending\")\n ) {\n break;\n }\n await delayWithSignal(PERSISTED_NETWORK_SETTLE_POLL_MS, signal);\n }\n\n return this.networkHistory.persist(browserRecords, root.registry.savedNetwork, {\n bodyWriteMode: \"authoritative\",\n redactSecretHeaders: false,\n });\n }\n\n private async syncPersistedNetworkSelection(\n timeout: TimeoutExecutionContext,\n input: Pick<\n OpensteerNetworkQueryInput,\n | \"pageRef\"\n | \"recordId\"\n | \"requestId\"\n | \"capture\"\n | \"tag\"\n | \"url\"\n | \"hostname\"\n | \"path\"\n | \"method\"\n | \"status\"\n | \"resourceType\"\n | \"includeBodies\"\n >,\n options: {\n readonly includeBodies: boolean;\n },\n ): Promise<readonly NetworkQueryRecord[]> {\n if (this.sessionRef === undefined) {\n return [];\n }\n\n const requestIds = resolveLiveQueryRequestIds(input, this.networkHistory);\n if (requestIds !== undefined && requestIds.length === 0) {\n return [];\n }\n const pageRef = resolveLiveQueryPageRef(input, this.pageRef, requestIds, this.networkHistory);\n const includeCurrentPageOnly = pageRef === undefined && input.recordId === undefined;\n const browserRecords = await timeout.runStep(() =>\n this.readBrowserNetworkRecords(\n {\n ...(pageRef === undefined ? {} : { pageRef }),\n ...(requestIds === undefined ? {} : { requestIds }),\n ...(input.url === undefined ? {} : { url: input.url }),\n ...(input.hostname === undefined ? {} : { hostname: input.hostname }),\n ...(input.path === undefined ? {} : { path: input.path }),\n ...(input.method === undefined ? {} : { method: input.method }),\n ...(input.status === undefined ? {} : { status: input.status }),\n ...(input.resourceType === undefined ? {} : { resourceType: input.resourceType }),\n includeBodies: options.includeBodies,\n includeCurrentPageOnly,\n },\n timeout.signal,\n ),\n );\n const root = await this.ensureRoot();\n return timeout.runStep(() =>\n this.networkHistory.persist(browserRecords, root.registry.savedNetwork, {\n bodyWriteMode: options.includeBodies ? \"authoritative\" : \"metadata-only\",\n redactSecretHeaders: false,\n }),\n );\n }\n\n private toSavedNetworkQueryInput(input: OpensteerNetworkQueryInput): SavedNetworkQueryInput {\n return {\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n ...(input.recordId === undefined ? {} : { recordId: input.recordId }),\n ...(input.requestId === undefined ? {} : { requestId: input.requestId }),\n ...(input.capture === undefined ? {} : { capture: input.capture }),\n ...(input.tag === undefined ? {} : { tag: input.tag }),\n ...(input.url === undefined ? {} : { url: input.url }),\n ...(input.hostname === undefined ? {} : { hostname: input.hostname }),\n ...(input.path === undefined ? {} : { path: input.path }),\n ...(input.method === undefined ? {} : { method: input.method }),\n ...(input.status === undefined ? {} : { status: input.status }),\n ...(input.resourceType === undefined ? {} : { resourceType: input.resourceType }),\n ...(input.includeBodies === undefined ? {} : { includeBodies: input.includeBodies }),\n ...(input.limit === undefined ? {} : { limit: input.limit }),\n };\n }\n\n private async readLiveRequestIds(\n timeout: TimeoutExecutionContext,\n options: {\n readonly includeCurrentPageOnly: boolean;\n },\n ): Promise<ReadonlySet<string>> {\n const records = await timeout.runStep(() =>\n this.readLiveNetworkRecords(\n {\n includeBodies: false,\n includeCurrentPageOnly: options.includeCurrentPageOnly,\n },\n timeout.signal,\n ),\n );\n return new Set(records.map((record) => record.record.requestId));\n }\n\n private async observeLiveTransportDelta(\n timeout: TimeoutExecutionContext,\n baselineRequestIds: ReadonlySet<string>,\n options: {\n readonly includeCurrentPageOnly: boolean;\n },\n ): Promise<string | undefined> {\n const records = await timeout.runStep(() =>\n this.readLiveNetworkRecords(\n {\n includeBodies: false,\n includeCurrentPageOnly: options.includeCurrentPageOnly,\n },\n timeout.signal,\n ),\n );\n const delta = records.filter((record) => !baselineRequestIds.has(record.record.requestId));\n if (delta.length === 0) {\n return undefined;\n }\n await this.persistLiveRequestIds(\n delta.map((record) => record.record.requestId),\n timeout,\n {\n includeCurrentPageOnly: options.includeCurrentPageOnly,\n },\n );\n return sortLiveNetworkRecords(delta, this.networkHistory)[0]?.recordId;\n }\n\n private async executeTransportRequestWithJournal(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n sessionRef: SessionRef,\n ): Promise<OpensteerRawRequestOutput> {\n const baselineRequestIds = await this.readLiveRequestIds(timeout, {\n includeCurrentPageOnly: false,\n });\n const response = await timeout.runStep(() =>\n this.requireEngine().executeRequest({\n sessionRef,\n request,\n signal: timeout.signal,\n }),\n );\n const recordId = await this.observeLiveTransportDelta(timeout, baselineRequestIds, {\n includeCurrentPageOnly: false,\n });\n\n const requestResult: OpensteerRequestTransportResult =\n toProtocolRequestTransportResult(request);\n const responseResult: OpensteerRequestResponseResult = toProtocolRequestResponseResult(\n response.data,\n );\n if (recordId === undefined) {\n throw new OpensteerProtocolError(\n \"operation-failed\",\n \"browser transport completed but no live network record was journaled for the request\",\n );\n }\n return {\n recordId,\n request: requestResult,\n response: responseResult,\n ...(parseStructuredResponseData(response.data) === undefined\n ? {}\n : { data: parseStructuredResponseData(response.data) }),\n };\n }\n\n private currentBinding(): RuntimeBrowserBinding | undefined {\n return this.sessionRef === undefined || this.pageRef === undefined\n ? undefined\n : {\n sessionRef: this.sessionRef,\n pageRef: this.pageRef,\n };\n }\n\n private requireSessionRef(): SessionRef {\n if (!this.sessionRef) {\n throw new Error(\"Opensteer session is not initialized\");\n }\n return this.sessionRef;\n }\n\n private async ensureBrowserTransportBinding(): Promise<RuntimeBrowserBinding> {\n const pageRef = await this.ensurePageRef();\n return {\n sessionRef: this.requireSessionRef(),\n pageRef,\n };\n }\n\n private async executeDirectTransportRequestWithPersistence(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerRawRequestOutput> {\n const response = await timeout.runStep(() =>\n executeDirectTransportRequest(request, timeout.signal),\n );\n const recordId = await this.persistDirectTransportRecord(request, response, undefined);\n return {\n recordId,\n request: toProtocolRequestTransportResult(request),\n response: toProtocolRequestResponseResult(response),\n ...(parseStructuredResponseData(response) === undefined\n ? {}\n : { data: parseStructuredResponseData(response) }),\n };\n }\n\n private async executePageHttpTransportRequestWithPersistence(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding,\n ): Promise<OpensteerRawRequestOutput> {\n const response = await this.executePageHttpTransportRequest(request, timeout, binding);\n const recordId = await this.persistDirectTransportRecord(\n request,\n response,\n undefined,\n \"page-http\",\n binding,\n );\n return {\n recordId,\n request: toProtocolRequestTransportResult(request),\n response: toProtocolRequestResponseResult(response),\n ...(parseStructuredResponseData(response) === undefined\n ? {}\n : { data: parseStructuredResponseData(response) }),\n };\n }\n\n private async executeContextTransportRequestWithPersistence(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding | undefined,\n ): Promise<OpensteerRawRequestOutput> {\n const response = await this.executeContextTransportRequest(request, timeout, binding);\n const recordId = await this.persistDirectTransportRecord(\n request,\n response,\n undefined,\n \"context-http\",\n binding,\n );\n return {\n recordId,\n request: toProtocolRequestTransportResult(request),\n response: toProtocolRequestResponseResult(response),\n ...(parseStructuredResponseData(response) === undefined\n ? {}\n : { data: parseStructuredResponseData(response) }),\n };\n }\n\n private async executeMatchedTlsTransportRequestWithPersistence(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding | undefined,\n ): Promise<OpensteerRawRequestOutput> {\n const response = await this.executeMatchedTlsTransportRequest(request, timeout, binding);\n const recordId = await this.persistDirectTransportRecord(\n request,\n response,\n undefined,\n \"matched-tls\",\n binding,\n );\n return {\n recordId,\n request: toProtocolRequestTransportResult(request),\n response: toProtocolRequestResponseResult(response),\n ...(parseStructuredResponseData(response) === undefined\n ? {}\n : { data: parseStructuredResponseData(response) }),\n };\n }\n\n private async executePageHttpTransportRequest(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding,\n ): Promise<{\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n }> {\n const remainingMs = timeout.remainingMs();\n const result = await timeout.runStep(() =>\n this.requireEngine().evaluatePage({\n pageRef: binding.pageRef,\n script: PAGE_HTTP_REQUEST_SCRIPT,\n args: [\n {\n url: request.url,\n method: request.method,\n headers: request.headers ?? [],\n bodyBase64:\n request.body === undefined\n ? undefined\n : Buffer.from(request.body.bytes).toString(\"base64\"),\n followRedirects: request.followRedirects !== false,\n },\n ],\n ...(remainingMs === undefined ? {} : { timeoutMs: remainingMs }),\n }),\n );\n return toPageHttpTransportResponse(result.data);\n }\n\n private async executeContextTransportRequest(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding | undefined,\n ): Promise<{\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n }> {\n const liveBinding = binding ?? (await this.ensureBrowserTransportBinding());\n const cookies = await this.requireEngine().getCookies({\n sessionRef: liveBinding.sessionRef,\n urls: [request.url],\n });\n const requestWithCookies = applyBrowserCookiesToTransportRequest(request, cookies);\n return timeout.runStep(() => executeDirectTransportRequest(requestWithCookies, timeout.signal));\n }\n\n private async executeMatchedTlsTransportRequest(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n timeout: TimeoutExecutionContext,\n binding: RuntimeBrowserBinding | undefined,\n ): Promise<{\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n }> {\n const liveBinding = binding ?? (await this.ensureBrowserTransportBinding());\n const cookies = await this.requireEngine().getCookies({\n sessionRef: liveBinding.sessionRef,\n urls: [request.url],\n });\n const requestWithCookies = applyBrowserCookiesToTransportRequest(request, cookies);\n const cookieHeader = headerValue(requestWithCookies.headers ?? [], \"cookie\");\n return timeout.runStep(() =>\n executeMatchedTlsTransportRequestWithCurl({\n request: omitTransportRequestHeader(requestWithCookies, \"cookie\"),\n cookies: cookieHeaderToCookieRecords(cookieHeader, request.url, liveBinding.sessionRef),\n signal: timeout.signal,\n }),\n );\n }\n\n private async persistDirectTransportRecord(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n },\n response: {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n },\n tag: string | undefined,\n transportLabel = \"direct-http\",\n binding?: RuntimeBrowserBinding,\n ): Promise<string> {\n const root = await this.ensureRoot();\n const now = Date.now();\n const recordId = `record:${randomUUID()}`;\n const requestId = createNetworkRequestId(`${transportLabel}-${randomUUID()}`);\n const syntheticSessionRef =\n binding?.sessionRef ?? createSessionRef(`${transportLabel}-${this.workspace}`);\n const record: NetworkQueryRecord = {\n recordId,\n savedAt: now,\n record: {\n kind: \"http\",\n requestId,\n sessionRef: syntheticSessionRef,\n ...(binding?.pageRef === undefined ? {} : { pageRef: binding.pageRef }),\n method: request.method,\n url: request.url,\n requestHeaders: request.headers ?? [],\n responseHeaders: response.headers,\n status: response.status,\n statusText: response.statusText,\n resourceType: \"fetch\",\n navigationRequest: false,\n captureState: \"complete\",\n requestBodyState: request.body === undefined ? \"skipped\" : \"complete\",\n responseBodyState: response.body === undefined ? \"skipped\" : \"complete\",\n ...(request.body === undefined ? {} : { requestBody: toProtocolBodyPayload(request.body) }),\n ...(response.body === undefined\n ? {}\n : { responseBody: toProtocolBodyPayload(response.body) }),\n },\n };\n\n await root.registry.savedNetwork.save([record], {\n bodyWriteMode: \"authoritative\",\n ...(tag === undefined ? {} : { tag }),\n });\n return recordId;\n }\n\n private async resolvePageHttpBinding(\n requestUrl: string,\n explicitPageRef: PageRef | undefined,\n requireSameOrigin = false,\n ): Promise<RuntimeBrowserBinding> {\n const pageRef = explicitPageRef ?? (await this.ensurePageRef());\n const pageInfo = await this.requireEngine().getPageInfo({ pageRef });\n if (requireSameOrigin && new URL(pageInfo.url).origin !== new URL(requestUrl).origin) {\n throw new OpensteerProtocolError(\n \"invalid-request\",\n `page-http requires a bound page on the same origin as ${requestUrl}`,\n {\n details: {\n pageRef,\n pageUrl: pageInfo.url,\n requestUrl,\n },\n },\n );\n }\n return {\n sessionRef: pageInfo.sessionRef,\n pageRef,\n };\n }\n\n private async resolveScriptTransformSource(input: {\n readonly artifactId?: string;\n readonly content?: string;\n }): Promise<ScriptTransformSource> {\n if (typeof input.content === \"string\") {\n return {\n content: input.content,\n };\n }\n\n if (input.artifactId === undefined) {\n throw new OpensteerProtocolError(\n \"invalid-request\",\n \"script transforms require either content or artifactId\",\n );\n }\n\n const root = await this.ensureRoot();\n const artifact = await root.artifacts.read(input.artifactId);\n if (artifact === undefined || artifact.payload.kind !== \"script-source\") {\n throw new OpensteerProtocolError(\n \"not-found\",\n `script artifact ${input.artifactId} was not found`,\n {\n details: {\n artifactId: input.artifactId,\n kind: \"script-source\",\n },\n },\n );\n }\n\n return {\n content: artifact.payload.data.content,\n artifactId: artifact.manifest.artifactId,\n data: artifact.payload.data,\n scope: artifact.manifest.scope,\n };\n }\n\n private async buildScriptTransformOutput(input: {\n readonly source: ScriptTransformSource;\n readonly transformedContent: string;\n readonly persist: boolean;\n readonly transform: \"beautify\" | \"deobfuscate\";\n }): Promise<OpensteerScriptBeautifyOutput> {\n const root = await this.ensureRoot();\n const bytesBefore = Buffer.byteLength(input.source.content, \"utf8\");\n const bytesAfter = Buffer.byteLength(input.transformedContent, \"utf8\");\n if (!input.persist) {\n return {\n content: input.transformedContent,\n bytesBefore,\n bytesAfter,\n };\n }\n\n const scriptArtifact: ScriptSourceArtifactData = {\n source: input.source.data?.source ?? \"inline\",\n ...(input.source.data?.url === undefined ? {} : { url: input.source.data.url }),\n ...(input.source.data?.type === undefined ? {} : { type: input.source.data.type }),\n hash: sha256Hex(Buffer.from(input.transformedContent, \"utf8\")),\n loadOrder: input.source.data?.loadOrder ?? 0,\n content: input.transformedContent,\n };\n const provenance =\n input.source.artifactId === undefined\n ? undefined\n : {\n sourceArtifactId: input.source.artifactId,\n transform: input.transform,\n };\n const manifest = await root.artifacts.writeStructured({\n kind: \"script-source\",\n ...(input.source.scope === undefined ? {} : { scope: input.source.scope }),\n ...(provenance === undefined ? {} : { provenance }),\n data: scriptArtifact,\n });\n\n return {\n content: input.transformedContent,\n artifactId: manifest.artifactId,\n bytesBefore,\n bytesAfter,\n };\n }\n\n private async flushPersistedNetworkHistory(): Promise<void> {\n if (this.sessionRef === undefined) {\n return;\n }\n\n if (this.networkHistory.getKnownRequestIds().size === 0) {\n return;\n }\n\n const root = await this.ensureRoot();\n\n try {\n await withDetachedTimeoutSignal(PERSISTED_NETWORK_FLUSH_TIMEOUT_MS, async (signal) => {\n const browserRecords = await this.readBrowserNetworkRecords(\n {\n includeBodies: true,\n includeCurrentPageOnly: false,\n },\n signal,\n );\n await this.networkHistory.persist(browserRecords, root.registry.savedNetwork, {\n bodyWriteMode: \"authoritative\",\n redactSecretHeaders: false,\n });\n });\n } catch (error) {\n if (!isIgnorableRuntimeBindingError(error)) {\n throw error;\n }\n }\n }\n\n private toDomTargetRef(target: OpensteerTargetInput): DomTargetRef {\n if (target.kind === \"persist\") {\n return {\n kind: \"descriptor\",\n persist: target.persist,\n };\n }\n\n if (target.kind === \"selector\") {\n return {\n kind: \"selector\",\n selector: target.selector,\n };\n }\n\n return {\n kind: \"selector\",\n selector: `[c=\"${String(target.element)}\"]`,\n };\n }\n\n private async ensureRoot(): Promise<OpensteerRuntimeWorkspace> {\n if (!this.root) {\n this.root = await createFilesystemOpensteerWorkspace({\n rootPath: this.rootPath,\n ...(this.workspaceName === undefined ? {} : { workspace: this.workspaceName }),\n scope: this.workspaceName === undefined ? \"temporary\" : \"workspace\",\n });\n }\n\n return this.root;\n }\n\n private async ensureEngine(\n overrides: OpensteerEngineFactoryOptions = {},\n ): Promise<DisposableBrowserCoreEngine> {\n if (this.engine) {\n return this.engine;\n }\n\n if (this.injectedEngine) {\n this.engine = this.wrapEngineWithObservationCapture(\n this.injectedEngine as DisposableBrowserCoreEngine,\n );\n this.ownsEngine = false;\n return this.engine;\n }\n\n if (this.engineFactory === undefined) {\n throw new Error(\"Opensteer engine factory is not initialized\");\n }\n\n this.engine = this.wrapEngineWithObservationCapture(\n (await this.engineFactory(overrides)) as DisposableBrowserCoreEngine,\n );\n this.ownsEngine = true;\n return this.engine;\n }\n\n private async ensureSemantics(): Promise<void> {\n const root = await this.ensureRoot();\n const engine = await this.ensureEngine();\n this.dom = createDomRuntime({\n engine,\n root,\n namespace: this.workspace,\n ...(this.injectedDescriptorStore === undefined\n ? {}\n : { descriptorStore: this.injectedDescriptorStore }),\n policy: this.policy,\n });\n this.computer = createComputerUseRuntime({\n engine,\n dom: this.dom,\n policy: this.policy,\n });\n this.extractionDescriptors =\n this.injectedExtractionDescriptorStore ??\n createOpensteerExtractionDescriptorStore({\n root,\n namespace: this.workspace,\n });\n }\n\n private async ensurePageRef(): Promise<PageRef> {\n if ((await this.ensureLiveRuntimeBinding()) === \"unbound\") {\n await this.open();\n }\n if (!this.pageRef) {\n throw new Error(\"Opensteer page is not available\");\n }\n return this.pageRef;\n }\n\n private requireRoot(): OpensteerRuntimeWorkspace {\n if (!this.root) {\n throw new Error(\"Opensteer root is not initialized\");\n }\n return this.root;\n }\n\n private requireEngine(): DisposableBrowserCoreEngine {\n if (!this.engine) {\n throw new Error(\"Opensteer engine is not initialized\");\n }\n return this.engine;\n }\n\n private requireDom(): DomRuntime {\n if (!this.dom) {\n throw new Error(\"Opensteer DOM runtime is not initialized\");\n }\n return this.dom;\n }\n\n private requireComputer(): ComputerUseRuntime {\n if (!this.computer) {\n throw new Error(\"Opensteer computer-use runtime is not initialized\");\n }\n return this.computer;\n }\n\n private requireExtractionDescriptors() {\n if (!this.extractionDescriptors) {\n throw new Error(\"Opensteer extraction descriptor store is not initialized\");\n }\n return this.extractionDescriptors;\n }\n\n private async ensureLiveRuntimeBinding(): Promise<\"unbound\" | \"live\"> {\n const health = await this.probeRuntimeBindingHealth();\n if (health === \"invalid\") {\n const engine = this.engine;\n if (engine) {\n await this.cleanupSessionResources(engine, this.pageRef, this.sessionRef);\n }\n await this.resetRuntimeState({\n disposeEngine: true,\n });\n return \"unbound\";\n }\n return health;\n }\n\n private async probeRuntimeBindingHealth(): Promise<\"unbound\" | \"live\" | \"invalid\"> {\n const pageRef = this.pageRef;\n const sessionRef = this.sessionRef;\n if (pageRef === undefined && sessionRef === undefined) {\n return \"unbound\";\n }\n if (pageRef === undefined || sessionRef === undefined) {\n return \"invalid\";\n }\n\n const engine = this.engine;\n if (!engine) {\n return \"invalid\";\n }\n\n try {\n await engine.getPageInfo({ pageRef });\n return \"live\";\n } catch (error) {\n if (isIgnorableRuntimeBindingError(error)) {\n const remainingPages = await engine.listPages({ sessionRef }).catch(() => undefined);\n const replacementPageRef = remainingPages?.[0]?.pageRef;\n if (replacementPageRef !== undefined) {\n this.pageRef = replacementPageRef;\n return \"live\";\n }\n return \"invalid\";\n }\n throw error;\n }\n }\n\n private async readNavigationSummary(\n targetPageRef?: PageRef,\n ): Promise<OpensteerNavigationSummary> {\n const pageRef = targetPageRef ?? (await this.ensurePageRef());\n const pageInfo = await this.requireEngine().getPageInfo({ pageRef });\n\n return {\n url: pageInfo.url,\n title: pageInfo.title,\n };\n }\n\n private async readCreatedPageOutput(pageRef: PageRef): Promise<OpensteerPageNewOutput> {\n return {\n pageRef,\n ...(await this.readNavigationSummary(pageRef)),\n };\n }\n\n private async captureSnapshotArtifacts(\n pageRef: PageRef,\n options: {\n readonly includeHtmlSnapshot: boolean;\n },\n timeout: TimeoutExecutionContext,\n ): Promise<OpensteerTraceArtifacts> {\n const root = this.requireRoot();\n const mainFrame = await timeout.runStep(() => getMainFrame(this.requireEngine(), pageRef));\n const domSnapshot = await timeout.runStep(() =>\n this.requireEngine().getDomSnapshot({\n frameRef: mainFrame.frameRef,\n }),\n );\n const manifests: ArtifactManifest[] = [];\n\n manifests.push(\n await timeout.runStep(() =>\n root.artifacts.writeStructured({\n kind: \"dom-snapshot\",\n scope: buildArtifactScope({\n sessionRef: this.sessionRef,\n pageRef,\n frameRef: domSnapshot.frameRef,\n documentRef: domSnapshot.documentRef,\n documentEpoch: domSnapshot.documentEpoch,\n }),\n data: domSnapshot,\n }),\n ),\n );\n\n if (options.includeHtmlSnapshot) {\n const htmlSnapshot = await timeout.runStep(() =>\n this.requireEngine().getHtmlSnapshot({\n frameRef: mainFrame.frameRef,\n }),\n );\n manifests.push(\n await timeout.runStep(() =>\n root.artifacts.writeStructured({\n kind: \"html-snapshot\",\n scope: buildArtifactScope({\n sessionRef: this.sessionRef,\n pageRef,\n frameRef: htmlSnapshot.frameRef,\n documentRef: htmlSnapshot.documentRef,\n documentEpoch: htmlSnapshot.documentEpoch,\n }),\n data: htmlSnapshot,\n }),\n ),\n );\n }\n\n return {\n manifests,\n };\n }\n\n private async persistComputerArtifacts(\n output: ComputerUseRuntimeOutput,\n timeout: TimeoutExecutionContext,\n ): Promise<PersistedComputerArtifacts> {\n const root = this.requireRoot();\n const manifests: ArtifactManifest[] = [];\n\n const screenshotManifest = await timeout.runStep(() =>\n root.artifacts.writeBinary({\n kind: \"screenshot\",\n scope: buildArtifactScope({\n sessionRef: this.sessionRef,\n pageRef: output.pageRef,\n frameRef: output.screenshot.frameRef,\n documentRef: output.screenshot.documentRef,\n documentEpoch: output.screenshot.documentEpoch,\n }),\n mediaType: screenshotMediaType(output.screenshot.format),\n data: output.screenshot.payload.bytes,\n }),\n );\n manifests.push(screenshotManifest);\n\n const screenshotPayload = manifestToExternalBinaryLocation(root.rootPath, screenshotManifest);\n return {\n manifests,\n screenshot: {\n payload: screenshotPayload,\n format: output.screenshot.format,\n size: output.screenshot.size,\n coordinateSpace: output.screenshot.coordinateSpace,\n ...(output.screenshot.clip === undefined ? {} : { clip: output.screenshot.clip }),\n },\n };\n }\n\n private async appendTrace(input: OpensteerSessionTraceInput): Promise<void> {\n const runId = this.runId;\n if (runId === undefined) {\n return;\n }\n\n const root = await this.ensureRoot();\n const capturedStepEvents =\n input.events ??\n this.consumePendingOperationEventCapture(input.operation, input.startedAt, input.completedAt);\n const drainedStepEvents =\n input.events === undefined ? await this.drainPendingEngineEvents(input.context) : undefined;\n const stepEvents = mergeObservedStepEvents(capturedStepEvents, drainedStepEvents);\n const normalizedData = input.data === undefined ? undefined : toCanonicalJsonValue(input.data);\n const normalizedError =\n input.error === undefined ? undefined : normalizeOpensteerError(input.error);\n const artifacts =\n input.artifacts === undefined\n ? undefined\n : await Promise.all(\n input.artifacts.manifests.map(async (manifest) => {\n const reference = await root.artifacts.toProtocolArtifactReference(\n manifest.artifactId,\n \"capture\",\n );\n if (!reference) {\n throw new Error(`failed to materialize artifact reference ${manifest.artifactId}`);\n }\n return reference;\n }),\n );\n\n const traceEntry = await root.traces.append(runId, {\n operation: input.operation,\n outcome: input.outcome,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(stepEvents === undefined ? {} : { events: stepEvents }),\n ...(artifacts === undefined ? {} : { artifacts }),\n ...(normalizedData === undefined ? {} : { data: normalizedData }),\n ...(normalizedError === undefined\n ? {}\n : {\n error: normalizedError,\n }),\n });\n\n const observationSession = await this.ensureObservationSession().catch(() => undefined);\n if (observationSession === undefined || this.observationConfig.profile === \"off\") {\n return;\n }\n\n const observationArtifactIds =\n input.artifacts === undefined\n ? undefined\n : (\n await Promise.allSettled(\n input.artifacts.manifests.map(async (manifest) => {\n const artifact = await observationSession.writeArtifact({\n artifactId: manifest.artifactId,\n kind: observationArtifactKindFromManifest(manifest.kind),\n createdAt: manifest.createdAt,\n context: manifest.scope,\n mediaType: manifest.mediaType,\n byteLength: manifest.byteLength,\n sha256: manifest.sha256,\n opensteerArtifactId: manifest.artifactId,\n storageKey: manifestToExternalBinaryLocation(root.rootPath, manifest).uri,\n });\n return artifact.artifactId;\n }),\n )\n ).flatMap((result) => (result.status === \"fulfilled\" ? [result.value] : []));\n\n const observationEvents = buildObservationEventsFromTrace({\n traceId: traceEntry.traceId,\n stepId: traceEntry.stepId,\n operation: input.operation,\n outcome: input.outcome,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(stepEvents === undefined ? {} : { events: stepEvents }),\n ...(normalizedData === undefined ? {} : { data: normalizedData }),\n ...(normalizedError === undefined ? {} : { error: normalizedError }),\n ...(observationArtifactIds === undefined ? {} : { artifactIds: observationArtifactIds }),\n profile: this.observationConfig.profile,\n });\n if (observationEvents.length > 0) {\n await observationSession.appendBatch(observationEvents).catch(() => undefined);\n }\n }\n\n private async cleanupSessionResources(\n engine: BrowserCoreEngine,\n pageRef: PageRef | undefined,\n sessionRef: SessionRef | undefined,\n ): Promise<void> {\n if (pageRef !== undefined) {\n await engine.closePage({ pageRef }).catch(() => undefined);\n }\n if (sessionRef !== undefined) {\n await engine.closeSession({ sessionRef }).catch(() => undefined);\n }\n }\n\n private async resetRuntimeState(options: { readonly disposeEngine: boolean }): Promise<void> {\n const engine = this.engine;\n const observationSessions = [...this.openedObservationSessions];\n\n this.networkHistory.clear();\n this.sessionRef = undefined;\n this.pageRef = undefined;\n this.runId = undefined;\n this.dom = undefined;\n this.computer = undefined;\n this.extractionDescriptors = undefined;\n this.engine = undefined;\n this.observationSessions.clear();\n this.openingObservationSessions.clear();\n this.openedObservationSessions.clear();\n this.pendingOperationEventCaptures.length = 0;\n\n await Promise.allSettled(\n observationSessions.map((observationSession) =>\n observationSession.close(\"runtime_reset\").catch(() => undefined),\n ),\n );\n if (options.disposeEngine && this.ownsEngine && engine?.dispose) {\n await engine.dispose();\n }\n this.ownsEngine = false;\n }\n\n private async ensureObservationSession(): Promise<SessionObservationSink | undefined> {\n if (this.observationConfig.profile === \"off\") {\n return undefined;\n }\n const observationSessionId = this.resolveObservationSessionId();\n if (observationSessionId === undefined) {\n return undefined;\n }\n\n const existingObservationSession = this.observationSessions.get(observationSessionId);\n if (existingObservationSession !== undefined) {\n return existingObservationSession;\n }\n\n const openingObservationSession = this.openingObservationSessions.get(observationSessionId);\n if (openingObservationSession !== undefined) {\n return await openingObservationSession;\n }\n\n const openObservationSessionTask = this.openObservationSession(observationSessionId).finally(\n () => {\n this.openingObservationSessions.delete(observationSessionId);\n },\n );\n this.openingObservationSessions.set(observationSessionId, openObservationSessionTask);\n return await openObservationSessionTask;\n }\n\n private async ensureConfiguredObservationSession(): Promise<SessionObservationSink | undefined> {\n if (this.observationConfig.profile === \"off\") {\n return undefined;\n }\n const observationSessionId = this.resolveObservationSessionId();\n if (observationSessionId === undefined) {\n return undefined;\n }\n\n const hadObservationSession =\n this.observationSessions.has(observationSessionId) ||\n this.openingObservationSessions.has(observationSessionId);\n const observationSession = await this.ensureObservationSession();\n if (observationSession !== undefined && hadObservationSession) {\n await observationSession.configure?.({\n config: this.observationConfig,\n updatedAt: Date.now(),\n });\n }\n\n return observationSession;\n }\n\n private resolveObservationSessionId(): string | undefined {\n const scopedSession = this.observationSessionStorage.getStore();\n if (scopedSession?.mode === \"session\") {\n return scopedSession.sessionId;\n }\n if (scopedSession?.mode === \"disabled\") {\n return undefined;\n }\n return this.observationSessionId ?? this.sessionRef;\n }\n\n private async openObservationSession(sessionId: string): Promise<SessionObservationSink> {\n const sink = this.injectedObservationSink ?? (await this.ensureRoot()).observations;\n const observationSession = await sink.openSession({\n sessionId,\n openedAt: Date.now(),\n config: this.observationConfig,\n });\n this.observationSessions.set(sessionId, observationSession);\n this.openedObservationSessions.add(observationSession);\n return observationSession;\n }\n\n private runWithOperationTimeout<T>(\n operation: OpensteerSemanticOperationName,\n callback: (context: TimeoutExecutionContext) => Promise<T>,\n options: RuntimeOperationOptions = {},\n ): Promise<T> {\n const timeoutPolicy =\n options.timeoutMs === undefined\n ? this.policy.timeout\n : {\n resolveTimeoutMs() {\n return options.timeoutMs;\n },\n };\n const existingCollector = this.operationEventStorage.getStore();\n if (existingCollector !== undefined) {\n return runWithPolicyTimeout(\n timeoutPolicy,\n {\n operation,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n },\n callback,\n );\n }\n\n const collector: OpensteerEvent[] = [];\n const startedAt = Date.now();\n return this.operationEventStorage.run(collector, async () => {\n try {\n return await runWithPolicyTimeout(\n timeoutPolicy,\n {\n operation,\n ...(options.signal === undefined ? {} : { signal: options.signal }),\n },\n callback,\n );\n } finally {\n this.recordPendingOperationEventCapture({\n operation,\n startedAt,\n completedAt: Date.now(),\n events: collector,\n });\n }\n });\n }\n\n private wrapEngineWithObservationCapture(\n engine: DisposableBrowserCoreEngine,\n ): DisposableBrowserCoreEngine {\n return new Proxy(engine, {\n get: (target, property, receiver) => {\n const value = Reflect.get(target, property, receiver);\n if (typeof value !== \"function\") {\n return value;\n }\n\n return (...args: unknown[]) => {\n const result = Reflect.apply(value, target, args);\n if (!(result instanceof Promise)) {\n return result;\n }\n\n return result.then((resolved) => {\n this.captureObservedStepEvents(resolved);\n return resolved;\n });\n };\n },\n }) as DisposableBrowserCoreEngine;\n }\n\n private captureObservedStepEvents(value: unknown): void {\n const collector = this.operationEventStorage.getStore();\n if (collector === undefined) {\n return;\n }\n\n const events = readStepResultEvents(value);\n if (events === undefined || events.length === 0) {\n return;\n }\n\n collector.push(...events);\n }\n\n private recordPendingOperationEventCapture(capture: PendingOperationEventCapture): void {\n if (capture.events.length === 0) {\n return;\n }\n\n this.pendingOperationEventCaptures.push({\n ...capture,\n events: [...capture.events],\n });\n if (this.pendingOperationEventCaptures.length > PENDING_OPERATION_EVENT_CAPTURE_LIMIT) {\n this.pendingOperationEventCaptures.splice(\n 0,\n this.pendingOperationEventCaptures.length - PENDING_OPERATION_EVENT_CAPTURE_LIMIT,\n );\n }\n }\n\n private consumePendingOperationEventCapture(\n operation: string,\n startedAt: number,\n completedAt: number,\n ): readonly OpensteerEvent[] | undefined {\n for (let index = this.pendingOperationEventCaptures.length - 1; index >= 0; index -= 1) {\n const capture = this.pendingOperationEventCaptures[index];\n if (capture === undefined) {\n continue;\n }\n if (capture.operation !== operation) {\n continue;\n }\n if (\n capture.startedAt < startedAt - PENDING_OPERATION_EVENT_CAPTURE_SKEW_MS ||\n capture.completedAt > completedAt + PENDING_OPERATION_EVENT_CAPTURE_SKEW_MS\n ) {\n continue;\n }\n\n this.pendingOperationEventCaptures.splice(index, 1);\n return capture.events;\n }\n\n return undefined;\n }\n\n private async drainPendingEngineEvents(\n context: TraceContext | undefined,\n ): Promise<readonly OpensteerEvent[] | undefined> {\n const pageRef = context?.pageRef ?? this.pageRef;\n if (pageRef === undefined || this.engine === undefined) {\n return undefined;\n }\n\n const events = await this.engine.drainEvents({ pageRef }).catch(() => []);\n return events.length > 0 ? events : undefined;\n }\n\n private async navigatePage(\n input: {\n readonly operation: \"session.open\" | \"page.goto\";\n readonly pageRef: PageRef;\n readonly url: string;\n },\n timeout: TimeoutExecutionContext,\n ) {\n const remainingMs = timeout.remainingMs();\n const navigation = await timeout.runStep(() =>\n this.requireEngine().navigate({\n pageRef: input.pageRef,\n url: input.url,\n ...(remainingMs === undefined ? {} : { timeoutMs: remainingMs }),\n }),\n );\n await timeout.runStep(() =>\n settleWithPolicy(this.policy.settle, {\n operation: input.operation,\n trigger: \"navigation\",\n engine: this.requireEngine(),\n pageRef: input.pageRef,\n signal: timeout.signal,\n remainingMs: timeout.remainingMs(),\n }),\n );\n return navigation;\n }\n}\n\nfunction buildRuntimeTraceContext(input: {\n readonly sessionRef: SessionRef | undefined;\n readonly pageRef: PageRef | undefined;\n readonly frameRef?: FrameRef | undefined;\n readonly documentRef?: DocumentRef | undefined;\n readonly documentEpoch?: DocumentEpoch | undefined;\n}): TraceContext {\n return {\n ...(input.sessionRef === undefined ? {} : { sessionRef: input.sessionRef }),\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n ...(input.frameRef === undefined ? {} : { frameRef: input.frameRef }),\n ...(input.documentRef === undefined ? {} : { documentRef: input.documentRef }),\n ...(input.documentEpoch === undefined ? {} : { documentEpoch: input.documentEpoch }),\n };\n}\n\nfunction buildArtifactScope(input: {\n readonly sessionRef: SessionRef | undefined;\n readonly pageRef: PageRef | undefined;\n readonly frameRef?: FrameRef | undefined;\n readonly documentRef?: DocumentRef | undefined;\n readonly documentEpoch?: DocumentEpoch | undefined;\n}): TraceContext {\n return buildRuntimeTraceContext(input);\n}\n\nfunction readStepResultEvents(value: unknown): readonly OpensteerEvent[] | undefined {\n if (value === null || typeof value !== \"object\") {\n return undefined;\n }\n\n if (!(\"events\" in value)) {\n return undefined;\n }\n\n const events = (value as { readonly events?: unknown }).events;\n return Array.isArray(events) ? (events as readonly OpensteerEvent[]) : undefined;\n}\n\nfunction mergeObservedStepEvents(\n primary: readonly OpensteerEvent[] | undefined,\n secondary: readonly OpensteerEvent[] | undefined,\n): readonly OpensteerEvent[] | undefined {\n if (primary === undefined || primary.length === 0) {\n return secondary === undefined || secondary.length === 0 ? undefined : secondary;\n }\n if (secondary === undefined || secondary.length === 0) {\n return primary;\n }\n\n const merged = new Map<string, OpensteerEvent>();\n for (const event of primary) {\n merged.set(event.eventId, event);\n }\n for (const event of secondary) {\n merged.set(event.eventId, event);\n }\n return [...merged.values()].sort((left, right) => (left.timestamp ?? 0) - (right.timestamp ?? 0));\n}\n\nfunction selectLiveQueryPageRef(\n input: Pick<OpensteerNetworkQueryInput, \"pageRef\" | \"recordId\">,\n currentPageRef: PageRef | undefined,\n): PageRef | undefined {\n if (input.pageRef !== undefined) {\n return input.pageRef;\n }\n if (input.recordId !== undefined) {\n return undefined;\n }\n return currentPageRef;\n}\n\nfunction buildEngineNetworkRecordFilters(\n input: Pick<\n OpensteerNetworkQueryInput,\n \"url\" | \"hostname\" | \"path\" | \"method\" | \"status\" | \"resourceType\"\n >,\n): {\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string;\n readonly resourceType?: NetworkQueryRecord[\"record\"][\"resourceType\"];\n} {\n return {\n ...(input.url === undefined ? {} : { url: input.url }),\n ...(input.hostname === undefined ? {} : { hostname: input.hostname }),\n ...(input.path === undefined ? {} : { path: input.path }),\n ...(input.method === undefined ? {} : { method: input.method }),\n ...(input.status === undefined ? {} : { status: normalizeNetworkStatusFilter(input.status) }),\n ...(input.resourceType === undefined ? {} : { resourceType: input.resourceType }),\n };\n}\n\nfunction normalizeNetworkStatusFilter(status: string | number): string {\n return String(status);\n}\n\nfunction normalizeNetworkQueryInput(input: OpensteerNetworkQueryInput): OpensteerNetworkQueryInput {\n return {\n ...input,\n ...(input.recordId === undefined ? {} : { recordId: normalizeNetworkRecordId(input.recordId) }),\n ...(input.before === undefined ? {} : { before: normalizeNetworkRecordId(input.before) }),\n ...(input.after === undefined ? {} : { after: normalizeNetworkRecordId(input.after) }),\n };\n}\n\nfunction normalizeNetworkRecordId(recordId: string): string {\n const trimmed = recordId.trim();\n if (trimmed.length === 0 || trimmed.startsWith(\"record:\")) {\n return trimmed;\n }\n return `record:${trimmed}`;\n}\n\nfunction resolveLiveQueryRequestIds(\n input: Pick<OpensteerNetworkQueryInput, \"recordId\" | \"requestId\" | \"capture\" | \"tag\">,\n history: NetworkHistory,\n): readonly string[] | undefined {\n const requestIdCandidates: ReadonlySet<string>[] = [];\n\n if (input.recordId !== undefined) {\n const requestId = history.getRequestId(input.recordId);\n if (requestId === undefined) {\n return [];\n }\n requestIdCandidates.push(new Set([requestId]));\n }\n\n if (input.requestId !== undefined) {\n requestIdCandidates.push(new Set([input.requestId]));\n }\n\n if (input.capture !== undefined) {\n requestIdCandidates.push(history.getRequestIdsForCapture(input.capture));\n }\n\n if (input.tag !== undefined) {\n requestIdCandidates.push(history.getRequestIdsForTag(input.tag));\n }\n\n if (requestIdCandidates.length === 0) {\n return undefined;\n }\n\n return intersectRequestIdSets(requestIdCandidates);\n}\n\nfunction resolveLiveQueryPageRef(\n input: Pick<OpensteerNetworkQueryInput, \"pageRef\" | \"recordId\">,\n currentPageRef: PageRef | undefined,\n requestIds: readonly string[] | undefined,\n history: NetworkHistory,\n): PageRef | undefined {\n const requestedPageRef = selectLiveQueryPageRef(input, currentPageRef);\n if (requestedPageRef !== undefined || requestIds === undefined) {\n return requestedPageRef;\n }\n\n const pageRefs = new Set<PageRef>();\n for (const requestId of requestIds) {\n const pageRef = history.getPageRefForRequestId(requestId);\n if (pageRef === undefined) {\n continue;\n }\n pageRefs.add(pageRef);\n if (pageRefs.size > 1) {\n return undefined;\n }\n }\n\n return pageRefs.values().next().value;\n}\n\nfunction intersectRequestIdSets(requestIdSets: readonly ReadonlySet<string>[]): readonly string[] {\n let current = new Set<string>(requestIdSets[0] ?? []);\n for (const requestIds of requestIdSets.slice(1)) {\n current = new Set([...current].filter((requestId) => requestIds.has(requestId)));\n if (current.size === 0) {\n return [];\n }\n }\n return [...current];\n}\n\nfunction filterNetworkQueryRecords(\n records: readonly NetworkQueryRecord[],\n input: {\n readonly recordId?: string;\n readonly requestId?: string;\n readonly capture?: string;\n readonly tag?: string;\n readonly url?: string;\n readonly hostname?: string;\n readonly path?: string;\n readonly method?: string;\n readonly status?: string | number;\n readonly resourceType?: NetworkQueryRecord[\"record\"][\"resourceType\"];\n },\n): readonly NetworkQueryRecord[] {\n const networkFilters = buildEngineNetworkRecordFilters(input);\n return records.filter((record) => {\n if (input.recordId !== undefined && record.recordId !== input.recordId) {\n return false;\n }\n if (input.requestId !== undefined && record.record.requestId !== input.requestId) {\n return false;\n }\n if (input.capture !== undefined && record.capture !== input.capture) {\n return false;\n }\n if (input.tag !== undefined && !(record.tags ?? []).includes(input.tag)) {\n return false;\n }\n if (!matchesNetworkRecordFilters(record.record, networkFilters)) {\n return false;\n }\n return true;\n });\n}\n\nfunction sortLiveNetworkRecords(\n records: readonly NetworkQueryRecord[],\n history: NetworkHistory,\n): NetworkQueryRecord[] {\n return [...records].sort((left, right) => {\n const leftObservedAt = history.getObservedAt(left.recordId) ?? 0;\n const rightObservedAt = history.getObservedAt(right.recordId) ?? 0;\n if (leftObservedAt !== rightObservedAt) {\n return rightObservedAt - leftObservedAt;\n }\n return left.recordId.localeCompare(right.recordId);\n });\n}\n\nfunction toBrowserRequestBody(input: OpensteerRequestBodyInput): {\n readonly payload: BrowserBodyPayload;\n readonly contentType?: string;\n} {\n if (input === undefined) {\n throw new Error(\"request body input is required\");\n }\n if (\"json\" in input) {\n const contentType = input.contentType ?? \"application/json; charset=utf-8\";\n return {\n payload: bodyPayloadFromUtf8(JSON.stringify(input.json), parseContentType(contentType)),\n contentType,\n };\n }\n if (\"text\" in input) {\n const contentType = input.contentType ?? \"text/plain; charset=utf-8\";\n return {\n payload: bodyPayloadFromUtf8(input.text, parseContentType(contentType)),\n contentType,\n };\n }\n return {\n payload: createBodyPayload(\n new Uint8Array(Buffer.from(input.base64, \"base64\")),\n parseContentType(input.contentType),\n ),\n ...(input.contentType === undefined ? {} : { contentType: input.contentType }),\n };\n}\n\nfunction parseContentType(contentType: string | undefined): {\n readonly mimeType?: string;\n readonly charset?: string;\n} {\n if (contentType === undefined) {\n return {};\n }\n const [mimeTypePart, ...parts] = contentType.split(\";\");\n const mimeType = mimeTypePart?.trim();\n let charset: string | undefined;\n for (const part of parts) {\n const [name, rawValue] = part.split(\"=\");\n if (name?.trim().toLowerCase() === \"charset\" && rawValue !== undefined) {\n charset = rawValue.trim();\n }\n }\n return {\n ...(mimeType === undefined || mimeType.length === 0 ? {} : { mimeType }),\n ...(charset === undefined || charset.length === 0 ? {} : { charset }),\n };\n}\n\nfunction toJsonValueOrNull(value: unknown) {\n if (value === undefined) {\n return null as Exclude<OpensteerPageEvaluateOutput[\"value\"], undefined>;\n }\n return (toCanonicalJsonValue(value) ?? null) as Exclude<\n OpensteerPageEvaluateOutput[\"value\"],\n undefined\n >;\n}\n\nfunction normalizePageScriptScan(value: unknown): {\n readonly loadEventStart?: number;\n readonly scripts: readonly {\n readonly source: \"inline\" | \"external\";\n readonly url?: string;\n readonly type?: string;\n readonly loadOrder: number;\n readonly content: string;\n }[];\n readonly resourceEntries: readonly {\n readonly url: string;\n readonly initiatorType?: string;\n readonly startTime?: number;\n }[];\n} {\n if (value === null || typeof value !== \"object\") {\n return {\n scripts: [],\n resourceEntries: [],\n };\n }\n const source = value as {\n readonly loadEventStart?: unknown;\n readonly scripts?: readonly {\n readonly source?: unknown;\n readonly url?: unknown;\n readonly type?: unknown;\n readonly loadOrder?: unknown;\n readonly content?: unknown;\n }[];\n readonly resourceEntries?: readonly {\n readonly url?: unknown;\n readonly initiatorType?: unknown;\n readonly startTime?: unknown;\n }[];\n };\n\n return {\n ...(typeof source.loadEventStart === \"number\" ? { loadEventStart: source.loadEventStart } : {}),\n scripts: (source.scripts ?? [])\n .filter(\n (\n script,\n ): script is {\n readonly source: \"inline\" | \"external\";\n readonly url?: string;\n readonly type?: string;\n readonly loadOrder: number;\n readonly content: string;\n } =>\n (script?.source === \"inline\" || script?.source === \"external\") &&\n typeof script.loadOrder === \"number\" &&\n typeof script.content === \"string\" &&\n (script.url === undefined || typeof script.url === \"string\") &&\n (script.type === undefined || typeof script.type === \"string\"),\n )\n .sort((left, right) => left.loadOrder - right.loadOrder),\n resourceEntries: (source.resourceEntries ?? [])\n .filter(\n (\n entry,\n ): entry is {\n readonly url: string;\n readonly initiatorType?: string;\n readonly startTime?: number;\n } =>\n typeof entry?.url === \"string\" &&\n entry.url.length > 0 &&\n (entry.initiatorType === undefined || typeof entry.initiatorType === \"string\") &&\n (entry.startTime === undefined || typeof entry.startTime === \"number\"),\n )\n .map((entry) => ({\n url: entry.url,\n ...(entry.initiatorType === undefined ? {} : { initiatorType: entry.initiatorType }),\n ...(entry.startTime === undefined ? {} : { startTime: entry.startTime }),\n })),\n };\n}\n\nfunction buildCapturedRecordSuccessFingerprint(record: NetworkQueryRecord): {\n readonly status: number;\n readonly structureHash?: string;\n} {\n const bodyText = decodeProtocolBody(record.record.responseBody);\n return {\n status: record.record.status ?? 0,\n ...(bodyText === undefined\n ? {}\n : (() => {\n const structureHash = jsonStructureHash(bodyText);\n return structureHash === undefined ? {} : { structureHash };\n })()),\n };\n}\n\nfunction matchesSuccessFingerprintFromProtocolResponse(\n response: OpensteerRequestResponseResult,\n fingerprint: {\n readonly status: number;\n readonly structureHash?: string;\n },\n): boolean {\n if (response.status !== fingerprint.status) {\n return false;\n }\n\n if (fingerprint.structureHash === undefined) {\n return true;\n }\n\n const bodyText = decodeProtocolBody(response.body);\n return jsonStructureHash(bodyText) === fingerprint.structureHash;\n}\n\nfunction jsonStructureHash(bodyText: string | undefined): string | undefined {\n if (bodyText === undefined) {\n return undefined;\n }\n try {\n return sha256Hex(\n Buffer.from(canonicalJsonString(jsonStructureShape(JSON.parse(bodyText))), \"utf8\"),\n );\n } catch {\n return undefined;\n }\n}\n\nfunction jsonStructureShape(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => jsonStructureShape(entry));\n }\n if (value !== null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.keys(value as Record<string, unknown>)\n .sort()\n .map((key) => [key, jsonStructureShape((value as Record<string, unknown>)[key])]),\n );\n }\n return typeof value;\n}\n\nconst DEFAULT_STATE_GLOBAL_NAMES = [\n \"__NEXT_DATA__\",\n \"__NUXT__\",\n \"__APOLLO_STATE__\",\n \"__INITIAL_STATE__\",\n \"__PRELOADED_STATE__\",\n \"__STATE__\",\n \"__data__\",\n] as const;\n\nconst REPLAY_TRANSPORT_LADDER: readonly TransportKind[] = [\n \"direct-http\",\n \"matched-tls\",\n \"context-http\",\n \"page-http\",\n] as const;\n\nfunction resolveReplayProbeAttemptTimeoutMs(input: {\n readonly remainingMs: number | undefined;\n readonly transportsRemaining: number;\n readonly recommendedFound: boolean;\n}): number | undefined {\n const attemptCapMs = input.recommendedFound\n ? REPLAY_PROBE_POST_SUCCESS_ATTEMPT_TIMEOUT_MS\n : REPLAY_PROBE_MAX_ATTEMPT_TIMEOUT_MS;\n const clampedRemaining =\n input.remainingMs === undefined ? undefined : Math.max(0, input.remainingMs);\n if (clampedRemaining === 0) {\n return 0;\n }\n if (clampedRemaining === undefined) {\n return attemptCapMs;\n }\n const sliceMs = Math.floor(clampedRemaining / Math.max(1, input.transportsRemaining));\n const minimumBudgetAffordable =\n clampedRemaining >= REPLAY_PROBE_MIN_ATTEMPT_TIMEOUT_MS * input.transportsRemaining;\n const attemptBudgetMs = minimumBudgetAffordable\n ? Math.max(REPLAY_PROBE_MIN_ATTEMPT_TIMEOUT_MS, sliceMs)\n : sliceMs;\n return Math.min(clampedRemaining, attemptCapMs, Math.max(1, attemptBudgetMs));\n}\n\nfunction filterNetworkSummaryRecords(\n records: readonly NetworkQueryRecord[],\n input: OpensteerNetworkQueryInput,\n): readonly NetworkQueryRecord[] {\n return records.filter((record) => {\n if (record.record.resourceType === \"preflight\" || record.record.method === \"OPTIONS\") {\n return false;\n }\n if (input.json !== true) {\n return true;\n }\n const contentType =\n headerValue(record.record.responseHeaders, \"content-type\") ??\n headerValue(record.record.requestHeaders, \"content-type\");\n const normalized = contentType?.toLowerCase();\n return (\n normalized?.includes(\"json\") === true ||\n normalized?.includes(\"+json\") === true ||\n looksLikeGraphqlRecord(record)\n );\n });\n}\n\nfunction sortPersistedNetworkRecordsChronologically(\n records: readonly NetworkQueryRecord[],\n): NetworkQueryRecord[] {\n return [...records].sort((left, right) => {\n const leftTime = left.savedAt ?? 0;\n const rightTime = right.savedAt ?? 0;\n if (leftTime !== rightTime) {\n return leftTime - rightTime;\n }\n return left.recordId.localeCompare(right.recordId);\n });\n}\n\nfunction sliceNetworkSummaryWindow(\n records: readonly NetworkQueryRecord[],\n input: OpensteerNetworkQueryInput,\n): readonly NetworkQueryRecord[] {\n let start = 0;\n let end = records.length;\n if (input.after !== undefined) {\n const index = records.findIndex((record) => record.recordId === input.after);\n if (index >= 0) {\n start = index + 1;\n }\n }\n if (input.before !== undefined) {\n const index = records.findIndex((record) => record.recordId === input.before);\n if (index >= 0) {\n end = index;\n }\n }\n return records.slice(start, end);\n}\n\nfunction buildReplayTransportRequest(\n source: NetworkQueryRecord,\n input: OpensteerNetworkReplayInput,\n): {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n} {\n const url = new URL(source.record.url);\n for (const [name, value] of Object.entries(input.query ?? {})) {\n url.searchParams.set(name, String(value));\n }\n\n const headers = [...source.record.requestHeaders];\n for (const [name, value] of Object.entries(input.headers ?? {})) {\n setHeaderValue(headers, name, String(value));\n }\n\n let body =\n source.record.requestBody === undefined\n ? undefined\n : toBrowserBodyPayload(source.record.requestBody);\n if (input.body !== undefined) {\n body = toBrowserRequestBody(input.body).payload;\n } else if (input.variables !== undefined) {\n const graphql = extractGraphqlMetadata(source);\n if (graphql?.rawBody !== undefined) {\n const nextBody = {\n ...graphql.rawBody,\n variables:\n graphql.rawBody.variables !== null && typeof graphql.rawBody.variables === \"object\"\n ? {\n ...(graphql.rawBody.variables as Record<string, unknown>),\n ...(input.variables as Record<string, unknown>),\n }\n : input.variables,\n };\n body = toBrowserRequestBody({ json: toCanonicalJsonValue(nextBody) }).payload;\n }\n }\n\n return {\n method: source.record.method,\n url: url.toString(),\n ...(headers.length === 0 ? {} : { headers }),\n ...(body === undefined ? {} : { body }),\n };\n}\n\nfunction buildSessionFetchTransportRequest(input: OpensteerSessionFetchInput): {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n} {\n const url = new URL(input.url);\n for (const [name, value] of Object.entries(input.query ?? {})) {\n url.searchParams.set(name, String(value));\n }\n const headers = Object.entries(input.headers ?? {}).map(([name, value]) => ({\n name,\n value: String(value),\n }));\n const body = input.body === undefined ? undefined : toBrowserRequestBody(input.body);\n if (\n body?.contentType !== undefined &&\n !headers.some((header) => normalizeHeaderName(header.name) === \"content-type\")\n ) {\n headers.push({\n name: \"content-type\",\n value: body.contentType,\n });\n }\n return {\n method: input.method ?? (body === undefined ? \"GET\" : \"POST\"),\n url: url.toString(),\n ...(headers.length === 0 ? {} : { headers }),\n ...(body === undefined ? {} : { body: body.payload }),\n ...(input.followRedirects === undefined ? {} : { followRedirects: input.followRedirects }),\n };\n}\n\nfunction looksLikeGraphqlRecord(record: NetworkQueryRecord): boolean {\n return extractGraphqlMetadata(record) !== undefined;\n}\n\nfunction buildNetworkSummaryRecord(record: NetworkQueryRecord): OpensteerNetworkSummaryRecord {\n const request = summarizeBody(record.record.requestBody, record.record.requestHeaders);\n const response =\n record.record.kind === \"event-stream\"\n ? {\n ...(summarizeBody(record.record.responseBody, record.record.responseHeaders) ?? {}),\n streaming: true,\n }\n : summarizeBody(record.record.responseBody, record.record.responseHeaders);\n const graphql = extractGraphqlMetadata(record);\n const websocketProtocols = parseWebSocketProtocols(record.record.requestHeaders);\n const websocketSubprotocol = websocketProtocols[0];\n\n return {\n recordId: record.recordId,\n ...(record.capture === undefined ? {} : { capture: record.capture }),\n ...(record.savedAt === undefined ? {} : { savedAt: record.savedAt }),\n kind: record.record.kind,\n method: record.record.method,\n ...(record.record.status === undefined ? {} : { status: record.record.status }),\n resourceType: record.record.resourceType,\n url: record.record.url,\n ...(request === undefined ? {} : { request }),\n ...(response === undefined ? {} : { response }),\n ...(graphql === undefined\n ? {}\n : {\n graphql: {\n ...(graphql.operationType === undefined\n ? {}\n : { operationType: graphql.operationType }),\n ...(graphql.operationName === undefined\n ? {}\n : { operationName: graphql.operationName }),\n ...(graphql.persisted === undefined ? {} : { persisted: graphql.persisted }),\n },\n }),\n ...(websocketSubprotocol === undefined\n ? {}\n : { websocket: { subprotocol: websocketSubprotocol } }),\n };\n}\n\nfunction extractGraphqlMetadata(record: NetworkQueryRecord):\n | (OpensteerNetworkSummaryRecord[\"graphql\"] & {\n readonly variables?: JsonValue;\n readonly rawBody?: Record<string, unknown>;\n })\n | undefined {\n const url = record.record.url.toLowerCase();\n const requestContentType = headerValue(\n record.record.requestHeaders,\n \"content-type\",\n )?.toLowerCase();\n const text = decodeProtocolBody(record.record.requestBody);\n let payload: Record<string, unknown> | undefined;\n if (text !== undefined && requestContentType?.includes(\"json\")) {\n try {\n const parsed = JSON.parse(text) as unknown;\n if (parsed !== null && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n payload = parsed as Record<string, unknown>;\n }\n } catch {}\n }\n\n if (payload === undefined && !url.includes(\"graphql\")) {\n return undefined;\n }\n\n const queryText =\n typeof payload?.query === \"string\"\n ? payload.query\n : typeof payload?.operationName === \"string\"\n ? payload.operationName\n : undefined;\n const operationType =\n queryText === undefined\n ? undefined\n : queryText.trim().startsWith(\"mutation\")\n ? \"mutation\"\n : queryText.trim().startsWith(\"subscription\")\n ? \"subscription\"\n : queryText.trim().startsWith(\"query\")\n ? \"query\"\n : \"unknown\";\n const operationName =\n typeof payload?.operationName === \"string\"\n ? payload.operationName\n : extractGraphqlOperationName(queryText);\n const variables =\n payload?.variables === undefined ? undefined : toCanonicalJsonValue(payload.variables);\n const persisted =\n payload?.extensions !== undefined &&\n typeof payload.extensions === \"object\" &&\n payload.extensions !== null &&\n \"persistedQuery\" in payload.extensions\n ? true\n : undefined;\n\n return {\n ...(operationType === undefined ? {} : { operationType }),\n ...(operationName === undefined ? {} : { operationName }),\n ...(persisted === undefined ? {} : { persisted }),\n ...(variables === undefined ? {} : { variables }),\n ...(payload === undefined ? {} : { rawBody: payload }),\n };\n}\n\nfunction extractGraphqlOperationName(queryText: string | undefined): string | undefined {\n if (queryText === undefined) {\n return undefined;\n }\n const match = queryText.match(/\\b(query|mutation|subscription)\\s+([A-Za-z0-9_]+)/u);\n return match?.[2];\n}\n\nfunction shouldShowRequestBody(method: string): boolean {\n return ![\"GET\", \"HEAD\", \"DELETE\", \"OPTIONS\"].includes(method.trim().toUpperCase());\n}\n\nfunction buildStructuredBodyPreview(\n body: NetworkQueryRecord[\"record\"][\"requestBody\"] | NetworkQueryRecord[\"record\"][\"responseBody\"],\n headers: readonly HeaderEntry[],\n options: {\n readonly truncateData?: boolean;\n } = {},\n): OpensteerNetworkDetailOutput[\"requestBody\"] {\n const contentType = headerValue(headers, \"content-type\") ?? body?.mimeType;\n const parsed = parseStructuredPayload(body, contentType);\n const data =\n parsed === undefined\n ? undefined\n : options.truncateData === false\n ? parsed\n : typeof parsed === \"string\"\n ? truncateInlineText(parsed)\n : truncateStructuredValue(parsed);\n return {\n bytes: body?.originalByteLength ?? body?.capturedByteLength ?? 0,\n ...(contentType === undefined ? {} : { contentType }),\n truncated: body?.truncated ?? false,\n ...(data === undefined ? {} : { data }),\n };\n}\n\nfunction parseStructuredPayload(\n body: NetworkQueryRecord[\"record\"][\"requestBody\"] | NetworkQueryRecord[\"record\"][\"responseBody\"],\n contentType: string | undefined,\n): JsonValue | string | undefined {\n const text = decodeProtocolBody(body);\n if (text === undefined) {\n return undefined;\n }\n const mimeType = parseContentType(contentType).mimeType?.toLowerCase();\n if (mimeType === \"application/json\" || mimeType?.endsWith(\"+json\") === true) {\n try {\n return toCanonicalJsonValue(JSON.parse(text));\n } catch {\n return truncateInlineText(text);\n }\n }\n if (mimeType?.startsWith(\"text/\") === true || mimeType === undefined) {\n return truncateInlineText(text);\n }\n return undefined;\n}\n\nfunction detectNetworkRecordNotes(record: NetworkQueryRecord): readonly string[] {\n const challenge = detectChallengeNoteFromRecord(record);\n return challenge === undefined ? [] : [challenge];\n}\n\nfunction normalizeHeaderName(name: string): string {\n return name.trim().toLowerCase();\n}\n\nfunction parseCookieHeaderEntries(\n value: string,\n): readonly { readonly name: string; readonly value: string }[] {\n return parseCookiePairs(value).map(([name, cookieValue]) => ({\n name,\n value: cookieValue,\n }));\n}\n\nfunction truncateStructuredValue(\n value: JsonValue | undefined,\n depth = 0,\n): JsonValue | string | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (value === null || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"string\") {\n return truncateInlineText(value);\n }\n if (Array.isArray(value)) {\n if (value.length <= 3) {\n return value.map(\n (entry) => truncateStructuredValue(entry as JsonValue, depth + 1) as JsonValue,\n );\n }\n return [\n `... ${value.length} items, first 2 shown`,\n truncateStructuredValue(value[0] as JsonValue, depth + 1) as JsonValue,\n truncateStructuredValue(value[1] as JsonValue, depth + 1) as JsonValue,\n ];\n }\n const entries = Object.entries(value);\n if (depth >= 4) {\n return `... ${entries.length} keys`;\n }\n const truncated = Object.fromEntries(\n entries.map(([key, entry]) => [key, truncateStructuredValue(entry as JsonValue, depth + 1)]),\n ) as JsonValue;\n const serialized = JSON.stringify(truncated);\n if (serialized !== undefined && serialized.length > 4096) {\n return `${serialized.slice(0, 4000)}... use network.detail for the full structure`;\n }\n return truncated;\n}\n\nfunction truncateInlineText(value: string, limit = 200): string {\n return value.length <= limit ? value : `${value.slice(0, limit)}...${value.length} chars total`;\n}\n\nfunction collectSetCookieHeaders(headers: readonly HeaderEntry[]): readonly string[] {\n return headers\n .filter((header) => normalizeHeaderName(header.name) === \"set-cookie\")\n .map((header) => header.value);\n}\n\nfunction hostnameFromUrl(url: string | undefined): string | undefined {\n if (url === undefined) {\n return undefined;\n }\n try {\n return new URL(url).hostname;\n } catch {\n return undefined;\n }\n}\n\nfunction filterCookieRecordsByDomain(\n cookies: readonly CookieRecord[],\n domain: string | undefined,\n): readonly CookieRecord[] {\n if (domain === undefined) {\n return cookies;\n }\n return cookies.filter((cookie) => cookieDomainMatches(cookie.domain, domain));\n}\n\nfunction compareCookieRecords(left: CookieRecord, right: CookieRecord): number {\n const byDomain = left.domain.localeCompare(right.domain);\n if (byDomain !== 0) {\n return byDomain;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.path.localeCompare(right.path);\n}\n\nfunction collapseStorageSnapshot(\n snapshot: StorageSnapshot,\n domain: string | undefined,\n): readonly OpensteerStorageDomainSnapshot[] {\n const grouped = new Map<string, OpensteerStorageDomainSnapshot>();\n for (const origin of snapshot.origins) {\n const hostname = hostnameFromUrl(origin.origin);\n if (hostname === undefined || (domain !== undefined && hostname !== domain)) {\n continue;\n }\n grouped.set(hostname, {\n domain: hostname,\n localStorage: origin.localStorage,\n sessionStorage: grouped.get(hostname)?.sessionStorage ?? [],\n });\n }\n for (const entry of snapshot.sessionStorage ?? []) {\n const hostname = hostnameFromUrl(entry.origin);\n if (hostname === undefined || (domain !== undefined && hostname !== domain)) {\n continue;\n }\n const current = grouped.get(hostname);\n grouped.set(hostname, {\n domain: hostname,\n localStorage: current?.localStorage ?? [],\n sessionStorage: entry.entries,\n });\n }\n return [...grouped.values()].sort((left, right) => left.domain.localeCompare(right.domain));\n}\n\nfunction buildBrowserStateDomains(input: {\n readonly effectiveDomain?: string;\n readonly currentPageDomain?: string;\n readonly cookies: readonly CookieRecord[];\n readonly storage: StorageSnapshot;\n readonly pageState: unknown;\n}): readonly OpensteerStateDomainSnapshot[] {\n const domains = collapseStorageSnapshot(input.storage, input.effectiveDomain);\n const pageState = normalizeCapturedPageState(input.pageState);\n const selectedDomain =\n input.effectiveDomain ?? input.currentPageDomain ?? domains[0]?.domain ?? undefined;\n if (selectedDomain === undefined) {\n return [];\n }\n const storage = domains.find((entry) => entry.domain === selectedDomain);\n return [\n {\n domain: selectedDomain,\n cookies: [...filterCookieRecordsByDomain(input.cookies, selectedDomain)].sort(\n compareCookieRecords,\n ),\n hiddenFields: pageState.hiddenFields,\n localStorage: storage?.localStorage ?? [],\n sessionStorage: storage?.sessionStorage ?? [],\n ...(Object.keys(pageState.globals).length === 0 ? {} : { globals: pageState.globals }),\n },\n ];\n}\n\nfunction normalizeCapturedPageState(value: unknown): {\n readonly hiddenFields: readonly OpensteerHiddenField[];\n readonly globals: Readonly<Record<string, JsonValue>>;\n} {\n if (value === null || typeof value !== \"object\") {\n return {\n hiddenFields: [],\n globals: {},\n };\n }\n const source = value as {\n readonly hiddenFields?: readonly {\n readonly path?: unknown;\n readonly name?: unknown;\n readonly value?: unknown;\n }[];\n readonly globals?: Record<string, unknown>;\n };\n return {\n hiddenFields: (source.hiddenFields ?? [])\n .filter(\n (\n field,\n ): field is { readonly path: string; readonly name: string; readonly value: string } =>\n typeof field?.path === \"string\" &&\n typeof field.name === \"string\" &&\n typeof field.value === \"string\",\n )\n .map((field) => ({\n path: field.path,\n name: field.name,\n value: field.value,\n })),\n globals: Object.fromEntries(\n Object.entries(source.globals ?? {})\n .map(([key, entry]) => [key, toCanonicalJsonValue(entry)])\n .filter((entry): entry is [string, JsonValue] => entry[1] !== undefined),\n ),\n };\n}\n\nfunction toBrowserBodyPayload(body: ProtocolBodyPayload): BrowserBodyPayload {\n return createBodyPayload(new Uint8Array(Buffer.from(body.data, \"base64\")), {\n encoding: body.encoding,\n ...(body.mimeType === undefined ? {} : { mimeType: body.mimeType }),\n ...(body.charset === undefined ? {} : { charset: body.charset }),\n truncated: body.truncated,\n ...(body.originalByteLength === undefined\n ? {}\n : { originalByteLength: body.originalByteLength }),\n });\n}\n\nfunction toStructuredPreviewData(value: unknown): JsonValue | string | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"string\") {\n return truncateInlineText(value);\n }\n return truncateStructuredValue(toCanonicalJsonValue(value));\n}\n\nfunction buildReplayFallbackNote(\n attempts: readonly OpensteerReplayAttempt[],\n transport: TransportKind,\n): string | undefined {\n const previous = attempts.at(-2);\n if (previous === undefined) {\n return undefined;\n }\n if (previous.status !== undefined) {\n return `${previous.transport} returned ${previous.status}, fell back to ${transport}`;\n }\n if (previous.error !== undefined) {\n return `${previous.transport} failed (${previous.error}), fell back to ${transport}`;\n }\n return undefined;\n}\n\nfunction resolveSessionFetchTransportLadder(\n transport: OpensteerSessionFetchInput[\"transport\"],\n): readonly TransportKind[] {\n switch (transport ?? \"auto\") {\n case \"direct\":\n return [\"direct-http\"];\n case \"matched-tls\":\n return [\"matched-tls\"];\n case \"context\":\n return [\"context-http\"];\n case \"page\":\n return [\"page-http\"];\n case \"auto\":\n return [\"direct-http\", \"matched-tls\", \"context-http\", \"page-http\"];\n }\n}\n\nfunction detectChallengeNoteFromRecord(record: NetworkQueryRecord): string | undefined {\n if (record.record.responseBody === undefined) {\n return undefined;\n }\n return detectChallengeNoteFromText(\n decodeProtocolBody(record.record.responseBody),\n headerValue(record.record.responseHeaders, \"content-type\"),\n );\n}\n\nfunction detectChallengeNoteFromResponse(\n response: OpensteerRequestResponseResult,\n): string | undefined {\n return detectChallengeNoteFromText(\n decodeProtocolBody(response.body),\n headerValue(response.headers, \"content-type\"),\n );\n}\n\nfunction detectChallengeNoteFromText(\n text: string | undefined,\n contentType: string | undefined,\n): string | undefined {\n if (text === undefined || contentType?.toLowerCase().includes(\"html\") !== true) {\n return undefined;\n }\n const normalized = text.toLowerCase();\n if (normalized.includes(\"cloudflare\")) {\n return \"response appears to be a Cloudflare challenge page\";\n }\n if (normalized.includes(\"akamai\")) {\n return \"response appears to be an Akamai challenge page\";\n }\n if (normalized.includes(\"datadome\")) {\n return \"response appears to be a DataDome challenge page\";\n }\n if (normalized.includes(\"perimeterx\")) {\n return \"response appears to be a PerimeterX challenge page\";\n }\n if (normalized.includes(\"attention required\") || normalized.includes(\"verify you are human\")) {\n return \"response appears to be a bot challenge page\";\n }\n return undefined;\n}\n\nfunction shouldAcceptFetchResponse(\n response: OpensteerRequestResponseResult,\n transport: TransportKind,\n challengeNote: string | undefined,\n): boolean {\n if (challengeNote !== undefined) {\n return false;\n }\n if (response.status >= 200 && response.status < 400) {\n return true;\n }\n return transport === \"page-http\" && response.status >= 200 && response.status < 500;\n}\n\nfunction summarizeBody(\n body:\n | NetworkQueryRecord[\"record\"][\"requestBody\"]\n | NetworkQueryRecord[\"record\"][\"responseBody\"]\n | undefined,\n headers: readonly HeaderEntry[],\n): OpensteerNetworkSummaryRecord[\"request\"] | undefined {\n if (body === undefined) {\n return undefined;\n }\n const contentType = headerValue(headers, \"content-type\") ?? body.mimeType;\n return {\n bytes: body.originalByteLength ?? body.capturedByteLength,\n ...(contentType === undefined ? {} : { contentType }),\n };\n}\n\nfunction buildInteractionTraceKey(pageUrl: string): string {\n const slug = pageUrl\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\")\n .slice(0, 80);\n return `interaction-${slug || `trace-${Date.now()}`}`;\n}\n\nfunction normalizeInteractionEvents(\n value: unknown,\n): OpensteerInteractionCaptureOutput[\"trace\"][\"payload\"][\"events\"] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value\n .filter(\n (\n entry,\n ): entry is {\n readonly type: string;\n readonly timestamp: number;\n readonly targetPath?: string;\n readonly properties?: Readonly<Record<string, unknown>>;\n } =>\n entry !== null &&\n typeof entry === \"object\" &&\n typeof (entry as { type?: unknown }).type === \"string\" &&\n typeof (entry as { timestamp?: unknown }).timestamp === \"number\",\n )\n .map((entry) => ({\n type: entry.type,\n timestamp: entry.timestamp,\n ...(entry.targetPath === undefined ? {} : { targetPath: entry.targetPath }),\n properties: stripUndefinedRecordValues(entry.properties ?? {}),\n }));\n}\n\nfunction stripUndefinedRecordValues(\n value: Readonly<Record<string, unknown>>,\n): Readonly<Record<string, unknown>> {\n return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));\n}\n\nfunction buildStateDelta(\n before: OpensteerStateSnapshot,\n after: OpensteerStateSnapshot,\n): OpensteerStateDelta {\n const cookieNames = diffNamedEntries(\n before.cookies?.map((cookie) => cookie.name) ?? [],\n after.cookies?.map((cookie) => cookie.name) ?? [],\n );\n const storageNames = diffStorageSnapshot(before.storage, after.storage);\n const hiddenFieldNames = diffNamedEntries(\n before.hiddenFields?.map((field) => field.name) ?? [],\n after.hiddenFields?.map((field) => field.name) ?? [],\n );\n const globalNames = diffNamedEntries(\n Object.keys(before.globals ?? {}),\n Object.keys(after.globals ?? {}),\n );\n return {\n beforeStateId: before.id,\n afterStateId: after.id,\n cookiesChanged: cookieNames,\n storageChanged: storageNames,\n hiddenFieldsChanged: hiddenFieldNames,\n globalsChanged: globalNames,\n };\n}\n\nfunction diffNamedEntries(left: readonly string[], right: readonly string[]): readonly string[] {\n const leftSet = new Set(left);\n const rightSet = new Set(right);\n return [...new Set([...left, ...right])].filter(\n (value) => !leftSet.has(value) || !rightSet.has(value),\n );\n}\n\nfunction diffStorageSnapshot(\n left: StorageSnapshot | undefined,\n right: StorageSnapshot | undefined,\n): readonly string[] {\n const leftKeys = new Set<string>();\n const rightKeys = new Set<string>();\n for (const snapshot of left?.origins ?? []) {\n for (const entry of snapshot.localStorage ?? []) {\n leftKeys.add(`${snapshot.origin}:local:${entry.key}`);\n }\n for (const database of snapshot.indexedDb ?? []) {\n leftKeys.add(`${snapshot.origin}:indexeddb:${database.name}`);\n }\n }\n for (const snapshot of right?.origins ?? []) {\n for (const entry of snapshot.localStorage ?? []) {\n rightKeys.add(`${snapshot.origin}:local:${entry.key}`);\n }\n for (const database of snapshot.indexedDb ?? []) {\n rightKeys.add(`${snapshot.origin}:indexeddb:${database.name}`);\n }\n }\n for (const snapshot of left?.sessionStorage ?? []) {\n for (const entry of snapshot.entries ?? []) {\n leftKeys.add(`${snapshot.origin}:session:${entry.key}`);\n }\n }\n for (const snapshot of right?.sessionStorage ?? []) {\n for (const entry of snapshot.entries ?? []) {\n rightKeys.add(`${snapshot.origin}:session:${entry.key}`);\n }\n }\n return [...new Set([...leftKeys, ...rightKeys])].filter(\n (value) => !leftKeys.has(value) || !rightKeys.has(value),\n );\n}\n\nfunction normalizeRuntimeErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\nfunction normalizeProbeTransportAttemptError(\n transport: TransportKind,\n error: unknown,\n attemptTimeoutMs: number | undefined,\n): string {\n if (\n attemptTimeoutMs !== undefined &&\n error instanceof OpensteerProtocolError &&\n error.code === \"timeout\"\n ) {\n return `${transport} probe exceeded ${String(attemptTimeoutMs)}ms`;\n }\n return normalizeRuntimeErrorMessage(error);\n}\n\nfunction applyBrowserCookiesToTransportRequest(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n cookies: readonly CookieRecord[],\n): {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n} {\n if (cookies.length === 0) {\n return request;\n }\n const existingCookieMap = new Map<string, string>();\n for (const [name, value] of parseCookiePairs(headerValue(request.headers ?? [], \"cookie\"))) {\n existingCookieMap.set(name, value);\n }\n for (const cookie of cookies) {\n if (!existingCookieMap.has(cookie.name)) {\n existingCookieMap.set(cookie.name, cookie.value);\n }\n }\n\n const mergedCookieHeader = [...existingCookieMap.entries()]\n .map(([name, value]) => `${name}=${value}`)\n .join(\"; \");\n const headers = [...(request.headers ?? [])];\n setHeaderValue(headers, \"cookie\", mergedCookieHeader);\n return {\n ...request,\n headers,\n };\n}\n\nfunction omitTransportRequestHeader(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n headerName: string,\n): {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n} {\n const headers = (request.headers ?? []).filter(\n (header) => header.name.toLowerCase() !== headerName.toLowerCase(),\n );\n return {\n ...request,\n ...(headers.length === 0 ? {} : { headers }),\n };\n}\n\nfunction cookieHeaderToCookieRecords(\n cookieHeader: string | undefined,\n requestUrl: string,\n sessionRef: SessionRef,\n): readonly CookieRecord[] {\n const url = new URL(requestUrl);\n return parseCookiePairs(cookieHeader).map(([name, value]) => ({\n sessionRef,\n name,\n value,\n domain: url.hostname,\n path: defaultCookiePath(url.pathname),\n secure: url.protocol === \"https:\",\n httpOnly: false,\n session: true,\n expiresAt: null,\n }));\n}\n\nfunction parseCookiePairs(cookieHeader: string | undefined): readonly [string, string][] {\n if (cookieHeader === undefined || cookieHeader.trim().length === 0) {\n return [];\n }\n return cookieHeader\n .split(\";\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0 && entry.includes(\"=\"))\n .map((entry) => {\n const separator = entry.indexOf(\"=\");\n return [entry.slice(0, separator).trim(), entry.slice(separator + 1).trim()] as const;\n });\n}\n\nfunction resolveExplicitCaptchaInput(\n input: OpensteerCaptchaSolveInput,\n): CaptchaDetectionResult | undefined {\n if (input.type === undefined && input.siteKey === undefined && input.pageUrl === undefined) {\n return undefined;\n }\n if (input.type === undefined || input.siteKey === undefined || input.pageUrl === undefined) {\n throw new OpensteerProtocolError(\n \"invalid-request\",\n \"explicit CAPTCHA solve input requires type, siteKey, and pageUrl together\",\n );\n }\n return {\n type: input.type,\n siteKey: input.siteKey,\n pageUrl: input.pageUrl,\n };\n}\n\nfunction cookieDomainMatches(domain: string, hostname: string): boolean {\n const normalizedDomain = domain.startsWith(\".\") ? domain.slice(1) : domain;\n return hostname === normalizedDomain || hostname.endsWith(`.${normalizedDomain}`);\n}\n\nfunction defaultCookiePath(pathname: string): string {\n if (!pathname.startsWith(\"/\") || pathname === \"/\") {\n return \"/\";\n }\n const index = pathname.lastIndexOf(\"/\");\n return index <= 0 ? \"/\" : pathname.slice(0, index);\n}\n\nconst CAPTURE_PAGE_STATE_SCRIPT = `(input => {\n const cssPath = element => {\n if (!(element instanceof Element)) {\n return undefined;\n }\n const segments = [];\n let current = element;\n while (current instanceof Element && segments.length < 8) {\n let segment = current.localName;\n if (current.id) {\n segment += \"#\" + CSS.escape(current.id);\n segments.unshift(segment);\n break;\n }\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter(node => node.localName === current.localName);\n const index = siblings.indexOf(current);\n segment += \":nth-of-type(\" + String(index + 1) + \")\";\n }\n segments.unshift(segment);\n current = parent;\n }\n return segments.join(\" > \");\n };\n\n const hiddenFields = Array.from(document.querySelectorAll('input[type=\"hidden\"], input[hidden]'))\n .map(element => ({\n path: cssPath(element) || \"input\",\n name: element.getAttribute(\"name\") || \"\",\n value: element.getAttribute(\"value\") || \"\",\n }))\n .filter(entry => entry.name.length > 0);\n\n const globals = {};\n for (const name of input.globalNames ?? []) {\n try {\n const value = window[name];\n globals[name] =\n value === null || [\"string\", \"number\", \"boolean\"].includes(typeof value)\n ? value\n : Array.isArray(value)\n ? value\n : typeof value === \"object\"\n ? JSON.parse(JSON.stringify(value))\n : String(value);\n } catch (error) {\n globals[name] = \"[unavailable:\" + String(error) + \"]\";\n }\n }\n\n return { hiddenFields, globals };\n})`;\n\nconst INTERACTION_RECORDER_INSTALL_SCRIPT = `(() => {\n const storeKey = \"__opensteerInteractionRecorder\";\n const existing = window[storeKey];\n if (existing && typeof existing.dispose === \"function\") {\n existing.dispose();\n }\n\n const cssPath = element => {\n if (!(element instanceof Element)) {\n return undefined;\n }\n const segments = [];\n let current = element;\n while (current instanceof Element && segments.length < 8) {\n let segment = current.localName;\n if (current.id) {\n segment += \"#\" + CSS.escape(current.id);\n segments.unshift(segment);\n break;\n }\n const parent = current.parentElement;\n if (parent) {\n const siblings = Array.from(parent.children).filter(node => node.localName === current.localName);\n const index = siblings.indexOf(current);\n segment += \":nth-of-type(\" + String(index + 1) + \")\";\n }\n segments.unshift(segment);\n current = parent;\n }\n return segments.join(\" > \");\n };\n\n const eventTypes = [\n \"pointerdown\",\n \"pointerup\",\n \"pointermove\",\n \"mousedown\",\n \"mouseup\",\n \"click\",\n \"dblclick\",\n \"keydown\",\n \"keyup\",\n \"input\",\n \"change\",\n \"wheel\",\n \"dragstart\",\n \"dragover\",\n \"drop\",\n \"dragend\",\n ];\n const events = [];\n const listener = event => {\n const target = event.target instanceof Element ? event.target : undefined;\n const properties = {\n isTrusted: event.isTrusted,\n button: \"button\" in event ? event.button : undefined,\n buttons: \"buttons\" in event ? event.buttons : undefined,\n clientX: \"clientX\" in event ? event.clientX : undefined,\n clientY: \"clientY\" in event ? event.clientY : undefined,\n pressure: \"pressure\" in event ? event.pressure : undefined,\n pointerType: \"pointerType\" in event ? event.pointerType : undefined,\n key: \"key\" in event ? event.key : undefined,\n code: \"code\" in event ? event.code : undefined,\n deltaX: \"deltaX\" in event ? event.deltaX : undefined,\n deltaY: \"deltaY\" in event ? event.deltaY : undefined,\n value:\n target && \"value\" in target && typeof target.value === \"string\"\n ? target.value\n : undefined,\n };\n events.push({\n type: event.type,\n timestamp: Date.now(),\n targetPath: target ? cssPath(target) : undefined,\n properties,\n });\n };\n\n for (const type of eventTypes) {\n window.addEventListener(type, listener, true);\n }\n\n window[storeKey] = {\n read() {\n return events.slice();\n },\n dispose() {\n for (const type of eventTypes) {\n window.removeEventListener(type, listener, true);\n }\n },\n };\n\n return { installed: true };\n})()`;\n\nconst INTERACTION_RECORDER_READ_SCRIPT = `(() => {\n const store = window.__opensteerInteractionRecorder;\n const events = store && typeof store.read === \"function\" ? store.read() : [];\n if (store && typeof store.dispose === \"function\") {\n store.dispose();\n }\n delete window.__opensteerInteractionRecorder;\n return events;\n})()`;\n\nconst INTERACTION_REPLAY_SCRIPT = `(async events => {\n const resolveTarget = event => {\n if (typeof event.targetPath === \"string\" && event.targetPath.length > 0) {\n const direct = document.querySelector(event.targetPath);\n if (direct) {\n return direct;\n }\n }\n if (typeof event.properties?.clientX === \"number\" && typeof event.properties?.clientY === \"number\") {\n const hit = document.elementFromPoint(event.properties.clientX, event.properties.clientY);\n if (hit) {\n return hit;\n }\n }\n return document.body;\n };\n\n for (const event of events ?? []) {\n const target = resolveTarget(event);\n const properties = event.properties ?? {};\n if ((event.type === \"input\" || event.type === \"change\") && \"value\" in target && typeof properties.value === \"string\") {\n target.value = properties.value;\n }\n let dispatched;\n if (event.type.startsWith(\"pointer\")) {\n dispatched = new PointerEvent(event.type, properties);\n } else if (event.type.startsWith(\"mouse\") || event.type === \"click\" || event.type === \"dblclick\") {\n dispatched = new MouseEvent(event.type, properties);\n } else if (event.type.startsWith(\"key\")) {\n dispatched = new KeyboardEvent(event.type, properties);\n } else if (event.type === \"wheel\") {\n dispatched = new WheelEvent(event.type, properties);\n } else if (event.type === \"input\") {\n dispatched = new InputEvent(event.type, properties);\n } else {\n dispatched = new Event(event.type, properties);\n }\n target.dispatchEvent(dispatched);\n }\n return { replayedEventCount: Array.isArray(events) ? events.length : 0 };\n})`;\n\nconst PAGE_HTTP_REQUEST_SCRIPT = `(async (input) => {\n const decodeBase64 = (value) => {\n if (typeof value !== \"string\" || value.length === 0) {\n return undefined;\n }\n const binary = atob(value);\n const bytes = new Uint8Array(binary.length);\n for (let index = 0; index < binary.length; index += 1) {\n bytes[index] = binary.charCodeAt(index);\n }\n return bytes;\n };\n\n const encodeBase64 = (bytes) => {\n let binary = \"\";\n const chunkSize = 0x8000;\n for (let offset = 0; offset < bytes.length; offset += chunkSize) {\n const chunk = bytes.subarray(offset, offset + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n };\n\n const headers = new Headers();\n for (const header of input.headers ?? []) {\n headers.set(header.name, header.value);\n }\n\n const response = await fetch(input.url, {\n method: input.method,\n headers,\n ...(input.bodyBase64 === undefined ? {} : { body: decodeBase64(input.bodyBase64) }),\n redirect: input.followRedirects === false ? \"manual\" : \"follow\",\n });\n\n const bodyBuffer = new Uint8Array(await response.arrayBuffer());\n return {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers: Array.from(response.headers.entries()).map(([name, value]) => ({ name, value })),\n bodyBase64: bodyBuffer.byteLength === 0 ? undefined : encodeBase64(bodyBuffer),\n redirected: response.redirected,\n };\n})`;\n\nfunction toPageHttpTransportResponse(value: unknown): {\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n} {\n if (value === null || typeof value !== \"object\") {\n throw new OpensteerProtocolError(\n \"operation-failed\",\n \"page-http returned an invalid response payload\",\n );\n }\n\n const response = value as {\n readonly url?: unknown;\n readonly status?: unknown;\n readonly statusText?: unknown;\n readonly headers?: readonly { readonly name?: unknown; readonly value?: unknown }[];\n readonly bodyBase64?: unknown;\n readonly redirected?: unknown;\n };\n const headers = (response.headers ?? [])\n .filter(\n (header): header is { readonly name: string; readonly value: string } =>\n typeof header?.name === \"string\" && typeof header?.value === \"string\",\n )\n .map((header) => ({ name: header.name, value: header.value }));\n const contentType = headers.find((header) => header.name.toLowerCase() === \"content-type\")?.value;\n const body =\n typeof response.bodyBase64 === \"string\"\n ? createBodyPayload(\n new Uint8Array(Buffer.from(response.bodyBase64, \"base64\")),\n parseContentType(contentType),\n )\n : undefined;\n\n return {\n url: typeof response.url === \"string\" ? response.url : \"\",\n status: typeof response.status === \"number\" ? response.status : 0,\n statusText: typeof response.statusText === \"string\" ? response.statusText : \"\",\n headers,\n ...(body === undefined ? {} : { body }),\n redirected: response.redirected === true,\n };\n}\n\nfunction setHeaderValue(\n headers: { name: string; value: string }[],\n name: string,\n value: string,\n): void {\n const normalized = name.toLowerCase();\n const existing = headers.find((header) => header.name.toLowerCase() === normalized);\n if (existing) {\n existing.value = value;\n return;\n }\n headers.push({ name, value });\n}\n\nasync function executeDirectTransportRequest(\n request: {\n readonly method: string;\n readonly url: string;\n readonly headers?: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly followRedirects?: boolean;\n },\n signal: AbortSignal,\n): Promise<{\n readonly url: string;\n readonly status: number;\n readonly statusText: string;\n readonly headers: readonly HeaderEntry[];\n readonly body?: BrowserBodyPayload;\n readonly redirected: boolean;\n}> {\n const response = await fetch(request.url, {\n method: request.method,\n headers: Object.fromEntries(\n filterValidHttpHeaders(request.headers ?? []).map((header) => [header.name, header.value]),\n ),\n ...(request.body === undefined ? {} : { body: Buffer.from(request.body.bytes) }),\n redirect: request.followRedirects === false ? \"manual\" : \"follow\",\n signal,\n });\n\n const headers = [...response.headers.entries()].map(([name, value]) => ({ name, value }));\n const buffer = Buffer.from(await response.arrayBuffer());\n const contentType = headers.find((header) => header.name.toLowerCase() === \"content-type\")?.value;\n return {\n url: response.url,\n status: response.status,\n statusText: response.statusText,\n headers,\n ...(buffer.byteLength === 0\n ? {}\n : { body: createBodyPayload(new Uint8Array(buffer), parseContentType(contentType)) }),\n redirected: response.redirected,\n };\n}\n\nfunction parseWebSocketProtocols(headers: readonly HeaderEntry[] | undefined): readonly string[] {\n const protocols = headerValue(headers ?? [], \"sec-websocket-protocol\");\n if (protocols === undefined) {\n return [];\n }\n return protocols\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n}\n\nfunction decodeProtocolBody(body: OpensteerRequestResponseResult[\"body\"]): string | undefined {\n if (body === undefined) {\n return undefined;\n }\n return Buffer.from(body.data, \"base64\").toString(\"utf8\");\n}\n\nasync function getMainFrame(engine: BrowserCoreEngine, pageRef: PageRef) {\n const frames = await engine.listFrames({ pageRef });\n const mainFrame = frames.find((frame) => frame.isMainFrame);\n if (!mainFrame) {\n throw new Error(`page ${pageRef} does not expose a main frame`);\n }\n return mainFrame;\n}\n\nfunction directionToDelta(\n direction: OpensteerDomScrollInput[\"direction\"],\n amount: number,\n): { readonly x: number; readonly y: number } {\n if (!Number.isFinite(amount) || amount <= 0) {\n throw new Error(`scroll amount must be a positive number, received ${String(amount)}`);\n }\n\n switch (direction) {\n case \"up\":\n return { x: 0, y: -amount };\n case \"down\":\n return { x: 0, y: amount };\n case \"left\":\n return { x: -amount, y: 0 };\n case \"right\":\n return { x: amount, y: 0 };\n }\n}\n\nfunction normalizeNamespace(value: string | undefined): string {\n const normalized = String(value ?? \"default\").trim();\n return normalized.length === 0 ? \"default\" : normalized;\n}\n\nfunction toOpensteerActionResult(target: ResolvedDomTarget): OpensteerActionResult {\n return {\n tagName: toOpensteerTagName(target.node.nodeName),\n ...(target.persist === undefined ? {} : { persist: target.persist }),\n };\n}\n\nfunction toOpensteerResolvedTarget(target: ResolvedDomTarget): OpensteerResolvedTarget {\n return {\n pageRef: target.pageRef,\n frameRef: target.frameRef,\n documentRef: target.documentRef,\n documentEpoch: target.documentEpoch,\n nodeRef: target.nodeRef,\n tagName: toOpensteerTagName(target.node.nodeName),\n pathHint: buildPathSelectorHint(target.replayPath ?? target.anchor),\n ...(target.persist === undefined ? {} : { persist: target.persist }),\n ...(target.selectorUsed === undefined ? {} : { selectorUsed: target.selectorUsed }),\n };\n}\n\nfunction toOpensteerTagName(nodeName: string): string {\n const tagName = String(nodeName).trim().toLowerCase();\n return tagName.length === 0 ? \"element\" : tagName;\n}\n\nfunction normalizeOpensteerError(error: unknown) {\n return normalizeThrownOpensteerError(error, \"Unknown Opensteer runtime failure\");\n}\n\nfunction observationArtifactKindFromManifest(\n kind: ArtifactManifest[\"kind\"],\n): \"screenshot\" | \"dom-snapshot\" | \"html-snapshot\" | \"other\" {\n switch (kind) {\n case \"screenshot\":\n return \"screenshot\";\n case \"dom-snapshot\":\n return \"dom-snapshot\";\n case \"html-snapshot\":\n return \"html-snapshot\";\n default:\n return \"other\";\n }\n}\n\nfunction buildObservationEventsFromTrace(input: {\n readonly traceId: string;\n readonly stepId: string;\n readonly operation: string;\n readonly outcome: \"ok\" | \"error\";\n readonly startedAt: number;\n readonly completedAt: number;\n readonly context?: TraceContext;\n readonly events?: readonly OpensteerEvent[];\n readonly data?: JsonValue;\n readonly error?: OpensteerError;\n readonly artifactIds?: readonly string[];\n readonly profile: ObservabilityConfig[\"profile\"];\n}): readonly AppendObservationEventInput[] {\n const context = normalizeObservationContext(input.context);\n const baseCorrelationId = input.traceId;\n const startedEvent: AppendObservationEventInput = {\n kind:\n input.operation === \"session.open\" || input.operation === \"session.close\"\n ? \"session\"\n : \"operation\",\n phase: \"started\",\n createdAt: input.startedAt,\n correlationId: baseCorrelationId,\n spanId: input.stepId,\n ...(context === undefined ? {} : { context }),\n data: {\n operation: input.operation,\n },\n };\n const stepEvents: AppendObservationEventInput[] = (input.events ?? [])\n .filter((event) => shouldCaptureObservationStepEvent(event, input.profile))\n .map((event) => {\n const eventContext = buildObservationContextFromEvent(event);\n return {\n kind: observationKindForStepEvent(event),\n phase: \"occurred\",\n createdAt: event.timestamp,\n correlationId: baseCorrelationId,\n parentSpanId: input.stepId,\n ...(eventContext === undefined ? {} : { context: eventContext }),\n data: stripObservationStepEvent(event),\n ...(event.kind === \"page-error\"\n ? {\n error: {\n message: event.message,\n ...(event.stack === undefined ? {} : { details: { stack: event.stack } }),\n },\n }\n : {}),\n };\n });\n const completedEvent: AppendObservationEventInput = {\n kind:\n input.operation === \"session.open\" || input.operation === \"session.close\"\n ? \"session\"\n : \"operation\",\n phase: input.outcome === \"ok\" ? \"completed\" : \"failed\",\n createdAt: input.completedAt,\n correlationId: baseCorrelationId,\n spanId: input.stepId,\n ...(context === undefined ? {} : { context }),\n data: {\n operation: input.operation,\n startedAt: input.startedAt,\n completedAt: input.completedAt,\n durationMs: input.completedAt - input.startedAt,\n ...(input.data === undefined ? {} : { output: input.data }),\n },\n ...(input.error === undefined\n ? {}\n : {\n error: {\n ...(input.error.code === undefined ? {} : { code: input.error.code }),\n message: input.error.message,\n ...(input.error.retriable === undefined ? {} : { retriable: input.error.retriable }),\n ...(input.error.details === undefined\n ? {}\n : { details: toCanonicalJsonValue(input.error.details) }),\n },\n }),\n ...(input.artifactIds === undefined || input.artifactIds.length === 0\n ? {}\n : { artifactIds: input.artifactIds }),\n };\n\n return [startedEvent, ...stepEvents, completedEvent];\n}\n\nfunction buildObservationContextFromEvent(event: OpensteerEvent): ObservationContext | undefined {\n return normalizeObservationContext({\n sessionRef: event.sessionRef,\n ...(event.pageRef === undefined ? {} : { pageRef: event.pageRef }),\n ...(event.frameRef === undefined ? {} : { frameRef: event.frameRef }),\n ...(event.documentRef === undefined ? {} : { documentRef: event.documentRef }),\n ...(event.documentEpoch === undefined ? {} : { documentEpoch: event.documentEpoch }),\n });\n}\n\nfunction shouldCaptureObservationStepEvent(\n event: OpensteerEvent,\n profile: ObservabilityConfig[\"profile\"],\n): boolean {\n if (profile === \"diagnostic\") {\n return true;\n }\n\n switch (event.kind) {\n case \"page-created\":\n case \"popup-opened\":\n case \"page-closed\":\n case \"page-error\":\n return true;\n case \"console\":\n return event.level === \"warn\" || event.level === \"error\";\n default:\n return false;\n }\n}\n\nfunction observationKindForStepEvent(\n event: OpensteerEvent,\n): \"page\" | \"console\" | \"error\" | \"runtime\" {\n switch (event.kind) {\n case \"console\":\n return \"console\";\n case \"page-error\":\n return \"error\";\n case \"paused\":\n case \"resumed\":\n case \"frozen\":\n return \"runtime\";\n default:\n return \"page\";\n }\n}\n\nfunction stripObservationStepEvent(event: OpensteerEvent): JsonValue {\n const {\n eventId: _eventId,\n kind,\n timestamp,\n sessionRef: _sessionRef,\n pageRef: _pageRef,\n frameRef: _frameRef,\n documentRef: _documentRef,\n documentEpoch: _documentEpoch,\n ...rest\n } = event;\n\n return toCanonicalJsonValue({\n eventKind: kind,\n timestamp,\n ...rest,\n });\n}\n\nfunction buildMutationCaptureTraceData(\n diagnostics: MutationCaptureFinalizeDiagnostics | undefined,\n): Record<string, unknown> {\n if (diagnostics?.finalizeError === undefined) {\n return {};\n }\n\n return {\n networkCapture: {\n finalizeError: diagnostics.finalizeError,\n },\n };\n}\n\nfunction isIgnorableRuntimeBindingError(error: unknown): boolean {\n return (\n isBrowserCoreError(error) &&\n (error.code === \"not-found\" || error.code === \"page-closed\" || error.code === \"session-closed\")\n );\n}\n\nasync function withDetachedTimeoutSignal<T>(\n timeoutMs: number,\n operation: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n const controller = new AbortController();\n const timeoutError = new OpensteerProtocolError(\n \"timeout\",\n `mutation capture finalization exceeded ${String(timeoutMs)}ms timeout`,\n {\n details: {\n policy: \"mutation-capture-finalize\",\n budgetMs: timeoutMs,\n },\n },\n );\n const timer = setTimeout(() => {\n controller.abort(timeoutError);\n }, timeoutMs);\n\n try {\n return await operation(controller.signal);\n } finally {\n clearTimeout(timer);\n }\n}\n\nfunction screenshotMediaType(format: \"png\" | \"jpeg\" | \"webp\"): string {\n switch (format) {\n case \"png\":\n return \"image/png\";\n case \"jpeg\":\n return \"image/jpeg\";\n case \"webp\":\n return \"image/webp\";\n }\n}\n","import {\n ATTRIBUTE_DENY_KEYS,\n LAZY_LOADING_MEDIA_TAGS,\n MATCH_ATTRIBUTE_PRIORITY,\n STABLE_PRIMARY_ATTR_KEYS,\n VOLATILE_CLASS_TOKENS,\n VOLATILE_LAZY_CLASS_TOKENS,\n VOLATILE_LAZY_LOADING_ATTRS,\n} from \"../runtimes/dom/match-policy.js\";\n\nconst SINGLE_ATTRIBUTE_PRIORITY = Array.from(\n new Set([\"data-testid\", \"data-test\", \"data-qa\", \"data-cy\", \"id\", ...STABLE_PRIMARY_ATTR_KEYS]),\n);\n\nexport interface FlowRecorderInstallScriptOptions {\n readonly showStopButton?: boolean;\n}\n\nexport function createFlowRecorderInstallScript(\n options: FlowRecorderInstallScriptOptions = {},\n): string {\n const normalizedOptions = {\n showStopButton: options.showStopButton ?? true,\n } as const;\n\n return String.raw`(() => {\n const TOP_LEVEL_ONLY = (() => {\n try {\n return window.top === window.self;\n } catch {\n return false;\n }\n })();\n if (!TOP_LEVEL_ONLY) {\n return;\n }\n\n const globalScope = globalThis;\n const recorderKey = \"__opensteerFlowRecorder\";\n const historyStateKey = \"__opensteerFlowRecorderHistory\";\n const recorderUiAttribute = \"data-opensteer-recorder-ui\";\n const queueLimit = 1000;\n const singleAttributePriority = ${JSON.stringify(SINGLE_ATTRIBUTE_PRIORITY)};\n const stablePrimaryAttrKeys = new Set(${JSON.stringify([...STABLE_PRIMARY_ATTR_KEYS])});\n const matchAttributePriority = ${JSON.stringify([...MATCH_ATTRIBUTE_PRIORITY])};\n const attributeDenyKeys = new Set(${JSON.stringify([...ATTRIBUTE_DENY_KEYS])});\n const lazyLoadingMediaTags = new Set(${JSON.stringify([...LAZY_LOADING_MEDIA_TAGS])});\n const volatileLazyLoadingAttrs = new Set(${JSON.stringify([...VOLATILE_LAZY_LOADING_ATTRS])});\n const volatileClassTokens = new Set(${JSON.stringify([...VOLATILE_CLASS_TOKENS])});\n const volatileLazyClassTokens = new Set(${JSON.stringify([...VOLATILE_LAZY_CLASS_TOKENS])});\n const options = ${JSON.stringify(normalizedOptions)};\n\n const previous = globalScope[recorderKey];\n if (previous && typeof previous.dispose === \"function\") {\n previous.dispose();\n }\n\n const queue = [];\n const cleanup = [];\n const inputFlushTimers = new Map();\n const pendingInputs = new Map();\n let historyStateCache = undefined;\n let stopRequested = false;\n let pendingWheel = undefined;\n\n const actionTargetTags = new Set([\n \"a\",\n \"button\",\n \"input\",\n \"label\",\n \"option\",\n \"select\",\n \"summary\",\n \"textarea\",\n ]);\n\n function now() {\n return Date.now();\n }\n\n function enqueue(entry) {\n queue.push({\n ...entry,\n timestamp: typeof entry.timestamp === \"number\" ? entry.timestamp : now(),\n });\n if (queue.length > queueLimit) {\n queue.splice(0, queue.length - queueLimit);\n }\n }\n\n function isRecorderUiNode(node) {\n let current = node instanceof Node ? node : null;\n while (current) {\n if (current instanceof Element && current.hasAttribute(recorderUiAttribute)) {\n return true;\n }\n const root = typeof current.getRootNode === \"function\" ? current.getRootNode() : null;\n if (root instanceof ShadowRoot) {\n current = root.host;\n continue;\n }\n current = current instanceof Element ? current.parentElement : null;\n }\n return false;\n }\n\n function isValidAttributeName(name) {\n if (typeof name !== \"string\") {\n return false;\n }\n const normalized = name.trim();\n if (normalized.length === 0) {\n return false;\n }\n if (/[\\s\"'<>/]/.test(normalized)) {\n return false;\n }\n return /^[A-Za-z_][A-Za-z0-9_:\\-.]*$/.test(normalized);\n }\n\n function escapeAttributeValue(value) {\n return String(value).replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n }\n\n function escapeIdentifier(value) {\n if (typeof CSS !== \"undefined\" && typeof CSS.escape === \"function\") {\n return CSS.escape(value);\n }\n return String(value).replace(/[^A-Za-z0-9_-]/g, (character) => {\n const codePoint = character.codePointAt(0);\n return \"\\\\\" + (codePoint == null ? \"\" : codePoint.toString(16)) + \" \";\n });\n }\n\n function normalizeClassValue(element, rawValue) {\n const tag = element.tagName.toLowerCase();\n const tokens = String(rawValue)\n .split(/\\s+/u)\n .map((token) => token.trim())\n .filter(Boolean)\n .filter((token) => !volatileClassTokens.has(token))\n .filter((token) => !(lazyLoadingMediaTags.has(tag) && volatileLazyClassTokens.has(token)));\n return tokens.join(\" \");\n }\n\n function shouldKeepAttribute(element, name, value) {\n const key = String(name || \"\")\n .trim()\n .toLowerCase();\n if (!key || !String(value || \"\").trim()) {\n return false;\n }\n if (!isValidAttributeName(key)) {\n return false;\n }\n if (key === \"c\") {\n return false;\n }\n if (/^on[a-z]/i.test(key)) {\n return false;\n }\n if (attributeDenyKeys.has(key)) {\n return false;\n }\n if (key.startsWith(\"data-os-\") || key.startsWith(\"data-opensteer-\")) {\n return false;\n }\n if (lazyLoadingMediaTags.has(element.tagName.toLowerCase()) && volatileLazyLoadingAttrs.has(key)) {\n return false;\n }\n return true;\n }\n\n function readAttributeValue(element, key) {\n if (key === \"class\") {\n const normalized = normalizeClassValue(element, element.getAttribute(\"class\") || \"\");\n return normalized.length === 0 ? undefined : normalized;\n }\n const value = element.getAttribute(key);\n if (!shouldKeepAttribute(element, key, value || \"\")) {\n return undefined;\n }\n return value || undefined;\n }\n\n function buildSingleAttributeSelector(element, key, value) {\n if (!value) {\n return undefined;\n }\n const tag = element.tagName.toLowerCase();\n if (key === \"id\") {\n const idSelector = \"#\" + escapeIdentifier(value);\n return element.matches(idSelector)\n ? idSelector\n : tag + '[id=\"' + escapeAttributeValue(value) + '\"]';\n }\n return tag + \"[\" + key + '=\"' + escapeAttributeValue(value) + '\"]';\n }\n\n function isUniqueSelector(selector, element) {\n if (!selector) {\n return false;\n }\n let matches;\n try {\n matches = document.querySelectorAll(selector);\n } catch {\n return false;\n }\n return matches.length === 1 && matches[0] === element;\n }\n\n function nearestRecordTarget(node) {\n if (isRecorderUiNode(node)) {\n return null;\n }\n let current = node instanceof Element ? node : null;\n while (current) {\n if (current.hasAttribute(recorderUiAttribute)) {\n return null;\n }\n const tag = current.tagName.toLowerCase();\n if (\n actionTargetTags.has(tag) ||\n current.hasAttribute(\"data-testid\") ||\n current.hasAttribute(\"data-test\") ||\n current.hasAttribute(\"data-qa\") ||\n current.hasAttribute(\"data-cy\") ||\n current.hasAttribute(\"role\") ||\n current.hasAttribute(\"aria-label\") ||\n current.hasAttribute(\"name\")\n ) {\n return current;\n }\n current = current.parentElement;\n }\n return node instanceof Element ? node : null;\n }\n\n function buildSegmentSelector(element) {\n const tag = element.tagName.toLowerCase();\n for (const key of matchAttributePriority) {\n const value = readAttributeValue(element, key);\n if (!value) {\n continue;\n }\n if (key === \"class\") {\n const tokens = value\n .split(/\\s+/u)\n .map((token) => token.trim())\n .filter(Boolean)\n .slice(0, 2);\n if (tokens.length === 0) {\n continue;\n }\n return tag + tokens.map((token) => \".\" + escapeIdentifier(token)).join(\"\");\n }\n return key === \"id\"\n ? tag + '[id=\"' + escapeAttributeValue(value) + '\"]'\n : tag + \"[\" + key + '=\"' + escapeAttributeValue(value) + '\"]';\n }\n return tag;\n }\n\n function nthOfTypeSegment(element, baseSelector) {\n const parent = element.parentElement;\n if (!parent) {\n return baseSelector;\n }\n const sameType = Array.from(parent.children).filter(\n (child) => child.tagName === element.tagName,\n );\n if (sameType.length <= 1) {\n return baseSelector;\n }\n const index = sameType.indexOf(element) + 1;\n return baseSelector + \":nth-of-type(\" + String(index) + \")\";\n }\n\n function buildSelector(node) {\n const element = nearestRecordTarget(node);\n if (!(element instanceof Element)) {\n return undefined;\n }\n\n for (const key of singleAttributePriority) {\n const value = readAttributeValue(element, key);\n const selector = buildSingleAttributeSelector(element, key, value);\n if (selector && isUniqueSelector(selector, element)) {\n return selector;\n }\n if (value && !stablePrimaryAttrKeys.has(key) && key !== \"id\") {\n const tagQualified =\n element.tagName.toLowerCase() + \"[\" + key + '=\"' + escapeAttributeValue(value) + '\"]';\n if (isUniqueSelector(tagQualified, element)) {\n return tagQualified;\n }\n }\n }\n\n const segments = [];\n let current = element;\n let depth = 0;\n while (current && depth < 6) {\n const segment = nthOfTypeSegment(current, buildSegmentSelector(current));\n segments.unshift(segment);\n const selector = segments.join(\" > \");\n if (isUniqueSelector(selector, element)) {\n return selector;\n }\n current = current.parentElement;\n depth += 1;\n }\n\n const fallback = segments.join(\" > \");\n return fallback.length > 0 ? fallback : element.tagName.toLowerCase();\n }\n\n function readTargetValue(target) {\n if (target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement) {\n return target.value;\n }\n if (target instanceof HTMLSelectElement) {\n return target.value;\n }\n if (target instanceof HTMLElement && target.isContentEditable) {\n return target.textContent || \"\";\n }\n return undefined;\n }\n\n function flushPendingInput(selector) {\n const pending = pendingInputs.get(selector);\n if (!pending) {\n return;\n }\n pendingInputs.delete(selector);\n const timer = inputFlushTimers.get(selector);\n if (timer !== undefined) {\n clearTimeout(timer);\n inputFlushTimers.delete(selector);\n }\n enqueue({\n kind: \"type\",\n selector,\n text: pending.text,\n timestamp: pending.timestamp,\n });\n }\n\n function flushAllInputs() {\n for (const selector of Array.from(pendingInputs.keys())) {\n flushPendingInput(selector);\n }\n }\n\n function flushPendingWheel() {\n if (!pendingWheel) {\n return;\n }\n clearTimeout(pendingWheel.timerId);\n enqueue({\n kind: \"scroll\",\n selector: pendingWheel.selector,\n deltaX: pendingWheel.deltaX,\n deltaY: pendingWheel.deltaY,\n timestamp: pendingWheel.timestamp,\n });\n pendingWheel = undefined;\n }\n\n function scheduleInputFlush(selector) {\n const existing = inputFlushTimers.get(selector);\n if (existing !== undefined) {\n clearTimeout(existing);\n }\n const timerId = setTimeout(() => {\n flushPendingInput(selector);\n }, 400);\n inputFlushTimers.set(selector, timerId);\n }\n\n function createDefaultHistoryState(currentUrl) {\n return {\n entries: [currentUrl],\n index: 0,\n };\n }\n\n function normalizeHistoryState(state) {\n if (\n !state ||\n !Array.isArray(state.entries) ||\n !state.entries.every((entry) => typeof entry === \"string\") ||\n !Number.isInteger(state.index)\n ) {\n return undefined;\n }\n const entries = state.entries.slice();\n if (entries.length === 0) {\n return createDefaultHistoryState(location.href);\n }\n return {\n entries,\n index: Math.min(entries.length - 1, Math.max(0, state.index)),\n };\n }\n\n function writeHistoryState(state) {\n const normalized = normalizeHistoryState(state) ?? createDefaultHistoryState(location.href);\n historyStateCache = normalized;\n try {\n sessionStorage.setItem(historyStateKey, JSON.stringify(normalized));\n } catch {}\n return normalized;\n }\n\n function applyHistoryState(state, mode, nextUrl) {\n const current = normalizeHistoryState(state) ?? createDefaultHistoryState(location.href);\n const nextState = {\n entries: current.entries.slice(),\n index: current.index,\n };\n if (mode === \"replace\") {\n nextState.entries[nextState.index] = nextUrl;\n } else if (mode === \"push\") {\n nextState.entries = nextState.entries.slice(0, nextState.index + 1);\n nextState.entries.push(nextUrl);\n nextState.index = nextState.entries.length - 1;\n } else if (mode === \"back\") {\n nextState.index = Math.max(0, nextState.index - 1);\n } else if (mode === \"forward\") {\n nextState.index = Math.min(nextState.entries.length - 1, nextState.index + 1);\n }\n return nextState;\n }\n\n function updateHistoryState(mode, nextUrl) {\n return writeHistoryState(applyHistoryState(readHistoryState(), mode, nextUrl));\n }\n\n function readHistoryState() {\n const cached = normalizeHistoryState(historyStateCache);\n if (cached) {\n historyStateCache = cached;\n return cached;\n }\n try {\n const raw = sessionStorage.getItem(historyStateKey);\n const parsed = normalizeHistoryState(raw ? JSON.parse(raw) : undefined);\n if (parsed) {\n historyStateCache = parsed;\n return parsed;\n }\n } catch {}\n return undefined;\n }\n\n function classifyHistoryTraversal(currentUrl) {\n const state = readHistoryState();\n if (!state) {\n return undefined;\n }\n if (state.entries[state.index] === currentUrl) {\n return undefined;\n }\n if (state.entries[state.index - 1] === currentUrl) {\n writeHistoryState({\n entries: state.entries,\n index: state.index - 1,\n });\n return \"go-back\";\n }\n if (state.entries[state.index + 1] === currentUrl) {\n writeHistoryState({\n entries: state.entries,\n index: state.index + 1,\n });\n return \"go-forward\";\n }\n const existingIndex = state.entries.lastIndexOf(currentUrl);\n if (existingIndex !== -1 && existingIndex !== state.index) {\n writeHistoryState({\n entries: state.entries,\n index: existingIndex,\n });\n return existingIndex < state.index ? \"go-back\" : \"go-forward\";\n }\n return undefined;\n }\n\n function onInstall() {\n const currentUrl = location.href;\n const navigationEntry =\n typeof performance.getEntriesByType === \"function\"\n ? performance.getEntriesByType(\"navigation\")[0]\n : undefined;\n const navigationType =\n navigationEntry && typeof navigationEntry.type === \"string\" ? navigationEntry.type : undefined;\n const existingState = readHistoryState();\n\n if (!existingState) {\n updateHistoryState(\"replace\", currentUrl);\n return;\n }\n\n if (navigationType === \"reload\") {\n updateHistoryState(\"replace\", currentUrl);\n enqueue({\n kind: \"reload\",\n url: currentUrl,\n });\n return;\n }\n\n if (navigationType === \"back_forward\") {\n const traversal = classifyHistoryTraversal(currentUrl);\n if (traversal === \"go-back\" || traversal === \"go-forward\") {\n enqueue({\n kind: traversal,\n url: currentUrl,\n });\n return;\n }\n }\n\n if (existingState.entries[existingState.index] !== currentUrl) {\n updateHistoryState(\"push\", currentUrl);\n enqueue({\n kind: \"navigate\",\n url: currentUrl,\n source: \"full-navigation\",\n });\n }\n }\n\n function modifierKeys(event) {\n const modifiers = [];\n if (event.altKey) {\n modifiers.push(\"Alt\");\n }\n if (event.ctrlKey) {\n modifiers.push(\"Control\");\n }\n if (event.metaKey) {\n modifiers.push(\"Meta\");\n }\n if (event.shiftKey) {\n modifiers.push(\"Shift\");\n }\n return modifiers;\n }\n\n function addListener(target, type, listener, options) {\n target.addEventListener(type, listener, options);\n cleanup.push(() => {\n target.removeEventListener(type, listener, options);\n });\n }\n\n function requestStop() {\n stopRequested = true;\n }\n\n function mountStopButton() {\n if (document.querySelector(\"[\" + recorderUiAttribute + \"]\")) {\n return true;\n }\n if (stopRequested) {\n return true;\n }\n const parent = document.body || document.documentElement;\n if (!(parent instanceof HTMLElement)) {\n return false;\n }\n\n const host = document.createElement(\"div\");\n host.setAttribute(recorderUiAttribute, \"true\");\n const shadowRoot = host.attachShadow({ mode: \"open\" });\n const style = document.createElement(\"style\");\n style.textContent = [\n \":host {\",\n \" all: initial;\",\n \" display: block;\",\n \" position: fixed;\",\n \" top: 16px;\",\n \" right: 16px;\",\n \" z-index: 2147483647;\",\n \" pointer-events: auto;\",\n \" color-scheme: only light;\",\n \" contain: content;\",\n \" isolation: isolate;\",\n \"}\",\n \"button {\",\n \" appearance: none;\",\n \" border: 1px solid rgba(15, 23, 42, 0.2);\",\n \" border-radius: 999px;\",\n \" background: rgba(15, 23, 42, 0.92);\",\n \" color: #ffffff;\",\n \" color-scheme: only light;\",\n \" cursor: pointer;\",\n \" font: 600 12px/1.2 ui-sans-serif, system-ui, sans-serif;\",\n \" letter-spacing: 0.01em;\",\n \" padding: 10px 14px;\",\n \" box-shadow: 0 10px 30px rgba(15, 23, 42, 0.22);\",\n \"}\",\n \"button:hover {\",\n \" background: rgba(15, 23, 42, 0.98);\",\n \"}\",\n \"button:focus-visible {\",\n \" outline: 2px solid #2563eb;\",\n \" outline-offset: 2px;\",\n \"}\",\n ].join(\"\\n\");\n const button = document.createElement(\"button\");\n button.type = \"button\";\n button.textContent = \"Stop recording\";\n button.setAttribute(\"aria-label\", \"Stop recording\");\n const consumePointerEvent = (event) => {\n event.preventDefault();\n event.stopPropagation();\n };\n for (const type of [\"pointerdown\", \"mousedown\", \"mouseup\", \"click\"]) {\n button.addEventListener(type, consumePointerEvent);\n }\n button.addEventListener(\"click\", () => {\n requestStop();\n host.remove();\n });\n shadowRoot.append(style, button);\n parent.appendChild(host);\n cleanup.push(() => {\n host.remove();\n });\n return true;\n }\n\n function ensureStopButtonMounted() {\n if (mountStopButton()) {\n return;\n }\n\n const observer = new MutationObserver(() => {\n if (!mountStopButton()) {\n return;\n }\n observer.disconnect();\n });\n observer.observe(document, {\n childList: true,\n subtree: true,\n });\n cleanup.push(() => {\n observer.disconnect();\n });\n }\n\n addListener(document, \"click\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n if (!(target instanceof Element)) {\n return;\n }\n const tag = target.tagName.toLowerCase();\n if (tag === \"select\" || tag === \"option\") {\n return;\n }\n const selector = buildSelector(target);\n if (!selector) {\n return;\n }\n enqueue({\n kind: \"click\",\n selector,\n button: event.button,\n modifiers: modifierKeys(event),\n });\n }, true);\n\n addListener(document, \"dblclick\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n if (!(target instanceof Element)) {\n return;\n }\n const selector = buildSelector(target);\n if (!selector) {\n return;\n }\n enqueue({\n kind: \"dblclick\",\n selector,\n });\n }, true);\n\n addListener(document, \"input\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n if (!(target instanceof Element)) {\n return;\n }\n const selector = buildSelector(target);\n const text = readTargetValue(target);\n if (!selector || typeof text !== \"string\") {\n return;\n }\n pendingInputs.set(selector, {\n selector,\n text,\n timestamp: now(),\n });\n scheduleInputFlush(selector);\n }, true);\n\n addListener(document, \"change\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n if (!(target instanceof HTMLSelectElement)) {\n return;\n }\n const selector = buildSelector(target);\n if (!selector) {\n return;\n }\n const selectedOption = target.selectedOptions && target.selectedOptions.length > 0\n ? target.selectedOptions[0]\n : undefined;\n enqueue({\n kind: \"select-option\",\n selector,\n value: target.value,\n ...(selectedOption === undefined ? {} : { label: selectedOption.label || selectedOption.textContent || \"\" }),\n });\n }, true);\n\n addListener(document, \"keydown\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const allowedKeys = new Set([\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"ArrowUp\",\n \"Backspace\",\n \"Delete\",\n \"Enter\",\n \"Escape\",\n \"Tab\",\n ]);\n if (!allowedKeys.has(event.key)) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n const selector = target instanceof Element ? buildSelector(target) : undefined;\n if (event.key === \"Enter\" && selector) {\n flushPendingInput(selector);\n }\n enqueue({\n kind: \"keypress\",\n key: event.key,\n modifiers: modifierKeys(event),\n ...(selector === undefined ? {} : { selector }),\n });\n }, true);\n\n addListener(document, \"wheel\", (event) => {\n if (!event.isTrusted) {\n return;\n }\n const target = nearestRecordTarget(event.target);\n const selector = target instanceof Element ? buildSelector(target) : undefined;\n if (pendingWheel && pendingWheel.selector === selector) {\n pendingWheel.deltaX += event.deltaX;\n pendingWheel.deltaY += event.deltaY;\n clearTimeout(pendingWheel.timerId);\n pendingWheel.timerId = setTimeout(flushPendingWheel, 250);\n return;\n }\n flushPendingWheel();\n pendingWheel = {\n selector,\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n timestamp: now(),\n timerId: setTimeout(flushPendingWheel, 250),\n };\n }, true);\n\n const originalPushState = history.pushState.bind(history);\n history.pushState = function pushState(state, unused, url) {\n const beforeUrl = location.href;\n const output = originalPushState.apply(this, arguments);\n const nextUrl = location.href;\n if (nextUrl !== beforeUrl) {\n updateHistoryState(\"push\", nextUrl);\n enqueue({\n kind: \"navigate\",\n url: nextUrl,\n source: \"push-state\",\n });\n }\n return output;\n };\n cleanup.push(() => {\n history.pushState = originalPushState;\n });\n\n const originalReplaceState = history.replaceState.bind(history);\n history.replaceState = function replaceState(state, unused, url) {\n const beforeUrl = location.href;\n const output = originalReplaceState.apply(this, arguments);\n const nextUrl = location.href;\n if (nextUrl !== beforeUrl) {\n updateHistoryState(\"replace\", nextUrl);\n enqueue({\n kind: \"navigate\",\n url: nextUrl,\n source: \"replace-state\",\n });\n }\n return output;\n };\n cleanup.push(() => {\n history.replaceState = originalReplaceState;\n });\n\n addListener(globalScope, \"popstate\", () => {\n const currentUrl = location.href;\n const traversal = classifyHistoryTraversal(currentUrl);\n if (traversal === \"go-back\" || traversal === \"go-forward\") {\n enqueue({\n kind: traversal,\n url: currentUrl,\n });\n return;\n }\n const state = readHistoryState();\n if (state?.entries[state.index] !== currentUrl) {\n updateHistoryState(\"push\", currentUrl);\n enqueue({\n kind: \"navigate\",\n url: currentUrl,\n source: \"history-traversal\",\n });\n }\n });\n\n addListener(globalScope, \"hashchange\", () => {\n const currentUrl = location.href;\n updateHistoryState(\"replace\", currentUrl);\n enqueue({\n kind: \"navigate\",\n url: currentUrl,\n source: \"hashchange\",\n });\n });\n\n function drain() {\n flushAllInputs();\n flushPendingWheel();\n return {\n url: location.href,\n focused: document.hasFocus(),\n visibilityState: document.visibilityState,\n stopRequested,\n events: queue.splice(0, queue.length),\n };\n }\n\n globalScope[recorderKey] = {\n installed: true,\n debugSelector(target) {\n return buildSelector(target);\n },\n drain,\n requestStop,\n dispose() {\n flushAllInputs();\n flushPendingWheel();\n for (const dispose of cleanup.splice(0, cleanup.length)) {\n dispose();\n }\n for (const timerId of inputFlushTimers.values()) {\n clearTimeout(timerId);\n }\n inputFlushTimers.clear();\n pendingInputs.clear();\n delete globalScope[recorderKey];\n },\n };\n\n if (options.showStopButton) {\n ensureStopButtonMounted();\n }\n onInstall();\n})();`;\n}\n\nexport const FLOW_RECORDER_INSTALL_SCRIPT = createFlowRecorderInstallScript();\n\nexport const FLOW_RECORDER_DRAIN_SCRIPT = String.raw`(() => {\n const recorder = globalThis.__opensteerFlowRecorder;\n if (!recorder || typeof recorder.drain !== \"function\") {\n return {\n url: location.href,\n focused: document.hasFocus(),\n visibilityState: document.visibilityState,\n stopRequested: false,\n events: [],\n };\n }\n return recorder.drain();\n})();`;\n","import { FLOW_RECORDER_DRAIN_SCRIPT, FLOW_RECORDER_INSTALL_SCRIPT } from \"./browser-scripts.js\";\nimport type {\n FlowRecorderSnapshot,\n RawFlowRecorderEvent,\n RecordedAction,\n RecorderPageState,\n} from \"./types.js\";\n\nexport interface RecorderRuntimeAdapter {\n addInitScript(input: { readonly script: string }): Promise<unknown>;\n evaluate(input: { readonly script: string; readonly pageRef?: string }): Promise<unknown>;\n listPages(): Promise<{\n readonly pages: readonly {\n readonly pageRef: string;\n readonly url: string;\n readonly openerPageRef?: string;\n }[];\n }>;\n}\n\nexport interface FlowRecorderCollectorOptions {\n readonly pollIntervalMs?: number;\n readonly onAction?: (action: RecordedAction) => void | Promise<void>;\n readonly installScript?: string;\n}\n\ninterface KnownRecorderPageState {\n readonly pageId: string;\n readonly pageRef: string;\n openerPageRef?: string;\n openerPageId?: string;\n currentUrl: string;\n}\n\ninterface EvaluatedPageState {\n readonly pageRef: string;\n readonly pageId: string;\n readonly openerPageRef?: string;\n readonly openerPageId?: string;\n readonly previousUrl: string;\n readonly currentUrl: string;\n readonly focused: boolean;\n readonly stopRequested: boolean;\n readonly events: readonly RawFlowRecorderEvent[];\n}\n\nexport class FlowRecorderCollector {\n private readonly runtime: RecorderRuntimeAdapter;\n private readonly pollIntervalMs: number;\n private readonly onAction;\n private readonly installScript: string;\n private readonly pages = new Map<string, KnownRecorderPageState>();\n private readonly actions: RecordedAction[] = [];\n private nextPageOrdinal = 0;\n private runningLoop: Promise<void> | undefined;\n private loopStopRequested = false;\n private stopDetected = false;\n private focusedPageId: string | undefined;\n private stopWaiters: Array<() => void> = [];\n\n constructor(runtime: RecorderRuntimeAdapter, options: FlowRecorderCollectorOptions = {}) {\n this.runtime = runtime;\n this.pollIntervalMs = options.pollIntervalMs ?? 250;\n this.onAction = options.onAction;\n this.installScript = options.installScript ?? FLOW_RECORDER_INSTALL_SCRIPT;\n }\n\n async install(): Promise<void> {\n await this.runtime.addInitScript({\n script: this.installScript,\n });\n\n const { pages } = await this.runtime.listPages();\n for (const page of pages) {\n this.ensureKnownPage(page.pageRef, page.url, page.openerPageRef);\n }\n\n await Promise.all(\n pages.map((page) =>\n this.runtime\n .evaluate({\n script: this.installScript,\n pageRef: page.pageRef,\n })\n .catch(() => undefined),\n ),\n );\n\n const evaluatedPages = await this.readEvaluatedPages(pages);\n for (const page of evaluatedPages) {\n this.updateKnownPage(page.pageRef, page.currentUrl, page.openerPageRef);\n }\n this.focusedPageId = evaluatedPages.find((page) => page.focused)?.pageId ?? this.focusedPageId;\n }\n\n start(): void {\n if (this.runningLoop !== undefined) {\n return;\n }\n this.loopStopRequested = false;\n this.runningLoop = this.runLoop();\n }\n\n async stop(): Promise<readonly RecordedAction[]> {\n this.loopStopRequested = true;\n if (this.runningLoop !== undefined) {\n await this.runningLoop;\n this.runningLoop = undefined;\n }\n if (!this.stopDetected) {\n await this.pollOnce().catch(() => undefined);\n }\n return this.actions.slice();\n }\n\n getActions(): readonly RecordedAction[] {\n return this.actions.slice();\n }\n\n getPages(): readonly RecorderPageState[] {\n return [...this.pages.values()]\n .map((page) => ({\n pageId: page.pageId,\n pageRef: page.pageRef,\n ...(page.openerPageRef === undefined ? {} : { openerPageRef: page.openerPageRef }),\n ...(page.openerPageId === undefined ? {} : { openerPageId: page.openerPageId }),\n currentUrl: page.currentUrl,\n }))\n .sort((left, right) => comparePageIds(left.pageId, right.pageId));\n }\n\n getFocusedPageId(): string | undefined {\n return this.focusedPageId;\n }\n\n async waitForStop(): Promise<void> {\n if (this.stopDetected) {\n return;\n }\n await new Promise<void>((resolve) => {\n this.stopWaiters.push(resolve);\n });\n }\n\n async pollOnce(): Promise<readonly RecordedAction[]> {\n const pollTimestamp = Date.now();\n const { pages } = await this.runtime.listPages();\n const previousPageRefs = new Set(this.pages.keys());\n const evaluatedPages = await this.readEvaluatedPages(pages);\n if (!this.stopDetected && evaluatedPages.some((page) => page.stopRequested)) {\n this.stopDetected = true;\n this.loopStopRequested = true;\n for (const resolve of this.stopWaiters.splice(0, this.stopWaiters.length)) {\n resolve();\n }\n }\n const actions = this.normalizePoll({\n pollTimestamp,\n previousPageRefs,\n listedPages: pages,\n evaluatedPages,\n });\n\n if (actions.length === 0) {\n return [];\n }\n\n actions.sort((left, right) => {\n const timestampOrder = left.timestamp - right.timestamp;\n if (timestampOrder !== 0) {\n return timestampOrder;\n }\n return actionSortPriority(left.kind) - actionSortPriority(right.kind);\n });\n for (const action of actions) {\n this.actions.push(action);\n if (this.onAction !== undefined) {\n await this.onAction(action);\n }\n }\n return actions;\n }\n\n private async runLoop(): Promise<void> {\n while (!this.loopStopRequested) {\n try {\n await this.pollOnce();\n } catch {}\n if (this.loopStopRequested) {\n break;\n }\n await delay(this.pollIntervalMs);\n }\n }\n\n private async readEvaluatedPages(\n listedPages: readonly {\n readonly pageRef: string;\n readonly url: string;\n readonly openerPageRef?: string;\n }[],\n ): Promise<readonly EvaluatedPageState[]> {\n const pages = await Promise.all(\n listedPages.map(async (page) => {\n const knownPage = this.ensureKnownPage(page.pageRef, page.url, page.openerPageRef);\n const snapshot = await this.readSnapshot(page.pageRef, page.url);\n this.updateKnownPage(page.pageRef, snapshot.url, page.openerPageRef);\n return {\n pageRef: page.pageRef,\n pageId: knownPage.pageId,\n previousUrl: knownPage.currentUrl,\n currentUrl: snapshot.url,\n focused: snapshot.focused || snapshot.visibilityState === \"visible\",\n stopRequested: snapshot.stopRequested,\n events: snapshot.events,\n ...(page.openerPageRef === undefined ? {} : { openerPageRef: page.openerPageRef }),\n ...(knownPage.openerPageId === undefined ? {} : { openerPageId: knownPage.openerPageId }),\n } satisfies EvaluatedPageState;\n }),\n );\n\n return pages;\n }\n\n private async readSnapshot(pageRef: string, fallbackUrl: string): Promise<FlowRecorderSnapshot> {\n const value = await this.runtime.evaluate({\n script: FLOW_RECORDER_DRAIN_SCRIPT,\n pageRef,\n });\n return normalizeSnapshot(value, fallbackUrl);\n }\n\n private normalizePoll(input: {\n readonly pollTimestamp: number;\n readonly previousPageRefs: ReadonlySet<string>;\n readonly listedPages: readonly {\n readonly pageRef: string;\n readonly url: string;\n readonly openerPageRef?: string;\n }[];\n readonly evaluatedPages: readonly EvaluatedPageState[];\n }): RecordedAction[] {\n const listedPageRefs = new Set(input.listedPages.map((page) => page.pageRef));\n const actions: RecordedAction[] = [];\n const firstEventTimestampByPage = new Map<string, number>();\n\n for (const evaluatedPage of input.evaluatedPages) {\n const firstTimestamp = evaluatedPage.events[0]?.timestamp;\n if (firstTimestamp !== undefined) {\n firstEventTimestampByPage.set(evaluatedPage.pageRef, firstTimestamp);\n }\n }\n\n for (const listedPage of input.listedPages) {\n if (!input.previousPageRefs.has(listedPage.pageRef)) {\n const created = this.ensureKnownPage(\n listedPage.pageRef,\n listedPage.url,\n listedPage.openerPageRef,\n );\n actions.push({\n kind: \"new-tab\",\n timestamp: Math.max(\n 0,\n (firstEventTimestampByPage.get(listedPage.pageRef) ?? input.pollTimestamp) - 1,\n ),\n pageId: created.pageId,\n pageUrl: listedPage.url,\n detail: {\n kind: \"new-tab\",\n ...(created.openerPageId === undefined ? {} : { openerPageId: created.openerPageId }),\n initialUrl: listedPage.url,\n },\n });\n }\n }\n\n for (const [pageRef, knownPage] of [...this.pages.entries()]) {\n if (listedPageRefs.has(pageRef)) {\n continue;\n }\n actions.push({\n kind: \"close-tab\",\n timestamp: input.pollTimestamp,\n pageId: knownPage.pageId,\n pageUrl: knownPage.currentUrl,\n detail: {\n kind: \"close-tab\",\n },\n });\n this.pages.delete(pageRef);\n }\n\n for (const evaluatedPage of input.evaluatedPages) {\n const knownPage = this.pages.get(evaluatedPage.pageRef);\n if (!knownPage) {\n continue;\n }\n\n if (\n evaluatedPage.previousUrl !== evaluatedPage.currentUrl &&\n !evaluatedPage.events.some(\n (event) =>\n event.kind === \"navigate\" ||\n event.kind === \"reload\" ||\n event.kind === \"go-back\" ||\n event.kind === \"go-forward\",\n )\n ) {\n actions.push({\n kind: \"navigate\",\n timestamp: Math.max(\n 0,\n (firstEventTimestampByPage.get(evaluatedPage.pageRef) ?? input.pollTimestamp) - 1,\n ),\n pageId: knownPage.pageId,\n pageUrl: evaluatedPage.currentUrl,\n detail: {\n kind: \"navigate\",\n url: evaluatedPage.currentUrl,\n source: \"poll\",\n },\n });\n }\n\n actions.push(\n ...evaluatedPage.events.flatMap((event) =>\n this.normalizeRawEvent(event, knownPage, evaluatedPage.currentUrl),\n ),\n );\n this.updateKnownPage(\n evaluatedPage.pageRef,\n evaluatedPage.currentUrl,\n evaluatedPage.openerPageRef,\n );\n }\n\n const focusedPage = input.evaluatedPages.find((page) => page.focused);\n if (focusedPage !== undefined && focusedPage.pageId !== this.focusedPageId) {\n actions.push({\n kind: \"switch-tab\",\n timestamp: Math.max(\n 0,\n (firstEventTimestampByPage.get(focusedPage.pageRef) ?? input.pollTimestamp) - 1,\n ),\n pageId: focusedPage.pageId,\n pageUrl: focusedPage.currentUrl,\n detail: {\n kind: \"switch-tab\",\n ...(this.focusedPageId === undefined ? {} : { fromPageId: this.focusedPageId }),\n toPageId: focusedPage.pageId,\n },\n });\n this.focusedPageId = focusedPage.pageId;\n }\n\n return dedupeConsecutiveSwitchActions(actions);\n }\n\n private normalizeRawEvent(\n event: RawFlowRecorderEvent,\n page: KnownRecorderPageState,\n currentUrl: string,\n ): RecordedAction[] {\n switch (event.kind) {\n case \"navigate\":\n return [\n {\n kind: \"navigate\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: event.url,\n detail: {\n kind: \"navigate\",\n url: event.url,\n source: event.source,\n },\n },\n ];\n case \"click\":\n return [\n {\n kind: \"click\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n selector: event.selector,\n detail: {\n kind: \"click\",\n button: event.button,\n modifiers: event.modifiers,\n },\n },\n ];\n case \"dblclick\":\n return [\n {\n kind: \"dblclick\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n selector: event.selector,\n detail: {\n kind: \"dblclick\",\n },\n },\n ];\n case \"type\":\n return [\n {\n kind: \"type\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n selector: event.selector,\n detail: {\n kind: \"type\",\n text: event.text,\n },\n },\n ];\n case \"keypress\":\n return [\n {\n kind: \"keypress\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n ...(event.selector === undefined ? {} : { selector: event.selector }),\n detail: {\n kind: \"keypress\",\n key: event.key,\n modifiers: event.modifiers,\n },\n },\n ];\n case \"scroll\":\n return [\n {\n kind: \"scroll\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n ...(event.selector === undefined ? {} : { selector: event.selector }),\n detail: {\n kind: \"scroll\",\n deltaX: event.deltaX,\n deltaY: event.deltaY,\n },\n },\n ];\n case \"select-option\":\n return [\n {\n kind: \"select-option\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: currentUrl,\n selector: event.selector,\n detail: {\n kind: \"select-option\",\n value: event.value,\n ...(event.label === undefined ? {} : { label: event.label }),\n },\n },\n ];\n case \"reload\":\n return [\n {\n kind: \"reload\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: event.url,\n detail: {\n kind: \"reload\",\n url: event.url,\n },\n },\n ];\n case \"go-back\":\n return [\n {\n kind: \"go-back\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: event.url,\n detail: {\n kind: \"go-back\",\n url: event.url,\n },\n },\n ];\n case \"go-forward\":\n return [\n {\n kind: \"go-forward\",\n timestamp: event.timestamp,\n pageId: page.pageId,\n pageUrl: event.url,\n detail: {\n kind: \"go-forward\",\n url: event.url,\n },\n },\n ];\n }\n }\n\n private ensureKnownPage(\n pageRef: string,\n url: string,\n openerPageRef?: string,\n ): KnownRecorderPageState {\n const existing = this.pages.get(pageRef);\n if (existing !== undefined) {\n return existing;\n }\n const openerPageId =\n openerPageRef === undefined ? undefined : this.pages.get(openerPageRef)?.pageId;\n\n const page = {\n pageId: `page${String(this.nextPageOrdinal++)}`,\n pageRef,\n currentUrl: url,\n ...(openerPageRef === undefined ? {} : { openerPageRef }),\n ...(openerPageId === undefined ? {} : { openerPageId }),\n } satisfies KnownRecorderPageState;\n this.pages.set(pageRef, page);\n return page;\n }\n\n private updateKnownPage(pageRef: string, url: string, openerPageRef?: string): void {\n const current = this.pages.get(pageRef);\n if (current === undefined) {\n this.ensureKnownPage(pageRef, url, openerPageRef);\n return;\n }\n const openerPageId =\n openerPageRef === undefined ? undefined : this.pages.get(openerPageRef)?.pageId;\n this.pages.set(pageRef, {\n ...current,\n currentUrl: url,\n ...(openerPageRef === undefined ? {} : { openerPageRef }),\n ...(openerPageId === undefined ? {} : { openerPageId }),\n });\n }\n}\n\nfunction normalizeSnapshot(value: unknown, fallbackUrl: string): FlowRecorderSnapshot {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return {\n url: fallbackUrl,\n focused: false,\n visibilityState: \"hidden\",\n stopRequested: false,\n events: [],\n };\n }\n\n const snapshot = value as Partial<FlowRecorderSnapshot> & {\n readonly visibilityState?: string;\n };\n return {\n url: typeof snapshot.url === \"string\" ? snapshot.url : fallbackUrl,\n focused: snapshot.focused === true,\n visibilityState:\n snapshot.visibilityState === \"visible\" ||\n snapshot.visibilityState === \"prerender\" ||\n snapshot.visibilityState === \"hidden\"\n ? snapshot.visibilityState\n : \"hidden\",\n stopRequested: snapshot.stopRequested === true,\n events: Array.isArray(snapshot.events)\n ? (snapshot.events as readonly RawFlowRecorderEvent[])\n : [],\n };\n}\n\nfunction dedupeConsecutiveSwitchActions(actions: readonly RecordedAction[]): RecordedAction[] {\n const deduped: RecordedAction[] = [];\n for (const action of actions) {\n const previous = deduped[deduped.length - 1];\n if (\n previous?.kind === \"switch-tab\" &&\n action.kind === \"switch-tab\" &&\n previous.pageId === action.pageId\n ) {\n continue;\n }\n deduped.push(action);\n }\n return deduped;\n}\n\nfunction actionSortPriority(kind: RecordedAction[\"kind\"]): number {\n switch (kind) {\n case \"new-tab\":\n return 0;\n case \"switch-tab\":\n return 1;\n case \"navigate\":\n case \"go-back\":\n case \"go-forward\":\n case \"reload\":\n return 2;\n case \"click\":\n case \"dblclick\":\n return 3;\n case \"type\":\n case \"keypress\":\n case \"select-option\":\n return 4;\n case \"scroll\":\n return 5;\n case \"close-tab\":\n return 6;\n }\n}\n\nfunction comparePageIds(left: string, right: string): number {\n const leftMatch = /^page(\\d+)$/u.exec(left);\n const rightMatch = /^page(\\d+)$/u.exec(right);\n if (leftMatch && rightMatch) {\n return Number(leftMatch[1]) - Number(rightMatch[1]);\n }\n return left.localeCompare(right);\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import type {\n CloudReplayTarget,\n CodegenOptions,\n LocalReplayTarget,\n RecordedAction,\n RecorderInitialPageState,\n ReplayTarget,\n} from \"./types.js\";\n\nconst DISPATCH_KEY_SCRIPT = String.raw`(key) => {\n const target = document.activeElement;\n if (!(target instanceof Element)) {\n throw new Error(\"No active element is available for key replay.\");\n }\n const normalizedKey = String(key);\n const eventInit = {\n key: normalizedKey,\n code: normalizedKey,\n bubbles: true,\n cancelable: true,\n };\n target.dispatchEvent(new KeyboardEvent(\"keydown\", eventInit));\n target.dispatchEvent(new KeyboardEvent(\"keyup\", eventInit));\n}`;\n\nconst SELECT_OPTION_SCRIPT = String.raw`(selector, value) => {\n const target = document.querySelector(String(selector));\n if (!(target instanceof HTMLSelectElement)) {\n throw new Error(\"Unable to find a <select> element for option replay.\");\n }\n target.value = String(value);\n target.dispatchEvent(new Event(\"input\", { bubbles: true }));\n target.dispatchEvent(new Event(\"change\", { bubbles: true }));\n}`;\n\nconst HISTORY_ACTION_SCRIPT = String.raw`(action) => {\n const normalized = String(action);\n if (normalized === \"back\") {\n history.back();\n return;\n }\n if (normalized === \"forward\") {\n history.forward();\n return;\n }\n if (normalized === \"reload\") {\n location.reload();\n return;\n }\n throw new Error(\"Unsupported history action: \" + normalized);\n}`;\n\nconst WINDOW_SCROLL_SCRIPT = String.raw`(deltaX, deltaY) => {\n window.scrollBy(Number(deltaX), Number(deltaY));\n}`;\n\nexport function generateReplayScript(options: CodegenOptions): string {\n const replayTarget = resolveReplayTarget(options);\n const initialPages = orderInitialPages(resolveInitialPages(options));\n const activeInitialPageId = resolveActiveInitialPageId(options, initialPages);\n const initialPageId = initialPages[0]?.pageId ?? \"page0\";\n const lines: string[] = [\n `import { Opensteer } from \"opensteer\";`,\n ``,\n ...renderOpensteerBootstrap(replayTarget),\n ``,\n `await opensteer.open(${JSON.stringify(initialPages[0]?.initialUrl ?? \"\")});`,\n `const ${initialPageId} = (await opensteer.listPages()).activePageRef;`,\n `if (!${initialPageId}) {`,\n ` throw new Error(\"Opensteer did not report an active page after open().\");`,\n `}`,\n `let activePageRef: string | undefined = ${initialPageId};`,\n ``,\n `async function ensureActive(pageRef: string): Promise<void> {`,\n ` if (activePageRef === pageRef) {`,\n ` return;`,\n ` }`,\n ` await opensteer.activatePage({ pageRef });`,\n ` activePageRef = pageRef;`,\n `}`,\n ``,\n `async function dispatchKey(pageRef: string, key: string): Promise<void> {`,\n ` await ensureActive(pageRef);`,\n ` await opensteer.evaluate({`,\n ` pageRef,`,\n ` script: ${JSON.stringify(DISPATCH_KEY_SCRIPT)},`,\n ` args: [key],`,\n ` });`,\n `}`,\n ``,\n `async function selectOption(pageRef: string, selector: string, value: string): Promise<void> {`,\n ` await ensureActive(pageRef);`,\n ` await opensteer.evaluate({`,\n ` pageRef,`,\n ` script: ${JSON.stringify(SELECT_OPTION_SCRIPT)},`,\n ` args: [selector, value],`,\n ` });`,\n `}`,\n ``,\n `async function runHistoryAction(pageRef: string, action: \"back\" | \"forward\" | \"reload\"): Promise<void> {`,\n ` await ensureActive(pageRef);`,\n ` await opensteer.evaluate({`,\n ` pageRef,`,\n ` script: ${JSON.stringify(HISTORY_ACTION_SCRIPT)},`,\n ` args: [action],`,\n ` });`,\n `}`,\n ``,\n `try {`,\n ];\n\n const declaredPages = new Set<string>([initialPageId]);\n for (const page of initialPages.slice(1)) {\n const openerPageId =\n page.openerPageId !== undefined && declaredPages.has(page.openerPageId)\n ? page.openerPageId\n : undefined;\n lines.push(\n ` const ${page.pageId} = (await opensteer.newPage(${renderNewPageInput(openerPageId, page.initialUrl)})).pageRef;`,\n );\n lines.push(` activePageRef = ${page.pageId};`);\n declaredPages.add(page.pageId);\n }\n if (activeInitialPageId !== undefined && activeInitialPageId !== initialPageId) {\n lines.push(` await ensureActive(${activeInitialPageId});`);\n }\n for (let index = 0; index < options.actions.length; index += 1) {\n const action = options.actions[index]!;\n const pageVar = action.pageId;\n\n if (action.kind === \"type\") {\n const nextAction = options.actions[index + 1];\n const mergedPressEnter =\n nextAction?.kind === \"keypress\" &&\n nextAction.pageId === action.pageId &&\n nextAction.selector === action.selector &&\n nextAction.detail.kind === \"keypress\" &&\n nextAction.detail.key === \"Enter\" &&\n nextAction.detail.modifiers.length === 0;\n\n lines.push(` await ensureActive(${pageVar});`);\n lines.push(\n ` await opensteer.input({ selector: ${JSON.stringify(requireSelector(action))}, text: ${JSON.stringify(action.detail.text)}${mergedPressEnter ? `, pressEnter: true` : ``} });`,\n );\n if (mergedPressEnter) {\n index += 1;\n }\n continue;\n }\n\n if (\n action.kind === \"switch-tab\" &&\n options.actions[index - 1]?.kind === \"new-tab\" &&\n options.actions[index - 1]?.pageId === action.pageId\n ) {\n continue;\n }\n\n switch (action.kind) {\n case \"navigate\":\n lines.push(` await ensureActive(${pageVar});`);\n lines.push(` await opensteer.goto(${JSON.stringify(action.detail.url)});`);\n break;\n case \"click\":\n lines.push(` await ensureActive(${pageVar});`);\n lines.push(\n ` await opensteer.click({ selector: ${JSON.stringify(requireSelector(action))} });`,\n );\n break;\n case \"dblclick\":\n lines.push(` await ensureActive(${pageVar});`);\n lines.push(\n ` await opensteer.click({ selector: ${JSON.stringify(requireSelector(action))}, clickCount: 2 });`,\n );\n break;\n case \"keypress\":\n lines.push(` await dispatchKey(${pageVar}, ${JSON.stringify(action.detail.key)});`);\n break;\n case \"scroll\": {\n const { direction, amount, isWindowScroll } = normalizeScrollAction(action);\n lines.push(` await ensureActive(${pageVar});`);\n if (isWindowScroll) {\n lines.push(` await opensteer.evaluate({`);\n lines.push(` pageRef: ${pageVar},`);\n lines.push(` script: ${JSON.stringify(WINDOW_SCROLL_SCRIPT)},`);\n lines.push(\n ` args: [${String(action.detail.deltaX)}, ${String(action.detail.deltaY)}],`,\n );\n lines.push(` });`);\n } else {\n lines.push(\n ` await opensteer.scroll({ selector: ${JSON.stringify(requireSelector(action))}, direction: ${JSON.stringify(direction)}, amount: ${String(amount)} });`,\n );\n }\n break;\n }\n case \"select-option\":\n lines.push(\n ` await selectOption(${pageVar}, ${JSON.stringify(requireSelector(action))}, ${JSON.stringify(action.detail.value)});`,\n );\n break;\n case \"new-tab\": {\n const openerPageVar = action.detail.openerPageId;\n const shouldUseWaitForPage = shouldUsePopupWait(options.actions, index, openerPageVar);\n const creationLine =\n shouldUseWaitForPage && openerPageVar !== undefined\n ? ` const ${pageVar} = (await opensteer.waitForPage({ openerPageRef: ${openerPageVar}, timeoutMs: 30_000 })).pageRef;`\n : ` const ${pageVar} = (await opensteer.newPage(${renderNewPageInput(action.detail.openerPageId, action.detail.initialUrl)})).pageRef;`;\n lines.push(creationLine);\n lines.push(` activePageRef = ${pageVar};`);\n declaredPages.add(pageVar);\n break;\n }\n case \"close-tab\":\n lines.push(` await opensteer.closePage({ pageRef: ${pageVar} });`);\n lines.push(` if (activePageRef === ${pageVar}) {`);\n lines.push(` activePageRef = undefined;`);\n lines.push(` }`);\n break;\n case \"switch-tab\":\n lines.push(` await ensureActive(${pageVar});`);\n break;\n case \"go-back\":\n lines.push(` await runHistoryAction(${pageVar}, \"back\");`);\n break;\n case \"go-forward\":\n lines.push(` await runHistoryAction(${pageVar}, \"forward\");`);\n break;\n case \"reload\":\n lines.push(` await runHistoryAction(${pageVar}, \"reload\");`);\n break;\n }\n }\n\n lines.push(`} finally {`);\n lines.push(` await opensteer.close();`);\n lines.push(`}`);\n lines.push(``);\n\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nfunction resolveReplayTarget(options: CodegenOptions): ReplayTarget {\n if (options.replayTarget !== undefined) {\n return options.replayTarget;\n }\n if (options.workspace !== undefined) {\n return {\n kind: \"local\",\n workspace: options.workspace,\n } satisfies LocalReplayTarget;\n }\n throw new Error(\"Replay codegen requires either replayTarget or workspace.\");\n}\n\nfunction resolveInitialPages(options: CodegenOptions): readonly RecorderInitialPageState[] {\n if (options.initialPages !== undefined && options.initialPages.length > 0) {\n const unique = new Set<string>();\n return options.initialPages.map((page) => {\n if (unique.has(page.pageId)) {\n throw new Error(`Duplicate initial page id \"${page.pageId}\" in recording bootstrap.`);\n }\n unique.add(page.pageId);\n return page;\n });\n }\n const startUrl = options.startUrl;\n if (startUrl === undefined) {\n throw new Error(\"Replay codegen requires startUrl when initialPages is not provided.\");\n }\n return [\n {\n pageId: \"page0\",\n initialUrl: startUrl,\n },\n ];\n}\n\nfunction resolveActiveInitialPageId(\n options: CodegenOptions,\n initialPages: readonly RecorderInitialPageState[],\n): string | undefined {\n if (options.activePageId !== undefined) {\n return options.activePageId;\n }\n return initialPages[0]?.pageId;\n}\n\nfunction renderOpensteerBootstrap(replayTarget: ReplayTarget): string[] {\n if (replayTarget.kind === \"local\") {\n return [\n `const opensteer = new Opensteer({`,\n ` workspace: ${JSON.stringify(replayTarget.workspace)},`,\n ` browser: \"persistent\",`,\n `});`,\n ];\n }\n\n return [\n renderRequireEnvHelper(replayTarget),\n ``,\n `const opensteer = new Opensteer({`,\n ` provider: {`,\n ` mode: \"cloud\",`,\n ` apiKey: requireEnv(${JSON.stringify(replayTarget.apiKeyEnvVar ?? \"OPENSTEER_API_KEY\")}),`,\n ...renderCloudBaseUrl(replayTarget),\n ...renderCloudBrowserProfile(replayTarget),\n ` },`,\n `});`,\n ];\n}\n\nfunction renderRequireEnvHelper(replayTarget: CloudReplayTarget): string {\n const apiKeyEnvVar = replayTarget.apiKeyEnvVar ?? \"OPENSTEER_API_KEY\";\n const requiredEnvVars = [\n ...(replayTarget.baseUrlEnvVar === undefined ? [] : [replayTarget.baseUrlEnvVar]),\n apiKeyEnvVar,\n ];\n return [\n `function requireEnv(name: string): string {`,\n ` const value = process.env[name];`,\n ` if (typeof value === \"string\" && value.trim().length > 0) {`,\n ` return value;`,\n ` }`,\n ` throw new Error(\\`Missing environment variable \\${name}. Set ${requiredEnvVars.join(\" and \")} before replaying this recording.\\`);`,\n `}`,\n ].join(\"\\n\");\n}\n\nfunction renderCloudBaseUrl(replayTarget: CloudReplayTarget): string[] {\n if (replayTarget.baseUrlEnvVar === undefined) {\n return [];\n }\n\n return [` baseUrl: requireEnv(${JSON.stringify(replayTarget.baseUrlEnvVar)}),`];\n}\n\nfunction renderCloudBrowserProfile(replayTarget: CloudReplayTarget): string[] {\n if (replayTarget.browserProfileId === undefined) {\n return [];\n }\n return [\n ` browserProfile: {`,\n ` profileId: ${JSON.stringify(replayTarget.browserProfileId)},`,\n ...(replayTarget.reuseBrowserProfileIfActive ? [` reuseIfActive: true,`] : []),\n ` },`,\n ];\n}\n\nfunction orderInitialPages(\n initialPages: readonly RecorderInitialPageState[],\n): RecorderInitialPageState[] {\n const ordered: RecorderInitialPageState[] = [];\n const declared = new Set<string>();\n const remaining = [...initialPages];\n\n while (remaining.length > 0) {\n let advanced = false;\n for (let index = 0; index < remaining.length; index += 1) {\n const page = remaining[index]!;\n if (page.openerPageId !== undefined && !declared.has(page.openerPageId)) {\n continue;\n }\n ordered.push(page);\n declared.add(page.pageId);\n remaining.splice(index, 1);\n advanced = true;\n break;\n }\n\n if (!advanced) {\n ordered.push(...remaining.splice(0, remaining.length));\n }\n }\n\n return ordered;\n}\n\nfunction requireSelector(action: RecordedAction): string {\n if (action.selector === undefined) {\n throw new Error(`Action \"${action.kind}\" on ${action.pageId} is missing a selector.`);\n }\n return action.selector;\n}\n\nfunction normalizeScrollAction(action: Extract<RecordedAction, { readonly kind: \"scroll\" }>): {\n readonly direction: \"up\" | \"down\" | \"left\" | \"right\";\n readonly amount: number;\n readonly isWindowScroll: boolean;\n} {\n const horizontal = Math.abs(action.detail.deltaX);\n const vertical = Math.abs(action.detail.deltaY);\n if (vertical >= horizontal) {\n return {\n direction: action.detail.deltaY < 0 ? \"up\" : \"down\",\n amount: Math.max(1, Math.round(vertical)),\n isWindowScroll: action.selector === undefined,\n };\n }\n return {\n direction: action.detail.deltaX < 0 ? \"left\" : \"right\",\n amount: Math.max(1, Math.round(horizontal)),\n isWindowScroll: action.selector === undefined,\n };\n}\n\nfunction shouldUsePopupWait(\n actions: readonly RecordedAction[],\n newTabIndex: number,\n openerPageId: string | undefined,\n): boolean {\n if (openerPageId === undefined || newTabIndex === 0) {\n return false;\n }\n const previousAction = actions[newTabIndex - 1];\n if (previousAction === undefined || previousAction.pageId !== openerPageId) {\n return false;\n }\n return (\n previousAction.kind === \"click\" ||\n previousAction.kind === \"dblclick\" ||\n previousAction.kind === \"keypress\"\n );\n}\n\nfunction renderNewPageInput(openerPageId: string | undefined, initialUrl: string): string {\n const argumentsList: string[] = [];\n if (openerPageId !== undefined) {\n argumentsList.push(`openerPageRef: ${openerPageId}`);\n }\n if (initialUrl.length > 0 && initialUrl !== \"about:blank\") {\n argumentsList.push(`url: ${JSON.stringify(initialUrl)}`);\n }\n if (argumentsList.length === 0) {\n return `{}`;\n }\n return `{ ${argumentsList.join(\", \")} }`;\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport {\n createRequestEnvelope,\n isErrorEnvelope,\n opensteerSemanticRestEndpoints,\n type OpensteerError,\n type OpensteerSemanticOperationName,\n type OpensteerResponseEnvelope,\n type OpensteerSessionCloseOutput,\n} from \"@opensteer/protocol\";\n\nexport interface OpensteerSemanticRestConnection {\n readonly getBaseUrl: () => Promise<string>;\n readonly getAuthorizationHeader: () => Promise<string>;\n readonly handleError?: (\n error: unknown,\n input: {\n readonly operation: OpensteerSemanticOperationName;\n },\n ) => Promise<boolean>;\n}\n\nexport class OpensteerSemanticRestError extends Error {\n readonly opensteerError: OpensteerError;\n readonly statusCode: number;\n\n constructor(error: OpensteerError, statusCode: number) {\n super(error.message);\n this.name = \"OpensteerSemanticRestError\";\n this.opensteerError = error;\n this.statusCode = statusCode;\n }\n}\n\nexport interface OpensteerSemanticRestInvokeOptions {\n readonly signal?: AbortSignal | undefined;\n readonly timeoutMs?: number | undefined;\n}\n\nexport class OpensteerSemanticRestClient {\n constructor(private readonly connection: OpensteerSemanticRestConnection) {}\n\n async invoke<TInput, TOutput>(\n operation: OpensteerSemanticOperationName,\n input: TInput,\n options: OpensteerSemanticRestInvokeOptions = {},\n ): Promise<TOutput> {\n return this.invokeInternal(operation, input, false, options);\n }\n\n private async invokeInternal<TInput, TOutput>(\n operation: OpensteerSemanticOperationName,\n input: TInput,\n hasRetried: boolean,\n options: OpensteerSemanticRestInvokeOptions,\n ): Promise<TOutput> {\n const endpoint = opensteerSemanticRestEndpoints.find((entry) => entry.name === operation);\n if (!endpoint) {\n throw new Error(`unsupported semantic operation ${operation}`);\n }\n\n const request = createRequestEnvelope(operation, input, {\n requestId: `req:${randomUUID()}`,\n });\n\n let response: Response;\n try {\n response = await fetch(`${await this.connection.getBaseUrl()}${endpoint.path}`, {\n method: \"POST\",\n headers: {\n authorization: await this.connection.getAuthorizationHeader(),\n \"content-type\": \"application/json; charset=utf-8\",\n ...(options.timeoutMs === undefined\n ? {}\n : { \"x-opensteer-timeout-ms\": String(options.timeoutMs) }),\n },\n body: JSON.stringify(request),\n signal: createRequestSignal(options),\n });\n } catch (error) {\n if (operation === \"session.close\" && isFetchFailure(error)) {\n return { closed: true } as TOutput;\n }\n throw error;\n }\n\n try {\n const envelope = (await response.json()) as OpensteerResponseEnvelope<TOutput>;\n if (isErrorEnvelope(envelope)) {\n throw new OpensteerSemanticRestError(envelope.error, response.status);\n }\n return envelope.data;\n } catch (error) {\n if (\n !hasRetried &&\n this.connection.handleError &&\n (await this.connection.handleError(error, { operation }))\n ) {\n return this.invokeInternal(operation, input, true, options);\n }\n if (operation === \"session.close\" && isFetchFailure(error)) {\n return { closed: true } as TOutput;\n }\n throw error;\n }\n }\n\n async closeSession(): Promise<OpensteerSessionCloseOutput> {\n return this.invoke(\"session.close\", {});\n }\n}\n\nfunction createRequestSignal(options: OpensteerSemanticRestInvokeOptions): AbortSignal {\n const timeoutSignal = AbortSignal.timeout(options.timeoutMs ?? 30_000);\n if (options.signal === undefined) {\n return timeoutSignal;\n }\n return AbortSignal.any([options.signal, timeoutSignal]);\n}\n\nfunction isFetchFailure(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n\n return error.name === \"TypeError\" || /fetch failed/i.test(error.message);\n}\n","import { randomUUID } from \"node:crypto\";\n\nimport WebSocket from \"ws\";\nimport { OPENSTEER_RUNTIME_CORE_VERSION } from \"@opensteer/runtime-core\";\n\nimport {\n OPENSTEER_PROTOCOL_NAME,\n OPENSTEER_PROTOCOL_VERSION,\n createOpensteerError,\n type OpensteerAutomationClientMessage,\n type OpensteerAutomationInvokeMessage,\n type OpensteerAutomationServerMessage,\n type OpensteerAutomationOperationName,\n type OpensteerError,\n type OpensteerSessionGrant,\n type OpensteerSessionGrantKind,\n type OpensteerSessionInfo,\n} from \"@opensteer/protocol\";\n\nimport type {\n OpensteerInterceptScriptOptions,\n OpensteerFetchedRouteResponse,\n OpensteerRouteRequest,\n OpensteerRouteOptions,\n OpensteerRouteRegistration,\n} from \"../sdk/instrumentation.js\";\nimport type { OpensteerCloudClient } from \"./client.js\";\n\ninterface PendingInvocation {\n readonly resolve: (value: unknown) => void;\n readonly reject: (error: unknown) => void;\n}\n\ninterface StoredRouteRegistration {\n readonly kind: \"route\" | \"intercept-script\";\n readonly routeId: string;\n readonly input: OpensteerRouteOptions | OpensteerInterceptScriptOptions;\n}\n\nexport class OpensteerCloudAutomationError extends Error {\n readonly opensteerError: OpensteerError;\n\n constructor(error: OpensteerError) {\n super(error.message);\n this.name = \"OpensteerCloudAutomationError\";\n this.opensteerError = error;\n }\n}\n\nexport class OpensteerCloudAutomationClient {\n private socket: WebSocket | undefined;\n private connectPromise: Promise<void> | undefined;\n private readonly pending = new Map<string, PendingInvocation>();\n private readonly routes = new Map<string, StoredRouteRegistration>();\n private grant: OpensteerSessionGrant | undefined;\n\n constructor(\n private readonly cloud: OpensteerCloudClient,\n private readonly sessionId: string,\n ) {}\n\n async invoke<TInput, TOutput>(\n operation: OpensteerAutomationOperationName,\n input: TInput,\n ): Promise<TOutput> {\n await this.ensureConnected();\n const requestId = `automation:${randomUUID()}`;\n const message: OpensteerAutomationInvokeMessage = {\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: OPENSTEER_PROTOCOL_VERSION,\n kind: \"invoke\",\n requestId,\n operation,\n sentAt: Date.now(),\n ...(input === undefined ? {} : { input }),\n };\n\n return new Promise<TOutput>((resolve, reject) => {\n this.pending.set(requestId, {\n resolve: (value) => resolve(value as TOutput),\n reject,\n });\n try {\n this.requireSocket().send(JSON.stringify(message));\n } catch (error) {\n this.pending.delete(requestId);\n reject(error);\n }\n });\n }\n\n async getSessionInfo(): Promise<OpensteerSessionInfo> {\n const result = (await this.invoke(\"session.info\", {})) as {\n readonly provider: OpensteerSessionInfo[\"provider\"];\n readonly workspace?: string;\n readonly sessionId?: string;\n readonly activePageRef?: string;\n readonly reconnectable: boolean;\n readonly capabilities: OpensteerSessionInfo[\"capabilities\"];\n readonly grants?: OpensteerSessionInfo[\"grants\"];\n readonly runtime?: OpensteerSessionInfo[\"runtime\"];\n };\n const sessionInfo = result as OpensteerSessionInfo;\n assertCompatibleRuntimeCoreVersion(sessionInfo);\n return sessionInfo;\n }\n\n async route(input: OpensteerRouteOptions): Promise<OpensteerRouteRegistration> {\n const routeId = `route:${randomUUID()}`;\n const registration = (await this.invoke(\"route.register\", {\n routeId,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n ...(input.resourceTypes === undefined ? {} : { resourceTypes: input.resourceTypes }),\n ...(input.times === undefined ? {} : { times: input.times }),\n includeOriginal: true,\n })) as OpensteerRouteRegistration;\n this.routes.set(routeId, {\n kind: \"route\",\n routeId,\n input,\n });\n return registration;\n }\n\n async interceptScript(\n input: OpensteerInterceptScriptOptions,\n ): Promise<OpensteerRouteRegistration> {\n const routeId = `route:${randomUUID()}`;\n const registration = (await this.invoke(\"route.register\", {\n routeId,\n ...(input.pageRef === undefined ? {} : { pageRef: input.pageRef }),\n urlPattern: input.urlPattern,\n resourceTypes: [\"script\"],\n ...(input.times === undefined ? {} : { times: input.times }),\n includeOriginal: true,\n })) as OpensteerRouteRegistration;\n this.routes.set(routeId, {\n kind: \"intercept-script\",\n routeId,\n input,\n });\n return registration;\n }\n\n async close(): Promise<void> {\n this.connectPromise = undefined;\n this.grant = undefined;\n if (!this.socket) {\n return;\n }\n\n const socket = this.socket;\n this.socket = undefined;\n for (const [requestId, pending] of this.pending) {\n pending.reject(new Error(`automation connection closed before ${requestId} completed`));\n }\n this.pending.clear();\n await new Promise<void>((resolve) => {\n socket.once(\"close\", () => resolve());\n socket.close();\n }).catch(() => undefined);\n }\n\n private async ensureConnected(): Promise<void> {\n if (this.socket?.readyState === WebSocket.OPEN) {\n return;\n }\n if (this.connectPromise) {\n await this.connectPromise;\n return;\n }\n\n this.connectPromise = this.connect();\n try {\n await this.connectPromise;\n } finally {\n this.connectPromise = undefined;\n }\n }\n\n private async connect(): Promise<void> {\n const grant = await this.issueGrant(\"automation\");\n if (grant.transport !== \"ws\") {\n throw new Error(`cloud issued an invalid ${grant.kind} grant transport`);\n }\n const wsUrl = new URL(grant.url);\n wsUrl.searchParams.set(\"token\", grant.token);\n\n const socket = new WebSocket(wsUrl);\n this.socket = socket;\n\n socket.on(\"message\", (data: WebSocket.RawData, isBinary: boolean) => {\n if (isBinary) {\n return;\n }\n this.handleMessage(data.toString());\n });\n socket.on(\"close\", () => {\n if (this.socket === socket) {\n this.socket = undefined;\n }\n });\n socket.on(\"error\", (error: Error) => {\n for (const pending of this.pending.values()) {\n pending.reject(error);\n }\n this.pending.clear();\n });\n\n await new Promise<void>((resolve, reject) => {\n socket.once(\"open\", () => resolve());\n socket.once(\"error\", reject);\n });\n\n this.send({\n protocol: OPENSTEER_PROTOCOL_NAME,\n version: OPENSTEER_PROTOCOL_VERSION,\n kind: \"hello\",\n sessionId: this.sessionId,\n grantKind: grant.kind,\n });\n await this.restoreRoutes();\n }\n\n private async restoreRoutes(): Promise<void> {\n const stored = [...this.routes.values()];\n this.routes.clear();\n\n for (const registration of stored) {\n if (registration.kind === \"route\") {\n await this.route(registration.input as OpensteerRouteOptions);\n } else {\n await this.interceptScript(registration.input as OpensteerInterceptScriptOptions);\n }\n }\n }\n\n private handleMessage(json: string): void {\n const message = JSON.parse(json) as OpensteerAutomationServerMessage;\n if (message.protocol !== OPENSTEER_PROTOCOL_NAME) {\n return;\n }\n\n switch (message.kind) {\n case \"result\": {\n const pending = this.pending.get(message.requestId);\n if (!pending) {\n return;\n }\n this.pending.delete(message.requestId);\n pending.resolve(message.data);\n return;\n }\n case \"error\": {\n if (!message.requestId) {\n return;\n }\n const pending = this.pending.get(message.requestId);\n if (!pending) {\n return;\n }\n this.pending.delete(message.requestId);\n pending.reject(new OpensteerCloudAutomationError(message.error));\n return;\n }\n case \"event\":\n void this.handleEvent(message.event, message.data);\n return;\n case \"pong\":\n return;\n }\n }\n\n private async handleEvent(event: string, payload: unknown): Promise<void> {\n if (event !== \"route.request\") {\n return;\n }\n\n const data = asRecord(payload);\n const request = asRecord(data.request);\n const original = asRecord(data.original);\n const routeId = typeof data.routeId === \"string\" ? data.routeId : \"\";\n const routeRequestId = typeof data.routeRequestId === \"string\" ? data.routeRequestId : \"\";\n if (!routeId || !routeRequestId) {\n return;\n }\n\n const registration = this.routes.get(routeId);\n if (!registration) {\n await this.invoke(\"route.resolve\", {\n routeRequestId,\n decision: { kind: \"continue\" },\n }).catch(() => undefined);\n return;\n }\n\n try {\n const decision =\n registration.kind === \"route\"\n ? await (registration.input as OpensteerRouteOptions).handler({\n request: toRouteRequest(request),\n fetchOriginal: async () => toFetchedRouteResponse(original),\n })\n : {\n kind: \"fulfill\" as const,\n body: await (registration.input as OpensteerInterceptScriptOptions).handler({\n url: typeof request.url === \"string\" ? request.url : \"\",\n content: typeof original.body === \"string\" ? original.body : \"\",\n headers: Array.isArray(original.headers)\n ? original.headers.filter(isHeaderEntry)\n : [],\n status: typeof original.status === \"number\" ? original.status : 200,\n }),\n headers: Array.isArray(original.headers)\n ? original.headers.filter(isHeaderEntry)\n : [],\n status: typeof original.status === \"number\" ? original.status : 200,\n contentType:\n findHeaderValue(\n Array.isArray(original.headers) ? original.headers.filter(isHeaderEntry) : [],\n \"content-type\",\n ) ?? \"application/javascript; charset=utf-8\",\n };\n\n await this.invoke(\"route.resolve\", {\n routeRequestId,\n decision: serializeRouteDecision(decision),\n }).catch(() => undefined);\n } catch {\n await this.invoke(\"route.resolve\", {\n routeRequestId,\n decision: { kind: \"continue\" },\n }).catch(() => undefined);\n }\n }\n\n private async issueGrant(kind: OpensteerSessionGrantKind): Promise<OpensteerSessionGrant> {\n if (this.grant && this.grant.kind === kind && this.grant.expiresAt > Date.now() + 10_000) {\n return this.grant;\n }\n\n const issued = await this.cloud.issueAccess(this.sessionId, [kind]);\n const grant = issued.grants[kind];\n if (!grant) {\n throw new OpensteerCloudAutomationError(\n createOpensteerError(\n \"permission-denied\",\n `cloud did not issue an ${kind} automation grant`,\n ),\n );\n }\n this.grant = grant;\n return grant;\n }\n\n private requireSocket(): WebSocket {\n if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {\n throw new Error(\"cloud automation socket is not connected\");\n }\n return this.socket;\n }\n\n private send(message: OpensteerAutomationClientMessage): void {\n this.requireSocket().send(JSON.stringify(message));\n }\n}\n\nfunction assertCompatibleRuntimeCoreVersion(sessionInfo: OpensteerSessionInfo): void {\n const runtimeCoreVersion = sessionInfo.runtime?.runtimeCoreVersion;\n if (runtimeCoreVersion === undefined) {\n return;\n }\n\n const expectedMajor = parseMajorVersion(OPENSTEER_RUNTIME_CORE_VERSION);\n const actualMajor = parseMajorVersion(runtimeCoreVersion);\n if (expectedMajor === null || actualMajor === null || expectedMajor === actualMajor) {\n return;\n }\n\n throw new Error(\n `cloud runtime-core major version ${runtimeCoreVersion} is incompatible with local SDK runtime-core ${OPENSTEER_RUNTIME_CORE_VERSION}`,\n );\n}\n\nfunction parseMajorVersion(version: string): number | null {\n const major = Number.parseInt(version.split(\".\", 1)[0] ?? \"\", 10);\n return Number.isFinite(major) ? major : null;\n}\n\nfunction serializeRouteDecision(\n decision:\n | { readonly kind: \"continue\" }\n | { readonly kind: \"abort\"; readonly errorCode?: string }\n | {\n readonly kind: \"fulfill\";\n readonly status?: number;\n readonly headers?: readonly { readonly name: string; readonly value: string }[];\n readonly body?: string | Uint8Array;\n readonly contentType?: string;\n },\n): Record<string, unknown> {\n if (decision.kind === \"continue\") {\n return { kind: \"continue\" };\n }\n\n if (decision.kind === \"abort\") {\n return {\n kind: \"abort\",\n ...(decision.errorCode === undefined ? {} : { errorCode: decision.errorCode }),\n };\n }\n\n return {\n kind: \"fulfill\",\n ...(decision.status === undefined ? {} : { status: decision.status }),\n ...(decision.headers === undefined ? {} : { headers: decision.headers }),\n ...(decision.body === undefined\n ? {}\n : typeof decision.body === \"string\"\n ? { body: decision.body }\n : { bodyBase64: Buffer.from(decision.body).toString(\"base64\") }),\n ...(decision.contentType === undefined ? {} : { contentType: decision.contentType }),\n };\n}\n\nfunction toRouteRequest(record: Record<string, unknown>): OpensteerRouteRequest {\n const pageRef =\n typeof record.pageRef === \"string\"\n ? (record.pageRef as OpensteerRouteRequest[\"pageRef\"])\n : undefined;\n return {\n url: typeof record.url === \"string\" ? record.url : \"\",\n method: typeof record.method === \"string\" ? record.method : \"GET\",\n headers: Array.isArray(record.headers) ? record.headers.filter(isHeaderEntry) : [],\n resourceType:\n typeof record.resourceType === \"string\"\n ? (record.resourceType as OpensteerRouteRequest[\"resourceType\"])\n : \"other\",\n ...(pageRef === undefined ? {} : { pageRef }),\n ...(typeof record.postData === \"string\"\n ? {\n postData: {\n bytes: Uint8Array.from(Buffer.from(record.postData)),\n encoding: \"identity\",\n truncated: false,\n capturedByteLength: Buffer.byteLength(record.postData),\n },\n }\n : {}),\n };\n}\n\nfunction toFetchedRouteResponse(record: Record<string, unknown>): OpensteerFetchedRouteResponse {\n return {\n url: typeof record.url === \"string\" ? record.url : \"\",\n status: typeof record.status === \"number\" ? record.status : 200,\n statusText: typeof record.statusText === \"string\" ? record.statusText : \"OK\",\n headers: Array.isArray(record.headers) ? record.headers.filter(isHeaderEntry) : [],\n ...(typeof record.body === \"string\"\n ? {\n body: {\n bytes: Uint8Array.from(Buffer.from(record.body)),\n encoding: \"identity\",\n truncated: false,\n capturedByteLength: Buffer.byteLength(record.body),\n },\n }\n : {}),\n redirected: Boolean(record.redirected),\n };\n}\n\nfunction findHeaderValue(\n headers: readonly { readonly name: string; readonly value: string }[],\n name: string,\n): string | undefined {\n return headers.find((header) => header.name.toLowerCase() === name)?.value;\n}\n\nfunction isHeaderEntry(value: unknown): value is { readonly name: string; readonly value: string } {\n return (\n value !== null &&\n typeof value === \"object\" &&\n typeof (value as { name?: unknown }).name === \"string\" &&\n typeof (value as { value?: unknown }).value === \"string\"\n );\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n return {};\n }\n return value as Record<string, unknown>;\n}\n","import {\n type DescriptorRecord,\n type FilesystemOpensteerWorkspace,\n type RequestPlanRecord,\n} from \"@opensteer/runtime-core\";\nimport type { CloudRegistryImportEntry, CloudRequestPlanImportEntry } from \"@opensteer/protocol\";\n\nimport type { OpensteerCloudClient } from \"./client.js\";\n\nexport const WORKSPACE_SYNC_MAX_PAYLOAD_BYTES = 1_500_000;\nexport const WORKSPACE_SYNC_MAX_ENTRIES_PER_BATCH = 100;\n\ntype WorkspaceSyncClient = Pick<OpensteerCloudClient, \"importDescriptors\" | \"importRequestPlans\">;\n\nexport async function syncLocalWorkspaceToCloud(\n client: WorkspaceSyncClient,\n workspace: string,\n store: FilesystemOpensteerWorkspace,\n): Promise<void> {\n await syncDescriptorRegistryToCloud(client, workspace, store);\n await syncRequestPlansToCloud(client, workspace, store);\n}\n\nasync function syncDescriptorRegistryToCloud(\n client: WorkspaceSyncClient,\n workspace: string,\n store: FilesystemOpensteerWorkspace,\n): Promise<void> {\n const descriptors = await store.registry.descriptors.list();\n const entries = descriptors.map((record) => toDescriptorImportEntry(workspace, record));\n\n await importInBatches(entries, {\n getPayloadByteLength: (batch) => payloadByteLength({ entries: batch }),\n importBatch: (batch) => client.importDescriptors(batch),\n });\n}\n\nasync function syncRequestPlansToCloud(\n client: WorkspaceSyncClient,\n workspace: string,\n store: FilesystemOpensteerWorkspace,\n): Promise<void> {\n const requestPlans = await store.registry.requestPlans.list();\n const entries = requestPlans\n .map((record) => toRequestPlanImportEntry(workspace, record))\n .filter((entry): entry is CloudRequestPlanImportEntry => entry !== undefined);\n\n await importInBatches(entries, {\n getPayloadByteLength: (batch) => payloadByteLength({ entries: batch }),\n importBatch: (batch) => client.importRequestPlans({ entries: batch }),\n });\n}\n\nfunction toRequestPlanImportEntry(\n workspace: string,\n record: RequestPlanRecord,\n): CloudRequestPlanImportEntry | undefined {\n const entry: CloudRequestPlanImportEntry = {\n workspace,\n recordId: record.id,\n key: record.key,\n version: record.version,\n contentHash: record.contentHash,\n tags: [...record.tags],\n ...(record.provenance === undefined ? {} : { provenance: record.provenance }),\n ...(record.freshness === undefined ? {} : { freshness: record.freshness }),\n payload: record.payload,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n };\n return payloadByteLength({ entries: [entry] }) <= WORKSPACE_SYNC_MAX_PAYLOAD_BYTES\n ? entry\n : undefined;\n}\n\nfunction toDescriptorImportEntry(\n workspace: string,\n record: DescriptorRecord,\n): CloudRegistryImportEntry {\n return {\n workspace,\n recordId: record.id,\n key: record.key,\n version: record.version,\n contentHash: record.contentHash,\n tags: [...record.tags],\n ...(record.provenance === undefined ? {} : { provenance: record.provenance }),\n payload: record.payload,\n createdAt: record.createdAt,\n updatedAt: record.updatedAt,\n };\n}\n\nasync function importInBatches<T>(\n entries: readonly T[],\n options: {\n getPayloadByteLength(entries: readonly T[]): number;\n importBatch(entries: readonly T[]): Promise<unknown>;\n },\n): Promise<void> {\n if (entries.length === 0) {\n return;\n }\n\n for (const batch of chunkEntries(entries, options.getPayloadByteLength)) {\n await options.importBatch(batch);\n }\n}\n\nfunction chunkEntries<T>(\n entries: readonly T[],\n getPayloadByteLength: (entries: readonly T[]) => number,\n): readonly (readonly T[])[] {\n const batches: T[][] = [];\n let currentBatch: T[] = [];\n\n for (const entry of entries) {\n if (getPayloadByteLength([entry]) > WORKSPACE_SYNC_MAX_PAYLOAD_BYTES) {\n continue;\n }\n\n if (currentBatch.length === 0) {\n currentBatch = [entry];\n continue;\n }\n\n const nextBatch = [...currentBatch, entry];\n if (\n nextBatch.length > WORKSPACE_SYNC_MAX_ENTRIES_PER_BATCH ||\n getPayloadByteLength(nextBatch) > WORKSPACE_SYNC_MAX_PAYLOAD_BYTES\n ) {\n batches.push(currentBatch);\n currentBatch = [entry];\n continue;\n }\n\n currentBatch = nextBatch;\n }\n\n if (currentBatch.length > 0) {\n batches.push(currentBatch);\n }\n\n return batches;\n}\n\nfunction payloadByteLength(value: unknown): number {\n return Buffer.byteLength(JSON.stringify(value), \"utf8\");\n}\n","import { randomUUID } from \"node:crypto\";\nimport { rm } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport { OPENSTEER_RUNTIME_CORE_VERSION } from \"@opensteer/runtime-core\";\n\nimport type {\n OpensteerArtifactReadInput,\n OpensteerArtifactReadOutput,\n OpensteerAddInitScriptInput,\n OpensteerAddInitScriptOutput,\n OpensteerCaptchaSolveInput,\n OpensteerCaptchaSolveOutput,\n OpensteerComputerExecuteInput,\n OpensteerComputerExecuteOutput,\n OpensteerCaptureScriptsInput,\n OpensteerCaptureScriptsOutput,\n OpensteerDomClickInput,\n OpensteerDomExtractInput,\n OpensteerDomExtractOutput,\n OpensteerDomHoverInput,\n OpensteerDomInputInput,\n OpensteerDomScrollInput,\n OpensteerNetworkDetailInput,\n OpensteerNetworkQueryInput,\n OpensteerNetworkQueryOutput,\n OpensteerNetworkDetailOutput,\n OpensteerInteractionCaptureInput,\n OpensteerInteractionCaptureOutput,\n OpensteerInteractionDiffInput,\n OpensteerInteractionDiffOutput,\n OpensteerInteractionGetInput,\n OpensteerInteractionGetOutput,\n OpensteerInteractionReplayInput,\n OpensteerInteractionReplayOutput,\n OpensteerOpenInput,\n OpensteerOpenOutput,\n OpensteerPageActivateInput,\n OpensteerPageActivateOutput,\n OpensteerPageCloseInput,\n OpensteerPageCloseOutput,\n OpensteerPageEvaluateInput,\n OpensteerPageEvaluateOutput,\n OpensteerPageGotoInput,\n OpensteerPageGotoOutput,\n OpensteerPageListInput,\n OpensteerPageListOutput,\n OpensteerPageNewInput,\n OpensteerPageNewOutput,\n OpensteerPageSnapshotInput,\n OpensteerPageSnapshotOutput,\n OpensteerSessionInfo,\n OpensteerSessionFetchInput,\n OpensteerSessionFetchOutput,\n OpensteerScriptBeautifyInput,\n OpensteerScriptBeautifyOutput,\n OpensteerScriptDeobfuscateInput,\n OpensteerScriptDeobfuscateOutput,\n OpensteerScriptSandboxInput,\n OpensteerScriptSandboxOutput,\n OpensteerSessionCloseOutput,\n OpensteerActionResult,\n OpensteerCookieQueryInput,\n OpensteerCookieQueryOutput,\n OpensteerSessionGrant,\n OpensteerSemanticOperationName,\n OpensteerStateQueryInput,\n OpensteerStateQueryOutput,\n OpensteerStorageQueryInput,\n OpensteerStorageQueryOutput,\n ObservabilityConfig,\n} from \"@opensteer/protocol\";\nimport {\n OPENSTEER_PROTOCOL_VERSION,\n opensteerExposedSemanticOperationNames,\n} from \"@opensteer/protocol\";\nimport type { CloudBrowserProfilePreference } from \"@opensteer/protocol\";\nimport {\n clearPersistedSessionRecord,\n readPersistedCloudSessionRecord,\n resolveCloudSessionRecordPath,\n writePersistedSessionRecord,\n type PersistedCloudSessionRecord,\n} from \"../live-session.js\";\nimport {\n createFilesystemOpensteerWorkspace,\n resolveFilesystemWorkspacePath,\n type FilesystemOpensteerWorkspace,\n} from \"../root.js\";\nimport {\n defaultPolicy,\n runWithPolicyTimeout,\n type OpensteerPolicy,\n type TimeoutExecutionContext,\n} from \"../policy/index.js\";\nimport type {\n OpensteerInterceptScriptOptions,\n OpensteerRouteOptions,\n OpensteerRouteRegistration,\n} from \"../sdk/instrumentation.js\";\nimport {\n OpensteerSemanticRestClient,\n OpensteerSemanticRestError,\n} from \"../sdk/semantic-rest-client.js\";\nimport type { OpensteerDisconnectableRuntime } from \"../sdk/semantic-runtime.js\";\nimport { OpensteerCloudAutomationClient } from \"./automation-client.js\";\nimport type { OpensteerCloudSessionCreateInput, OpensteerCloudSessionState } from \"./client.js\";\nimport { OpensteerCloudClient, OpensteerCloudRequestError } from \"./client.js\";\nimport { syncLocalWorkspaceToCloud } from \"./workspace-sync.js\";\n\nconst TEMPORARY_CLOUD_WORKSPACE_PREFIX = \"opensteer-cloud-workspace-\";\nconst CLOUD_SESSION_REUSE_EXPIRY_SKEW_MS = 10_000;\n\nexport interface CloudSessionProxyOptions {\n readonly rootDir?: string;\n readonly rootPath?: string;\n readonly workspace?: string;\n readonly policy?: OpensteerPolicy;\n readonly cleanupRootOnClose?: boolean;\n readonly observability?: Partial<ObservabilityConfig>;\n}\n\ninterface CloudSessionInitInput {\n readonly browser?: OpensteerOpenInput[\"browser\"];\n readonly launch?: OpensteerOpenInput[\"launch\"];\n readonly context?: OpensteerOpenInput[\"context\"];\n readonly browserProfile?: CloudBrowserProfilePreference;\n}\n\ntype CloudBootstrapRecoveryOperation =\n | \"session.open\"\n | \"instrumentation.route\"\n | \"instrumentation.intercept-script\";\n\ntype StoredCloudInstrumentation =\n | {\n readonly kind: \"route\";\n readonly input: OpensteerRouteOptions;\n }\n | {\n readonly kind: \"intercept-script\";\n readonly input: OpensteerInterceptScriptOptions;\n };\n\nexport { readPersistedCloudSessionRecord, resolveCloudSessionRecordPath };\nexport type { PersistedCloudSessionRecord };\n\nexport class CloudSessionProxy implements OpensteerDisconnectableRuntime {\n readonly rootPath: string;\n readonly workspace: string | undefined;\n\n private readonly cleanupRootOnClose: boolean;\n private readonly cloud: OpensteerCloudClient;\n private readonly observability: Partial<ObservabilityConfig> | undefined;\n private readonly policy: OpensteerPolicy;\n private sessionId: string | undefined;\n private semanticGrant: OpensteerSessionGrant | undefined;\n private client: OpensteerSemanticRestClient | undefined;\n private automation: OpensteerCloudAutomationClient | undefined;\n private workspaceStore: FilesystemOpensteerWorkspace | undefined;\n private syncWorkspaceOnClose = false;\n private liveSessionStateEstablished = false;\n private readonly storedInstrumentation: StoredCloudInstrumentation[] = [];\n\n constructor(cloud: OpensteerCloudClient, options: CloudSessionProxyOptions = {}) {\n this.cloud = cloud;\n this.workspace = options.workspace;\n this.policy = options.policy ?? defaultPolicy();\n this.observability = options.observability;\n this.rootPath =\n options.rootPath ??\n (this.workspace === undefined\n ? path.join(tmpdir(), `${TEMPORARY_CLOUD_WORKSPACE_PREFIX}${randomUUID()}`)\n : resolveFilesystemWorkspacePath({\n rootDir: path.resolve(options.rootDir ?? process.cwd()),\n workspace: this.workspace,\n }));\n this.cleanupRootOnClose = options.cleanupRootOnClose ?? this.workspace === undefined;\n }\n\n async open(input: OpensteerOpenInput = {}): Promise<OpensteerOpenOutput> {\n return this.invokeSemanticOperation(\n \"session.open\",\n {\n ...(input.url === undefined ? {} : { url: input.url }),\n },\n {\n ...(input.browser === undefined ? {} : { browser: input.browser }),\n ...(input.launch === undefined ? {} : { launch: input.launch }),\n ...(input.context === undefined ? {} : { context: input.context }),\n },\n );\n }\n\n async info(): Promise<OpensteerSessionInfo> {\n const persisted =\n this.client !== undefined || this.sessionId !== undefined\n ? undefined\n : await this.loadPersistedSession();\n\n if (\n this.client === undefined &&\n this.sessionId === undefined &&\n persisted !== undefined &&\n (await this.isReusableCloudSession(persisted.sessionId))\n ) {\n this.bindClient(persisted);\n }\n\n const sessionInfo = this.automation\n ? await this.automation.getSessionInfo().catch(() => undefined)\n : undefined;\n if (sessionInfo !== undefined) {\n return {\n ...sessionInfo,\n ...(this.workspace === undefined ? {} : { workspace: this.workspace }),\n };\n }\n\n return {\n provider: {\n mode: \"cloud\",\n ownership: \"managed\",\n engine: \"playwright\",\n baseUrl: this.cloud.getConfig().baseUrl,\n },\n ...(this.workspace === undefined ? {} : { workspace: this.workspace }),\n ...(this.sessionId === undefined\n ? persisted?.sessionId === undefined\n ? {}\n : { sessionId: persisted.sessionId }\n : { sessionId: this.sessionId }),\n reconnectable:\n this.workspace !== undefined || this.sessionId !== undefined || persisted !== undefined,\n capabilities: {\n semanticOperations: opensteerExposedSemanticOperationNames,\n sessionGrants: [\"semantic\", \"automation\", \"view\", \"cdp\"],\n instrumentation: {\n route: true,\n interceptScript: true,\n networkStream: true,\n },\n },\n runtime: {\n protocolVersion: OPENSTEER_PROTOCOL_VERSION,\n runtimeCoreVersion: OPENSTEER_RUNTIME_CORE_VERSION,\n },\n };\n }\n\n async listPages(input: OpensteerPageListInput = {}): Promise<OpensteerPageListOutput> {\n return this.invokeSemanticOperation(\"page.list\", input);\n }\n\n async newPage(input: OpensteerPageNewInput = {}): Promise<OpensteerPageNewOutput> {\n return this.invokeAutomationOperation(\"page.new\", (automation) =>\n automation.invoke(\"page.new\", input),\n );\n }\n\n async activatePage(input: OpensteerPageActivateInput): Promise<OpensteerPageActivateOutput> {\n return this.invokeSemanticOperation(\"page.activate\", input);\n }\n\n async closePage(input: OpensteerPageCloseInput = {}): Promise<OpensteerPageCloseOutput> {\n return this.invokeSemanticOperation(\"page.close\", input);\n }\n\n async goto(input: OpensteerPageGotoInput): Promise<OpensteerPageGotoOutput> {\n return this.invokeSemanticOperation(\"page.goto\", input);\n }\n\n async evaluate(input: OpensteerPageEvaluateInput): Promise<OpensteerPageEvaluateOutput> {\n return this.invokeAutomationOperation(\"page.evaluate\", (automation) =>\n automation.invoke(\"page.evaluate\", input),\n );\n }\n\n async addInitScript(input: OpensteerAddInitScriptInput): Promise<OpensteerAddInitScriptOutput> {\n return this.invokeSemanticOperation(\"page.add-init-script\", input);\n }\n\n async snapshot(input: OpensteerPageSnapshotInput = {}): Promise<OpensteerPageSnapshotOutput> {\n return this.invokeSemanticOperation(\"page.snapshot\", input);\n }\n\n async click(input: OpensteerDomClickInput): Promise<OpensteerActionResult> {\n return this.invokeSemanticOperation(\"dom.click\", input);\n }\n\n async hover(input: OpensteerDomHoverInput): Promise<OpensteerActionResult> {\n return this.invokeSemanticOperation(\"dom.hover\", input);\n }\n\n async input(input: OpensteerDomInputInput): Promise<OpensteerActionResult> {\n return this.invokeSemanticOperation(\"dom.input\", input);\n }\n\n async scroll(input: OpensteerDomScrollInput): Promise<OpensteerActionResult> {\n return this.invokeSemanticOperation(\"dom.scroll\", input);\n }\n\n async extract(input: OpensteerDomExtractInput): Promise<OpensteerDomExtractOutput> {\n return this.invokeSemanticOperation(\"dom.extract\", input);\n }\n\n async queryNetwork(input: OpensteerNetworkQueryInput = {}): Promise<OpensteerNetworkQueryOutput> {\n return this.invokeSemanticOperation(\"network.query\", input);\n }\n\n async getNetworkDetail(\n input: OpensteerNetworkDetailInput,\n ): Promise<OpensteerNetworkDetailOutput> {\n return this.invokeSemanticOperation(\"network.detail\", input);\n }\n\n async captureInteraction(\n input: OpensteerInteractionCaptureInput,\n ): Promise<OpensteerInteractionCaptureOutput> {\n return this.invokeSemanticOperation(\"interaction.capture\", input);\n }\n\n async getInteraction(\n input: OpensteerInteractionGetInput,\n ): Promise<OpensteerInteractionGetOutput> {\n return this.invokeSemanticOperation(\"interaction.get\", input);\n }\n\n async diffInteraction(\n input: OpensteerInteractionDiffInput,\n ): Promise<OpensteerInteractionDiffOutput> {\n return this.invokeSemanticOperation(\"interaction.diff\", input);\n }\n\n async replayInteraction(\n input: OpensteerInteractionReplayInput,\n ): Promise<OpensteerInteractionReplayOutput> {\n return this.invokeSemanticOperation(\"interaction.replay\", input);\n }\n\n async captureScripts(\n input: OpensteerCaptureScriptsInput = {},\n ): Promise<OpensteerCaptureScriptsOutput> {\n return this.invokeSemanticOperation(\"scripts.capture\", input);\n }\n\n async readArtifact(input: OpensteerArtifactReadInput): Promise<OpensteerArtifactReadOutput> {\n return this.invokeSemanticOperation(\"artifact.read\", input);\n }\n\n async beautifyScript(\n input: OpensteerScriptBeautifyInput,\n ): Promise<OpensteerScriptBeautifyOutput> {\n return this.invokeSemanticOperation(\"scripts.beautify\", input);\n }\n\n async deobfuscateScript(\n input: OpensteerScriptDeobfuscateInput,\n ): Promise<OpensteerScriptDeobfuscateOutput> {\n return this.invokeSemanticOperation(\"scripts.deobfuscate\", input);\n }\n\n async sandboxScript(input: OpensteerScriptSandboxInput): Promise<OpensteerScriptSandboxOutput> {\n return this.invokeSemanticOperation(\"scripts.sandbox\", input);\n }\n\n async solveCaptcha(input: OpensteerCaptchaSolveInput): Promise<OpensteerCaptchaSolveOutput> {\n return this.invokeSemanticOperation(\"captcha.solve\", input);\n }\n\n async getCookies(input: OpensteerCookieQueryInput = {}): Promise<OpensteerCookieQueryOutput> {\n return this.invokeSemanticOperation(\"session.cookies\", input);\n }\n\n async route(input: OpensteerRouteOptions): Promise<OpensteerRouteRegistration> {\n const registration = await this.invokeBootstrapInstrumentationOperation(\n \"instrumentation.route\",\n (automation) => automation.route(input),\n );\n this.storedInstrumentation.push({\n kind: \"route\",\n input,\n });\n return registration;\n }\n\n async interceptScript(\n input: OpensteerInterceptScriptOptions,\n ): Promise<OpensteerRouteRegistration> {\n const registration = await this.invokeBootstrapInstrumentationOperation(\n \"instrumentation.intercept-script\",\n (automation) => automation.interceptScript(input),\n );\n this.storedInstrumentation.push({\n kind: \"intercept-script\",\n input,\n });\n return registration;\n }\n\n async getStorageSnapshot(\n input: OpensteerStorageQueryInput = {},\n ): Promise<OpensteerStorageQueryOutput> {\n return this.invokeSemanticOperation(\"session.storage\", input);\n }\n\n async getBrowserState(input: OpensteerStateQueryInput = {}): Promise<OpensteerStateQueryOutput> {\n return this.invokeSemanticOperation(\"session.state\", input);\n }\n\n async fetch(input: OpensteerSessionFetchInput): Promise<OpensteerSessionFetchOutput> {\n return this.invokeSemanticOperation(\"session.fetch\", input);\n }\n\n async computerExecute(\n input: OpensteerComputerExecuteInput,\n ): Promise<OpensteerComputerExecuteOutput> {\n return this.invokeSemanticOperation(\"computer.execute\", input);\n }\n\n async close(): Promise<OpensteerSessionCloseOutput> {\n const session =\n (await this.loadPersistedSession()) ??\n (this.sessionId === undefined\n ? undefined\n : {\n layout: \"opensteer-session\" as const,\n version: 1 as const,\n provider: \"cloud\" as const,\n ...(this.workspace === undefined ? {} : { workspace: this.workspace }),\n sessionId: this.sessionId,\n startedAt: Date.now(),\n updatedAt: Date.now(),\n });\n\n let syncError: unknown;\n if (this.syncWorkspaceOnClose) {\n try {\n await this.syncWorkspaceToCloud();\n } catch (error) {\n syncError = error;\n }\n }\n\n try {\n if (session !== undefined) {\n await this.cloud.closeSession(session.sessionId).catch((error) => {\n if (isMissingCloudSessionError(error)) {\n return;\n }\n throw error;\n });\n }\n } finally {\n await this.automation?.close().catch(() => undefined);\n await this.clearPersistedSession();\n this.automation = undefined;\n this.client = undefined;\n this.sessionId = undefined;\n this.semanticGrant = undefined;\n this.liveSessionStateEstablished = false;\n this.storedInstrumentation.length = 0;\n if (this.cleanupRootOnClose) {\n await rm(this.rootPath, { recursive: true, force: true }).catch(() => undefined);\n }\n }\n\n if (syncError !== undefined) {\n throw syncError;\n }\n\n return { closed: true };\n }\n\n async disconnect(): Promise<void> {\n if (this.cleanupRootOnClose) {\n await this.close();\n return;\n }\n\n let syncError: unknown;\n if (this.syncWorkspaceOnClose) {\n try {\n await this.syncWorkspaceToCloud();\n } catch (error) {\n syncError = error;\n }\n }\n\n this.client = undefined;\n await this.automation?.close().catch(() => undefined);\n this.automation = undefined;\n this.sessionId = undefined;\n this.semanticGrant = undefined;\n this.liveSessionStateEstablished = false;\n this.storedInstrumentation.length = 0;\n\n if (syncError !== undefined) {\n throw syncError;\n }\n }\n\n private async ensureSession(\n input: CloudSessionInitInput = {},\n timeout?: TimeoutExecutionContext,\n ): Promise<void> {\n if (this.client) {\n return;\n }\n\n assertSupportedCloudBrowserMode(input.browser);\n const localCloud = this.shouldUseLocalCloudTransport();\n this.syncWorkspaceOnClose = localCloud && this.workspace !== undefined;\n const browserProfile = resolveCloudBrowserProfile(this.cloud, input);\n\n const persisted = await this.loadPersistedSession();\n if (\n persisted !== undefined &&\n (await this.isReusableCloudSession(persisted.sessionId, timeout))\n ) {\n await this.syncWorkspaceToCloud();\n this.bindClient(persisted);\n return;\n }\n\n await this.syncWorkspaceToCloud();\n\n const baseCreateInput: OpensteerCloudSessionCreateInput = {\n ...(this.workspace === undefined ? {} : { name: this.workspace }),\n ...(input.launch === undefined ? {} : { browser: input.launch }),\n ...(input.context === undefined ? {} : { context: input.context }),\n ...(this.observability === undefined ? {} : { observability: this.observability }),\n ...(browserProfile === undefined ? {} : { browserProfile }),\n };\n const createInput: OpensteerCloudSessionCreateInput =\n localCloud && this.workspace !== undefined\n ? {\n ...baseCreateInput,\n sourceType: \"local-cloud\",\n sourceRef: this.workspace,\n localWorkspaceRootPath: this.rootPath,\n }\n : baseCreateInput;\n const session = await this.cloud.createSession(createInput, {\n signal: timeout?.signal,\n timeoutMs: timeout?.remainingMs(),\n });\n const record: PersistedCloudSessionRecord = {\n layout: \"opensteer-session\",\n version: 1,\n provider: \"cloud\",\n ...(this.workspace === undefined ? {} : { workspace: this.workspace }),\n sessionId: session.sessionId,\n startedAt: Date.now(),\n updatedAt: Date.now(),\n };\n await this.writePersistedSession(record);\n this.bindClient(record, session.initialGrants?.semantic);\n await this.restoreStoredInstrumentation();\n }\n\n private async syncWorkspaceToCloud(): Promise<void> {\n if (this.workspace === undefined) {\n return;\n }\n\n const workspaceStore = await this.ensureWorkspaceStore();\n await syncLocalWorkspaceToCloud(this.cloud, this.workspace, workspaceStore);\n }\n\n private bindClient(\n record: Pick<PersistedCloudSessionRecord, \"sessionId\">,\n initialSemanticGrant?: OpensteerSessionGrant,\n ): void {\n this.sessionId = record.sessionId;\n this.semanticGrant =\n initialSemanticGrant?.kind === \"semantic\" ? initialSemanticGrant : undefined;\n this.liveSessionStateEstablished = false;\n this.client = new OpensteerSemanticRestClient({\n getBaseUrl: async () => (await this.ensureSemanticGrant()).url,\n getAuthorizationHeader: async () => `Bearer ${(await this.ensureSemanticGrant()).token}`,\n handleError: (error) => this.handleSemanticClientError(error),\n });\n this.automation = new OpensteerCloudAutomationClient(this.cloud, record.sessionId);\n }\n\n private async restoreStoredInstrumentation(): Promise<void> {\n if (this.storedInstrumentation.length === 0) {\n return;\n }\n\n const automation = this.requireAutomation();\n for (const registration of this.storedInstrumentation) {\n if (registration.kind === \"route\") {\n await automation.route(registration.input);\n } else {\n await automation.interceptScript(registration.input);\n }\n }\n }\n\n private async ensureWorkspaceStore(): Promise<FilesystemOpensteerWorkspace> {\n if (this.workspaceStore !== undefined) {\n return this.workspaceStore;\n }\n\n this.workspaceStore = await createFilesystemOpensteerWorkspace({\n rootPath: this.rootPath,\n ...(this.workspace === undefined ? {} : { workspace: this.workspace }),\n scope: this.workspace === undefined ? \"temporary\" : \"workspace\",\n });\n return this.workspaceStore;\n }\n\n private async loadPersistedSession(): Promise<PersistedCloudSessionRecord | undefined> {\n const workspace = await this.ensureWorkspaceStore();\n return readPersistedCloudSessionRecord(workspace.rootPath);\n }\n\n private async writePersistedSession(record: PersistedCloudSessionRecord): Promise<void> {\n const workspace = await this.ensureWorkspaceStore();\n await writePersistedSessionRecord(workspace.rootPath, record);\n }\n\n private async clearPersistedSession(): Promise<void> {\n await clearPersistedSessionRecord(this.rootPath, \"cloud\").catch(() => undefined);\n }\n\n private async invalidateSession(): Promise<void> {\n await this.automation?.close().catch(() => undefined);\n this.automation = undefined;\n this.client = undefined;\n this.sessionId = undefined;\n this.semanticGrant = undefined;\n this.liveSessionStateEstablished = false;\n await this.clearPersistedSession();\n }\n\n private async isReusableCloudSession(\n sessionId: string,\n timeout?: TimeoutExecutionContext,\n ): Promise<boolean> {\n try {\n const session = await this.cloud.getSession(sessionId, {\n signal: timeout?.signal,\n timeoutMs: timeout?.remainingMs(),\n });\n return isReusableCloudSessionState(session);\n } catch (error) {\n if (isMissingCloudSessionError(error)) {\n return false;\n }\n throw error;\n }\n }\n\n private requireClient(): OpensteerSemanticRestClient {\n if (!this.client) {\n throw new Error(\"Cloud session has not been initialized.\");\n }\n return this.client;\n }\n\n private requireAutomation(): OpensteerCloudAutomationClient {\n if (!this.automation) {\n throw new Error(\"Cloud automation session has not been initialized.\");\n }\n return this.automation;\n }\n\n private async ensureSemanticGrant(\n forceRefresh = false,\n timeout?: TimeoutExecutionContext,\n ): Promise<OpensteerSessionGrant> {\n if (\n !forceRefresh &&\n this.semanticGrant?.kind === \"semantic\" &&\n this.semanticGrant.expiresAt > Date.now() + 10_000\n ) {\n return this.semanticGrant;\n }\n\n if (!this.sessionId) {\n throw new Error(\"Cloud session has not been initialized.\");\n }\n\n const issued = await this.cloud.issueAccess(this.sessionId, [\"semantic\"], {\n signal: timeout?.signal,\n timeoutMs: timeout?.remainingMs(),\n });\n const grant = issued.grants.semantic;\n if (!grant || grant.transport !== \"http\") {\n throw new Error(\"cloud did not issue a valid semantic grant\");\n }\n\n this.semanticGrant = grant;\n return grant;\n }\n\n private async handleSemanticClientError(error: unknown): Promise<boolean> {\n if (!(error instanceof OpensteerSemanticRestError)) {\n return false;\n }\n\n if (error.statusCode !== 401 && error.statusCode !== 404) {\n return false;\n }\n\n this.semanticGrant = undefined;\n try {\n await this.ensureSemanticGrant(true);\n return true;\n } catch (refreshError) {\n if (await this.resetStaleSession(refreshError)) {\n throw refreshError;\n }\n return false;\n }\n }\n\n private async invokeSemanticOperation<TInput, TOutput>(\n operation: OpensteerSemanticOperationName,\n input: TInput,\n sessionInit: CloudSessionInitInput = {},\n ): Promise<TOutput> {\n return this.runOperationWithSessionRecovery<TOutput>(operation, async (timeout) => {\n await this.ensureSession(sessionInit, timeout);\n await this.ensureSemanticGrant(false, timeout);\n const output = await this.requireClient().invoke<TInput, TOutput>(operation, input, {\n signal: timeout.signal,\n timeoutMs: timeout.remainingMs(),\n });\n this.noteSuccessfulLiveOperation(operation);\n return output;\n });\n }\n\n private async invokeAutomationOperation<TOutput>(\n operation: OpensteerSemanticOperationName,\n invoke: (automation: OpensteerCloudAutomationClient) => Promise<TOutput>,\n sessionInit: CloudSessionInitInput = {},\n ): Promise<TOutput> {\n return this.runOperationWithSessionRecovery<TOutput>(operation, async (timeout) => {\n await this.ensureSession(sessionInit, timeout);\n const output = await invoke(this.requireAutomation());\n this.noteSuccessfulLiveOperation(operation);\n return output;\n });\n }\n\n private async invokeBootstrapInstrumentationOperation<TOutput>(\n operation: Exclude<CloudBootstrapRecoveryOperation, \"session.open\">,\n invoke: (automation: OpensteerCloudAutomationClient) => Promise<TOutput>,\n ): Promise<TOutput> {\n let recovered = false;\n while (true) {\n try {\n await this.ensureSession();\n return await invoke(this.requireAutomation());\n } catch (error) {\n const stale = await this.resetStaleSession(error);\n if (!stale || recovered || !this.canRecoverWithFreshSession(operation)) {\n throw error;\n }\n recovered = true;\n }\n }\n }\n\n private async runOperationWithSessionRecovery<T>(\n operation: OpensteerSemanticOperationName,\n invoke: (timeout: TimeoutExecutionContext) => Promise<T>,\n ): Promise<T> {\n return this.runOperationWithPolicy(operation, async (timeout) => {\n let recovered = false;\n while (true) {\n try {\n return await invoke(timeout);\n } catch (error) {\n const stale = await this.resetStaleSession(error);\n if (!stale || recovered || !this.canRecoverWithFreshSession(operation)) {\n throw error;\n }\n recovered = true;\n }\n }\n });\n }\n\n private async resetStaleSession(error: unknown): Promise<boolean> {\n if (!isRecoverableCloudSessionError(error)) {\n return false;\n }\n await this.invalidateSession();\n return true;\n }\n\n private canRecoverWithFreshSession(\n operation:\n | OpensteerSemanticOperationName\n | Exclude<CloudBootstrapRecoveryOperation, \"session.open\">,\n ): boolean {\n return !this.liveSessionStateEstablished && isBootstrapRecoveryOperation(operation);\n }\n\n private noteSuccessfulLiveOperation(operation: OpensteerSemanticOperationName): void {\n if (\n operation === \"session.open\" ||\n operation === \"page.list\" ||\n operation === \"page.new\" ||\n operation === \"page.activate\" ||\n operation === \"page.close\" ||\n operation === \"page.goto\" ||\n operation === \"page.evaluate\" ||\n operation === \"page.add-init-script\" ||\n operation === \"page.snapshot\" ||\n operation === \"dom.click\" ||\n operation === \"dom.hover\" ||\n operation === \"dom.input\" ||\n operation === \"dom.scroll\" ||\n operation === \"dom.extract\" ||\n operation === \"network.query\" ||\n operation === \"network.detail\" ||\n operation === \"interaction.capture\" ||\n operation === \"interaction.get\" ||\n operation === \"interaction.diff\" ||\n operation === \"interaction.replay\" ||\n operation === \"scripts.capture\" ||\n operation === \"artifact.read\" ||\n operation === \"scripts.beautify\" ||\n operation === \"scripts.deobfuscate\" ||\n operation === \"scripts.sandbox\" ||\n operation === \"captcha.solve\" ||\n operation === \"session.cookies\" ||\n operation === \"session.storage\" ||\n operation === \"session.state\" ||\n operation === \"session.fetch\" ||\n operation === \"computer.execute\"\n ) {\n this.liveSessionStateEstablished = true;\n }\n }\n\n private async runOperationWithPolicy<T>(\n operation: OpensteerSemanticOperationName,\n invoke: (timeout: TimeoutExecutionContext) => Promise<T>,\n ): Promise<T> {\n return runWithPolicyTimeout(this.policy.timeout, { operation }, invoke);\n }\n\n private shouldUseLocalCloudTransport(): boolean {\n if (this.workspace === undefined) {\n return false;\n }\n\n const config = this.cloud.getConfig();\n return isLoopbackBaseUrl(config.baseUrl);\n }\n}\n\nfunction resolveCloudBrowserProfile(\n cloud: OpensteerCloudClient,\n input: CloudSessionInitInput,\n): CloudBrowserProfilePreference | undefined {\n return input.browserProfile ?? cloud.getConfig().browserProfile;\n}\n\nfunction assertSupportedCloudBrowserMode(browser: OpensteerOpenInput[\"browser\"] | undefined): void {\n if (browser === undefined || browser === \"temporary\" || browser === \"persistent\") {\n return;\n }\n\n if (typeof browser === \"object\" && browser.mode === \"attach\") {\n throw new Error('Cloud mode does not support browser.mode=\"attach\".');\n }\n}\n\nfunction isMissingCloudSessionError(error: unknown): boolean {\n if (error instanceof OpensteerCloudRequestError) {\n return (\n error.statusCode === 404 &&\n (error.code === undefined || error.code === \"CLOUD_SESSION_NOT_FOUND\")\n );\n }\n return error instanceof Error && /\\b404\\b/.test(error.message);\n}\n\nfunction isRecoverableCloudSessionError(error: unknown): boolean {\n if (!(error instanceof OpensteerCloudRequestError)) {\n return false;\n }\n\n if (error.statusCode === 404) {\n return error.code === undefined || error.code === \"CLOUD_SESSION_NOT_FOUND\";\n }\n\n return error.statusCode === 409 && error.code === \"CLOUD_SESSION_STALE\";\n}\n\nfunction isBootstrapRecoveryOperation(\n operation:\n | OpensteerSemanticOperationName\n | Exclude<CloudBootstrapRecoveryOperation, \"session.open\">,\n): operation is CloudBootstrapRecoveryOperation {\n return (\n operation === \"session.open\" ||\n operation === \"instrumentation.route\" ||\n operation === \"instrumentation.intercept-script\"\n );\n}\n\nfunction isReusableCloudSessionState(session: OpensteerCloudSessionState): boolean {\n if (session.status === \"closing\" || session.status === \"closed\" || session.status === \"failed\") {\n return false;\n }\n\n return !(\n typeof session.expiresAt === \"number\" &&\n session.expiresAt <= Date.now() + CLOUD_SESSION_REUSE_EXPIRY_SKEW_MS\n );\n}\n\nfunction isLoopbackBaseUrl(baseUrl: string): boolean {\n let url: URL;\n try {\n url = new URL(baseUrl);\n } catch {\n return false;\n }\n\n return (\n url.hostname === \"localhost\" ||\n url.hostname === \"127.0.0.1\" ||\n url.hostname === \"::1\" ||\n url.hostname === \"[::1]\"\n );\n}\n","import path from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\n\nimport type { BrowserCoreEngine } from \"@opensteer/browser-core\";\nimport {\n type OpensteerExtractionDescriptorStore,\n OpensteerSessionRuntime as SharedOpensteerSessionRuntime,\n type DomDescriptorStore,\n type OpensteerEngineFactory,\n type OpensteerEngineFactoryOptions,\n type OpensteerSessionRuntimeOptions as SharedOpensteerSessionRuntimeOptions,\n type OpensteerRuntimeWorkspace,\n} from \"@opensteer/runtime-core\";\nimport type {\n OpensteerBrowserOptions,\n OpensteerBrowserContextOptions,\n OpensteerBrowserLaunchOptions,\n OpensteerOpenInput,\n OpensteerOpenOutput,\n OpensteerPageActivateInput,\n OpensteerPageActivateOutput,\n OpensteerPageCloseInput,\n OpensteerPageCloseOutput,\n OpensteerPageGotoInput,\n OpensteerPageGotoOutput,\n OpensteerPageNewInput,\n OpensteerPageNewOutput,\n ObservabilityConfig,\n ObservationSink,\n} from \"@opensteer/protocol\";\n\nimport { OpensteerBrowserManager } from \"../browser-manager.js\";\nimport {\n assertSupportedEngineOptions,\n DEFAULT_OPENSTEER_ENGINE,\n type OpensteerEngineName,\n} from \"../internal/engine-selection.js\";\nimport type { OpensteerEnvironment } from \"../env.js\";\nimport {\n readPersistedLocalBrowserSessionRecord,\n writePersistedSessionRecord,\n} from \"../live-session.js\";\nimport type { OpensteerPolicy } from \"../policy/index.js\";\nimport { resolveFilesystemWorkspacePath } from \"../root.js\";\n\nexport type { OpensteerEngineFactory, OpensteerEngineFactoryOptions, OpensteerRuntimeWorkspace };\n\nexport interface OpensteerRuntimeOptions {\n readonly workspace?: string;\n readonly rootDir?: string;\n readonly rootPath?: string;\n readonly engineName?: OpensteerEngineName;\n readonly environment?: OpensteerEnvironment;\n readonly browser?: OpensteerBrowserOptions;\n readonly launch?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n readonly engine?: BrowserCoreEngine;\n readonly engineFactory?: OpensteerEngineFactory;\n readonly policy?: OpensteerPolicy;\n readonly descriptorStore?: DomDescriptorStore;\n readonly extractionDescriptorStore?: OpensteerExtractionDescriptorStore;\n readonly cleanupRootOnClose?: boolean;\n readonly observability?: Partial<ObservabilityConfig>;\n readonly observationSessionId?: string;\n readonly observationSink?: ObservationSink;\n}\n\nexport interface OpensteerSessionRuntimeOptions {\n readonly name: string;\n readonly rootDir?: string;\n readonly rootPath?: string;\n readonly engineName?: OpensteerEngineName;\n readonly environment?: OpensteerEnvironment;\n readonly browser?: OpensteerBrowserOptions;\n readonly launch?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n readonly engine?: BrowserCoreEngine;\n readonly engineFactory?: OpensteerEngineFactory;\n readonly policy?: OpensteerPolicy;\n readonly descriptorStore?: DomDescriptorStore;\n readonly extractionDescriptorStore?: OpensteerExtractionDescriptorStore;\n readonly cleanupRootOnClose?: boolean;\n readonly observability?: Partial<ObservabilityConfig>;\n readonly observationSessionId?: string;\n readonly observationSink?: ObservationSink;\n}\n\nabstract class LocalActivePageHintRuntime extends SharedOpensteerSessionRuntime {\n protected async completeWithLocalActivePageHint<T>(operation: () => Promise<T>): Promise<T> {\n const output = await operation();\n await persistLocalActivePageHint(this, this.rootPath);\n return output;\n }\n\n override async open(\n input: OpensteerOpenInput = {},\n options: Parameters<SharedOpensteerSessionRuntime[\"open\"]>[1] = {},\n ): Promise<OpensteerOpenOutput> {\n return this.completeWithLocalActivePageHint(() => super.open(input, options));\n }\n\n override async newPage(\n input: OpensteerPageNewInput = {},\n options: Parameters<SharedOpensteerSessionRuntime[\"newPage\"]>[1] = {},\n ): Promise<OpensteerPageNewOutput> {\n return this.completeWithLocalActivePageHint(() => super.newPage(input, options));\n }\n\n override async activatePage(\n input: OpensteerPageActivateInput,\n options: Parameters<SharedOpensteerSessionRuntime[\"activatePage\"]>[1] = {},\n ): Promise<OpensteerPageActivateOutput> {\n return this.completeWithLocalActivePageHint(() => super.activatePage(input, options));\n }\n\n override async closePage(\n input: OpensteerPageCloseInput = {},\n options: Parameters<SharedOpensteerSessionRuntime[\"closePage\"]>[1] = {},\n ): Promise<OpensteerPageCloseOutput> {\n return this.completeWithLocalActivePageHint(() => super.closePage(input, options));\n }\n\n override async goto(\n input: OpensteerPageGotoInput,\n options: Parameters<SharedOpensteerSessionRuntime[\"goto\"]>[1] = {},\n ): Promise<OpensteerPageGotoOutput> {\n return this.completeWithLocalActivePageHint(() => super.goto(input, options));\n }\n}\n\nexport class OpensteerRuntime extends LocalActivePageHintRuntime {\n constructor(options: OpensteerRuntimeOptions = {}) {\n const publicWorkspace = normalizeWorkspace(options.workspace);\n const rootPath =\n options.rootPath ??\n (publicWorkspace === undefined\n ? path.resolve(options.rootDir ?? process.cwd(), \".opensteer\", \"temporary\", randomUUID())\n : resolveFilesystemWorkspacePath({\n rootDir: path.resolve(options.rootDir ?? process.cwd()),\n workspace: publicWorkspace,\n }));\n const cleanupRootOnClose = options.cleanupRootOnClose ?? publicWorkspace === undefined;\n const engineName = options.engineName ?? DEFAULT_OPENSTEER_ENGINE;\n\n assertSupportedEngineOptions({\n engineName,\n ...(options.browser === undefined ? {} : { browser: options.browser }),\n ...(options.context === undefined ? {} : { context: options.context }),\n });\n\n super(\n buildSharedRuntimeOptions({\n name: publicWorkspace ?? \"default\",\n ...(options.rootDir === undefined ? {} : { rootDir: options.rootDir }),\n rootPath,\n ...(publicWorkspace === undefined ? {} : { workspaceName: publicWorkspace }),\n ...(options.environment === undefined ? {} : { environment: options.environment }),\n ...(options.browser === undefined ? {} : { browser: options.browser }),\n ...(options.launch === undefined ? {} : { launch: options.launch }),\n ...(options.context === undefined ? {} : { context: options.context }),\n engineName,\n ...(options.engine === undefined ? {} : { engine: options.engine }),\n ...(options.engineFactory === undefined ? {} : { engineFactory: options.engineFactory }),\n ...(options.policy === undefined ? {} : { policy: options.policy }),\n ...(options.descriptorStore === undefined\n ? {}\n : { descriptorStore: options.descriptorStore }),\n ...(options.extractionDescriptorStore === undefined\n ? {}\n : { extractionDescriptorStore: options.extractionDescriptorStore }),\n cleanupRootOnClose,\n ...(options.observability === undefined ? {} : { observability: options.observability }),\n ...(options.observationSessionId === undefined\n ? {}\n : { observationSessionId: options.observationSessionId }),\n ...(options.observationSink === undefined\n ? {}\n : { observationSink: options.observationSink }),\n }),\n );\n }\n}\n\nexport class OpensteerSessionRuntime extends LocalActivePageHintRuntime {\n constructor(options: OpensteerSessionRuntimeOptions) {\n const rootPath = options.rootPath ?? path.resolve(options.rootDir ?? process.cwd());\n const cleanupRootOnClose = options.cleanupRootOnClose ?? false;\n const engineName = options.engineName ?? DEFAULT_OPENSTEER_ENGINE;\n\n assertSupportedEngineOptions({\n engineName,\n ...(options.browser === undefined ? {} : { browser: options.browser }),\n ...(options.context === undefined ? {} : { context: options.context }),\n });\n\n super(\n buildSharedRuntimeOptions({\n name: options.name,\n ...(options.rootDir === undefined ? {} : { rootDir: options.rootDir }),\n rootPath,\n ...(options.environment === undefined ? {} : { environment: options.environment }),\n ...(options.browser === undefined ? {} : { browser: options.browser }),\n ...(options.launch === undefined ? {} : { launch: options.launch }),\n ...(options.context === undefined ? {} : { context: options.context }),\n engineName,\n ...(options.engine === undefined ? {} : { engine: options.engine }),\n ...(options.engineFactory === undefined ? {} : { engineFactory: options.engineFactory }),\n ...(options.policy === undefined ? {} : { policy: options.policy }),\n ...(options.descriptorStore === undefined\n ? {}\n : { descriptorStore: options.descriptorStore }),\n ...(options.extractionDescriptorStore === undefined\n ? {}\n : { extractionDescriptorStore: options.extractionDescriptorStore }),\n cleanupRootOnClose,\n ...(options.observability === undefined ? {} : { observability: options.observability }),\n ...(options.observationSessionId === undefined\n ? {}\n : { observationSessionId: options.observationSessionId }),\n ...(options.observationSink === undefined\n ? {}\n : { observationSink: options.observationSink }),\n }),\n );\n }\n}\n\nasync function persistLocalActivePageHint(\n runtime: SharedOpensteerSessionRuntime,\n rootPath: string,\n): Promise<void> {\n try {\n await syncPersistedLocalActivePageHint(runtime, rootPath);\n } catch {}\n}\n\nasync function syncPersistedLocalActivePageHint(\n runtime: SharedOpensteerSessionRuntime,\n rootPath: string,\n): Promise<void> {\n const record = await readPersistedLocalBrowserSessionRecord(rootPath);\n if (!record) {\n return;\n }\n\n const sessionInfo = await runtime.info();\n const activePageRef = sessionInfo.activePageRef;\n let activePageUrl: string | undefined;\n let activePageTitle: string | undefined;\n\n if (activePageRef !== undefined) {\n const pages = await runtime.listPages();\n const activePage = pages.pages.find((page) => page.pageRef === activePageRef);\n activePageUrl = activePage?.url;\n activePageTitle = activePage?.title;\n }\n\n const {\n activePageRef: _previousActivePageRef,\n activePageUrl: _previousActivePageUrl,\n activePageTitle: _previousActivePageTitle,\n ...restRecord\n } = record;\n\n await writePersistedSessionRecord(rootPath, {\n ...restRecord,\n updatedAt: Date.now(),\n ...(activePageRef === undefined ? {} : { activePageRef }),\n ...(activePageUrl === undefined ? {} : { activePageUrl }),\n ...(activePageTitle === undefined ? {} : { activePageTitle }),\n });\n}\n\nfunction buildSharedRuntimeOptions(input: {\n readonly name: string;\n readonly rootDir?: string;\n readonly rootPath: string;\n readonly workspaceName?: string;\n readonly environment?: OpensteerEnvironment;\n readonly browser?: OpensteerBrowserOptions;\n readonly launch?: OpensteerBrowserLaunchOptions;\n readonly context?: OpensteerBrowserContextOptions;\n readonly engineName: OpensteerEngineName;\n readonly engine?: BrowserCoreEngine;\n readonly engineFactory?: OpensteerEngineFactory;\n readonly policy?: OpensteerPolicy;\n readonly descriptorStore?: DomDescriptorStore;\n readonly extractionDescriptorStore?: OpensteerExtractionDescriptorStore;\n readonly cleanupRootOnClose: boolean;\n readonly observability?: SharedOpensteerSessionRuntimeOptions[\"observability\"];\n readonly observationSessionId?: SharedOpensteerSessionRuntimeOptions[\"observationSessionId\"];\n readonly observationSink?: SharedOpensteerSessionRuntimeOptions[\"observationSink\"];\n}): SharedOpensteerSessionRuntimeOptions {\n const ownership = resolveOwnership(input.browser);\n const engineFactory =\n input.engineFactory ??\n ((factoryOptions: OpensteerEngineFactoryOptions) =>\n new OpensteerBrowserManager({\n ...(input.rootDir === undefined ? {} : { rootDir: input.rootDir }),\n rootPath: input.rootPath,\n ...(input.workspaceName === undefined ? {} : { workspace: input.workspaceName }),\n engineName: input.engineName,\n ...(input.environment === undefined ? {} : { environment: input.environment }),\n ...((factoryOptions.browser ?? input.browser) === undefined\n ? {}\n : { browser: factoryOptions.browser ?? input.browser }),\n ...((factoryOptions.launch ?? input.launch) === undefined\n ? {}\n : { launch: factoryOptions.launch ?? input.launch }),\n ...((factoryOptions.context ?? input.context) === undefined\n ? {}\n : { context: factoryOptions.context ?? input.context }),\n }).createEngine());\n\n return {\n name: input.name,\n ...(input.workspaceName === undefined ? {} : { workspaceName: input.workspaceName }),\n rootPath: input.rootPath,\n ...(input.engine === undefined ? {} : { engine: input.engine }),\n ...(input.engine === undefined ? { engineFactory } : {}),\n ...(input.policy === undefined ? {} : { policy: input.policy }),\n ...(input.descriptorStore === undefined ? {} : { descriptorStore: input.descriptorStore }),\n ...(input.extractionDescriptorStore === undefined\n ? {}\n : { extractionDescriptorStore: input.extractionDescriptorStore }),\n cleanupRootOnClose: input.cleanupRootOnClose,\n ...(input.observability === undefined ? {} : { observability: input.observability }),\n ...(input.observationSessionId === undefined\n ? {}\n : { observationSessionId: input.observationSessionId }),\n ...(input.observationSink === undefined ? {} : { observationSink: input.observationSink }),\n sessionInfo: {\n provider: {\n mode: \"local\",\n ownership,\n engine: input.engineName,\n },\n ...(input.workspaceName === undefined ? {} : { workspace: input.workspaceName }),\n reconnectable: !input.cleanupRootOnClose,\n },\n };\n}\n\nfunction normalizeWorkspace(workspace: string | undefined): string | undefined {\n if (workspace === undefined) {\n return undefined;\n }\n const trimmed = workspace.trim();\n return trimmed.length === 0 ? undefined : trimmed;\n}\n\nfunction resolveOwnership(browser: OpensteerBrowserOptions | undefined): \"owned\" | \"attached\" {\n return typeof browser === \"object\" && browser.mode === \"attach\" ? \"attached\" : \"owned\";\n}\n","import {\n DEFAULT_OPENSTEER_ENGINE,\n type OpensteerEngineName,\n} from \"../internal/engine-selection.js\";\nimport type { OpensteerEnvironment } from \"../env.js\";\nimport {\n assertProviderSupportsEngine,\n resolveOpensteerProvider,\n type OpensteerProviderOptions,\n type OpensteerResolvedProvider,\n} from \"../provider/config.js\";\nimport { OpensteerCloudClient } from \"../cloud/client.js\";\nimport { resolveCloudConfig, type OpensteerCloudConfig } from \"../cloud/config.js\";\nimport { CloudSessionProxy } from \"../cloud/session-proxy.js\";\nimport { OpensteerRuntime, type OpensteerRuntimeOptions } from \"./runtime.js\";\nimport type { OpensteerDisconnectableRuntime } from \"./semantic-runtime.js\";\n\nexport interface OpensteerResolvedRuntimeConfig {\n readonly provider: OpensteerResolvedProvider;\n readonly cloud?: OpensteerCloudConfig;\n}\n\nexport function resolveOpensteerRuntimeConfig(\n input: {\n readonly provider?: OpensteerProviderOptions;\n readonly environment?: OpensteerEnvironment;\n } = {},\n): OpensteerResolvedRuntimeConfig {\n const environment = input.environment ?? process.env;\n const provider = resolveOpensteerProvider({\n ...(input.provider === undefined ? {} : { provider: input.provider }),\n ...(environment.OPENSTEER_PROVIDER === undefined\n ? {}\n : { environmentProvider: environment.OPENSTEER_PROVIDER }),\n });\n\n if (provider.mode === \"cloud\") {\n return {\n provider,\n cloud: resolveCloudConfig({\n ...(input.provider === undefined ? {} : { provider: input.provider }),\n environment,\n })!,\n };\n }\n\n return { provider };\n}\n\nexport function createOpensteerSemanticRuntime(\n input: {\n readonly runtimeOptions?: OpensteerRuntimeOptions;\n readonly engine?: OpensteerEngineName;\n readonly provider?: OpensteerProviderOptions;\n readonly environment?: OpensteerEnvironment;\n } = {},\n): OpensteerDisconnectableRuntime {\n const runtimeOptions = input.runtimeOptions ?? {};\n const engine = input.engine ?? runtimeOptions.engineName ?? DEFAULT_OPENSTEER_ENGINE;\n const environment = input.environment ?? process.env;\n const config = resolveOpensteerRuntimeConfig({\n ...(input.provider === undefined ? {} : { provider: input.provider }),\n environment,\n });\n assertProviderSupportsEngine(config.provider.mode, engine);\n\n if (config.provider.mode === \"cloud\") {\n return new CloudSessionProxy(new OpensteerCloudClient(config.cloud!), {\n ...(runtimeOptions.rootDir === undefined ? {} : { rootDir: runtimeOptions.rootDir }),\n ...(runtimeOptions.rootPath === undefined ? {} : { rootPath: runtimeOptions.rootPath }),\n ...(runtimeOptions.workspace === undefined ? {} : { workspace: runtimeOptions.workspace }),\n ...(runtimeOptions.policy === undefined ? {} : { policy: runtimeOptions.policy }),\n ...(runtimeOptions.cleanupRootOnClose === undefined\n ? {}\n : { cleanupRootOnClose: runtimeOptions.cleanupRootOnClose }),\n ...(runtimeOptions.observability === undefined\n ? {}\n : { observability: runtimeOptions.observability }),\n });\n }\n\n return new OpensteerRuntime({\n ...runtimeOptions,\n engineName: engine,\n environment,\n });\n}\n"]}