{"version":3,"file":"index.mjs","names":["isObject","isObjectCustom","mapObjectSkip","_mapObject","mapObject","#maxSize","#maxAge","#onEviction","#oldCache","#deleteIfExpired","#getOrDeleteIfExpired","#getItemValue","#cache","#size","#emitEvictions","#set","#entriesAscending","#moveToRecent","#peek","QuickLru","isObject","mapObject","map","protocolPackageJson.version","LocalBrowserLaunchOptionsSchema","WebMCPToolsOptionsSchema","WebMCPInvokeOptionsSchema","WebMCPResultOptionsSchema","MAX_INPUT_FILE_BYTES","#rpcClient","#descriptor","#rpcClient","#pageId","#terminalResult","asError","NodeWebSocket","ProtocolSchemas.WebMCPResultOptionsSchema","packageJson.version"],"sources":["../../protocol/json-rpc/schemas.ts","../../../node_modules/.pnpm/map-obj@6.0.0/node_modules/map-obj/index.js","../../../node_modules/.pnpm/camelcase@9.0.0/node_modules/camelcase/index.js","../../../node_modules/.pnpm/quick-lru@7.3.0/node_modules/quick-lru/index.js","../../../node_modules/.pnpm/camelcase-keys@10.0.2/node_modules/camelcase-keys/index.js","../../../node_modules/.pnpm/map-obj@5.0.2/node_modules/map-obj/index.js","../../../node_modules/.pnpm/change-case@5.4.4/node_modules/change-case/dist/index.js","../../../node_modules/.pnpm/snakecase-keys@9.0.2/node_modules/snakecase-keys/index.js","../../protocol/json-rpc/wire-casing.ts","../../protocol/package.json","../../protocol/protocol-version.ts","../../protocol/schemas.ts","../../protocol/schema-registry.ts","../src/browserClipboard.ts","../src/base64.ts","../src/fileUpload.ts","../src/locator.ts","../src/pageScripts.ts","../src/response.ts","../src/webmcp.ts","../src/page.ts","../src/browserContext.ts","../src/runtimeCompatibility.ts","../src/abort.ts","../src/cdpClient.ts","../src/rpcErrors.ts","../src/rpcClient.ts","../src/browserbaseConnection.ts","../src/browserbaseTransport.ts","../src/browserbaseRpc.ts","../src/clientLocatorOptions.ts","../src/browser/index.ts","../src/clientSchemas.ts","../package.json","../src/version.ts","../src/sdkIdentity.ts","../src/extensionAssets.ts","../src/browserbaseExtension.ts","../src/browser/browserbaseSession.ts","../src/browser/browserbaseServices.ts","../src/browser/localBrowser.ts","../src/timeouts.ts","../src/browser/factories.ts","../src/batch.ts","../src/stagehand.ts"],"sourcesContent":["import { z } from \"zod/v4\";\nimport type { WireCasingOptions } from \"./wire-casing.ts\";\n\n// JSON-RPC 2.0: https://www.jsonrpc.org/specification\n\nexport const JSONRPCErrorCodes = {\n  parseError: -32700,\n  invalidRequest: -32600,\n  methodNotFound: -32601,\n  invalidParams: -32602,\n  internalError: -32603,\n} as const;\n\nconst JSONRPCParamsSchema = z\n  .union([z.array(z.json()), z.record(z.string(), z.json())])\n  .meta({ id: \"JSONRPCParams\" });\nexport const JSONRPCRequestIdSchema = z.int().nonnegative().meta({ id: \"JSONRPCRequestId\" });\nconst JSONRPCErrorResponseIdSchema = z\n  .union([JSONRPCRequestIdSchema, z.null()])\n  .meta({ id: \"JSONRPCErrorResponseId\" });\n\nexport const JSONRPCErrorObjectSchema = z\n  .strictObject({\n    code: z.int(),\n    message: z.string(),\n    data: z.json().optional(),\n  })\n  .meta({ id: \"JSONRPCErrorObject\" });\n\nexport const JSONRPCRequestSchema = z\n  .strictObject({\n    jsonrpc: z.literal(\"2.0\"),\n    id: JSONRPCRequestIdSchema,\n    method: z.string(),\n    params: JSONRPCParamsSchema.optional(),\n    traceparent: z.string().optional(),\n    tracestate: z.string().optional(),\n  })\n  .meta({ id: \"JSONRPCRequest\" });\n\nexport const JSONRPCNotificationSchema = z\n  .strictObject({\n    jsonrpc: z.literal(\"2.0\"),\n    method: z.string(),\n    params: JSONRPCParamsSchema.optional(),\n  })\n  .meta({ id: \"JSONRPCNotification\" });\n\nexport const JSONRPCSuccessResponseSchema = z\n  .strictObject({\n    jsonrpc: z.literal(\"2.0\"),\n    result: z.json(),\n    id: JSONRPCRequestIdSchema,\n  })\n  .meta({ id: \"JSONRPCSuccessResponse\" });\n\nexport const JSONRPCErrorResponseSchema = z\n  .strictObject({\n    jsonrpc: z.literal(\"2.0\"),\n    error: JSONRPCErrorObjectSchema,\n    id: JSONRPCErrorResponseIdSchema,\n  })\n  .meta({ id: \"JSONRPCErrorResponse\" });\n\nexport const JSONRPCResponseSchema = z\n  .union([JSONRPCSuccessResponseSchema, JSONRPCErrorResponseSchema])\n  .meta({ id: \"JSONRPCResponse\" });\n\nexport const JSONRPCMessageSchema = z\n  .union([JSONRPCRequestSchema, JSONRPCNotificationSchema, JSONRPCResponseSchema])\n  .meta({ id: \"JSONRPCMessage\" });\n\nexport const JSONRPCWireInputSchema = z\n  .unknown()\n  .transform((input, context) => {\n    if (typeof input !== \"string\") return input;\n\n    try {\n      return JSON.parse(input) as unknown;\n    } catch {\n      context.addIssue({ code: \"custom\", message: \"Invalid JSON\" });\n      return z.NEVER;\n    }\n  })\n  .meta({ id: \"JSONRPCWireInput\" });\n\nexport const JSONRPCEnvelopeSchema = z\n  .record(z.string(), z.unknown())\n  .meta({ id: \"JSONRPCEnvelope\" });\n\nexport type RPCMethod = {\n  name: string;\n  params: z.ZodType;\n  result: z.ZodType;\n  paramsWire?: WireCasingOptions;\n  resultWire?: WireCasingOptions;\n};\n\nexport type RPCNotification = {\n  name: string;\n  params: z.ZodType;\n  paramsWire?: WireCasingOptions;\n};\n","const isObject = value => typeof value === 'object' && value !== null;\n\n// Check if a value is a plain object that should be recursed into\nconst isObjectCustom = value => {\n\tif (!isObject(value)) {\n\t\treturn false;\n\t}\n\n\t// Exclude built-in objects\n\tif (\n\t\tvalue instanceof RegExp\n\t\t|| value instanceof Error\n\t\t|| value instanceof Date\n\t\t|| value instanceof Map\n\t\t|| value instanceof Set\n\t\t|| value instanceof WeakMap\n\t\t|| value instanceof WeakSet\n\t\t|| value instanceof Promise\n\t\t|| value instanceof ArrayBuffer\n\t\t|| value instanceof DataView\n\t\t|| ArrayBuffer.isView(value) // Typed arrays\n\t\t|| (globalThis.Blob && value instanceof globalThis.Blob)\n\t) {\n\t\treturn false;\n\t}\n\n\t// Exclude Jest matchers\n\tif (typeof value.$$typeof === 'symbol' || typeof value.asymmetricMatch === 'function') {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nexport const mapObjectSkip = Symbol('mapObjectSkip');\n\nconst getEnumerableKeys = (object, includeSymbols) => {\n\tif (includeSymbols) {\n\t\tconst stringKeys = Object.keys(object);\n\t\tconst symbolKeys = Object.getOwnPropertySymbols(object).filter(symbol => Object.getOwnPropertyDescriptor(object, symbol)?.enumerable);\n\t\treturn [...stringKeys, ...symbolKeys];\n\t}\n\n\treturn Object.keys(object);\n};\n\nconst _mapObject = (object, mapper, options, isSeen = new WeakMap()) => {\n\tconst {\n\t\ttarget = {},\n\t\t...processOptions\n\t} = {\n\t\tdeep: false,\n\t\tincludeSymbols: false,\n\t\t...options,\n\t};\n\n\tif (isSeen.has(object)) {\n\t\treturn isSeen.get(object);\n\t}\n\n\tisSeen.set(object, target);\n\n\tconst mapArray = array => array.map(element => isObjectCustom(element) ? _mapObject(element, mapper, processOptions, isSeen) : element);\n\n\tif (Array.isArray(object)) {\n\t\treturn mapArray(object);\n\t}\n\n\tfor (const key of getEnumerableKeys(object, processOptions.includeSymbols)) {\n\t\tconst value = object[key];\n\t\tconst mapResult = mapper(key, value);\n\n\t\tif (mapResult === mapObjectSkip) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (!Array.isArray(mapResult)) {\n\t\t\tthrow new TypeError(`Mapper must return an array or mapObjectSkip, got ${mapResult === null ? 'null' : typeof mapResult}`);\n\t\t}\n\n\t\tif (mapResult.length < 2) {\n\t\t\tthrow new TypeError(`Mapper must return an array with at least 2 elements [key, value], got ${mapResult.length} elements`);\n\t\t}\n\n\t\tlet [newKey, newValue, {shouldRecurse = true} = {}] = mapResult;\n\n\t\t// Drop `__proto__` keys.\n\t\tif (newKey === '__proto__') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (processOptions.deep && shouldRecurse && isObjectCustom(newValue)) {\n\t\t\tnewValue = Array.isArray(newValue)\n\t\t\t\t? mapArray(newValue)\n\t\t\t\t: _mapObject(newValue, mapper, processOptions, isSeen);\n\t\t}\n\n\t\ttry {\n\t\t\ttarget[newKey] = newValue;\n\t\t} catch (error) {\n\t\t\tif (error.name === 'TypeError' && error.message.includes('read only')) {\n\t\t\t\t// Skip non-configurable properties\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn target;\n};\n\nexport default function mapObject(object, mapper, options) {\n\tif (!isObject(object)) {\n\t\tthrow new TypeError(`Expected an object, got \\`${object}\\` (${typeof object})`);\n\t}\n\n\tif (Array.isArray(object)) {\n\t\tthrow new TypeError('Expected an object, got an array');\n\t}\n\n\t// Ensure the third mapper argument is always the original input object\n\tconst mapperWithRoot = (key, value) => mapper(key, value, object);\n\n\treturn _mapObject(object, mapperWithRoot, options);\n}\n","const UPPERCASE = /[\\p{Lu}]/u;\nconst LOWERCASE = /[\\p{Ll}]/u;\nconst LEADING_CAPITAL = /^[\\p{Lu}](?![\\p{Lu}])/u;\nconst SEPARATORS = /[_.\\- ]+/;\n\n// The |$ alternative allows matching at end-of-string, capturing empty string\n// This enables NUMBERS_AND_IDENTIFIER to match digits at string end (e.g., \"test123\")\nconst IDENTIFIER = /([\\p{Alpha}\\p{N}_]|$)/u;\n\nconst LEADING_SEPARATORS = new RegExp('^' + SEPARATORS.source);\nconst SEPARATORS_AND_IDENTIFIER = new RegExp(SEPARATORS.source + IDENTIFIER.source, 'gu');\nconst NUMBERS_AND_IDENTIFIER = new RegExp(String.raw`\\d+` + IDENTIFIER.source, 'gu');\n\nconst preserveCamelCase = (string, toLowerCase, toUpperCase, preserveConsecutiveUppercase) => {\n\tlet isLastCharLower = false;\n\tlet isLastCharUpper = false;\n\tlet isLastLastCharUpper = false;\n\tlet isLastLastCharPreserved = false;\n\n\tfor (let index = 0; index < string.length; index++) {\n\t\tconst character = string[index];\n\n\t\t// Was the character 3 positions back inserted as a separator?\n\t\t// Prevents excessive separators by checking if we recently inserted one\n\t\t// index - 3 accounts for: current character, inserted separator, previous character\n\t\t// Default true for early positions activates the preserveConsecutiveUppercase guard\n\t\tisLastLastCharPreserved = index > 2 ? string[index - 3] === '-' : true;\n\n\t\tif (isLastCharLower && UPPERCASE.test(character)) {\n\t\t\t// FooBar → Foo-Bar (insert separator before uppercase)\n\t\t\tstring = string.slice(0, index) + '-' + string.slice(index);\n\t\t\tisLastCharLower = false;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = true;\n\t\t\tindex++;\n\t\t} else if (\n\t\t\tisLastCharUpper\n\t\t\t&& isLastLastCharUpper\n\t\t\t&& LOWERCASE.test(character)\n\t\t\t&& (!isLastLastCharPreserved || preserveConsecutiveUppercase)\n\t\t) {\n\t\t\t// FOOBar → FOO-Bar\n\t\t\tstring = string.slice(0, index - 1) + '-' + string.slice(index - 1);\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper = false;\n\t\t\tisLastCharLower = true;\n\t\t} else {\n\t\t\tisLastCharLower\n\t\t\t\t= toLowerCase(character) === character\n\t\t\t\t\t&& toUpperCase(character) !== character;\n\t\t\tisLastLastCharUpper = isLastCharUpper;\n\t\t\tisLastCharUpper\n\t\t\t\t= toUpperCase(character) === character\n\t\t\t\t\t&& toLowerCase(character) !== character;\n\t\t}\n\t}\n\n\treturn string;\n};\n\nconst preserveConsecutiveUppercase = (input, toLowerCase) => input.replace(LEADING_CAPITAL, match => toLowerCase(match));\n\nconst processWithCasePreservation = (input, toLowerCase, preserveConsecutiveUppercase) => {\n\tlet result = '';\n\tlet previousWasNumber = false;\n\tlet previousWasUppercase = false;\n\n\t// Convert input to array for lookahead capability\n\tconst characters = [...input];\n\n\tfor (let index = 0; index < characters.length; index++) {\n\t\tconst character = characters[index];\n\t\tconst isUpperCase = UPPERCASE.test(character);\n\t\tconst nextCharIsUpperCase = index + 1 < characters.length && UPPERCASE.test(characters[index + 1]);\n\n\t\tif (previousWasNumber && /[\\p{Alpha}]/u.test(character)) {\n\t\t\t// Letter after number - preserve original case\n\t\t\tresult += character;\n\t\t\tpreviousWasNumber = false;\n\t\t\tpreviousWasUppercase = isUpperCase;\n\t\t} else if (preserveConsecutiveUppercase && isUpperCase && (previousWasUppercase || nextCharIsUpperCase)) {\n\t\t\t// Part of consecutive uppercase sequence when preserveConsecutiveUppercase is true - keep it\n\t\t\tresult += character;\n\t\t\tpreviousWasUppercase = true;\n\t\t} else if (/\\d/.test(character)) {\n\t\t\t// Number - keep as-is and track it\n\t\t\tresult += character;\n\t\t\tpreviousWasNumber = true;\n\t\t\tpreviousWasUppercase = false;\n\t\t} else if (SEPARATORS.test(character)) {\n\t\t\t// Separator - keep as-is and maintain previousWasNumber state\n\t\t\tresult += character;\n\t\t\tpreviousWasUppercase = false;\n\t\t} else {\n\t\t\t// Regular character - lowercase it\n\t\t\tresult += toLowerCase(character);\n\t\t\tpreviousWasNumber = false;\n\t\t\tpreviousWasUppercase = false;\n\t\t}\n\t}\n\n\treturn result;\n};\n\n/**\nCore post-processing:\n- Collapses separators and uppercases the following identifier character.\n- Optionally uppercases the identifier following a numeric sequence.\n\nTwo-pass strategy prevents conflicts:\n1. NUMBERS_AND_IDENTIFIER: handles digit-to-letter transitions\n2. SEPARATORS_AND_IDENTIFIER: handles separator-to-identifier transitions\n\nExample: \"b2b_registration\" with capitalizeAfterNumber: true\n- Pass 1: \"2b\" matches, next char is \"_\" (separator), so don't capitalize → \"b2b_registration\"\n- Pass 2: \"_r\" matches, replace with \"R\" → \"b2bRegistration\"\n*/\nconst postProcess = (input, toUpperCase, {capitalizeAfterNumber}) => {\n\tconst transformNumericIdentifier = capitalizeAfterNumber\n\t\t? (match, identifier, offset, string) => {\n\t\t\tconst nextCharacter = string.charAt(offset + match.length);\n\n\t\t\t// If the numeric+identifier run is immediately followed by a separator,\n\t\t\t// treat it as a continued token and do not force a new word.\n\t\t\tif (SEPARATORS.test(nextCharacter)) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\t// Only uppercase the identifier part (not the digits) for efficiency\n\t\t\treturn identifier ? match.slice(0, -identifier.length) + toUpperCase(identifier) : match;\n\t\t}\n\t\t// When false: numbers do not create a word boundary.\n\t\t: match => match;\n\n\treturn input\n\t\t.replaceAll(NUMBERS_AND_IDENTIFIER, transformNumericIdentifier)\n\t\t.replaceAll(\n\t\t\tSEPARATORS_AND_IDENTIFIER,\n\t\t\t(_, identifier) => toUpperCase(identifier),\n\t\t);\n};\n\nexport default function camelCase(input, options) {\n\tif (!(typeof input === 'string' || Array.isArray(input))) {\n\t\tthrow new TypeError('Expected the input to be `string | string[]`');\n\t}\n\n\toptions = {\n\t\tpascalCase: false,\n\t\tpreserveConsecutiveUppercase: false,\n\t\tcapitalizeAfterNumber: true,\n\t\t...options,\n\t};\n\n\tif (Array.isArray(input)) {\n\t\tinput = input\n\t\t\t.map(element => element.trim())\n\t\t\t.filter(element => element.length > 0)\n\t\t\t.join('-');\n\t} else {\n\t\tinput = input.trim();\n\t}\n\n\tif (input.length === 0) {\n\t\treturn '';\n\t}\n\n\t// Preserve leading _ and $ as they have semantic meaning\n\tconst leadingPrefix = input.match(/^[_$]*/)[0];\n\tinput = input.slice(leadingPrefix.length);\n\n\tif (input.length === 0) {\n\t\treturn leadingPrefix;\n\t}\n\n\tconst toLowerCase = options.locale === false\n\t\t? string => string.toLowerCase()\n\t\t: string => string.toLocaleLowerCase(options.locale);\n\n\tconst toUpperCase = options.locale === false\n\t\t? string => string.toUpperCase()\n\t\t: string => string.toLocaleUpperCase(options.locale);\n\n\tif (input.length === 1) {\n\t\tif (SEPARATORS.test(input)) {\n\t\t\treturn leadingPrefix;\n\t\t}\n\n\t\treturn leadingPrefix + (options.pascalCase\n\t\t\t? toUpperCase(input)\n\t\t\t: toLowerCase(input));\n\t}\n\n\tconst hasUpperCase = input !== toLowerCase(input);\n\n\tif (hasUpperCase) {\n\t\tinput = preserveCamelCase(\n\t\t\tinput,\n\t\t\ttoLowerCase,\n\t\t\ttoUpperCase,\n\t\t\toptions.preserveConsecutiveUppercase,\n\t\t);\n\t}\n\n\t// Strip leading separators eagerly so they do not affect word detection\n\tinput = input.replace(LEADING_SEPARATORS, '');\n\n\t// Normalize base casing while preserving intended consecutive uppers\n\tif (options.capitalizeAfterNumber) {\n\t\t// Standard behavior - lowercase everything (or preserve consecutive uppercase)\n\t\tinput = options.preserveConsecutiveUppercase\n\t\t\t? preserveConsecutiveUppercase(input, toLowerCase)\n\t\t\t: toLowerCase(input);\n\t} else {\n\t\t// Preserve case after numbers (processWithCasePreservation handles preserveConsecutiveUppercase internally)\n\t\tinput = processWithCasePreservation(input, toLowerCase, options.preserveConsecutiveUppercase);\n\t}\n\n\tif (options.pascalCase && input.length > 0) {\n\t\tinput = toUpperCase(input[0]) + input.slice(1);\n\t}\n\n\treturn leadingPrefix + postProcess(input, toUpperCase, options);\n}\n","export default class QuickLRU extends Map {\n\t#size = 0;\n\t#cache = new Map();\n\t#oldCache = new Map();\n\t#maxSize;\n\t#maxAge;\n\t#onEviction;\n\n\tconstructor(options = {}) {\n\t\tsuper();\n\n\t\tif (!(options.maxSize && options.maxSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tif (typeof options.maxAge === 'number' && options.maxAge === 0) {\n\t\t\tthrow new TypeError('`maxAge` must be a number greater than 0');\n\t\t}\n\n\t\tthis.#maxSize = options.maxSize;\n\t\tthis.#maxAge = options.maxAge || Number.POSITIVE_INFINITY;\n\t\tthis.#onEviction = options.onEviction;\n\t}\n\n\t// For tests.\n\tget __oldCache() {\n\t\treturn this.#oldCache;\n\t}\n\n\t#emitEvictions(cache) {\n\t\tif (typeof this.#onEviction !== 'function') {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [key, item] of cache) {\n\t\t\tthis.#onEviction(key, item.value);\n\t\t}\n\t}\n\n\t#deleteIfExpired(key, item) {\n\t\tif (typeof item.expiry === 'number' && item.expiry <= Date.now()) {\n\t\t\tif (typeof this.#onEviction === 'function') {\n\t\t\t\tthis.#onEviction(key, item.value);\n\t\t\t}\n\n\t\t\treturn this.delete(key);\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t#getOrDeleteIfExpired(key, item) {\n\t\tconst deleted = this.#deleteIfExpired(key, item);\n\t\tif (deleted === false) {\n\t\t\treturn item.value;\n\t\t}\n\t}\n\n\t#getItemValue(key, item) {\n\t\treturn item.expiry ? this.#getOrDeleteIfExpired(key, item) : item.value;\n\t}\n\n\t#peek(key, cache) {\n\t\tconst item = cache.get(key);\n\t\treturn this.#getItemValue(key, item);\n\t}\n\n\t#set(key, value) {\n\t\tthis.#cache.set(key, value);\n\t\tthis.#size++;\n\n\t\tif (this.#size >= this.#maxSize) {\n\t\t\tthis.#size = 0;\n\t\t\tthis.#emitEvictions(this.#oldCache);\n\t\t\tthis.#oldCache = this.#cache;\n\t\t\tthis.#cache = new Map();\n\t\t}\n\t}\n\n\t#moveToRecent(key, item) {\n\t\tthis.#oldCache.delete(key);\n\t\tthis.#set(key, item);\n\t}\n\n\t* #entriesAscending() {\n\t\tfor (const item of this.#oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield item;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.#cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield item;\n\t\t\t}\n\t\t}\n\t}\n\n\tget(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\tconst item = this.#cache.get(key);\n\t\t\treturn this.#getItemValue(key, item);\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\tconst item = this.#oldCache.get(key);\n\t\t\tif (this.#deleteIfExpired(key, item) === false) {\n\t\t\t\tthis.#moveToRecent(key, item);\n\t\t\t\treturn item.value;\n\t\t\t}\n\t\t}\n\t}\n\n\tset(key, value, {maxAge = this.#maxAge} = {}) {\n\t\tconst expiry = typeof maxAge === 'number' && maxAge !== Number.POSITIVE_INFINITY\n\t\t\t? (Date.now() + maxAge)\n\t\t\t: undefined;\n\n\t\tif (this.#cache.has(key)) {\n\t\t\tthis.#cache.set(key, {\n\t\t\t\tvalue,\n\t\t\t\texpiry,\n\t\t\t});\n\t\t} else {\n\t\t\tthis.#set(key, {value, expiry});\n\t\t}\n\n\t\treturn this;\n\t}\n\n\thas(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\treturn !this.#deleteIfExpired(key, this.#cache.get(key));\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\treturn !this.#deleteIfExpired(key, this.#oldCache.get(key));\n\t\t}\n\n\t\treturn false;\n\t}\n\n\tpeek(key) {\n\t\tif (this.#cache.has(key)) {\n\t\t\treturn this.#peek(key, this.#cache);\n\t\t}\n\n\t\tif (this.#oldCache.has(key)) {\n\t\t\treturn this.#peek(key, this.#oldCache);\n\t\t}\n\t}\n\n\texpiresIn(key) {\n\t\tconst item = this.#cache.get(key) ?? this.#oldCache.get(key);\n\t\tif (item) {\n\t\t\treturn item.expiry ? item.expiry - Date.now() : Number.POSITIVE_INFINITY;\n\t\t}\n\t}\n\n\tdelete(key) {\n\t\tconst deleted = this.#cache.delete(key);\n\t\tif (deleted) {\n\t\t\tthis.#size--;\n\t\t}\n\n\t\treturn this.#oldCache.delete(key) || deleted;\n\t}\n\n\tclear() {\n\t\tthis.#cache.clear();\n\t\tthis.#oldCache.clear();\n\t\tthis.#size = 0;\n\t}\n\n\tresize(newSize) {\n\t\tif (!(newSize && newSize > 0)) {\n\t\t\tthrow new TypeError('`maxSize` must be a number greater than 0');\n\t\t}\n\n\t\tconst items = [...this.#entriesAscending()];\n\t\tconst removeCount = items.length - newSize;\n\t\tif (removeCount < 0) {\n\t\t\tthis.#cache = new Map(items);\n\t\t\tthis.#oldCache = new Map();\n\t\t\tthis.#size = items.length;\n\t\t} else {\n\t\t\tif (removeCount > 0) {\n\t\t\t\tthis.#emitEvictions(items.slice(0, removeCount));\n\t\t\t}\n\n\t\t\tthis.#oldCache = new Map(items.slice(removeCount));\n\t\t\tthis.#cache = new Map();\n\t\t\tthis.#size = 0;\n\t\t}\n\n\t\tthis.#maxSize = newSize;\n\t}\n\n\tevict(count = 1) {\n\t\tconst requested = Number(count);\n\t\tif (!requested || requested <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst items = [...this.#entriesAscending()];\n\t\tconst evictCount = Math.trunc(Math.min(requested, Math.max(items.length - 1, 0)));\n\t\tif (evictCount <= 0) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.#emitEvictions(items.slice(0, evictCount));\n\t\tthis.#oldCache = new Map(items.slice(evictCount));\n\t\tthis.#cache = new Map();\n\t\tthis.#size = 0;\n\t}\n\n\t* keys() {\n\t\tfor (const [key] of this) {\n\t\t\tyield key;\n\t\t}\n\t}\n\n\t* values() {\n\t\tfor (const [, value] of this) {\n\t\t\tyield value;\n\t\t}\n\t}\n\n\t* [Symbol.iterator]() {\n\t\tfor (const item of this.#cache) {\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\tfor (const item of this.#oldCache) {\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesDescending() {\n\t\tlet items = [...this.#cache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\tif (deleted === false) {\n\t\t\t\tyield [key, value.value];\n\t\t\t}\n\t\t}\n\n\t\titems = [...this.#oldCache];\n\t\tfor (let i = items.length - 1; i >= 0; --i) {\n\t\t\tconst item = items[i];\n\t\t\tconst [key, value] = item;\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\tconst deleted = this.#deleteIfExpired(key, value);\n\t\t\t\tif (deleted === false) {\n\t\t\t\t\tyield [key, value.value];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t* entriesAscending() {\n\t\tfor (const [key, value] of this.#entriesAscending()) {\n\t\t\tyield [key, value.value];\n\t\t}\n\t}\n\n\tget size() {\n\t\tif (!this.#size) {\n\t\t\treturn this.#oldCache.size;\n\t\t}\n\n\t\tlet oldCacheSize = 0;\n\t\tfor (const key of this.#oldCache.keys()) {\n\t\t\tif (!this.#cache.has(key)) {\n\t\t\t\toldCacheSize++;\n\t\t\t}\n\t\t}\n\n\t\treturn Math.min(this.#size + oldCacheSize, this.#maxSize);\n\t}\n\n\tget maxSize() {\n\t\treturn this.#maxSize;\n\t}\n\n\tget maxAge() {\n\t\treturn this.#maxAge;\n\t}\n\n\tentries() {\n\t\treturn this.entriesAscending();\n\t}\n\n\tforEach(callbackFunction, thisArgument = this) {\n\t\tfor (const [key, value] of this.entriesAscending()) {\n\t\t\tcallbackFunction.call(thisArgument, value, key, this);\n\t\t}\n\t}\n\n\tget [Symbol.toStringTag]() {\n\t\treturn 'QuickLRU';\n\t}\n\n\ttoString() {\n\t\treturn `QuickLRU(${this.size}/${this.maxSize})`;\n\t}\n\n\t[Symbol.for('nodejs.util.inspect.custom')]() {\n\t\treturn this.toString();\n\t}\n}\n","import mapObject from 'map-obj';\nimport camelCase from 'camelcase';\nimport QuickLru from 'quick-lru';\n\nconst has = (array, key) => array.some(element => {\n\tif (typeof element === 'string') {\n\t\treturn element === key;\n\t}\n\n\telement.lastIndex = 0;\n\n\treturn element.test(key);\n});\n\n// Preserve numeric keys. The trim check excludes empty/whitespace strings,\n// which Number() would incorrectly convert to 0.\nconst isNumericKey = key => key.trim() !== '' && !Number.isNaN(Number(key));\n\nconst cache = new QuickLru({maxSize: 100_000});\n\nconst isBuiltIn = value =>\n\tArrayBuffer.isView(value)\n\t// Check for known built-in types\n\t|| value instanceof Date\n\t|| value instanceof RegExp\n\t|| value instanceof Error\n\t|| value instanceof Map\n\t|| value instanceof Set\n\t|| value instanceof WeakMap\n\t|| value instanceof WeakSet\n\t|| value instanceof Promise;\n\n// Reproduces behavior from `map-obj`.\nconst isObject = value =>\n\ttypeof value === 'object'\n\t&& value !== null\n\t&& !isBuiltIn(value);\n\nconst transform = (input, options = {}, isSeen = new WeakMap(), parentPath) => {\n\tif (!isObject(input)) {\n\t\treturn input;\n\t}\n\n\t// Check for circular references\n\tif (isSeen.has(input)) {\n\t\treturn isSeen.get(input);\n\t}\n\n\tconst {\n\t\texclude,\n\t\tpascalCase = false,\n\t\tstopPaths,\n\t\tdeep = false,\n\t\tpreserveConsecutiveUppercase = false,\n\t} = options;\n\n\tconst stopPathsSet = new Set(stopPaths);\n\n\t// Handle arrays directly\n\tif (Array.isArray(input)) {\n\t\tconst result = [];\n\t\tisSeen.set(input, result);\n\n\t\tfor (const item of input) {\n\t\t\tresult.push(isObject(item) ? transform(item, options, isSeen, parentPath) : item);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t// Pre-allocate the result object for circular reference handling\n\tconst result = {};\n\tisSeen.set(input, result);\n\n\tconst makeMapper = currentParentPath => (key, value) => {\n\t\t// Handle deep transformation\n\t\tif (deep && isObject(value)) {\n\t\t\tconst path = currentParentPath === undefined ? key : `${currentParentPath}.${key}`;\n\n\t\t\tif (!stopPathsSet.has(path)) {\n\t\t\t\t// Handle arrays and objects recursively\n\t\t\t\tvalue = Array.isArray(value)\n\t\t\t\t\t? value.map(item => isObject(item) ? transform(item, options, isSeen, path) : item)\n\t\t\t\t\t: transform(value, options, isSeen, path);\n\t\t\t}\n\t\t}\n\n\t\t// Skip transformation for excluded keys, numeric keys\n\t\t// Only transform string keys (preserve symbols and numbers)\n\t\tif (typeof key === 'string' && !isNumericKey(key) && !(exclude && has(exclude, key))) {\n\t\t\tconst cacheKey = pascalCase ? `${key}_` : key;\n\n\t\t\tif (cache.has(cacheKey)) {\n\t\t\t\tkey = cache.get(cacheKey);\n\t\t\t} else {\n\t\t\t\tkey = camelCase(key, {pascalCase, locale: false, preserveConsecutiveUppercase});\n\n\t\t\t\t// Only cache reasonable length keys to prevent memory abuse\n\t\t\t\tif (key.length < 100) {\n\t\t\t\t\tcache.set(cacheKey, key);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn [key, value];\n\t};\n\n\tconst mappedResult = mapObject(input, makeMapper(parentPath), {deep: false});\n\n\t// Copy properties to the pre-allocated result for circular reference handling\n\tObject.assign(result, mappedResult);\n\n\t// Preserve symbol keys (mapObject doesn't handle them)\n\tconst symbols = Object.getOwnPropertySymbols(input);\n\tfor (const symbol of symbols) {\n\t\tresult[symbol] = deep && isObject(input[symbol])\n\t\t\t? transform(input[symbol], options, isSeen, parentPath)\n\t\t\t: input[symbol];\n\t}\n\n\treturn result;\n};\n\nexport default function camelcaseKeys(input, options) {\n\tconst isSeen = new WeakMap();\n\n\tif (Array.isArray(input)) {\n\t\t// More efficient array handling - directly map the array\n\t\treturn input.map(item =>\n\t\t\tisObject(item)\n\t\t\t\t? transform(item, options, isSeen, undefined)\n\t\t\t\t: item);\n\t}\n\n\treturn transform(input, options, isSeen);\n}\n","const isObject = value => typeof value === 'object' && value !== null;\n\n// Customized for this use-case\nconst isObjectCustom = value =>\n\tisObject(value)\n\t&& !(value instanceof RegExp)\n\t&& !(value instanceof Error)\n\t&& !(value instanceof Date)\n\t&& !(globalThis.Blob && value instanceof globalThis.Blob);\n\nexport const mapObjectSkip = Symbol('mapObjectSkip');\n\nconst _mapObject = (object, mapper, options, isSeen = new WeakMap()) => {\n\toptions = {\n\t\tdeep: false,\n\t\ttarget: {},\n\t\t...options,\n\t};\n\n\tif (isSeen.has(object)) {\n\t\treturn isSeen.get(object);\n\t}\n\n\tisSeen.set(object, options.target);\n\n\tconst {target} = options;\n\tdelete options.target;\n\n\tconst mapArray = array => array.map(element => isObjectCustom(element) ? _mapObject(element, mapper, options, isSeen) : element);\n\tif (Array.isArray(object)) {\n\t\treturn mapArray(object);\n\t}\n\n\tfor (const [key, value] of Object.entries(object)) {\n\t\tconst mapResult = mapper(key, value, object);\n\n\t\tif (mapResult === mapObjectSkip) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet [newKey, newValue, {shouldRecurse = true} = {}] = mapResult;\n\n\t\t// Drop `__proto__` keys.\n\t\tif (newKey === '__proto__') {\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (options.deep && shouldRecurse && isObjectCustom(newValue)) {\n\t\t\tnewValue = Array.isArray(newValue)\n\t\t\t\t? mapArray(newValue)\n\t\t\t\t: _mapObject(newValue, mapper, options, isSeen);\n\t\t}\n\n\t\ttarget[newKey] = newValue;\n\t}\n\n\treturn target;\n};\n\nexport default function mapObject(object, mapper, options) {\n\tif (!isObject(object)) {\n\t\tthrow new TypeError(`Expected an object, got \\`${object}\\` (${typeof object})`);\n\t}\n\n\tif (Array.isArray(object)) {\n\t\tthrow new TypeError('Expected an object, got an array');\n\t}\n\n\treturn _mapObject(object, mapper, options);\n}\n","// Regexps involved with splitting words in various case formats.\nconst SPLIT_LOWER_UPPER_RE = /([\\p{Ll}\\d])(\\p{Lu})/gu;\nconst SPLIT_UPPER_UPPER_RE = /(\\p{Lu})([\\p{Lu}][\\p{Ll}])/gu;\n// Used to iterate over the initial split result and separate numbers.\nconst SPLIT_SEPARATE_NUMBER_RE = /(\\d)\\p{Ll}|(\\p{L})\\d/u;\n// Regexp involved with stripping non-word characters from the result.\nconst DEFAULT_STRIP_REGEXP = /[^\\p{L}\\d]+/giu;\n// The replacement value for splits.\nconst SPLIT_REPLACE_VALUE = \"$1\\0$2\";\n// The default characters to keep after transforming case.\nconst DEFAULT_PREFIX_SUFFIX_CHARACTERS = \"\";\n/**\n * Split any cased input strings into an array of words.\n */\nexport function split(value) {\n    let result = value.trim();\n    result = result\n        .replace(SPLIT_LOWER_UPPER_RE, SPLIT_REPLACE_VALUE)\n        .replace(SPLIT_UPPER_UPPER_RE, SPLIT_REPLACE_VALUE);\n    result = result.replace(DEFAULT_STRIP_REGEXP, \"\\0\");\n    let start = 0;\n    let end = result.length;\n    // Trim the delimiter from around the output string.\n    while (result.charAt(start) === \"\\0\")\n        start++;\n    if (start === end)\n        return [];\n    while (result.charAt(end - 1) === \"\\0\")\n        end--;\n    return result.slice(start, end).split(/\\0/g);\n}\n/**\n * Split the input string into an array of words, separating numbers.\n */\nexport function splitSeparateNumbers(value) {\n    const words = split(value);\n    for (let i = 0; i < words.length; i++) {\n        const word = words[i];\n        const match = SPLIT_SEPARATE_NUMBER_RE.exec(word);\n        if (match) {\n            const offset = match.index + (match[1] ?? match[2]).length;\n            words.splice(i, 1, word.slice(0, offset), word.slice(offset));\n        }\n    }\n    return words;\n}\n/**\n * Convert a string to space separated lower case (`foo bar`).\n */\nexport function noCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    return (prefix +\n        words.map(lowerFactory(options?.locale)).join(options?.delimiter ?? \" \") +\n        suffix);\n}\n/**\n * Convert a string to camel case (`fooBar`).\n */\nexport function camelCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    const lower = lowerFactory(options?.locale);\n    const upper = upperFactory(options?.locale);\n    const transform = options?.mergeAmbiguousCharacters\n        ? capitalCaseTransformFactory(lower, upper)\n        : pascalCaseTransformFactory(lower, upper);\n    return (prefix +\n        words\n            .map((word, index) => {\n            if (index === 0)\n                return lower(word);\n            return transform(word, index);\n        })\n            .join(options?.delimiter ?? \"\") +\n        suffix);\n}\n/**\n * Convert a string to pascal case (`FooBar`).\n */\nexport function pascalCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    const lower = lowerFactory(options?.locale);\n    const upper = upperFactory(options?.locale);\n    const transform = options?.mergeAmbiguousCharacters\n        ? capitalCaseTransformFactory(lower, upper)\n        : pascalCaseTransformFactory(lower, upper);\n    return prefix + words.map(transform).join(options?.delimiter ?? \"\") + suffix;\n}\n/**\n * Convert a string to pascal snake case (`Foo_Bar`).\n */\nexport function pascalSnakeCase(input, options) {\n    return capitalCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to capital case (`Foo Bar`).\n */\nexport function capitalCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    const lower = lowerFactory(options?.locale);\n    const upper = upperFactory(options?.locale);\n    return (prefix +\n        words\n            .map(capitalCaseTransformFactory(lower, upper))\n            .join(options?.delimiter ?? \" \") +\n        suffix);\n}\n/**\n * Convert a string to constant case (`FOO_BAR`).\n */\nexport function constantCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    return (prefix +\n        words.map(upperFactory(options?.locale)).join(options?.delimiter ?? \"_\") +\n        suffix);\n}\n/**\n * Convert a string to dot case (`foo.bar`).\n */\nexport function dotCase(input, options) {\n    return noCase(input, { delimiter: \".\", ...options });\n}\n/**\n * Convert a string to kebab case (`foo-bar`).\n */\nexport function kebabCase(input, options) {\n    return noCase(input, { delimiter: \"-\", ...options });\n}\n/**\n * Convert a string to path case (`foo/bar`).\n */\nexport function pathCase(input, options) {\n    return noCase(input, { delimiter: \"/\", ...options });\n}\n/**\n * Convert a string to path case (`Foo bar`).\n */\nexport function sentenceCase(input, options) {\n    const [prefix, words, suffix] = splitPrefixSuffix(input, options);\n    const lower = lowerFactory(options?.locale);\n    const upper = upperFactory(options?.locale);\n    const transform = capitalCaseTransformFactory(lower, upper);\n    return (prefix +\n        words\n            .map((word, index) => {\n            if (index === 0)\n                return transform(word);\n            return lower(word);\n        })\n            .join(options?.delimiter ?? \" \") +\n        suffix);\n}\n/**\n * Convert a string to snake case (`foo_bar`).\n */\nexport function snakeCase(input, options) {\n    return noCase(input, { delimiter: \"_\", ...options });\n}\n/**\n * Convert a string to header case (`Foo-Bar`).\n */\nexport function trainCase(input, options) {\n    return capitalCase(input, { delimiter: \"-\", ...options });\n}\nfunction lowerFactory(locale) {\n    return locale === false\n        ? (input) => input.toLowerCase()\n        : (input) => input.toLocaleLowerCase(locale);\n}\nfunction upperFactory(locale) {\n    return locale === false\n        ? (input) => input.toUpperCase()\n        : (input) => input.toLocaleUpperCase(locale);\n}\nfunction capitalCaseTransformFactory(lower, upper) {\n    return (word) => `${upper(word[0])}${lower(word.slice(1))}`;\n}\nfunction pascalCaseTransformFactory(lower, upper) {\n    return (word, index) => {\n        const char0 = word[0];\n        const initial = index > 0 && char0 >= \"0\" && char0 <= \"9\" ? \"_\" + char0 : upper(char0);\n        return initial + lower(word.slice(1));\n    };\n}\nfunction splitPrefixSuffix(input, options = {}) {\n    const splitFn = options.split ?? (options.separateNumbers ? splitSeparateNumbers : split);\n    const prefixCharacters = options.prefixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n    const suffixCharacters = options.suffixCharacters ?? DEFAULT_PREFIX_SUFFIX_CHARACTERS;\n    let prefixIndex = 0;\n    let suffixIndex = input.length;\n    while (prefixIndex < input.length) {\n        const char = input.charAt(prefixIndex);\n        if (!prefixCharacters.includes(char))\n            break;\n        prefixIndex++;\n    }\n    while (suffixIndex > prefixIndex) {\n        const index = suffixIndex - 1;\n        const char = input.charAt(index);\n        if (!suffixCharacters.includes(char))\n            break;\n        suffixIndex = index;\n    }\n    return [\n        input.slice(0, prefixIndex),\n        splitFn(input.slice(prefixIndex, suffixIndex)),\n        input.slice(suffixIndex),\n    ];\n}\n//# sourceMappingURL=index.js.map","'use strict'\n\nimport map from 'map-obj'\nimport { snakeCase } from 'change-case'\n\nconst PlainObjectConstructor = {}.constructor\n\nfunction snakecaseKeys (obj, options) {\n  if (Array.isArray(obj)) {\n    if (obj.some(item => item.constructor !== PlainObjectConstructor)) {\n      throw new Error('obj must be array of plain objects')\n    }\n\n    options = { deep: true, exclude: [], parsingOptions: {}, ...options }\n    const convertCase = options.snakeCase || ((key) => snakeCase(key, options.parsingOptions))\n\n    // Handle arrays by mapping each element\n    return obj.map(item => {\n      return map(item, (key, val) => {\n        return [\n          matches(options.exclude, key) ? key : convertCase(key),\n          val,\n          mapperOptions(key, val, options)\n        ]\n      }, options)\n    })\n  } else {\n    if (obj.constructor !== PlainObjectConstructor) {\n      throw new Error('obj must be an plain object')\n    }\n  }\n\n  options = { deep: true, exclude: [], parsingOptions: {}, ...options }\n\n  const convertCase = options.snakeCase || ((key) => snakeCase(key, options.parsingOptions))\n\n  return map(obj, (key, val) => {\n    return [\n      matches(options.exclude, key) ? key : convertCase(key),\n      val,\n      mapperOptions(key, val, options)\n    ]\n  }, options)\n}\n\nfunction matches (patterns, value) {\n  return patterns.some(pattern => {\n    return typeof pattern === 'string'\n      ? pattern === value\n      : pattern.test(value)\n  })\n}\n\nfunction mapperOptions (key, val, options) {\n  return options.shouldRecurse\n    ? { shouldRecurse: options.shouldRecurse(key, val) }\n    : undefined\n}\n\nexport default snakecaseKeys\n","import camelcaseKeys from \"camelcase-keys\";\nimport snakecaseKeys from \"snakecase-keys\";\nimport { z } from \"zod/v4\";\n\n// Values under these keys are user-controlled maps or JSON, so casing conversion\n// must rename the container but preserve every key inside it.\nconst defaultOpaqueKeys = new Set([\n  \"headers\",\n  \"variables\",\n  \"attributes\",\n  \"body\",\n  \"data\",\n  \"userMetadata\",\n]);\n\n// camelcase-keys cannot recover consecutive API acronyms from snake_case on its own.\nconst apiAcronymWireKeys: Readonly<Record<string, string>> = {\n  base_url: \"base_URL\",\n  prefer_css_page_size: \"prefer_CSS_page_size\",\n};\n\nexport type WireCasingOptions = {\n  /** API-side container keys whose nested, user-controlled keys must retain their casing. */\n  readonly opaqueKeys?: readonly string[];\n  /**\n   * API-side container keys whose nested fields use normal protocol casing,\n   * even when the key is opaque by default.\n   */\n  readonly transformKeys?: readonly string[];\n};\n\nexport function wireSchema<TSchema extends z.ZodType>(\n  schema: TSchema,\n  options: WireCasingOptions = {},\n): z.ZodType<z.output<TSchema>, unknown> {\n  return z.preprocess(\n    (value) =>\n      isCaseable(value)\n        ? camelcaseKeys(preserveApiAcronyms(value, options.opaqueKeys), {\n            deep: true,\n            preserveConsecutiveUppercase: true,\n            stopPaths: findOpaquePaths(value, options),\n          })\n        : value,\n    schema,\n  );\n}\n\nexport function encodeWireValue(value: unknown, options: WireCasingOptions = {}) {\n  const opaqueKeys = resolveOpaqueKeys(options);\n  return z.json().parse(\n    isCaseable(value)\n      ? snakecaseKeys(value, {\n          deep: true,\n          shouldRecurse: (key) => !opaqueKeys.has(String(key)),\n        })\n      : value,\n  );\n}\n\nexport function toWireJsonSchema(\n  value: unknown,\n  preservedPropertyNames: ReadonlySet<string> = new Set(),\n): unknown {\n  if (Array.isArray(value)) {\n    return value.map((entry) => toWireJsonSchema(entry, preservedPropertyNames));\n  }\n  if (!isRecord(value)) return value;\n\n  const renamed = Object.fromEntries(\n    Object.entries(value).map(([key, entry]) => [\n      key,\n      toWireJsonSchema(entry, preservedPropertyNames),\n    ]),\n  );\n  const properties = value.properties;\n\n  if (isRecord(properties)) {\n    renamed.properties = Object.fromEntries(\n      Object.entries(properties).map(([key, entry]) => [\n        preservedPropertyNames.has(key) ? key : toWirePropertyName(key),\n        toWireJsonSchema(entry, preservedPropertyNames),\n      ]),\n    );\n  }\n\n  if (Array.isArray(value.required)) {\n    renamed.required = value.required\n      .filter((key): key is string => typeof key === \"string\")\n      .map((key) => (preservedPropertyNames.has(key) ? key : toWirePropertyName(key)));\n  }\n\n  return renamed;\n}\n\nfunction toWirePropertyName(key: string): string {\n  if (key.startsWith(\"$\") || key.startsWith(\"_\")) return key;\n  return Object.keys(snakecaseKeys({ [key]: null }, { deep: false }))[0] ?? key;\n}\n\nfunction findOpaquePaths(value: unknown, options: WireCasingOptions = {}): string[] {\n  const paths: string[] = [];\n  const opaqueKeys = new Set(\n    Object.keys(\n      snakecaseKeys(Object.fromEntries([...resolveOpaqueKeys(options)].map((key) => [key, null]))),\n    ),\n  );\n\n  function visit(entry: unknown, path: string): void {\n    if (Array.isArray(entry)) {\n      entry.forEach((item) => visit(item, path));\n      return;\n    }\n    if (!isRecord(entry)) return;\n\n    for (const [key, child] of Object.entries(entry)) {\n      const childPath = path ? `${path}.${key}` : key;\n      if (opaqueKeys.has(key)) {\n        paths.push(childPath);\n      } else {\n        visit(child, childPath);\n      }\n    }\n  }\n\n  visit(value, \"\");\n  return paths;\n}\n\nfunction resolveOpaqueKeys(options: WireCasingOptions): Set<string> {\n  const opaqueKeys = new Set([...defaultOpaqueKeys, ...(options.opaqueKeys ?? [])]);\n  for (const key of options.transformKeys ?? []) {\n    opaqueKeys.delete(key);\n  }\n  return opaqueKeys;\n}\n\nfunction preserveApiAcronyms(\n  value: Record<string, unknown> | Record<string, unknown>[],\n  additionalOpaqueKeys: readonly string[] = [],\n): Record<string, unknown> | Record<string, unknown>[] {\n  const opaqueKeys = new Set(\n    Object.keys(\n      snakecaseKeys(\n        Object.fromEntries(\n          [...defaultOpaqueKeys, ...additionalOpaqueKeys].map((key) => [key, null]),\n        ),\n      ),\n    ),\n  );\n\n  function visit(entry: unknown): unknown {\n    if (Array.isArray(entry)) return entry.map(visit);\n    if (!isRecord(entry)) return entry;\n    return Object.fromEntries(\n      Object.entries(entry).map(([key, child]) => [\n        Object.hasOwn(apiAcronymWireKeys, key) ? apiAcronymWireKeys[key] : key,\n        opaqueKeys.has(key) ? child : visit(child),\n      ]),\n    );\n  }\n\n  return visit(value) as Record<string, unknown> | Record<string, unknown>[];\n}\n\nfunction isCaseable(value: unknown): value is Record<string, unknown> | Record<string, unknown>[] {\n  return isRecord(value) || (Array.isArray(value) && value.every(isRecord));\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n","","import { z } from \"zod/v4\";\nimport protocolPackageJson from \"./package.json\" with { type: \"json\" };\n\n// SemVer 2.0.0, adapted from the expression published at semver.org.\nexport const STAGEHAND_SEMVER_PATTERN =\n  /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\\+([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?$/u;\n\nexport const StagehandProtocolVersionSchema = z\n  .string()\n  .regex(STAGEHAND_SEMVER_PATTERN, \"Expected a SemVer 2.0.0 version\");\n\nexport const STAGEHAND_PROTOCOL_VERSION = StagehandProtocolVersionSchema.parse(\n  protocolPackageJson.version,\n);\n\ntype ParsedProtocolVersion = {\n  major: bigint;\n  minor: bigint;\n  prerelease?: string;\n};\n\nexport type ProtocolIncompatibilityReason =\n  | \"protocol-invalid-version\"\n  | \"protocol-major-mismatch\"\n  | \"protocol-server-too-old\"\n  | \"protocol-prerelease-mismatch\";\n\nexport type ProtocolCompatibility =\n  | { compatible: true }\n  | {\n      compatible: false;\n      reason: ProtocolIncompatibilityReason;\n    };\n\n/**\n * Stable protocol releases are compatible when their majors match and the\n * server minor is at least the client minor. Patch differences are compatible.\n * Prerelease protocol versions must match exactly.\n */\nexport function checkProtocolCompatibility(\n  clientVersion: string,\n  serverVersion: string,\n): ProtocolCompatibility {\n  const client = parseProtocolVersion(clientVersion);\n  const server = parseProtocolVersion(serverVersion);\n\n  if (client === undefined || server === undefined) {\n    return { compatible: false, reason: \"protocol-invalid-version\" };\n  }\n\n  if (client.prerelease !== undefined || server.prerelease !== undefined) {\n    return clientVersion === serverVersion\n      ? { compatible: true }\n      : { compatible: false, reason: \"protocol-prerelease-mismatch\" };\n  }\n  if (client.major !== server.major) {\n    return { compatible: false, reason: \"protocol-major-mismatch\" };\n  }\n  if (server.minor < client.minor) {\n    return { compatible: false, reason: \"protocol-server-too-old\" };\n  }\n  return { compatible: true };\n}\n\nfunction parseProtocolVersion(version: string): ParsedProtocolVersion | undefined {\n  const match = STAGEHAND_SEMVER_PATTERN.exec(version);\n  if (!match) return undefined;\n  return {\n    major: BigInt(match[1]),\n    minor: BigInt(match[2]),\n    ...(match[4] === undefined ? {} : { prerelease: match[4] }),\n  };\n}\n","import { z } from \"zod/v4\";\nimport { JSONRPCRequestIdSchema } from \"./json-rpc/schemas.ts\";\nimport { StagehandProtocolVersionSchema } from \"./protocol-version.ts\";\n\nexport { STAGEHAND_PROTOCOL_VERSION } from \"./protocol-version.ts\";\n\n// Providers determine model availability; Stagehand only validates the ID format.\nconst ModelIdSchema = z.string().min(1).regex(/^\\S+$/);\n\nexport const OpenAIModelIdSchema = ModelIdSchema.meta({ id: \"OpenAIModelId\" });\nexport const AnthropicModelIdSchema = ModelIdSchema.meta({ id: \"AnthropicModelId\" });\nexport const GoogleModelIdSchema = ModelIdSchema.meta({ id: \"GoogleModelId\" });\nexport const GroqModelIdSchema = ModelIdSchema.meta({ id: \"GroqModelId\" });\nexport const CerebrasModelIdSchema = ModelIdSchema.meta({ id: \"CerebrasModelId\" });\n\nexport const ModelProviderSchema = z\n  .enum([\"openai\", \"anthropic\", \"google\", \"groq\", \"cerebras\"])\n  .meta({ id: \"ModelProvider\" });\n\nexport const OpenAIModelNameSchema = z\n  .templateLiteral([\"openai/\", OpenAIModelIdSchema])\n  .meta({ id: \"OpenAIModelName\" });\nexport const AnthropicModelNameSchema = z\n  .templateLiteral([\"anthropic/\", AnthropicModelIdSchema])\n  .meta({ id: \"AnthropicModelName\" });\nexport const GoogleModelNameSchema = z\n  .templateLiteral([\"google/\", GoogleModelIdSchema])\n  .meta({ id: \"GoogleModelName\" });\nexport const GroqModelNameSchema = z\n  .templateLiteral([\"groq/\", GroqModelIdSchema])\n  .meta({ id: \"GroqModelName\" });\nexport const CerebrasModelNameSchema = z\n  .templateLiteral([\"cerebras/\", CerebrasModelIdSchema])\n  .meta({ id: \"CerebrasModelName\" });\n\nexport const ModelNameSchema = z\n  .union([\n    OpenAIModelNameSchema,\n    AnthropicModelNameSchema,\n    GoogleModelNameSchema,\n    GroqModelNameSchema,\n    CerebrasModelNameSchema,\n  ])\n  .meta({\n    id: \"ModelName\",\n    description: \"A model name with a supported provider prefix\",\n  });\n\nexport const CookieSchema = z\n  .strictObject({\n    name: z.string(),\n    value: z.string(),\n    domain: z.string(),\n    path: z.string(),\n    expires: z.number(),\n    httpOnly: z.boolean(),\n    secure: z.boolean(),\n    sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]),\n  })\n  .meta({ id: \"Cookie\" });\n\nexport const CookieParamSchema = z\n  .strictObject({\n    name: z.string(),\n    value: z.string(),\n    url: z.string().optional(),\n    domain: z.string().optional(),\n    path: z.string().optional(),\n    expires: z.number().optional(),\n    httpOnly: z.boolean().optional(),\n    secure: z.boolean().optional(),\n    sameSite: z.enum([\"Strict\", \"Lax\", \"None\"]).optional(),\n  })\n  .superRefine((cookie, context) => {\n    let parsedUrl: URL | undefined;\n    let invalidUrl = false;\n\n    if (!cookie.url && !(cookie.domain && cookie.path)) {\n      context.addIssue({\n        code: \"custom\",\n        path: [\"url\"],\n        message: `Cookie \"${cookie.name}\" must have a url or a domain/path pair`,\n      });\n    }\n\n    if (cookie.url && cookie.domain) {\n      context.addIssue({\n        code: \"custom\",\n        path: [\"url\"],\n        message: `Cookie \"${cookie.name}\" should have either url or domain, not both`,\n      });\n    }\n\n    if (cookie.url && cookie.path) {\n      context.addIssue({\n        code: \"custom\",\n        path: [\"url\"],\n        message: `Cookie \"${cookie.name}\" should have either url or path, not both`,\n      });\n    }\n\n    if (cookie.expires !== undefined && cookie.expires < 0 && cookie.expires !== -1) {\n      context.addIssue({\n        code: \"custom\",\n        path: [\"expires\"],\n        message: `Cookie \"${cookie.name}\" has an invalid expires value; use -1 for session cookies or a positive unix timestamp`,\n      });\n    }\n\n    if (cookie.url === \"about:blank\") {\n      invalidUrl = true;\n      context.addIssue({\n        code: \"custom\",\n        path: [\"url\"],\n        message: `Blank page cannot have cookie \"${cookie.name}\"`,\n      });\n    } else if (cookie.url?.startsWith(\"data:\")) {\n      invalidUrl = true;\n      context.addIssue({\n        code: \"custom\",\n        path: [\"url\"],\n        message: `Data URL page cannot have cookie \"${cookie.name}\"`,\n      });\n    } else if (cookie.url) {\n      try {\n        parsedUrl = new URL(cookie.url);\n      } catch {\n        invalidUrl = true;\n        context.addIssue({\n          code: \"custom\",\n          path: [\"url\"],\n          message: `Cookie \"${cookie.name}\" has an invalid url: \"${cookie.url}\"`,\n        });\n      }\n    }\n\n    const effectivelySecure = cookie.url\n      ? parsedUrl?.protocol === \"https:\"\n      : cookie.secure === true;\n    if (cookie.sameSite === \"None\" && !invalidUrl && !effectivelySecure) {\n      context.addIssue({\n        code: \"custom\",\n        path: [\"secure\"],\n        message:\n          `Cookie \"${cookie.name}\" has sameSite: \"None\" without secure: true. ` +\n          `Browsers require secure: true when sameSite is \"None\".`,\n      });\n    }\n  })\n  .meta({ id: \"CookieParam\" });\n\nexport const CookieRegexSchema = z\n  .strictObject({\n    source: z.string(),\n    flags: z\n      .string()\n      .regex(/^[dgimsuvy]*$/)\n      .optional(),\n  })\n  .superRefine(({ source, flags }, context) => {\n    try {\n      new RegExp(source, flags);\n    } catch {\n      context.addIssue({\n        code: \"custom\",\n        message: \"Invalid cookie filter regular expression\",\n      });\n    }\n  })\n  .meta({ id: \"CookieRegex\" });\n\nexport const CookieFilterSchema = z\n  .union([z.string(), CookieRegexSchema])\n  .meta({ id: \"CookieFilter\" });\n\nexport const ClearCookieOptionsSchema = z\n  .strictObject({\n    name: CookieFilterSchema.optional(),\n    domain: CookieFilterSchema.optional(),\n    path: CookieFilterSchema.optional(),\n  })\n  .meta({ id: \"ClearCookieOptions\" });\n\nexport const DomainPolicySchema = z\n  .strictObject({\n    allowedDomains: z.array(z.string()).optional(),\n    blockedDomains: z.array(z.string()).optional(),\n  })\n  .meta({ id: \"DomainPolicy\" });\n\n// These schemas follow the MCP createMessage message and content shapes, with\n// Stagehand's structured-output contract layered on top.\nexport const LLMRoleSchema = z.enum([\"user\", \"assistant\"]).meta({ id: \"LLMRole\" });\n\nexport const LLMAnnotationsSchema = z\n  .strictObject({\n    audience: z.array(LLMRoleSchema).optional(),\n    priority: z.number().min(0).max(1).optional(),\n    lastModified: z.string().optional(),\n  })\n  .meta({ id: \"LLMAnnotations\" });\n\nexport const LLMTextContentSchema = z\n  .strictObject({\n    type: z.literal(\"text\"),\n    text: z.string(),\n    annotations: LLMAnnotationsSchema.optional(),\n  })\n  .meta({ id: \"LLMTextContent\" });\n\nexport const LLMImageContentSchema = z\n  .strictObject({\n    type: z.literal(\"image\"),\n    data: z.base64().meta({ format: \"byte\" }),\n    mimeType: z.string(),\n    annotations: LLMAnnotationsSchema.optional(),\n  })\n  .meta({ id: \"LLMImageContent\" });\n\nexport const LLMToolUseContentSchema = z\n  .strictObject({\n    type: z.literal(\"tool_use\"),\n    id: z.string(),\n    name: z.string(),\n    input: z.record(z.string(), z.json()),\n  })\n  .meta({ id: \"LLMToolUseContent\" });\n\nconst LLMToolResultContentBlockSchema = z\n  .discriminatedUnion(\"type\", [LLMTextContentSchema, LLMImageContentSchema])\n  .meta({ id: \"LLMToolResultContentBlock\" });\n\nexport const LLMToolResultContentSchema = z\n  .strictObject({\n    type: z.literal(\"tool_result\"),\n    toolUseId: z.string(),\n    content: z.array(LLMToolResultContentBlockSchema),\n    structuredContent: z.record(z.string(), z.json()).optional(),\n    isError: z.boolean().optional(),\n  })\n  .meta({ id: \"LLMToolResultContent\" });\n\nexport const LLMMessageContentBlockSchema = z\n  .discriminatedUnion(\"type\", [\n    LLMTextContentSchema,\n    LLMImageContentSchema,\n    LLMToolUseContentSchema,\n    LLMToolResultContentSchema,\n  ])\n  .meta({ id: \"LLMMessageContentBlock\" });\n\nexport const LLMMessageSchema = z\n  .strictObject({\n    role: LLMRoleSchema,\n    content: z.union([LLMMessageContentBlockSchema, z.array(LLMMessageContentBlockSchema)]),\n  })\n  .meta({ id: \"LLMMessage\" });\n\nexport const LLMToolAnnotationsSchema = z\n  .strictObject({\n    title: z.string().optional(),\n    readOnlyHint: z.boolean().optional(),\n    destructiveHint: z.boolean().optional(),\n    idempotentHint: z.boolean().optional(),\n    openWorldHint: z.boolean().optional(),\n  })\n  .meta({ id: \"LLMToolAnnotations\" });\n\nexport const LLMToolExecutionSchema = z\n  .strictObject({\n    taskSupport: z.enum([\"forbidden\", \"optional\", \"required\"]).optional(),\n  })\n  .meta({ id: \"LLMToolExecution\" });\n\nexport const LLMToolIconSchema = z\n  .strictObject({\n    src: z.url(),\n    mimeType: z.string().optional(),\n    sizes: z.array(z.string()).optional(),\n    theme: z.enum([\"light\", \"dark\"]).optional(),\n  })\n  .meta({ id: \"LLMToolIcon\" });\n\nconst LLMToolJsonSchema = z\n  .strictObject({\n    $schema: z.string().optional(),\n    type: z.literal(\"object\"),\n    properties: z.record(z.string(), z.record(z.string(), z.json())).optional(),\n    required: z.array(z.string()).optional(),\n  })\n  .meta({ id: \"LLMToolJson\" });\n\nexport const LLMToolSchema = z\n  .strictObject({\n    type: z.literal(\"function\"),\n    name: z.string(),\n    description: z.string(),\n    parameters: z.record(z.string(), z.unknown()),\n  })\n  .required()\n  .meta({ id: \"LLMTool\" });\n\nexport const LLMClientToolSchema = z\n  .strictObject({\n    name: z.string(),\n    title: z.string().optional(),\n    icons: z.array(LLMToolIconSchema).optional(),\n    description: z.string().optional(),\n    inputSchema: LLMToolJsonSchema,\n    execution: LLMToolExecutionSchema.optional(),\n    outputSchema: LLMToolJsonSchema.optional(),\n    annotations: LLMToolAnnotationsSchema.optional(),\n  })\n  .meta({ id: \"LLMClientTool\" });\n\nexport const LLMToolChoiceSchema = z\n  .strictObject({\n    mode: z.enum([\"auto\", \"required\", \"none\"]).optional(),\n  })\n  .meta({ id: \"LLMToolChoice\" });\n\nexport const LLMTextResponseFormatSchema = z\n  .strictObject({\n    type: z.literal(\"text\"),\n  })\n  .meta({ id: \"LLMTextResponseFormat\" });\n\nexport const LLMJsonSchemaResponseFormatSchema = z\n  .strictObject({\n    type: z.literal(\"json_schema\"),\n    name: z.string(),\n    description: z.string().optional(),\n    schema: z.json(),\n  })\n  .meta({ id: \"LLMJsonSchemaResponseFormat\" });\n\nexport const LLMResponseFormatSchema = z\n  .discriminatedUnion(\"type\", [LLMTextResponseFormatSchema, LLMJsonSchemaResponseFormatSchema])\n  .meta({ id: \"LLMResponseFormat\" });\n\nconst LLMGenerateBaseParamsSchema = z\n  .strictObject({\n    messages: z.array(LLMMessageSchema),\n    systemPrompt: z.string().optional(),\n    temperature: z.number().optional(),\n    stopSequences: z.array(z.string()).optional(),\n  })\n  .meta({ id: \"LLMGenerateBaseParams\" });\n\nexport const LLMMessageGenerateParamsSchema = LLMGenerateBaseParamsSchema.extend({\n  tools: z.array(LLMClientToolSchema).optional(),\n  toolChoice: LLMToolChoiceSchema.optional(),\n  responseFormat: LLMTextResponseFormatSchema.optional(),\n}).meta({ id: \"LLMMessageGenerateParams\" });\n\nexport const LLMStructuredGenerateParamsSchema = LLMGenerateBaseParamsSchema.extend({\n  responseFormat: LLMJsonSchemaResponseFormatSchema,\n}).meta({ id: \"LLMStructuredGenerateParams\" });\n\nexport const LLMGenerateParamsSchema = z\n  .union([LLMStructuredGenerateParamsSchema, LLMMessageGenerateParamsSchema])\n  .meta({ id: \"LLMGenerateParams\" });\n\nexport const LLMUsageSchema = z\n  .strictObject({\n    inputTokens: z.number().int().nonnegative(),\n    outputTokens: z.number().int().nonnegative(),\n    totalTokens: z.number().int().nonnegative(),\n    reasoningTokens: z.number().int().nonnegative().optional(),\n    cachedInputTokens: z.number().int().nonnegative().optional(),\n  })\n  .meta({ id: \"LLMUsage\" });\n\nconst LLMGenerateBaseResultSchema = z\n  .strictObject({\n    role: LLMRoleSchema,\n    content: z.union([LLMMessageContentBlockSchema, z.array(LLMMessageContentBlockSchema)]),\n    stopReason: z.string().optional(),\n    usage: LLMUsageSchema.optional(),\n  })\n  .meta({ id: \"LLMGenerateBaseResult\" });\n\nexport const LLMMessageGenerateResultSchema = LLMGenerateBaseResultSchema.extend({\n  outputFormat: z.literal(\"text\"),\n}).meta({ id: \"LLMMessageGenerateResult\" });\n\nexport const LLMStructuredGenerateResultSchema = LLMGenerateBaseResultSchema.extend({\n  outputFormat: z.literal(\"json_schema\"),\n  structuredContent: z.json(),\n}).meta({ id: \"LLMStructuredGenerateResult\" });\n\nexport const LLMGenerateResultSchema = z\n  .discriminatedUnion(\"outputFormat\", [\n    LLMMessageGenerateResultSchema,\n    LLMStructuredGenerateResultSchema,\n  ])\n  .meta({ id: \"LLMGenerateResult\" });\n\n/**\n * Builds the result validator for a particular llm.generate request.\n *\n * Prefer the original in-memory Zod schema. When only the wire JSON Schema is\n * available, Zod can recreate an equivalent validator.\n */\nexport function createLLMGenerateResultSchema(\n  params: z.output<typeof LLMGenerateParamsSchema>,\n  originalStructuredContentSchema?: z.ZodType,\n) {\n  if (params.responseFormat?.type !== \"json_schema\") {\n    return LLMMessageGenerateResultSchema;\n  }\n\n  const structuredContentSchema =\n    originalStructuredContentSchema ??\n    z.fromJSONSchema(params.responseFormat.schema as Parameters<typeof z.fromJSONSchema>[0]);\n\n  return LLMGenerateBaseResultSchema.extend({\n    outputFormat: z.literal(\"json_schema\"),\n    structuredContent: structuredContentSchema,\n  });\n}\n\nexport const VariablePrimitiveSchema = z\n  .union([z.string(), z.number(), z.boolean()])\n  .meta({ id: \"VariablePrimitive\" });\n\nexport const VariableValueSchema = z\n  .union([\n    VariablePrimitiveSchema,\n    z\n      .strictObject({\n        value: VariablePrimitiveSchema,\n        description: z.string().optional(),\n      })\n      .meta({ id: \"DescribedVariableValue\" }),\n  ])\n  .meta({ id: \"VariableValue\" });\n\nexport const VariablesSchema = z.record(z.string(), VariableValueSchema).meta({ id: \"Variables\" });\n\nexport const PageLocatorSchema = z\n  .strictObject({\n    pageIdx: z.number().int().nonnegative().nullable().optional(),\n    url: z.string().nullable().optional(),\n    title: z.string().nullable().optional(),\n    active: z.boolean().nullable().optional(),\n    targetId: z.string().nullable().optional(),\n    tabId: z.number().int().nonnegative().nullable().optional(),\n    frameId: z.string().nullable().optional(),\n  })\n  .meta({ id: \"PageLocator\" });\n\nexport const LocatorSchema = z\n  .strictObject({\n    selector: z.string().min(1),\n    nth: z.number().int().nonnegative().optional(),\n  })\n  .meta({ id: \"Locator\" });\n\nexport const StagehandMetricsSchema = z\n  .strictObject({\n    actPromptTokens: z.number(),\n    actCompletionTokens: z.number(),\n    actReasoningTokens: z.number(),\n    actCachedInputTokens: z.number(),\n    actInferenceTimeMs: z.number(),\n    extractPromptTokens: z.number(),\n    extractCompletionTokens: z.number(),\n    extractReasoningTokens: z.number(),\n    extractCachedInputTokens: z.number(),\n    extractInferenceTimeMs: z.number(),\n    observePromptTokens: z.number(),\n    observeCompletionTokens: z.number(),\n    observeReasoningTokens: z.number(),\n    observeCachedInputTokens: z.number(),\n    observeInferenceTimeMs: z.number(),\n    totalPromptTokens: z.number(),\n    totalCompletionTokens: z.number(),\n    totalReasoningTokens: z.number(),\n    totalCachedInputTokens: z.number(),\n    totalInferenceTimeMs: z.number(),\n  })\n  .meta({ id: \"StagehandMetrics\" });\n\n// Chromium clamps timer delays to a signed 32-bit integer. Reserve the SDK's\n// 10-second RPC response grace period so both timers remain within that limit.\nexport const MAX_CALLBACK_BATCH_TIMEOUT_MS = 2_147_483_647 - 10_000;\n\nexport const CallbackBatchOptionsSchema = z\n  .strictObject({\n    pageId: z.string().min(1).optional(),\n    timeout: z.number().int().positive().max(MAX_CALLBACK_BATCH_TIMEOUT_MS).default(30_000),\n  })\n  .meta({ id: \"CallbackBatchOptions\" });\n\nexport const CallbackBatchParamsSchema = z\n  .strictObject({\n    callbackSource: z.string().min(1),\n    input: z.json().optional(),\n    options: CallbackBatchOptionsSchema,\n  })\n  .meta({ id: \"CallbackBatchParams\" });\n\nexport const CallbackBatchResultSchema = z\n  .strictObject({\n    value: z.json().optional(),\n  })\n  .meta({ id: \"CallbackBatchResult\" });\n\nexport const CacheStatusSchema = z.enum([\"HIT\", \"MISS\", \"DISABLED\"]).meta({ id: \"CacheStatus\" });\n\n/** Server-side caching configuration: a boolean toggle, or an object enabling\n * caching with an optional hit-count threshold (how many identical results\n * must be seen before the cache serves a hit; overrides the project's\n * configured threshold). */\nexport const CachingSchema = z\n  .union([\n    z.boolean(),\n    z.strictObject({\n      threshold: z.number().int().positive().optional(),\n    }),\n  ])\n  .meta({ id: \"Caching\" });\n\nexport const ApiKeyAuthSchema = z\n  .strictObject({\n    type: z.literal(\"apiKey\"),\n    apiKey: z.string().min(1),\n  })\n  .meta({ id: \"ApiKeyAuth\" });\n\n/** Detailed model configuration object */\nexport const GoogleServiceAccountCredentialsSchema = z\n  .strictObject({\n    type: z.literal(\"service_account\").optional(),\n    projectId: z.string().optional(),\n    privateKeyId: z.string().optional(),\n    privateKey: z.string(),\n    clientEmail: z.string(),\n    clientId: z.string().optional(),\n    authUri: z.url().optional(),\n    tokenUri: z.url().optional(),\n    authProviderX509CertUrl: z.url().optional(),\n    clientX509CertUrl: z.url().optional(),\n    universeDomain: z.string().optional(),\n  })\n  .meta({ id: \"GoogleServiceAccountCredentials\" });\n\nexport const GoogleServiceAccountAuthSchema = z\n  .strictObject({\n    type: z.literal(\"googleServiceAccount\").meta({\n      description:\n        \"Use inline Google Cloud service account credentials for provider authentication\",\n    }),\n    credentials: GoogleServiceAccountCredentialsSchema.meta({\n      description: \"Google Cloud service account credentials\",\n    }),\n    scopes: z\n      .union([z.string(), z.array(z.string())])\n      .optional()\n      .meta({\n        description: \"Google auth scopes for the desired API request\",\n      }),\n    projectId: z.string().optional().meta({\n      description: \"Google Cloud project ID used by google-auth-library\",\n    }),\n    universeDomain: z.string().optional().meta({\n      description: \"Google Cloud universe domain\",\n    }),\n  })\n  .meta({ id: \"GoogleServiceAccountAuth\" });\n\nexport const AzureEntraIdAuthSchema = z\n  .strictObject({\n    type: z.literal(\"azureEntraId\").meta({\n      description: \"Use a Microsoft Entra ID bearer token for authentication\",\n    }),\n    token: z.string().min(1).meta({\n      description: \"Microsoft Entra ID bearer token for Azure OpenAI\",\n    }),\n  })\n  .meta({ id: \"AzureEntraIdAuth\" });\n\nexport const VertexProviderOptionsSchema = z\n  .strictObject({\n    project: z.string().meta({\n      description: \"Google Cloud project ID for Vertex AI models\",\n      example: \"my-gcp-project\",\n    }),\n    location: z.string().meta({\n      description: \"Google Cloud location for Vertex AI models\",\n      example: \"us-central1\",\n    }),\n    baseURL: z.url().optional().meta({\n      description: \"Base URL for the Vertex AI provider\",\n    }),\n    headers: z.record(z.string(), z.string()).optional().meta({\n      description: \"Custom headers sent with every request to the Vertex AI provider\",\n    }),\n  })\n  .meta({ id: \"VertexProviderOptions\" });\n\nexport const AzureProviderOptionsSchema = z\n  .strictObject({\n    resourceName: z.string().optional().meta({\n      description: \"Azure OpenAI resource name\",\n      example: \"my-azure-openai-resource\",\n    }),\n    baseURL: z.url().optional().meta({\n      description: \"Base URL for the Azure OpenAI provider\",\n    }),\n    apiVersion: z.string().optional().meta({\n      description: \"Azure OpenAI API version\",\n      example: \"2024-10-01-preview\",\n    }),\n    useDeploymentBasedUrls: z.boolean().optional().meta({\n      description: \"Whether to use deployment-based Azure OpenAI URLs\",\n    }),\n    headers: z.record(z.string(), z.string()).optional().meta({\n      description: \"Custom headers sent with every request to the Azure OpenAI provider\",\n    }),\n  })\n  .meta({ id: \"AzureProviderOptions\" });\n\nexport const VertexModelProviderOptionsSchema = z\n  .strictObject({\n    type: z.literal(\"vertex\"),\n    options: VertexProviderOptionsSchema.meta({\n      description: \"Vertex AI provider-specific settings\",\n    }),\n  })\n  .meta({ id: \"VertexModelProviderOptions\" });\n\nexport const AzureModelProviderOptionsSchema = z\n  .strictObject({\n    type: z.literal(\"azure\"),\n    options: AzureProviderOptionsSchema.meta({\n      description: \"Azure OpenAI provider-specific settings\",\n    }),\n  })\n  .meta({ id: \"AzureModelProviderOptions\" });\n\nexport const ThinkingEffortSchema = z\n  .enum([\"none\", \"low\", \"medium\", \"high\", \"xhigh\", \"max\"])\n  .meta({ id: \"ThinkingEffort\" });\n\nexport const ModelAuthSchema = z\n  .discriminatedUnion(\"type\", [\n    ApiKeyAuthSchema,\n    GoogleServiceAccountAuthSchema,\n    AzureEntraIdAuthSchema,\n  ])\n  .meta({ id: \"ModelAuth\" });\n\nexport const ModelProviderOptionsSchema = z\n  .discriminatedUnion(\"type\", [VertexModelProviderOptionsSchema, AzureModelProviderOptionsSchema])\n  .meta({ id: \"ModelProviderOptions\" });\n\nexport const ClientOptionsBaseSchema = z\n  .strictObject({\n    provider: ModelProviderSchema.optional(),\n    auth: ModelAuthSchema.optional(),\n    providerOptions: ModelProviderOptionsSchema.optional(),\n    baseURL: z.string().optional(),\n    organization: z.string().optional(),\n    thinkingBudget: z.number().optional(),\n    thinkingEffort: ThinkingEffortSchema.optional(),\n    headers: z.record(z.string(), z.string()).optional(),\n    reasoningEffort: z.string().optional(),\n  })\n  .meta({ id: \"ClientOptionsBase\" });\n\nexport const ClientOptionsSchema = ClientOptionsBaseSchema.default({}).meta({\n  id: \"ClientOptions\",\n});\n\nconst ModelConnectionSchema = z\n  .strictObject({\n    apiKey: z.string().min(1).optional().meta({\n      description: \"API key for the model provider\",\n      example: \"sk-some-openai-api-key\",\n    }),\n    headers: z.record(z.string(), z.string()).optional().meta({\n      description: \"Custom headers sent with every request to the model provider\",\n    }),\n  })\n  .meta({ id: \"ModelConnection\" });\n\nexport const ModelConfigSchema = ModelConnectionSchema.extend({\n  modelName: ModelNameSchema.meta({\n    description: \"A model name with a supported provider prefix\",\n    example: \"openai/gpt-5.4-mini\",\n  }),\n}).meta({ id: \"ModelConfig\" });\n\n/** Serializable reference to an LLM implemented by the connected Stagehand client. */\nexport const ClientModelReferenceSchema = z\n  .strictObject({\n    source: z.literal(\"client\"),\n  })\n  .meta({ id: \"ClientModelReference\" });\n\n/** Browserbase viewport configuration. */\nexport const BrowserbaseViewportSchema = z\n  .strictObject({\n    width: z.number().optional(),\n    height: z.number().optional(),\n  })\n  .meta({ id: \"BrowserbaseViewport\" });\n\n/** Browserbase fingerprint screen configuration. */\nexport const BrowserbaseFingerprintScreenSchema = z\n  .strictObject({\n    maxHeight: z.number().optional(),\n    maxWidth: z.number().optional(),\n    minHeight: z.number().optional(),\n    minWidth: z.number().optional(),\n  })\n  .meta({ id: \"BrowserbaseFingerprintScreen\" });\n\n/** Browserbase fingerprint configuration for stealth mode. */\nexport const BrowserbaseFingerprintSchema = z\n  .strictObject({\n    browsers: z.array(z.enum([\"chrome\", \"edge\", \"firefox\", \"safari\"])).optional(),\n    devices: z.array(z.enum([\"desktop\", \"mobile\"])).optional(),\n    httpVersion: z.enum([\"1\", \"2\"]).optional(),\n    locales: z.array(z.string()).optional(),\n    operatingSystems: z.array(z.enum([\"android\", \"ios\", \"linux\", \"macos\", \"windows\"])).optional(),\n    screen: BrowserbaseFingerprintScreenSchema.optional(),\n  })\n  .meta({ id: \"BrowserbaseFingerprint\" });\n\n/** Browserbase context configuration for session persistence. */\nexport const BrowserbaseContextSchema = z\n  .strictObject({\n    id: z.string(),\n    persist: z.boolean().optional(),\n  })\n  .meta({ id: \"BrowserbaseContext\" });\n\n/** Browserbase browser settings for session creation. */\nexport const BrowserbaseBrowserSettingsSchema = z\n  .strictObject({\n    advancedStealth: z.boolean().optional(),\n    blockAds: z.boolean().optional(),\n    captchaImageSelector: z.string().optional(),\n    captchaInputSelector: z.string().optional(),\n    context: BrowserbaseContextSchema.optional(),\n    extensionId: z.string().optional(),\n    fingerprint: BrowserbaseFingerprintSchema.optional(),\n    logSession: z.boolean().optional(),\n    os: z.enum([\"windows\", \"mac\", \"linux\", \"mobile\", \"tablet\"]).optional(),\n    recordSession: z.boolean().optional(),\n    solveCaptchas: z.boolean().optional(),\n    verified: z.boolean().optional(),\n    viewport: BrowserbaseViewportSchema.optional(),\n  })\n  .meta({ id: \"BrowserbaseBrowserSettings\" });\n\n/** Browserbase managed proxy geolocation configuration. */\nexport const BrowserbaseProxyGeolocationSchema = z\n  .strictObject({\n    country: z.string(),\n    city: z.string().optional(),\n    state: z.string().optional(),\n  })\n  .meta({ id: \"BrowserbaseProxyGeolocation\" });\n\n/** Browserbase managed proxy configuration. */\nexport const BrowserbaseProxyConfigSchema = z\n  .strictObject({\n    type: z.literal(\"browserbase\"),\n    domainPattern: z.string().optional(),\n    geolocation: BrowserbaseProxyGeolocationSchema.optional(),\n  })\n  .meta({ id: \"BrowserbaseProxyConfig\" });\n\n/** External proxy configuration. */\nexport const ExternalProxyConfigSchema = z\n  .strictObject({\n    type: z.literal(\"external\"),\n    server: z.string(),\n    domainPattern: z.string().optional(),\n    username: z.string().optional(),\n    password: z.string().optional(),\n  })\n  .meta({ id: \"ExternalProxyConfig\" });\n\n/** Browserbase session proxy configuration. */\nexport const ProxyConfigSchema = z\n  .discriminatedUnion(\"type\", [BrowserbaseProxyConfigSchema, ExternalProxyConfigSchema])\n  .meta({ id: \"ProxyConfig\" });\n\n/** Browserbase region identifier for multi-region support. */\nexport const BrowserbaseRegionSchema = z\n  .enum([\"us-west-2\", \"us-east-1\", \"eu-central-1\", \"ap-southeast-1\"])\n  .meta({ id: \"BrowserbaseRegion\" });\n\n/** Browserbase session creation parameters. */\nexport const BrowserbaseSessionCreateParamsSchema = z\n  .strictObject({\n    browserSettings: BrowserbaseBrowserSettingsSchema.optional(),\n    extensionId: z.string().optional(),\n    keepAlive: z.boolean().optional(),\n    proxies: z.union([z.boolean(), z.array(ProxyConfigSchema)]).optional(),\n    region: BrowserbaseRegionSchema.optional(),\n    timeout: z.number().optional(),\n    userMetadata: z.record(z.string(), z.unknown()).optional(),\n  })\n  .meta({ id: \"BrowserbaseSessionCreateParams\" });\n\n/** Browser session metadata used by provider-independent worker services. */\nexport const BrowserSessionMetadataSchema = z\n  .strictObject({\n    sessionId: z.string().min(1),\n    region: BrowserbaseRegionSchema.optional(),\n  })\n  .meta({ id: \"BrowserSessionMetadata\" });\n\n/** Browser launch options for local browsers. */\nexport const LocalBrowserLaunchOptionsSchema = z\n  .strictObject({\n    args: z.array(z.string()).optional(),\n    executablePath: z.string().optional(),\n    port: z.number().optional(),\n    userDataDir: z.string().optional(),\n    preserveUserDataDir: z.boolean().optional(),\n    headless: z.boolean().optional(),\n    devtools: z.boolean().optional(),\n    chromiumSandbox: z.boolean().optional(),\n    ignoreDefaultArgs: z.union([z.boolean(), z.array(z.string())]).optional(),\n    proxy: z\n      .strictObject({\n        server: z.string(),\n        bypass: z.string().optional(),\n        username: z.string().optional(),\n        password: z.string().optional(),\n      })\n      .optional(),\n    locale: z.string().optional(),\n    viewport: z.strictObject({ width: z.number(), height: z.number() }).optional(),\n    deviceScaleFactor: z.number().optional(),\n    hasTouch: z.boolean().optional(),\n    ignoreHTTPSErrors: z.boolean().optional(),\n    downloadsPath: z.string().optional(),\n    acceptDownloads: z.boolean().optional(),\n    keepAlive: z.boolean().optional(),\n  })\n  .meta({ id: \"LocalBrowserLaunchOptions\" });\n\n/** Action object returned by observe and used by act */\nexport const ActionSchema = z\n  .strictObject({\n    selector: z.string().meta({\n      description: \"CSS selector or XPath for the element\",\n      example: \"[data-testid='submit-button']\",\n    }),\n    description: z.string().meta({\n      description: \"Human-readable description of the action\",\n      example: \"Click the submit button\",\n    }),\n    method: z.string().optional().meta({\n      description: \"The method to execute (click, fill, etc.)\",\n      example: \"click\",\n    }),\n    arguments: z\n      .array(z.string())\n      .optional()\n      .meta({\n        description: \"Arguments to pass to the method\",\n        example: [\"Hello World\"],\n      }),\n  })\n  .meta({\n    id: \"Action\",\n    description: \"Action object returned by observe and used by act\",\n  });\n\n// =============================================================================\n// Act\n// =============================================================================\n\nexport const StagehandResultUsageSchema = z\n  .strictObject({\n    inputTokens: z.number().int().nonnegative().default(0).meta({\n      description: \"Input tokens consumed by all LLM calls made for this operation\",\n    }),\n    outputTokens: z.number().int().nonnegative().default(0).meta({\n      description: \"Output tokens consumed by all LLM calls made for this operation\",\n    }),\n    reasoningTokens: z.number().int().nonnegative().default(0).meta({\n      description: \"Reasoning tokens consumed by all LLM calls made for this operation\",\n    }),\n    cachedInputTokens: z.number().int().nonnegative().default(0).meta({\n      description: \"Cached input tokens used by all LLM calls made for this operation\",\n    }),\n    inferenceTimeMs: z.number().int().nonnegative().default(0).meta({\n      description: \"Total time spent waiting for LLM inference during this operation\",\n    }),\n  })\n  .meta({\n    id: \"StagehandResultUsage\",\n    description: \"Aggregate LLM usage for one Stagehand operation\",\n  });\n\n/** LLM tokens avoided by serving a request from the cache. */\nexport const CacheTokenSavingsSchema = z\n  .strictObject({\n    inputTokens: z.number().int().nonnegative().default(0),\n    outputTokens: z.number().int().nonnegative().default(0),\n    totalTokens: z.number().int().nonnegative().default(0),\n  })\n  .meta({ id: \"CacheTokenSavings\" });\n\n/**\n * Cache observability for one act/observe/extract call. Always present, like\n * `usage`: DISABLED says no lookup ran, and otherwise it is self-explaining —\n * a miss carries why it missed, a hit carries how established the entry is.\n */\nexport const CacheMetadataSchema = z\n  .strictObject({\n    status: CacheStatusSchema.meta({\n      description:\n        \"Whether server-side caching served this result, computed it, or was not consulted\",\n    }),\n    count: z.number().int().nonnegative().optional().meta({\n      description:\n        \"Times this cache key has been seen, including this request; compare with threshold to see how close the key is to being served\",\n    }),\n    threshold: z.number().int().positive().optional().meta({\n      description: \"Hit-count threshold in effect for this key\",\n    }),\n    missReason: z.string().optional().meta({\n      description:\n        'Why the cache did not serve this request; misses only. Reported by the server: \"not_found\", \"threshold\", \"empty_array\", \"timeout\", \"error\", \"bypass\", \"screenshot\", \"not_enabled\", \"no_cache_key\". Reported locally: \"timeout\" (the cache read exceeded its budget), \"read_failed\" (another cache read failure), \"payload_too_large\" (the serialized cache request exceeds 25,000,000 UTF-8 bytes), and \"replay_failed\" (a cached value was found but could not be applied)',\n    }),\n    tokensSaved: CacheTokenSavingsSchema.optional().meta({\n      description: \"LLM tokens avoided by serving this request from cache; hits only\",\n    }),\n  })\n  .meta({ id: \"CacheMetadata\" });\n\nexport const StagehandResultMetadataSchema = z\n  .strictObject({\n    actionId: z.string().optional().meta({\n      description: \"Action ID for tracking\",\n    }),\n    cache: CacheMetadataSchema.meta({\n      description:\n        \"Cache observability for this result; status is DISABLED when no cache lookup ran\",\n    }),\n    usage: StagehandResultUsageSchema.meta({\n      description:\n        \"Aggregate LLM usage for this operation; zeroed when the operation did not run inference\",\n    }),\n  })\n  .meta({ id: \"StagehandResultMetadata\" });\n\nexport const ActOptionsSchema = z\n  .strictObject({\n    model: ModelConfigSchema.optional().meta({\n      description:\n        \"Complete model configuration for this call; when omitted, the initialized Stagehand model is used, or Browserbase selects one automatically when no initialized model exists\",\n    }),\n    variables: VariablesSchema.optional().meta({\n      description:\n        \"Variables to substitute in the action instruction. Accepts flat primitives or { value, description? } objects.\",\n      example: {\n        username: \"john_doe\",\n        password: {\n          value: \"secret123\",\n          description: \"The login password\",\n        },\n      },\n    }),\n    timeout: z.number().optional().meta({\n      description: \"Timeout in ms for the action\",\n      example: 30000,\n    }),\n    locator: LocatorSchema.optional().meta({\n      description: \"Serializable element locator for the action target\",\n    }),\n    ignoreLocators: z\n      .array(LocatorSchema)\n      .optional()\n      .meta({\n        description:\n          \"Locators for elements and subtrees that should be excluded from action planning\",\n        example: [\n          { selector: \"nav\" },\n          { selector: \".cookie-banner\" },\n          { selector: \"#sidebar-ads\" },\n        ],\n      }),\n    cache: CachingSchema.optional().meta({\n      description: \"Override the instance-level cache setting for this request\",\n    }),\n  })\n  .meta({ id: \"ActOptions\" });\n\n/** Inner act result data */\nexport const ActResultDataSchema = z\n  .strictObject({\n    success: z.boolean().meta({\n      description: \"Whether the action completed successfully\",\n      example: true,\n    }),\n    message: z.string().meta({\n      description: \"Human-readable result message\",\n      example: \"Successfully clicked the login button\",\n    }),\n    actionDescription: z.string().meta({\n      description: \"Description of the action that was performed\",\n      example: \"Clicked button with text 'Login'\",\n    }),\n    actions: z.array(ActionSchema).meta({\n      description: \"List of actions that were executed\",\n    }),\n  })\n  .meta({ id: \"ActResultData\" });\n\nexport const ActResultSchema = z\n  .strictObject({\n    data: ActResultDataSchema,\n    metadata: StagehandResultMetadataSchema,\n  })\n  .meta({ id: \"ActResult\" });\n\n// =============================================================================\n// Extract\n// =============================================================================\n\nexport const ExtractOptionsSchema = z\n  .strictObject({\n    model: ModelConfigSchema.optional().meta({\n      description:\n        \"Complete model configuration for this call; when omitted, the initialized Stagehand model is used, or Browserbase selects one automatically when no initialized model exists\",\n    }),\n    timeout: z.number().optional().meta({\n      description: \"Timeout in ms for the extraction\",\n      example: 30000,\n    }),\n    locator: LocatorSchema.optional().meta({\n      description: \"Locator that scopes extraction to a specific element\",\n    }),\n    ignoreLocators: z\n      .array(LocatorSchema)\n      .optional()\n      .meta({\n        description: \"Locators for elements and subtrees that should be excluded from extraction\",\n        example: [\n          { selector: \"nav\" },\n          { selector: \".cookie-banner\" },\n          { selector: \"#sidebar-ads\" },\n        ],\n      }),\n    screenshot: z.boolean().optional().meta({\n      description:\n        \"When true, include a screenshot of the current viewport in the extraction LLM call. Defaults to false.\",\n      example: false,\n    }),\n    cache: CachingSchema.optional().meta({\n      description: \"Override the instance-level cache setting for this request\",\n    }),\n  })\n  .meta({ id: \"ExtractOptions\" });\n\nexport const ExtractResultSchema = z\n  .strictObject({\n    data: z.json().meta({\n      description: \"Extracted data matching the requested schema\",\n    }),\n    metadata: StagehandResultMetadataSchema,\n  })\n  .meta({ id: \"ExtractResult\" });\n\n// =============================================================================\n// Observe\n// =============================================================================\n\nexport const ObserveOptionsSchema = z\n  .strictObject({\n    model: ModelConfigSchema.optional().meta({\n      description:\n        \"Complete model configuration for this call; when omitted, the initialized Stagehand model is used, or Browserbase selects one automatically when no initialized model exists\",\n    }),\n    variables: VariablesSchema.optional().meta({\n      description:\n        \"Variables whose names are exposed to the model so observe() returns %variableName% placeholders in suggested action arguments instead of literal values. Accepts flat primitives or { value, description? } objects.\",\n      example: {\n        username: {\n          value: \"john@example.com\",\n          description: \"The login email\",\n        },\n        rememberMe: true,\n      },\n    }),\n    timeout: z.number().optional().meta({\n      description: \"Timeout in ms for the observation\",\n      example: 30000,\n    }),\n    locator: LocatorSchema.optional().meta({\n      description: \"Locator that scopes observation to a specific element\",\n    }),\n    ignoreLocators: z\n      .array(LocatorSchema)\n      .optional()\n      .meta({\n        description: \"Locators for elements and subtrees that should be excluded from observation\",\n        example: [\n          { selector: \"nav\" },\n          { selector: \".cookie-banner\" },\n          { selector: \"#sidebar-ads\" },\n        ],\n      }),\n    cache: CachingSchema.optional().meta({\n      description: \"Override the instance-level cache setting for this request\",\n    }),\n  })\n  .meta({ id: \"ObserveOptions\" });\n\nexport const ObserveResultSchema = z\n  .strictObject({\n    data: z.array(ActionSchema),\n    metadata: StagehandResultMetadataSchema,\n  })\n  .meta({ id: \"ObserveResult\" });\n\nexport const EmptyParamsSchema = z.strictObject({}).meta({ id: \"EmptyParams\" });\n\nexport const LoadStateSchema = z\n  .enum([\"load\", \"domcontentloaded\", \"networkidle\"])\n  .meta({ id: \"LoadState\" });\n\nconst pageNavigationUrlSchema = z.string().min(1);\n\nexport const PageNavigationOptionsSchema = z\n  .strictObject({\n    waitUntil: LoadStateSchema.optional(),\n    timeout: z.number().int().positive().optional(),\n  })\n  .meta({ id: \"PageNavigationOptions\" });\n\nexport const PageVoidResultSchema = z\n  .strictObject({\n    ok: z.literal(true),\n  })\n  .meta({ id: \"PageVoidResult\" });\n\nexport const ContextVoidResultSchema = z\n  .strictObject({\n    ok: z.literal(true),\n  })\n  .meta({ id: \"ContextVoidResult\" });\n\nexport const PageScreenshotClipSchema = z\n  .strictObject({\n    x: z.number(),\n    y: z.number(),\n    width: z.number().positive(),\n    height: z.number().positive(),\n  })\n  .meta({ id: \"PageScreenshotClip\" });\n\nexport const SnapshotResultSchema = z\n  .strictObject({\n    formattedTree: z.string(),\n    xpathMap: z.record(z.string(), z.string()),\n    urlMap: z.record(z.string(), z.string()),\n  })\n  .meta({ id: \"SnapshotResult\" });\n\nexport const PageSnapshotOptionsSchema = z\n  .strictObject({\n    timeout: z\n      .number()\n      .nonnegative()\n      .optional()\n      .describe(\n        \"Milliseconds for the whole snapshot call. Defaults to 20000. Zero disables the timeout.\",\n      ),\n    includeIframes: z.boolean().optional(),\n  })\n  .meta({ id: \"PageSnapshotOptions\" });\n\nexport const PageRefSchema = z\n  .strictObject({\n    pageId: z.string(),\n    url: z.string().optional(),\n    title: z.string().optional(),\n  })\n  .meta({ id: \"PageRef\" });\n\nexport const NavigationHeaderSchema = z\n  .strictObject({\n    name: z.string(),\n    value: z.string(),\n  })\n  .meta({ id: \"NavigationHeader\" });\n\nexport const NavigationSecurityDetailsSchema = z\n  .strictObject({\n    issuer: z.string(),\n    protocol: z.string(),\n    subjectName: z.string(),\n    validFrom: z.number(),\n    validTo: z.number(),\n  })\n  .meta({ id: \"NavigationSecurityDetails\" });\n\nexport const NavigationServerAddrSchema = z\n  .strictObject({\n    ipAddress: z.string(),\n    port: z.number().int().min(0).max(65_535),\n  })\n  .meta({ id: \"NavigationServerAddr\" });\n\nexport const NavigationFinishedErrorSchema = z\n  .strictObject({\n    message: z.string(),\n  })\n  .meta({ id: \"NavigationFinishedError\" });\n\nexport const NavigationResponseDescriptorSchema = z\n  .strictObject({\n    responseId: z.string().min(1),\n    url: z.string(),\n    status: z.number().int().nonnegative(),\n    statusText: z.string(),\n    headers: z.record(z.string(), z.string()),\n    fromServiceWorker: z.boolean(),\n  })\n  .meta({ id: \"NavigationResponseDescriptor\" });\n\nexport const PageNavigationResultSchema = z\n  .strictObject({\n    page: PageRefSchema,\n    response: NavigationResponseDescriptorSchema.nullable(),\n  })\n  .meta({ id: \"PageNavigationResult\" });\n\nexport const ResponseIdParamsSchema = z\n  .strictObject({\n    responseId: z.string().min(1),\n  })\n  .meta({ id: \"ResponseIdParams\" });\n\nexport const ResponseBodyResultSchema = z\n  .strictObject({\n    body: z.string(),\n    base64Encoded: z.literal(true),\n  })\n  .meta({ id: \"ResponseBodyResult\" });\n\nexport const ResponseAllHeadersResultSchema = z\n  .strictObject({\n    headers: z.record(z.string(), z.string()),\n  })\n  .meta({ id: \"ResponseAllHeadersResult\" });\n\nexport const ResponseHeadersArrayResultSchema = z\n  .strictObject({\n    headers: z.array(NavigationHeaderSchema),\n  })\n  .meta({ id: \"ResponseHeadersArrayResult\" });\n\nexport const ResponseSecurityDetailsResultSchema = z\n  .strictObject({\n    value: NavigationSecurityDetailsSchema.nullable(),\n  })\n  .meta({ id: \"ResponseSecurityDetailsResult\" });\n\nexport const ResponseServerAddrResultSchema = z\n  .strictObject({\n    value: NavigationServerAddrSchema.nullable(),\n  })\n  .meta({ id: \"ResponseServerAddrResult\" });\n\nexport const ResponseFinishedResultSchema = z\n  .strictObject({\n    error: NavigationFinishedErrorSchema.nullable(),\n  })\n  .meta({ id: \"ResponseFinishedResult\" });\n\nexport const PageEventNameSchema = z.enum([\"console\"]).meta({ id: \"PageEventName\" });\n\nexport const PageSubscriptionEventNameSchema = z\n  .enum([\"console\", \"toolsadded\", \"toolsremoved\"])\n  .meta({ id: \"PageSubscriptionEventName\" });\n\nexport const PageCDPEventParamsSchema = z\n  .record(z.string(), z.json())\n  .meta({ id: \"PageCDPEventParams\" });\n\nexport const PageCDPEventSchema = z\n  .strictObject({\n    pageId: z.string().min(1),\n    method: z.enum([\"Runtime.consoleAPICalled\"]),\n    params: PageCDPEventParamsSchema,\n    sessionId: z.string().min(1),\n    targetId: z.string().min(1),\n  })\n  .meta({ id: \"PageCDPEvent\" });\n\nexport const PageCDPEventNotificationSchema = z\n  .strictObject({\n    subscriptionId: z.string().min(1),\n    event: PageCDPEventSchema,\n  })\n  .meta({ id: \"PageCDPEventNotification\" });\n\nexport const WebMCPAnnotationSchema = z\n  .strictObject({\n    readOnly: z.boolean().optional(),\n    untrustedContent: z.boolean().optional(),\n    autosubmit: z.boolean().optional(),\n  })\n  .meta({ id: \"WebMCPAnnotation\" });\n\nconst WebMCPJsonValueSchema = z.json().meta({ id: \"WebMCPJsonValue\" });\n\nexport const WebMCPToolDescriptorSchema = z\n  .strictObject({\n    name: z.string().min(1),\n    description: z.string(),\n    inputSchema: z.record(z.string(), WebMCPJsonValueSchema).optional(),\n    annotations: WebMCPAnnotationSchema.optional(),\n    frameId: z.string().min(1),\n    backendNodeId: z.number().int().nonnegative().optional(),\n  })\n  .meta({ id: \"WebMCPToolDescriptor\" });\n\nexport const WebMCPToolIdentitySchema = z\n  .strictObject({\n    frameId: z.string().min(1),\n    name: z.string().min(1),\n  })\n  .meta({ id: \"WebMCPToolIdentity\" });\n\nconst pageEventRoutingShape = {\n  subscriptionId: z.string().min(1),\n  pageId: z.string().min(1),\n  sessionId: z.string().min(1),\n  targetId: z.string().min(1),\n};\n\nexport const PageToolsAddedNotificationSchema = z\n  .strictObject({\n    ...pageEventRoutingShape,\n    event: z.literal(\"toolsadded\"),\n    tools: z.array(WebMCPToolDescriptorSchema),\n  })\n  .meta({ id: \"PageToolsAddedNotification\" });\n\nexport const PageToolsRemovedNotificationSchema = z\n  .strictObject({\n    ...pageEventRoutingShape,\n    event: z.literal(\"toolsremoved\"),\n    tools: z.array(WebMCPToolIdentitySchema),\n  })\n  .meta({ id: \"PageToolsRemovedNotification\" });\n\nexport const PageEventNotificationSchema = z\n  .discriminatedUnion(\"event\", [\n    PageToolsAddedNotificationSchema,\n    PageToolsRemovedNotificationSchema,\n  ])\n  .meta({ id: \"PageEventNotification\" });\n\nexport const WebMCPToolsOptionsSchema = z\n  .strictObject({\n    timeout: z.number().nonnegative().default(1_000),\n  })\n  .meta({ id: \"WebMCPToolsOptions\" });\n\nexport const WebMCPInvokeOptionsSchema = z\n  .strictObject({\n    input: z.record(z.string(), WebMCPJsonValueSchema).default({}),\n  })\n  .meta({ id: \"WebMCPInvokeOptions\" });\n\nexport const WebMCPResultOptionsSchema = z\n  .strictObject({\n    timeout: z.number().nonnegative().optional(),\n  })\n  .meta({ id: \"WebMCPResultOptions\" });\n\nexport const WebMCPInvocationDescriptorSchema = z\n  .strictObject({\n    invocationId: z.string().min(1),\n    toolName: z.string().min(1),\n    frameId: z.string().min(1),\n    input: z.record(z.string(), WebMCPJsonValueSchema),\n  })\n  .meta({ id: \"WebMCPInvocationDescriptor\" });\n\nexport const WebMCPInvocationStatusSchema = z\n  .enum([\"Completed\", \"Canceled\", \"Error\"])\n  .meta({ id: \"WebMCPInvocationStatus\" });\n\nexport const WebMCPRemoteObjectSchema = z\n  .record(z.string(), WebMCPJsonValueSchema)\n  .meta({ id: \"WebMCPRemoteObject\" });\n\nexport const WebMCPToolResponseSchema = z\n  .strictObject({\n    invocationId: z.string().min(1),\n    status: WebMCPInvocationStatusSchema,\n    output: WebMCPJsonValueSchema.optional(),\n    errorText: z.string().optional(),\n    exception: WebMCPRemoteObjectSchema.optional(),\n  })\n  .meta({ id: \"WebMCPToolResponse\" });\n\nexport const LocatorDescriptorSchema = z\n  .strictObject({\n    pageId: z.string(),\n    ...LocatorSchema.shape,\n  })\n  .meta({ id: \"LocatorDescriptor\" });\n\n/** One HTTP attempt; the caller owns retries and response interpretation. */\nexport const BrowserbaseRequestParamsSchema = z\n  .strictObject({\n    operation: z.enum([\"gateway.responses\", \"cache.get\", \"cache.set\"]),\n    headers: z.record(z.string(), z.string()).meta({\n      description:\n        \"Application headers. SDKs validate names and values, omit caller-supplied Host, Content-Length, hop-by-hop and forwarding headers, and supply x-bb-api-key and, for gateway.responses, x-bb-session-id.\",\n    }),\n    body: z.string().meta({ description: \"JSON request body sent as UTF-8 text\" }),\n    remainingTimeoutMs: z.number().nonnegative().optional().meta({\n      description:\n        \"Remaining caller budget in milliseconds, including response-body buffering; omission adds no transport deadline\",\n    }),\n  })\n  .meta({ id: \"BrowserbaseRequestParams\" });\n\nexport const BrowserbaseHttpResponseSchema = z\n  .strictObject({\n    type: z.literal(\"response\"),\n    status: z.int().min(200).max(599),\n    statusText: z.string(),\n    headers: z.record(z.string(), z.string()).meta({\n      description:\n        \"Lowercase names with one value per name after SDK HTTP normalization; repeated fields are collapsed. Header bytes use Latin-1 code points. content-encoding and content-length are omitted.\",\n    }),\n    body: z.string().meta({\n      description:\n        \"Fully buffered response body decoded as UTF-8 text, with a leading BOM removed and invalid byte sequences replaced\",\n    }),\n  })\n  .meta({\n    id: \"BrowserbaseHttpResponse\",\n    description:\n      \"Buffered HTTP response with SDK-normalized headers and text. Redirect responses are returned without following them.\",\n  });\n\nexport const BrowserbaseTransportErrorSchema = z\n  .strictObject({\n    type: z.literal(\"error\"),\n    reason: z.enum([\"network\", \"cancelled\", \"timeout\", \"unavailable\", \"disconnected\"]),\n    message: z.string(),\n  })\n  .meta({\n    id: \"BrowserbaseTransportError\",\n    description:\n      \"Transport failure without an HTTP response; disconnected is synthesized locally when RPC closes\",\n  });\n\nexport const BrowserbaseRequestResultSchema = z\n  .discriminatedUnion(\"type\", [BrowserbaseHttpResponseSchema, BrowserbaseTransportErrorSchema])\n  .meta({ id: \"BrowserbaseRequestResult\" });\n\nexport const BrowserbaseCancelParamsSchema = z\n  .strictObject({\n    requestId: JSONRPCRequestIdSchema,\n    reason: z.enum([\"cancelled\", \"timeout\"]),\n  })\n  .meta({\n    id: \"BrowserbaseCancelParams\",\n    description:\n      \"Cancel a browserbase.request by its JSON-RPC ID on the same connection; ignore completed or unknown IDs\",\n  });\n\nexport const ImplementationInfoSchema = z\n  .strictObject({\n    name: z.string().min(1),\n    version: z.string().min(1),\n  })\n  .meta({ id: \"ImplementationInfo\" });\n\nexport const RuntimeDescriptorSchema = z\n  .strictObject({\n    protocolVersion: StagehandProtocolVersionSchema,\n    serverInfo: ImplementationInfoSchema.extend({\n      name: z.literal(\"stagehand\"),\n    }),\n  })\n  .meta({ id: \"RuntimeDescriptor\" });\n\nexport const TelemetryConfigSchema = z\n  .strictObject({\n    traces: z\n      .strictObject({\n        endpoint: z.url().refine((value) => new URL(value).pathname.endsWith(\"/v1/traces\"), {\n          message: \"OTLP trace endpoint must end with /v1/traces\",\n        }),\n        headers: z.record(z.string(), z.string()).default({}),\n      })\n      .meta({ id: \"TelemetryTraces\" }),\n  })\n  .meta({ id: \"TelemetryConfig\" });\n\nexport const StagehandInitParamsSchema = z\n  .strictObject({\n    protocolVersion: StagehandProtocolVersionSchema,\n    clientInfo: ImplementationInfoSchema,\n    browserCdpUrl: z.string().min(1).optional(),\n    browserbase: z.literal(\"client\").optional(),\n    browser: BrowserSessionMetadataSchema.optional(),\n    model: z.union([ModelConfigSchema, ClientModelReferenceSchema]).optional().meta({\n      description:\n        \"Default model configuration; when omitted and a Browserbase Model Gateway session is available, Browserbase selects a model automatically for inference calls\",\n    }),\n    telemetry: TelemetryConfigSchema.optional(),\n    logLevel: z.enum([\"off\", \"error\", \"warn\", \"info\", \"debug\"]).default(\"info\"),\n    systemPrompt: z.string().optional(),\n    selfHeal: z.boolean().optional(),\n    domSettleTimeoutMs: z.number().int().positive().optional(),\n    cache: CachingSchema.optional().meta({\n      description:\n        \"Server-side caching of act/observe/extract results for this instance: a boolean toggle, or an object with an optional hit-count threshold. Requires client Browserbase transport and a browser sessionId. Can be overridden per request via options.cache.\",\n    }),\n  })\n  .refine((params) => params.browserbase === undefined || params.browser !== undefined, {\n    message: \"Client Browserbase transport requires browser metadata\",\n    path: [\"browserbase\"],\n  })\n  .meta({ id: \"StagehandInitParams\", dependentRequired: { browserbase: [\"browser\"] } });\n\nexport const StagehandActParamsSchema = z\n  .strictObject({\n    pageId: z.string().min(1),\n    instruction: z.union([z.string().min(1), ActionSchema]),\n    options: ActOptionsSchema.optional(),\n  })\n  .meta({ id: \"StagehandActParams\" });\n\nexport const StagehandObserveParamsSchema = z\n  .strictObject({\n    pageId: z.string().min(1),\n    instruction: z.string().optional(),\n    options: ObserveOptionsSchema.optional(),\n  })\n  .meta({ id: \"StagehandObserveParams\" });\n\nexport const DefaultExtractDataSchema = z\n  .strictObject({\n    extraction: z.string(),\n  })\n  .meta({ id: \"DefaultExtractData\" });\n\nexport const DEFAULT_EXTRACT_JSON_SCHEMA = z.json().parse(z.toJSONSchema(DefaultExtractDataSchema));\n\nexport const StagehandExtractParamsSchema = z\n  .strictObject({\n    pageId: z.string().min(1),\n    instruction: z.string().min(1),\n    schema: z.json().default(DEFAULT_EXTRACT_JSON_SCHEMA),\n    options: ExtractOptionsSchema.optional(),\n  })\n  .meta({ id: \"StagehandExtractParams\" });\n\nexport const ContextNewPageParamsSchema = z\n  .strictObject({\n    url: pageNavigationUrlSchema.optional(),\n  })\n  .meta({ id: \"ContextNewPageParams\" });\n\nexport const ContextSetActivePageParamsSchema = z\n  .strictObject({\n    pageId: z.string(),\n  })\n  .meta({ id: \"ContextSetActivePageParams\" });\n\nexport const ContextAddInitScriptParamsSchema = z\n  .strictObject({\n    source: z.string(),\n  })\n  .meta({ id: \"ContextAddInitScriptParams\" });\n\nexport const ContextSetExtraHTTPHeadersParamsSchema = z\n  .strictObject({\n    headers: z.record(z.string(), z.string()),\n  })\n  .meta({ id: \"ContextSetExtraHTTPHeadersParams\" });\n\nexport const ContextSetDomainPolicyParamsSchema = z\n  .strictObject({\n    policy: DomainPolicySchema.nullable(),\n  })\n  .meta({ id: \"ContextSetDomainPolicyParams\" });\n\nexport const ContextCookiesParamsSchema = z\n  .strictObject({\n    urls: z.union([z.string(), z.array(z.string())]).optional(),\n  })\n  .meta({ id: \"ContextCookiesParams\" });\n\nexport const ContextAddCookiesParamsSchema = z\n  .strictObject({\n    cookies: z.array(CookieParamSchema),\n  })\n  .meta({ id: \"ContextAddCookiesParams\" });\n\nexport const ContextClearCookiesParamsSchema = z\n  .strictObject({\n    options: ClearCookieOptionsSchema.optional(),\n  })\n  .meta({ id: \"ContextClearCookiesParams\" });\n\nexport const ContextClipboardTargetSchema = z\n  .strictObject({\n    pageId: z.string().optional(),\n  })\n  .meta({ id: \"ContextClipboardTarget\" });\n\nexport const ContextClipboardReadTextParamsSchema = ContextClipboardTargetSchema;\n\nexport const ContextClipboardWriteTextParamsSchema = ContextClipboardTargetSchema.extend({\n  text: z.string(),\n}).meta({ id: \"ContextClipboardWriteTextParams\" });\n\nexport const ContextClipboardClearParamsSchema = ContextClipboardTargetSchema;\n\nexport const ContextClipboardPasteParamsSchema = ContextClipboardTargetSchema.extend({\n  shortcut: z.enum([\"ControlOrMeta+V\", \"Meta+V\", \"Control+V\"]).optional(),\n}).meta({ id: \"ContextClipboardPasteParams\" });\n\nexport const ContextClipboardCopyParamsSchema = ContextClipboardTargetSchema;\n\nexport const ContextClipboardCutParamsSchema = ContextClipboardTargetSchema;\n\nexport const PageGotoParamsSchema = z\n  .strictObject({\n    pageId: z.string(),\n    url: pageNavigationUrlSchema,\n    options: PageNavigationOptionsSchema.optional(),\n  })\n  .meta({ id: \"PageGotoParams\" });\n\nexport const PageIdParamsSchema = z\n  .strictObject({\n    pageId: z.string(),\n  })\n  .meta({ id: \"PageIdParams\" });\n\nexport const PageOnParamsSchema = PageIdParamsSchema.extend({\n  subscriptionId: z.string().min(1),\n  event: PageSubscriptionEventNameSchema,\n}).meta({ id: \"PageOnParams\" });\n\nexport const PageOffParamsSchema = z\n  .strictObject({\n    subscriptionId: z.string().min(1),\n  })\n  .meta({ id: \"PageOffParams\" });\n\nexport const PageWebMCPToolsParamsSchema = z\n  .strictObject({\n    ...PageIdParamsSchema.shape,\n    options: WebMCPToolsOptionsSchema.optional(),\n  })\n  .meta({ id: \"PageWebMCPToolsParams\" });\n\nexport const PageWebMCPToolsResultSchema = z\n  .strictObject({\n    tools: z.array(WebMCPToolDescriptorSchema),\n  })\n  .meta({ id: \"PageWebMCPToolsResult\" });\n\nexport const PageWebMCPInvokeToolParamsSchema = z\n  .strictObject({\n    ...PageIdParamsSchema.shape,\n    frameId: z.string().min(1),\n    toolName: z.string().min(1),\n    ...WebMCPInvokeOptionsSchema.shape,\n  })\n  .meta({ id: \"PageWebMCPInvokeToolParams\" });\n\nexport const PageWebMCPInvocationResultParamsSchema = z\n  .strictObject({\n    ...PageIdParamsSchema.shape,\n    invocationId: z.string().min(1),\n    options: WebMCPResultOptionsSchema.optional(),\n  })\n  .meta({ id: \"PageWebMCPInvocationResultParams\" });\n\nexport const PageWebMCPCancelInvocationParamsSchema = z\n  .strictObject({\n    ...PageIdParamsSchema.shape,\n    invocationId: z.string().min(1),\n  })\n  .meta({ id: \"PageWebMCPCancelInvocationParams\" });\n\nexport const MouseButtonSchema = z.enum([\"left\", \"right\", \"middle\"]).meta({ id: \"MouseButton\" });\n\nexport const PageReloadParamsSchema = PageIdParamsSchema.extend({\n  options: PageNavigationOptionsSchema.extend({\n    ignoreCache: z.boolean().optional(),\n  })\n    .meta({ id: \"PageReloadOptions\" })\n    .optional(),\n}).meta({ id: \"PageReloadParams\" });\n\nexport const PageGoBackParamsSchema = PageIdParamsSchema.extend({\n  options: PageNavigationOptionsSchema.optional(),\n}).meta({ id: \"PageGoBackParams\" });\n\nexport const PageGoForwardParamsSchema = PageIdParamsSchema.extend({\n  options: PageNavigationOptionsSchema.optional(),\n}).meta({ id: \"PageGoForwardParams\" });\n\nexport const PageClickParamsSchema = PageIdParamsSchema.extend({\n  x: z.number(),\n  y: z.number(),\n  options: z\n    .strictObject({\n      button: MouseButtonSchema.optional(),\n      clickCount: z.number().int().positive().optional(),\n    })\n    .meta({ id: \"PageClickOptions\" })\n    .optional(),\n}).meta({ id: \"PageClickParams\" });\n\nexport const PageHoverParamsSchema = PageIdParamsSchema.extend({\n  x: z.number(),\n  y: z.number(),\n}).meta({ id: \"PageHoverParams\" });\n\nexport const PageScrollParamsSchema = PageIdParamsSchema.extend({\n  x: z.number(),\n  y: z.number(),\n  deltaX: z.number(),\n  deltaY: z.number(),\n}).meta({ id: \"PageScrollParams\" });\n\nexport const PageDragAndDropRoutePointSchema = z\n  .strictObject({\n    x: z.number(),\n    y: z.number(),\n  })\n  .meta({ id: \"PageDragAndDropRoutePoint\" });\n\nexport const PageDragAndDropParamsSchema = PageIdParamsSchema.extend({\n  fromX: z.number(),\n  fromY: z.number(),\n  toX: z.number(),\n  toY: z.number(),\n  options: z\n    .strictObject({\n      button: MouseButtonSchema.optional(),\n      steps: z.number().int().positive().optional(),\n      delay: z.number().nonnegative().optional(),\n      route: z.array(PageDragAndDropRoutePointSchema).optional(),\n    })\n    .meta({ id: \"PageDragAndDropOptions\" })\n    .optional(),\n}).meta({ id: \"PageDragAndDropParams\" });\n\nexport const PageTypeParamsSchema = PageIdParamsSchema.extend({\n  text: z.string(),\n  options: z\n    .strictObject({\n      delay: z.number().nonnegative().optional(),\n      withMistakes: z.boolean().optional(),\n    })\n    .meta({ id: \"PageTypeOptions\" })\n    .optional(),\n}).meta({ id: \"PageTypeParams\" });\n\nexport const PageKeyPressParamsSchema = PageIdParamsSchema.extend({\n  key: z.string().min(1),\n  options: z\n    .strictObject({\n      delay: z.number().nonnegative().optional(),\n    })\n    .meta({ id: \"PageKeyPressOptions\" })\n    .optional(),\n}).meta({ id: \"PageKeyPressParams\" });\n\nexport const PageEvaluateParamsSchema = PageIdParamsSchema.extend({\n  expression: z.string(),\n}).meta({ id: \"PageEvaluateParams\" });\n\nexport const PageAddInitScriptParamsSchema = PageIdParamsSchema.extend({\n  source: z.string(),\n}).meta({ id: \"PageAddInitScriptParams\" });\n\nexport const PageSetExtraHTTPHeadersParamsSchema = PageIdParamsSchema.extend({\n  headers: z.record(z.string(), z.string()),\n}).meta({ id: \"PageSetExtraHTTPHeadersParams\" });\n\nexport const PageScreenshotOptionsSchema = z\n  .strictObject({\n    animations: z.enum([\"disabled\", \"allow\"]).optional(),\n    caret: z.enum([\"hide\", \"initial\"]).optional(),\n    clip: PageScreenshotClipSchema.optional(),\n    fullPage: z.boolean().optional(),\n    mask: z.array(LocatorDescriptorSchema).optional(),\n    maskColor: z.string().optional(),\n    omitBackground: z.boolean().optional(),\n    quality: z.number().int().min(0).max(100).optional(),\n    scale: z.enum([\"css\", \"device\"]).optional(),\n    style: z.string().optional(),\n    timeout: z.number().nonnegative().optional(),\n    type: z.enum([\"png\", \"jpeg\"]).optional(),\n  })\n  .refine((options) => !(options.fullPage && options.clip), {\n    message: \"fullPage and clip cannot be used together\",\n    path: [\"clip\"],\n  })\n  .refine((options) => options.type === \"jpeg\" || options.quality === undefined, {\n    message: 'quality is only valid when type is \"jpeg\"',\n    path: [\"quality\"],\n  })\n  .meta({ id: \"PageScreenshotOptions\" });\n\nexport const PageScreenshotParamsSchema = PageIdParamsSchema.extend({\n  options: PageScreenshotOptionsSchema.optional(),\n}).meta({ id: \"PageScreenshotParams\" });\n\nexport const PagePDFMarginSchema = z\n  .strictObject({\n    top: z.number().nonnegative().optional(),\n    bottom: z.number().nonnegative().optional(),\n    left: z.number().nonnegative().optional(),\n    right: z.number().nonnegative().optional(),\n  })\n  .meta({ id: \"PagePDFMargin\" });\n\nexport const PagePDFOptionsSchema = z\n  .strictObject({\n    landscape: z.boolean().optional(),\n    displayHeaderFooter: z.boolean().optional(),\n    printBackground: z.boolean().optional(),\n    scale: z.number().min(0.1).max(2).optional(),\n    width: z.number().positive().optional(),\n    height: z.number().positive().optional(),\n    margin: PagePDFMarginSchema.optional(),\n    pageRanges: z.string().optional(),\n    headerTemplate: z.string().optional(),\n    footerTemplate: z.string().optional(),\n    preferCSSPageSize: z.boolean().optional(),\n    tagged: z.boolean().optional(),\n    outline: z.boolean().optional(),\n    // Leave room for the SDK's 10-second response grace within the JS timer limit.\n    timeout: z.number().nonnegative().max(2_147_473_647).optional(),\n  })\n  .meta({ id: \"PagePDFOptions\" });\n\nexport const PagePDFParamsSchema = PageIdParamsSchema.extend({\n  options: PagePDFOptionsSchema.optional(),\n}).meta({ id: \"PagePDFParams\" });\n\nexport const PageSnapshotParamsSchema = PageIdParamsSchema.extend({\n  options: PageSnapshotOptionsSchema.optional(),\n}).meta({ id: \"PageSnapshotParams\" });\n\nexport const PageSetViewportSizeParamsSchema = PageIdParamsSchema.extend({\n  width: z.number().int().positive(),\n  height: z.number().int().positive(),\n  options: z\n    .strictObject({\n      deviceScaleFactor: z.number().positive().optional(),\n    })\n    .meta({ id: \"PageSetViewportSizeOptions\" })\n    .optional(),\n}).meta({ id: \"PageSetViewportSizeParams\" });\n\nexport const PageWaitForLoadStateParamsSchema = PageIdParamsSchema.extend({\n  state: LoadStateSchema,\n  timeout: z.number().int().nonnegative().optional(),\n}).meta({ id: \"PageWaitForLoadStateParams\" });\n\nexport const PageWaitForTimeoutParamsSchema = PageIdParamsSchema.extend({\n  ms: z.number().int().nonnegative(),\n}).meta({ id: \"PageWaitForTimeoutParams\" });\n\nexport const PageWaitForFunctionParamsSchema = PageIdParamsSchema.extend({\n  expression: z.string(),\n  options: z\n    .strictObject({\n      polling: z.union([z.literal(\"raf\"), z.number().positive().max(2_147_483_647)]).optional(),\n      timeout: z.number().int().nonnegative().optional(),\n    })\n    .meta({ id: \"PageWaitForFunctionOptions\" })\n    .optional(),\n}).meta({ id: \"PageWaitForFunctionParams\" });\n\nexport const PageWaitForSelectorParamsSchema = PageIdParamsSchema.extend({\n  selector: z.string().min(1),\n  options: z\n    .strictObject({\n      state: z.enum([\"attached\", \"detached\", \"visible\", \"hidden\"]).optional(),\n      timeout: z.number().int().nonnegative().optional(),\n      pierceShadow: z.boolean().optional(),\n    })\n    .meta({ id: \"PageWaitForSelectorOptions\" })\n    .optional(),\n}).meta({ id: \"PageWaitForSelectorParams\" });\n\n/** Default execution budget for a public locator call, in milliseconds. */\nexport const DEFAULT_LOCATOR_TIMEOUT_MS = 20_000;\n\nexport const LocatorOptionsSchema = z\n  .strictObject({\n    timeout: z\n      .number()\n      .nonnegative()\n      .optional()\n      .describe(\"Milliseconds for the whole locator call. Zero disables the timeout.\"),\n  })\n  .meta({ id: \"LocatorOptions\" });\n\nexport const LocatorParamsSchema = LocatorDescriptorSchema.extend({\n  options: LocatorOptionsSchema.optional(),\n}).meta({ id: \"LocatorParams\" });\n\nexport const LocatorClickParamsSchema = LocatorParamsSchema.extend({\n  options: LocatorOptionsSchema.extend({\n    button: MouseButtonSchema.optional(),\n    clickCount: z.number().int().positive().optional(),\n  })\n    .meta({ id: \"LocatorClickOptions\" })\n    .optional(),\n}).meta({ id: \"LocatorClickParams\" });\n\nexport const LocatorFillParamsSchema = LocatorParamsSchema.extend({\n  value: z.string(),\n}).meta({ id: \"LocatorFillParams\" });\n\nexport const LocatorScrollToParamsSchema = LocatorParamsSchema.extend({\n  percent: z.union([z.number(), z.string()]),\n}).meta({ id: \"LocatorScrollToParams\" });\n\nexport const RgbaColorSchema = z\n  .strictObject({\n    r: z.number(),\n    g: z.number(),\n    b: z.number(),\n    a: z.number().optional(),\n  })\n  .meta({ id: \"RgbaColor\" });\n\nexport const LocatorHighlightParamsSchema = LocatorParamsSchema.extend({\n  options: LocatorOptionsSchema.extend({\n    durationMs: z.number().int().nonnegative().optional(),\n    borderColor: RgbaColorSchema.optional(),\n    contentColor: RgbaColorSchema.optional(),\n  })\n    .meta({ id: \"LocatorHighlightOptions\" })\n    .optional(),\n}).meta({ id: \"LocatorHighlightParams\" });\n\nexport const LocatorSendClickEventParamsSchema = LocatorParamsSchema.extend({\n  options: LocatorOptionsSchema.extend({\n    bubbles: z.boolean().optional(),\n    cancelable: z.boolean().optional(),\n    composed: z.boolean().optional(),\n    detail: z.number().optional(),\n  })\n    .meta({ id: \"LocatorSendClickEventOptions\" })\n    .optional(),\n}).meta({ id: \"LocatorSendClickEventParams\" });\n\nexport const LocatorTypeParamsSchema = LocatorParamsSchema.extend({\n  text: z.string(),\n  options: LocatorOptionsSchema.extend({\n    delay: z.number().nonnegative().optional(),\n  })\n    .meta({ id: \"LocatorTypeOptions\" })\n    .optional(),\n}).meta({ id: \"LocatorTypeParams\" });\n\nexport const LocatorSelectOptionParamsSchema = LocatorParamsSchema.extend({\n  values: z.union([z.string(), z.array(z.string())]),\n}).meta({ id: \"LocatorSelectOptionParams\" });\n\nconst MAX_INPUT_FILE_BYTES = 50 * 1024 * 1024;\nconst MAX_INPUT_FILE_BASE64_LENGTH = Math.ceil(MAX_INPUT_FILE_BYTES / 3) * 4;\n\nexport function decodedBase64ByteLength(data: string): number {\n  const padding = data.endsWith(\"==\") ? 2 : data.endsWith(\"=\") ? 1 : 0;\n  return (data.length / 4) * 3 - padding;\n}\n\nexport const InputFilePayloadSchema = z\n  .strictObject({\n    name: z.string().min(1),\n    mimeType: z.string().min(1).optional(),\n    data: z\n      .base64()\n      .max(MAX_INPUT_FILE_BASE64_LENGTH)\n      .refine((value) => decodedBase64ByteLength(value) <= MAX_INPUT_FILE_BYTES, {\n        message: \"File data must decode to 50 MiB or less\",\n      })\n      .meta({ format: \"byte\" }),\n    lastModified: z.number().int().nonnegative().optional(),\n  })\n  .meta({ id: \"InputFilePayload\" });\n\nexport const LocatorSetInputFilesParamsSchema = LocatorParamsSchema.extend({\n  files: z.array(InputFilePayloadSchema),\n}).meta({ id: \"LocatorSetInputFilesParams\" });\n\nexport const StagehandInitResultSchema = z\n  .strictObject({\n    initialized: z.literal(true),\n    pages: z.array(PageRefSchema),\n  })\n  .meta({ id: \"StagehandInitResult\" });\n\nexport const StagehandCloseResultSchema = z\n  .strictObject({\n    closed: z.literal(true),\n  })\n  .meta({ id: \"StagehandCloseResult\" });\n\nexport const ContextPagesResultSchema = z.array(PageRefSchema).meta({ id: \"ContextPagesResult\" });\n\nexport const ContextActivePageResultSchema = PageRefSchema.nullable().meta({\n  id: \"ContextActivePageResult\",\n});\n\nexport const ContextGetDomainPolicyResultSchema = DomainPolicySchema.nullable().meta({\n  id: \"ContextGetDomainPolicyResult\",\n});\n\nexport const ContextCookiesResultSchema = z\n  .array(CookieSchema)\n  .meta({ id: \"ContextCookiesResult\" });\n\nexport const ContextClipboardReadTextResultSchema = z\n  .string()\n  .meta({ id: \"ContextClipboardReadTextResult\" });\n\nexport const PageUrlResultSchema = z.string().meta({ id: \"PageUrlResult\" });\n\nexport const PageTitleResultSchema = z.string().meta({ id: \"PageTitleResult\" });\n\nexport const PageCloseResultSchema = z\n  .strictObject({\n    closed: z.literal(true),\n  })\n  .meta({ id: \"PageCloseResult\" });\n\nexport const PageEvaluateResultSchema = z\n  .strictObject({\n    value: z.json(),\n  })\n  .meta({ id: \"PageEvaluateResult\" });\n\nexport const PageScreenshotResultSchema = z\n  .strictObject({\n    data: z.base64().meta({ format: \"byte\" }),\n  })\n  .meta({ id: \"PageScreenshotResult\" });\n\nexport const PagePDFResultSchema = z\n  .strictObject({\n    data: z.base64().meta({ format: \"byte\" }),\n  })\n  .meta({ id: \"PagePDFResult\" });\n\nexport const PageWaitForSelectorResultSchema = z\n  .strictObject({\n    matched: z.boolean(),\n  })\n  .meta({ id: \"PageWaitForSelectorResult\" });\n\nexport const PageWaitForFunctionResultSchema = z\n  .strictObject({ value: z.json() })\n  .meta({ id: \"PageWaitForFunctionResult\" });\n\nexport const LocatorClickResultSchema = z\n  .strictObject({\n    clicked: z.literal(true),\n  })\n  .meta({ id: \"LocatorClickResult\" });\n\nexport const LocatorFillResultSchema = z\n  .strictObject({\n    filled: z.literal(true),\n  })\n  .meta({ id: \"LocatorFillResult\" });\n\nexport const LocatorHoverResultSchema = z\n  .strictObject({\n    hovered: z.literal(true),\n  })\n  .meta({ id: \"LocatorHoverResult\" });\n\nexport const LocatorCountResultSchema = z\n  .number()\n  .int()\n  .nonnegative()\n  .meta({ id: \"LocatorCountResult\" });\n\nexport const LocatorIsCheckedResultSchema = z.boolean().meta({ id: \"LocatorIsCheckedResult\" });\n\nexport const LocatorInputValueResultSchema = z.string().meta({ id: \"LocatorInputValueResult\" });\n\nexport const LocatorIsVisibleResultSchema = z.boolean().meta({ id: \"LocatorIsVisibleResult\" });\n\nexport const LocatorInnerTextResultSchema = z.string().meta({ id: \"LocatorInnerTextResult\" });\n\nexport const LocatorInnerHtmlResultSchema = z.string().meta({ id: \"LocatorInnerHtmlResult\" });\n\nexport const LocatorTextContentResultSchema = z.string().meta({\n  id: \"LocatorTextContentResult\",\n});\n\nexport const LocatorScrollToResultSchema = z\n  .strictObject({\n    scrolled: z.literal(true),\n  })\n  .meta({ id: \"LocatorScrollToResult\" });\n\nexport const LocatorCentroidResultSchema = z\n  .strictObject({\n    x: z.number(),\n    y: z.number(),\n  })\n  .meta({ id: \"LocatorCentroidResult\" });\n\nexport const LocatorHighlightResultSchema = z\n  .strictObject({\n    highlighted: z.literal(true),\n  })\n  .meta({ id: \"LocatorHighlightResult\" });\n\nexport const LocatorSendClickEventResultSchema = z\n  .strictObject({\n    clicked: z.literal(true),\n  })\n  .meta({ id: \"LocatorSendClickEventResult\" });\n\nexport const LocatorTypeResultSchema = z\n  .strictObject({\n    typed: z.literal(true),\n  })\n  .meta({ id: \"LocatorTypeResult\" });\n\nexport const LocatorSelectOptionResultSchema = z\n  .array(z.string())\n  .meta({ id: \"LocatorSelectOptionResult\" });\n\nexport const LocatorSetInputFilesResultSchema = z\n  .strictObject({\n    set: z.literal(true),\n  })\n  .meta({ id: \"LocatorSetInputFilesResult\" });\n\nexport const StagehandLogLevelSchema = z\n  .enum([\"debug\", \"info\", \"warn\", \"error\"])\n  .meta({ id: \"StagehandLogLevel\" });\n\nexport const StagehandLogDataSchema = z\n  .record(z.string(), z.json())\n  .meta({ id: \"StagehandLogData\" });\n\nexport const StagehandLogSchema = z\n  .strictObject({\n    level: StagehandLogLevelSchema,\n    message: z.string().min(1),\n    data: StagehandLogDataSchema,\n  })\n  .meta({ id: \"StagehandLog\" });\n","import { z } from \"zod/v4\";\nimport {\n  JSONRPCNotificationSchema,\n  JSONRPCRequestSchema,\n  type RPCMethod,\n  type RPCNotification,\n} from \"./json-rpc/schemas.ts\";\nimport { wireSchema } from \"./json-rpc/wire-casing.ts\";\nimport {\n  ActResultSchema,\n  BrowserbaseCancelParamsSchema,\n  BrowserbaseRequestParamsSchema,\n  BrowserbaseRequestResultSchema,\n  CallbackBatchParamsSchema,\n  CallbackBatchResultSchema,\n  ContextActivePageResultSchema,\n  ContextAddCookiesParamsSchema,\n  ContextAddInitScriptParamsSchema,\n  ContextClearCookiesParamsSchema,\n  ContextClipboardClearParamsSchema,\n  ContextClipboardCopyParamsSchema,\n  ContextClipboardCutParamsSchema,\n  ContextClipboardPasteParamsSchema,\n  ContextClipboardReadTextParamsSchema,\n  ContextClipboardReadTextResultSchema,\n  ContextClipboardWriteTextParamsSchema,\n  ContextCookiesParamsSchema,\n  ContextCookiesResultSchema,\n  ContextGetDomainPolicyResultSchema,\n  ContextNewPageParamsSchema,\n  ContextPagesResultSchema,\n  ContextSetActivePageParamsSchema,\n  ContextSetDomainPolicyParamsSchema,\n  ContextSetExtraHTTPHeadersParamsSchema,\n  ContextVoidResultSchema,\n  EmptyParamsSchema,\n  ExtractResultSchema,\n  LocatorClickParamsSchema,\n  LocatorClickResultSchema,\n  LocatorCentroidResultSchema,\n  LocatorCountResultSchema,\n  LocatorParamsSchema,\n  LocatorFillParamsSchema,\n  LocatorFillResultSchema,\n  LocatorHighlightParamsSchema,\n  LocatorHighlightResultSchema,\n  LocatorHoverResultSchema,\n  LocatorInnerHtmlResultSchema,\n  LocatorInnerTextResultSchema,\n  LocatorInputValueResultSchema,\n  LocatorIsCheckedResultSchema,\n  LocatorIsVisibleResultSchema,\n  LocatorScrollToParamsSchema,\n  LocatorScrollToResultSchema,\n  LocatorSelectOptionParamsSchema,\n  LocatorSelectOptionResultSchema,\n  LocatorSetInputFilesParamsSchema,\n  LocatorSetInputFilesResultSchema,\n  LocatorSendClickEventParamsSchema,\n  LocatorSendClickEventResultSchema,\n  LocatorTextContentResultSchema,\n  LocatorTypeParamsSchema,\n  LocatorTypeResultSchema,\n  LLMGenerateParamsSchema,\n  LLMGenerateResultSchema,\n  ObserveResultSchema,\n  PageAddInitScriptParamsSchema,\n  PageCDPEventNotificationSchema,\n  PageEventNotificationSchema,\n  PageClickParamsSchema,\n  PageCloseResultSchema,\n  PageDragAndDropParamsSchema,\n  PageEvaluateParamsSchema,\n  PageEvaluateResultSchema,\n  PageGoBackParamsSchema,\n  PageGoForwardParamsSchema,\n  PageGotoParamsSchema,\n  PageHoverParamsSchema,\n  PageIdParamsSchema,\n  PageKeyPressParamsSchema,\n  PageNavigationResultSchema,\n  PageOffParamsSchema,\n  PageOnParamsSchema,\n  PageRefSchema,\n  PageReloadParamsSchema,\n  PagePDFParamsSchema,\n  PagePDFResultSchema,\n  PageScreenshotParamsSchema,\n  PageScreenshotResultSchema,\n  PageScrollParamsSchema,\n  PageSetExtraHTTPHeadersParamsSchema,\n  PageSetViewportSizeParamsSchema,\n  PageSnapshotParamsSchema,\n  PageTitleResultSchema,\n  PageTypeParamsSchema,\n  PageUrlResultSchema,\n  PageVoidResultSchema,\n  PageWaitForLoadStateParamsSchema,\n  PageWaitForSelectorParamsSchema,\n  PageWaitForSelectorResultSchema,\n  PageWaitForFunctionParamsSchema,\n  PageWaitForFunctionResultSchema,\n  PageWaitForTimeoutParamsSchema,\n  PageWebMCPCancelInvocationParamsSchema,\n  PageWebMCPInvocationResultParamsSchema,\n  PageWebMCPInvokeToolParamsSchema,\n  PageWebMCPToolsParamsSchema,\n  PageWebMCPToolsResultSchema,\n  ResponseAllHeadersResultSchema,\n  ResponseBodyResultSchema,\n  ResponseFinishedResultSchema,\n  ResponseHeadersArrayResultSchema,\n  ResponseIdParamsSchema,\n  ResponseSecurityDetailsResultSchema,\n  ResponseServerAddrResultSchema,\n  StagehandActParamsSchema,\n  StagehandCloseResultSchema,\n  StagehandExtractParamsSchema,\n  StagehandInitParamsSchema,\n  StagehandInitResultSchema,\n  StagehandLogSchema,\n  StagehandMetricsSchema,\n  StagehandObserveParamsSchema,\n  SnapshotResultSchema,\n  WebMCPInvocationDescriptorSchema,\n  WebMCPToolResponseSchema,\n} from \"./schemas.ts\";\n\nexport const STAGEHAND_SEND_TO_HOST_BINDING = \"__stagehandSendToHost\";\nexport const StagehandSendToHostBindingSchema = z\n  .literal(STAGEHAND_SEND_TO_HOST_BINDING)\n  .meta({ id: \"StagehandSendToHostBinding\" });\n\nexport const StagehandMethods = {\n  stagehandInit: {\n    name: \"stagehand.init\",\n    params: StagehandInitParamsSchema,\n    result: StagehandInitResultSchema,\n  },\n  stagehandClose: {\n    name: \"stagehand.close\",\n    params: EmptyParamsSchema,\n    result: StagehandCloseResultSchema,\n  },\n  stagehandAct: {\n    name: \"stagehand.act\",\n    params: StagehandActParamsSchema,\n    result: ActResultSchema,\n    resultWire: { transformKeys: [\"data\"] },\n  },\n  stagehandObserve: {\n    name: \"stagehand.observe\",\n    params: StagehandObserveParamsSchema,\n    result: ObserveResultSchema,\n    resultWire: { transformKeys: [\"data\"] },\n  },\n  stagehandExtract: {\n    name: \"stagehand.extract\",\n    params: StagehandExtractParamsSchema,\n    result: ExtractResultSchema,\n    paramsWire: { opaqueKeys: [\"schema\"] },\n    resultWire: { opaqueKeys: [\"data\"] },\n  },\n  stagehandMetrics: {\n    name: \"stagehand.metrics\",\n    params: EmptyParamsSchema,\n    result: StagehandMetricsSchema,\n  },\n  stagehandCallbackBatch: {\n    name: \"stagehand.callback_batch\",\n    params: CallbackBatchParamsSchema,\n    result: CallbackBatchResultSchema,\n    paramsWire: { opaqueKeys: [\"input\"] },\n    resultWire: { opaqueKeys: [\"value\"] },\n  },\n  browserbaseRequest: {\n    name: \"browserbase.request\",\n    params: BrowserbaseRequestParamsSchema,\n    result: BrowserbaseRequestResultSchema,\n  },\n  llmGenerate: {\n    name: \"llm.generate\",\n    params: LLMGenerateParamsSchema,\n    result: LLMGenerateResultSchema,\n    paramsWire: {\n      opaqueKeys: [\"inputSchema\", \"outputSchema\", \"input\", \"structuredContent\", \"schema\"],\n    },\n    resultWire: { opaqueKeys: [\"structuredContent\"] },\n  },\n  contextPages: {\n    name: \"context.pages\",\n    params: EmptyParamsSchema,\n    result: ContextPagesResultSchema,\n  },\n  contextNewPage: {\n    name: \"context.new_page\",\n    params: ContextNewPageParamsSchema,\n    result: PageRefSchema,\n  },\n  contextActivePage: {\n    name: \"context.active_page\",\n    params: EmptyParamsSchema,\n    result: ContextActivePageResultSchema,\n  },\n  contextSetActivePage: {\n    name: \"context.set_active_page\",\n    params: ContextSetActivePageParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextAddInitScript: {\n    name: \"context.add_init_script\",\n    params: ContextAddInitScriptParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextSetExtraHTTPHeaders: {\n    name: \"context.set_extra_http_headers\",\n    params: ContextSetExtraHTTPHeadersParamsSchema,\n    result: ContextVoidResultSchema,\n    paramsWire: { opaqueKeys: [\"headers\"] },\n  },\n  contextGetDomainPolicy: {\n    name: \"context.get_domain_policy\",\n    params: EmptyParamsSchema,\n    result: ContextGetDomainPolicyResultSchema,\n  },\n  contextSetDomainPolicy: {\n    name: \"context.set_domain_policy\",\n    params: ContextSetDomainPolicyParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextCookies: {\n    name: \"context.cookies\",\n    params: ContextCookiesParamsSchema,\n    result: ContextCookiesResultSchema,\n  },\n  contextAddCookies: {\n    name: \"context.add_cookies\",\n    params: ContextAddCookiesParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClearCookies: {\n    name: \"context.clear_cookies\",\n    params: ContextClearCookiesParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClipboardReadText: {\n    name: \"context.clipboard_read_text\",\n    params: ContextClipboardReadTextParamsSchema,\n    result: ContextClipboardReadTextResultSchema,\n  },\n  contextClipboardWriteText: {\n    name: \"context.clipboard_write_text\",\n    params: ContextClipboardWriteTextParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClipboardClear: {\n    name: \"context.clipboard_clear\",\n    params: ContextClipboardClearParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClipboardPaste: {\n    name: \"context.clipboard_paste\",\n    params: ContextClipboardPasteParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClipboardCopy: {\n    name: \"context.clipboard_copy\",\n    params: ContextClipboardCopyParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  contextClipboardCut: {\n    name: \"context.clipboard_cut\",\n    params: ContextClipboardCutParamsSchema,\n    result: ContextVoidResultSchema,\n  },\n  pageGoto: {\n    name: \"page.goto\",\n    params: PageGotoParamsSchema,\n    result: PageNavigationResultSchema,\n    resultWire: { opaqueKeys: [\"headers\"] },\n  },\n  pageUrl: { name: \"page.url\", params: PageIdParamsSchema, result: PageUrlResultSchema },\n  pageTitle: { name: \"page.title\", params: PageIdParamsSchema, result: PageTitleResultSchema },\n  pageClose: { name: \"page.close\", params: PageIdParamsSchema, result: PageCloseResultSchema },\n  pageReload: {\n    name: \"page.reload\",\n    params: PageReloadParamsSchema,\n    result: PageNavigationResultSchema,\n    resultWire: { opaqueKeys: [\"headers\"] },\n  },\n  pageGoBack: {\n    name: \"page.go_back\",\n    params: PageGoBackParamsSchema,\n    result: PageNavigationResultSchema,\n    resultWire: { opaqueKeys: [\"headers\"] },\n  },\n  pageGoForward: {\n    name: \"page.go_forward\",\n    params: PageGoForwardParamsSchema,\n    result: PageNavigationResultSchema,\n    resultWire: { opaqueKeys: [\"headers\"] },\n  },\n  pageClick: {\n    name: \"page.click\",\n    params: PageClickParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageHover: {\n    name: \"page.hover\",\n    params: PageHoverParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageScroll: {\n    name: \"page.scroll\",\n    params: PageScrollParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageDragAndDrop: {\n    name: \"page.drag_and_drop\",\n    params: PageDragAndDropParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageType: { name: \"page.type\", params: PageTypeParamsSchema, result: PageVoidResultSchema },\n  pageKeyPress: {\n    name: \"page.key_press\",\n    params: PageKeyPressParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageEvaluate: {\n    name: \"page.evaluate\",\n    params: PageEvaluateParamsSchema,\n    result: PageEvaluateResultSchema,\n    resultWire: { opaqueKeys: [\"value\"] },\n  },\n  pageAddInitScript: {\n    name: \"page.add_init_script\",\n    params: PageAddInitScriptParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageOn: {\n    name: \"page.on\",\n    params: PageOnParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageOff: {\n    name: \"page.off\",\n    params: PageOffParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageSetExtraHTTPHeaders: {\n    name: \"page.set_extra_http_headers\",\n    params: PageSetExtraHTTPHeadersParamsSchema,\n    result: PageVoidResultSchema,\n    paramsWire: { opaqueKeys: [\"headers\"] },\n  },\n  pageScreenshot: {\n    name: \"page.screenshot\",\n    params: PageScreenshotParamsSchema,\n    result: PageScreenshotResultSchema,\n  },\n  pagePDF: {\n    name: \"page.pdf\",\n    params: PagePDFParamsSchema,\n    result: PagePDFResultSchema,\n  },\n  pageSnapshot: {\n    name: \"page.snapshot\",\n    params: PageSnapshotParamsSchema,\n    result: SnapshotResultSchema,\n    resultWire: { opaqueKeys: [\"xpathMap\", \"urlMap\"] },\n  },\n  pageSetViewportSize: {\n    name: \"page.set_viewport_size\",\n    params: PageSetViewportSizeParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageWaitForLoadState: {\n    name: \"page.wait_for_load_state\",\n    params: PageWaitForLoadStateParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageWaitForTimeout: {\n    name: \"page.wait_for_timeout\",\n    params: PageWaitForTimeoutParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  pageWaitForSelector: {\n    name: \"page.wait_for_selector\",\n    params: PageWaitForSelectorParamsSchema,\n    result: PageWaitForSelectorResultSchema,\n  },\n  pageWaitForFunction: {\n    name: \"page.wait_for_function\",\n    params: PageWaitForFunctionParamsSchema,\n    result: PageWaitForFunctionResultSchema,\n    resultWire: { opaqueKeys: [\"value\"] },\n  },\n  pageWebMCPTools: {\n    name: \"page.webmcp_tools\",\n    params: PageWebMCPToolsParamsSchema,\n    result: PageWebMCPToolsResultSchema,\n    resultWire: { opaqueKeys: [\"inputSchema\"] },\n  },\n  pageWebMCPInvokeTool: {\n    name: \"page.webmcp_invoke_tool\",\n    params: PageWebMCPInvokeToolParamsSchema,\n    result: WebMCPInvocationDescriptorSchema,\n    paramsWire: { opaqueKeys: [\"input\"] },\n    resultWire: { opaqueKeys: [\"input\"] },\n  },\n  pageWebMCPInvocationResult: {\n    name: \"page.webmcp_invocation_result\",\n    params: PageWebMCPInvocationResultParamsSchema,\n    result: WebMCPToolResponseSchema,\n    resultWire: { opaqueKeys: [\"output\", \"exception\"] },\n  },\n  pageWebMCPCancelInvocation: {\n    name: \"page.webmcp_cancel_invocation\",\n    params: PageWebMCPCancelInvocationParamsSchema,\n    result: PageVoidResultSchema,\n  },\n  locatorClick: {\n    name: \"locator.click\",\n    params: LocatorClickParamsSchema,\n    result: LocatorClickResultSchema,\n  },\n  locatorFill: {\n    name: \"locator.fill\",\n    params: LocatorFillParamsSchema,\n    result: LocatorFillResultSchema,\n  },\n  locatorHover: {\n    name: \"locator.hover\",\n    params: LocatorParamsSchema,\n    result: LocatorHoverResultSchema,\n  },\n  locatorCount: {\n    name: \"locator.count\",\n    params: LocatorParamsSchema,\n    result: LocatorCountResultSchema,\n  },\n  locatorIsChecked: {\n    name: \"locator.is_checked\",\n    params: LocatorParamsSchema,\n    result: LocatorIsCheckedResultSchema,\n  },\n  locatorInputValue: {\n    name: \"locator.input_value\",\n    params: LocatorParamsSchema,\n    result: LocatorInputValueResultSchema,\n  },\n  locatorIsVisible: {\n    name: \"locator.is_visible\",\n    params: LocatorParamsSchema,\n    result: LocatorIsVisibleResultSchema,\n  },\n  locatorInnerText: {\n    name: \"locator.inner_text\",\n    params: LocatorParamsSchema,\n    result: LocatorInnerTextResultSchema,\n  },\n  locatorInnerHtml: {\n    name: \"locator.inner_html\",\n    params: LocatorParamsSchema,\n    result: LocatorInnerHtmlResultSchema,\n  },\n  locatorTextContent: {\n    name: \"locator.text_content\",\n    params: LocatorParamsSchema,\n    result: LocatorTextContentResultSchema,\n  },\n  locatorScrollTo: {\n    name: \"locator.scroll_to\",\n    params: LocatorScrollToParamsSchema,\n    result: LocatorScrollToResultSchema,\n  },\n  locatorCentroid: {\n    name: \"locator.centroid\",\n    params: LocatorParamsSchema,\n    result: LocatorCentroidResultSchema,\n  },\n  locatorHighlight: {\n    name: \"locator.highlight\",\n    params: LocatorHighlightParamsSchema,\n    result: LocatorHighlightResultSchema,\n  },\n  locatorSendClickEvent: {\n    name: \"locator.send_click_event\",\n    params: LocatorSendClickEventParamsSchema,\n    result: LocatorSendClickEventResultSchema,\n  },\n  locatorType: {\n    name: \"locator.type\",\n    params: LocatorTypeParamsSchema,\n    result: LocatorTypeResultSchema,\n  },\n  locatorSelectOption: {\n    name: \"locator.select_option\",\n    params: LocatorSelectOptionParamsSchema,\n    result: LocatorSelectOptionResultSchema,\n  },\n  locatorSetInputFiles: {\n    name: \"locator.set_input_files\",\n    params: LocatorSetInputFilesParamsSchema,\n    result: LocatorSetInputFilesResultSchema,\n  },\n  responseBody: {\n    name: \"response.body\",\n    params: ResponseIdParamsSchema,\n    result: ResponseBodyResultSchema,\n  },\n  responseAllHeaders: {\n    name: \"response.all_headers\",\n    params: ResponseIdParamsSchema,\n    result: ResponseAllHeadersResultSchema,\n    resultWire: { opaqueKeys: [\"headers\"] },\n  },\n  responseHeadersArray: {\n    name: \"response.headers_array\",\n    params: ResponseIdParamsSchema,\n    result: ResponseHeadersArrayResultSchema,\n  },\n  responseSecurityDetails: {\n    name: \"response.security_details\",\n    params: ResponseIdParamsSchema,\n    result: ResponseSecurityDetailsResultSchema,\n  },\n  responseServerAddr: {\n    name: \"response.server_addr\",\n    params: ResponseIdParamsSchema,\n    result: ResponseServerAddrResultSchema,\n  },\n  responseFinished: {\n    name: \"response.finished\",\n    params: ResponseIdParamsSchema,\n    result: ResponseFinishedResultSchema,\n  },\n} as const satisfies Record<string, RPCMethod>;\n\nexport const StagehandMethodSchema = z\n  .enum(Object.values(StagehandMethods).map((method) => method.name))\n  .meta({ id: \"StagehandMethod\" });\n\nconst stagehandRpcRequestSchemas = Object.values(StagehandMethods).map((method) =>\n  JSONRPCRequestSchema.extend({\n    method: z.literal(method.name),\n    params: wireSchema(method.params, \"paramsWire\" in method ? method.paramsWire : undefined),\n  }),\n);\n\nexport const StagehandRpcRequestSchema = z\n  .union(\n    stagehandRpcRequestSchemas as [\n      (typeof stagehandRpcRequestSchemas)[number],\n      ...(typeof stagehandRpcRequestSchemas)[number][],\n    ],\n  )\n  .meta({ id: \"StagehandRpcRuntimeRequest\" });\n\nexport const StagehandNotifications = {\n  browserbaseCancel: {\n    name: \"browserbase.cancel\",\n    params: BrowserbaseCancelParamsSchema,\n    paramsWire: undefined,\n  },\n  log: { name: \"stagehand.log\", params: StagehandLogSchema, paramsWire: undefined },\n  pageCDPEvent: {\n    name: \"page.cdp_event\",\n    params: PageCDPEventNotificationSchema,\n    paramsWire: { opaqueKeys: [\"params\"] },\n  },\n  pageEvent: {\n    name: \"page.event\",\n    params: PageEventNotificationSchema,\n    paramsWire: { opaqueKeys: [\"inputSchema\"] },\n  },\n} as const satisfies Record<string, RPCNotification>;\n\ntype RegisteredNotificationSchema = {\n  [Key in keyof typeof StagehandNotifications]: z.ZodType<{\n    jsonrpc: \"2.0\";\n    method: (typeof StagehandNotifications)[Key][\"name\"];\n    params: z.output<(typeof StagehandNotifications)[Key][\"params\"]>;\n  }>;\n}[keyof typeof StagehandNotifications];\n\nconst stagehandRpcNotificationSchemas = Object.values(StagehandNotifications).map((notification) =>\n  JSONRPCNotificationSchema.extend({\n    method: z.literal(notification.name),\n    params: wireSchema(notification.params, notification.paramsWire),\n  }),\n) as RegisteredNotificationSchema[];\n\nexport const StagehandRpcNotificationSchema = z\n  .union(\n    stagehandRpcNotificationSchemas as [\n      RegisteredNotificationSchema,\n      ...RegisteredNotificationSchema[],\n    ],\n  )\n  .meta({ id: \"StagehandRpcRuntimeNotification\" });\n\nconst stagehandMethodsByName = new Map<string, RPCMethod>(\n  Object.values(StagehandMethods).map((method) => [method.name, method]),\n);\n\nexport function getStagehandMethod(name: string): RPCMethod | undefined {\n  return stagehandMethodsByName.get(name);\n}\n","import type { ContextClipboardPasteParams } from \"@browserbasehq/stagehand-protocol/types\";\nimport { StagehandMethods } from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type { Page } from \"./page.js\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\n\nexport type ClipboardOptions = {\n  page?: Page;\n};\n\nexport type ClipboardPasteOptions = ClipboardOptions & {\n  shortcut?: ContextClipboardPasteParams[\"shortcut\"];\n};\n\nexport class BrowserClipboard {\n  constructor(readonly rpcClient: StagehandCommandClient) {}\n\n  async readText(options?: ClipboardOptions): Promise<string> {\n    return await this.rpcClient.send(\n      StagehandMethods.contextClipboardReadText,\n      clipboardTarget(options),\n    );\n  }\n\n  async writeText(text: string, options?: ClipboardOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextClipboardWriteText, {\n      text,\n      ...clipboardTarget(options),\n    });\n  }\n\n  async clear(options?: ClipboardOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextClipboardClear, clipboardTarget(options));\n  }\n\n  async paste(options?: ClipboardPasteOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextClipboardPaste, {\n      ...clipboardTarget(options),\n      ...(options?.shortcut === undefined ? {} : { shortcut: options.shortcut }),\n    });\n  }\n\n  async copy(options?: ClipboardOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextClipboardCopy, clipboardTarget(options));\n  }\n\n  async cut(options?: ClipboardOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextClipboardCut, clipboardTarget(options));\n  }\n}\n\nfunction clipboardTarget(options?: ClipboardOptions): { pageId?: string } {\n  return options?.page ? { pageId: options.page.pageId } : {};\n}\n","const BASE64_PATTERN = /^(?:[A-Za-z\\d+/]{4})*(?:[A-Za-z\\d+/]{2}==|[A-Za-z\\d+/]{3}=)?$/;\n\nexport function decodeBase64(value: string, source: string): Uint8Array {\n  if (value.length % 4 !== 0 || !BASE64_PATTERN.test(value)) {\n    throw new Error(`${source} returned invalid base64`);\n  }\n\n  let binary: string;\n  try {\n    binary = globalThis.atob(value);\n  } catch {\n    throw new Error(`${source} returned invalid base64`);\n  }\n  if (globalThis.btoa(binary) !== value) {\n    throw new Error(`${source} returned invalid base64`);\n  }\n\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","import type { InputFilePayload } from \"@browserbasehq/stagehand-protocol/types\";\n\nconst MAX_INPUT_FILE_BYTES = 50 * 1024 * 1024;\n\nexport type FilePayload = {\n  name: string;\n  mimeType?: string;\n  buffer: ArrayBuffer | Uint8Array | string;\n  lastModified?: number;\n};\n\nexport type FileInput = string | string[] | FilePayload | FilePayload[];\n\nexport async function normalizeFileInput(files: FileInput): Promise<InputFilePayload[]> {\n  const entries = Array.isArray(files) ? files : [files];\n  const payloads: InputFilePayload[] = [];\n  for (const entry of entries) payloads.push(await normalizeFile(entry));\n  return payloads;\n}\n\nasync function normalizeFile(file: string | FilePayload): Promise<InputFilePayload> {\n  if (typeof file === \"string\") {\n    const fsModuleName = \"node:\" + \"fs/promises\";\n    const pathModuleName = \"node:\" + \"path\";\n    const [fs, path] = await Promise.all([\n      import(/* @vite-ignore */ fsModuleName) as Promise<typeof import(\"node:fs/promises\")>,\n      import(/* @vite-ignore */ pathModuleName) as Promise<typeof import(\"node:path\")>,\n    ]).catch(() => {\n      throw new TypeError(\n        \"setInputFiles(): file paths are only supported in Node.js; use a file payload instead\",\n      );\n    });\n    const absolutePath = path.resolve(file);\n    const handle = await fs.open(absolutePath, \"r\").catch(() => {\n      throw new TypeError(\"setInputFiles(): could not read file\");\n    });\n    try {\n      const fileStat = await handle.stat().catch(() => {\n        throw new TypeError(\"setInputFiles(): could not read file\");\n      });\n      if (!fileStat.isFile()) {\n        throw new TypeError(\"setInputFiles(): expected a file\");\n      }\n      if (fileStat.size > MAX_INPUT_FILE_BYTES) {\n        throw new RangeError(`setInputFiles(): file is larger than the 50 MiB upload limit`);\n      }\n\n      const chunks: Buffer[] = [];\n      let bytesRead = 0;\n      try {\n        for await (const chunk of handle.createReadStream({\n          autoClose: false,\n          end: MAX_INPUT_FILE_BYTES,\n          start: 0,\n        })) {\n          const bytes = Buffer.from(chunk);\n          chunks.push(bytes);\n          bytesRead += bytes.byteLength;\n        }\n      } catch {\n        throw new TypeError(\"setInputFiles(): could not read file\");\n      }\n      if (bytesRead > MAX_INPUT_FILE_BYTES) {\n        throw new RangeError(`setInputFiles(): file is larger than the 50 MiB upload limit`);\n      }\n\n      const lastModified = Math.trunc(fileStat.mtimeMs);\n      return {\n        name: path.basename(absolutePath),\n        data: Buffer.concat(chunks, bytesRead).toString(\"base64\"),\n        ...(lastModified < 0 ? {} : { lastModified }),\n      };\n    } finally {\n      await handle.close().catch(() => {});\n    }\n  }\n\n  if (!file.name) throw new TypeError(\"setInputFiles(): file payload name cannot be empty\");\n  if (typeof file.buffer === \"string\") {\n    const nodeBuffer = (globalThis as typeof globalThis & { Buffer?: typeof Buffer }).Buffer;\n    const exceedsLimit = nodeBuffer\n      ? nodeBuffer.byteLength(file.buffer, \"utf8\") > MAX_INPUT_FILE_BYTES\n      : utf8ByteLengthExceeds(file.buffer, MAX_INPUT_FILE_BYTES);\n    if (exceedsLimit) {\n      throw new RangeError(`setInputFiles(): file is larger than the 50 MiB upload limit`);\n    }\n  }\n  const bytes =\n    typeof file.buffer === \"string\"\n      ? new TextEncoder().encode(file.buffer)\n      : file.buffer instanceof ArrayBuffer\n        ? new Uint8Array(file.buffer)\n        : file.buffer;\n  if (bytes.byteLength > MAX_INPUT_FILE_BYTES) {\n    throw new RangeError(`setInputFiles(): file is larger than the 50 MiB upload limit`);\n  }\n  if (\n    file.lastModified !== undefined &&\n    (!Number.isInteger(file.lastModified) || file.lastModified < 0)\n  ) {\n    throw new RangeError(\"setInputFiles(): lastModified must be a non-negative integer\");\n  }\n  return {\n    name: file.name,\n    ...(file.mimeType ? { mimeType: file.mimeType } : {}),\n    data: encodeBase64(bytes),\n    ...(file.lastModified === undefined ? {} : { lastModified: file.lastModified }),\n  };\n}\n\nfunction utf8ByteLengthExceeds(value: string, limit: number): boolean {\n  let byteLength = 0;\n  for (let index = 0; index < value.length; index++) {\n    const codeUnit = value.charCodeAt(index);\n    if (codeUnit <= 0x7f) {\n      byteLength += 1;\n    } else if (codeUnit <= 0x7ff) {\n      byteLength += 2;\n    } else if (\n      codeUnit >= 0xd800 &&\n      codeUnit <= 0xdbff &&\n      index + 1 < value.length &&\n      value.charCodeAt(index + 1) >= 0xdc00 &&\n      value.charCodeAt(index + 1) <= 0xdfff\n    ) {\n      byteLength += 4;\n      index += 1;\n    } else {\n      // BMP characters and lone surrogates both encode to three bytes.\n      byteLength += 3;\n    }\n    if (byteLength > limit) return true;\n  }\n  return false;\n}\n\nfunction encodeBase64(bytes: Uint8Array): string {\n  const nodeBuffer = (globalThis as typeof globalThis & { Buffer?: typeof Buffer }).Buffer;\n  if (nodeBuffer) return nodeBuffer.from(bytes).toString(\"base64\");\n  let binary = \"\";\n  for (const byte of bytes) binary += String.fromCharCode(byte);\n  return btoa(binary);\n}\n","import { LocatorDescriptorSchema } from \"@browserbasehq/stagehand-protocol/schemas\";\nimport { StagehandMethods } from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type {\n  LocatorClickParams,\n  LocatorCentroidResult,\n  LocatorDescriptor,\n  LocatorOptions,\n  LocatorHighlightParams,\n  LocatorScrollToParams,\n  LocatorSelectOptionParams,\n  LocatorSendClickEventParams,\n  LocatorTypeParams,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\nimport { normalizeFileInput, type FileInput } from \"./fileUpload.js\";\n\nexport type { LocatorOptions } from \"@browserbasehq/stagehand-protocol/types\";\n\nexport type LocatorClickOptions = NonNullable<LocatorClickParams[\"options\"]>;\nexport type LocatorHighlightOptions = NonNullable<LocatorHighlightParams[\"options\"]>;\nexport type LocatorSendClickEventOptions = NonNullable<LocatorSendClickEventParams[\"options\"]>;\nexport type LocatorTypeOptions = NonNullable<LocatorTypeParams[\"options\"]>;\n\nexport class Locator {\n  constructor(\n    readonly rpcClient: StagehandCommandClient,\n    readonly descriptor: LocatorDescriptor,\n  ) {}\n\n  async click(options?: LocatorClickOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorClick, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async hover(options?: LocatorOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorHover, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async fill(value: string, options?: LocatorOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorFill, {\n      ...this.descriptor,\n      value,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async count(options?: LocatorOptions): Promise<number> {\n    return await this.rpcClient.send(StagehandMethods.locatorCount, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async isChecked(options?: LocatorOptions): Promise<boolean> {\n    return await this.rpcClient.send(StagehandMethods.locatorIsChecked, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async inputValue(options?: LocatorOptions): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.locatorInputValue, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async isVisible(options?: LocatorOptions): Promise<boolean> {\n    return await this.rpcClient.send(StagehandMethods.locatorIsVisible, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async innerText(options?: LocatorOptions): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.locatorInnerText, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async innerHtml(options?: LocatorOptions): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.locatorInnerHtml, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async textContent(options?: LocatorOptions): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.locatorTextContent, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async scrollTo(\n    percent: LocatorScrollToParams[\"percent\"],\n    options?: LocatorOptions,\n  ): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorScrollTo, {\n      ...this.descriptor,\n      percent,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async centroid(options?: LocatorOptions): Promise<LocatorCentroidResult> {\n    return this.rpcClient.send(StagehandMethods.locatorCentroid, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async highlight(options?: LocatorHighlightOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorHighlight, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async sendClickEvent(options?: LocatorSendClickEventOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorSendClickEvent, {\n      ...this.descriptor,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async type(text: string, options?: LocatorTypeOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorType, {\n      ...this.descriptor,\n      text,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async selectOption(\n    values: LocatorSelectOptionParams[\"values\"],\n    options?: LocatorOptions,\n  ): Promise<string[]> {\n    return await this.rpcClient.send(StagehandMethods.locatorSelectOption, {\n      ...this.descriptor,\n      values,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async setInputFiles(files: FileInput, options?: LocatorOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.locatorSetInputFiles, {\n      ...this.descriptor,\n      files: await normalizeFileInput(files),\n      ...(options ? { options } : {}),\n    });\n  }\n\n  first(): Locator {\n    return this.nth(0);\n  }\n\n  nth(index: number): Locator {\n    const parsedDescriptor = LocatorDescriptorSchema.safeParse({\n      ...this.descriptor,\n      nth: index,\n    });\n\n    if (!parsedDescriptor.success) {\n      throw parsedDescriptor.error;\n    }\n\n    return new Locator(this.rpcClient, parsedDescriptor.data);\n  }\n}\n","import { z } from \"zod/v4\";\n\nexport type InitScriptSource<Arg> =\n  | string\n  | { path?: string; content?: string }\n  | ((arg: Arg) => unknown);\n\nexport function normalizeEvaluationExpression<R, Arg>(\n  expression: string | ((arg: Arg) => R | Promise<R>),\n  arg?: Arg,\n  caller = \"page.evaluate\",\n): string {\n  if (typeof expression === \"string\") return expression;\n\n  return `(${expression.toString()})(${serializeArgument(arg, caller)})`;\n}\n\nexport function normalizeFunctionWaitExpression<R, Arg>(\n  expression: string | ((arg: Arg) => R | Promise<R>),\n  arg?: Arg,\n  caller = \"page.waitForFunction\",\n): string {\n  // The browser invokes an expression that evaluates to a function exactly once per poll, so\n  // callbacks and bound function strings become thunks and their own results are never invoked.\n  if (typeof expression === \"function\") {\n    return `() => (${expression.toString()})(${parsedArgument(arg, caller)})`;\n  }\n  if (arg === undefined) return expression;\n\n  // Like Playwright, a string that evaluates to a function receives arg; other expressions ignore it.\n  return `((value) => typeof value === \"function\" ? () => value(${parsedArgument(arg, caller)}) : value)((${expression}))`;\n}\n\n// JSON.parse keeps own \"__proto__\" keys that an object literal would treat as a prototype.\nfunction parsedArgument(arg: unknown, caller: string): string {\n  if (arg === undefined) return \"undefined\";\n  return `JSON.parse(${JSON.stringify(serializeArgument(arg, caller))})`;\n}\n\nexport async function normalizeInitScriptSource<Arg>(\n  script: InitScriptSource<Arg>,\n  arg?: Arg,\n  caller = \"page.addInitScript\",\n): Promise<string> {\n  if (typeof script === \"function\") {\n    return `(${script.toString()})(${serializeArgument(arg, caller)})`;\n  }\n\n  if (arg !== undefined) {\n    throw new TypeError(`${caller}: 'arg' is only supported when passing a function.`);\n  }\n\n  if (typeof script === \"string\") return script;\n\n  if (!script || typeof script !== \"object\") {\n    throw new TypeError(\n      `${caller}: provide a string, function, or an object with exactly one of path or content.`,\n    );\n  }\n\n  const hasContent = typeof script.content === \"string\";\n  const hasPath = typeof script.path === \"string\" && script.path.trim().length > 0;\n  if (hasContent === hasPath) {\n    throw new TypeError(`${caller}: provide an object with exactly one of path or content.`);\n  }\n\n  if (hasContent) return script.content as string;\n\n  const filePath = script.path as string;\n  const moduleName = \"node:\" + \"fs/promises\";\n  const { readFile } = (await import(\n    /* @vite-ignore */ moduleName\n  )) as typeof import(\"node:fs/promises\");\n  const source = await readFile(filePath, \"utf8\");\n  return `${source}\\n//# sourceURL=${filePath.replace(/\\n/g, \"\")}`;\n}\n\nfunction serializeArgument(arg: unknown, caller: string): string {\n  if (arg === undefined) return \"undefined\";\n\n  const parsed = z.json().safeParse(arg);\n  if (!parsed.success) {\n    throw new TypeError(`${caller}: 'arg' must be JSON-serializable.`);\n  }\n\n  // Serialize the validated input itself: zod's parsed copy drops own \"__proto__\" keys.\n  const serialized = JSON.stringify(arg);\n  if (serialized === undefined) {\n    throw new TypeError(`${caller}: 'arg' must be JSON-serializable.`);\n  }\n  return serialized;\n}\n","import type {\n  NavigationHeader,\n  NavigationResponseDescriptor,\n  NavigationSecurityDetails,\n  NavigationServerAddr,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport { StagehandMethods } from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport { decodeBase64 } from \"./base64.js\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\n\nexport type ResponseHeader = NavigationHeader;\nexport type ResponseSecurityDetails = NavigationSecurityDetails;\nexport type ResponseServerAddr = NavigationServerAddr;\n\nexport class Response {\n  readonly #rpcClient: StagehandCommandClient;\n  readonly #descriptor: NavigationResponseDescriptor;\n\n  constructor(rpcClient: StagehandCommandClient, descriptor: NavigationResponseDescriptor) {\n    this.#rpcClient = rpcClient;\n    this.#descriptor = {\n      ...descriptor,\n      headers: { ...descriptor.headers },\n    };\n  }\n\n  url(): string {\n    return this.#descriptor.url;\n  }\n\n  status(): number {\n    return this.#descriptor.status;\n  }\n\n  statusText(): string {\n    return this.#descriptor.statusText;\n  }\n\n  ok(): boolean {\n    return this.status() >= 200 && this.status() <= 299;\n  }\n\n  headers(): Record<string, string> {\n    return { ...this.#descriptor.headers };\n  }\n\n  async allHeaders(): Promise<Record<string, string>> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseAllHeaders, {\n      responseId: this.#descriptor.responseId,\n    });\n    return { ...result.headers };\n  }\n\n  async headerValue(name: string): Promise<string | null> {\n    const values = await this.headerValues(name);\n    return values.length === 0 ? null : values.join(\", \");\n  }\n\n  async headerValues(name: string): Promise<string[]> {\n    const normalizedName = name.toLowerCase();\n    const headers = await this.headersArray();\n    return headers\n      .filter((header) => header.name.toLowerCase() === normalizedName)\n      .map((header) => header.value);\n  }\n\n  async headersArray(): Promise<ResponseHeader[]> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseHeadersArray, {\n      responseId: this.#descriptor.responseId,\n    });\n    return result.headers.map((header) => ({ ...header }));\n  }\n\n  fromServiceWorker(): boolean {\n    return this.#descriptor.fromServiceWorker;\n  }\n\n  async securityDetails(): Promise<ResponseSecurityDetails | null> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseSecurityDetails, {\n      responseId: this.#descriptor.responseId,\n    });\n    return result.value === null ? null : { ...result.value };\n  }\n\n  async serverAddr(): Promise<ResponseServerAddr | null> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseServerAddr, {\n      responseId: this.#descriptor.responseId,\n    });\n    return result.value === null ? null : { ...result.value };\n  }\n\n  async body(): Promise<Uint8Array> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseBody, {\n      responseId: this.#descriptor.responseId,\n    });\n    return decodeBase64(result.body, \"response.body\");\n  }\n\n  async text(): Promise<string> {\n    return new TextDecoder().decode(await this.body());\n  }\n\n  async json<T = unknown>(): Promise<T> {\n    return JSON.parse(await this.text()) as T;\n  }\n\n  async finished(): Promise<null | Error> {\n    const result = await this.#rpcClient.send(StagehandMethods.responseFinished, {\n      responseId: this.#descriptor.responseId,\n    });\n    return result.error === null ? null : new Error(result.error.message);\n  }\n}\n","import type {\n  WebMCPAnnotation,\n  WebMCPInvocationDescriptor,\n  WebMCPToolDescriptor,\n  WebMCPToolResponse,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport { StagehandMethods } from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type { WebMCPInvokeOptions, WebMCPResultOptions } from \"./clientSchemas.js\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\n\nexport class WebMCPTool {\n  readonly name: string;\n  readonly description: string;\n  readonly inputSchema?: WebMCPToolDescriptor[\"inputSchema\"];\n  readonly annotations?: WebMCPAnnotation;\n  readonly frameId: string;\n  readonly backendNodeId?: number;\n\n  readonly #rpcClient: StagehandCommandClient;\n  readonly #pageId: string;\n\n  constructor(rpcClient: StagehandCommandClient, pageId: string, descriptor: WebMCPToolDescriptor) {\n    this.#rpcClient = rpcClient;\n    this.#pageId = pageId;\n    this.name = descriptor.name;\n    this.description = descriptor.description;\n    this.inputSchema = descriptor.inputSchema;\n    this.annotations = descriptor.annotations;\n    this.frameId = descriptor.frameId;\n    this.backendNodeId = descriptor.backendNodeId;\n  }\n\n  async invoke(options?: WebMCPInvokeOptions): Promise<WebMCPInvocation> {\n    const descriptor = await this.#rpcClient.send(StagehandMethods.pageWebMCPInvokeTool, {\n      pageId: this.#pageId,\n      frameId: this.frameId,\n      toolName: this.name,\n      input: options?.input ?? {},\n    });\n    return new WebMCPInvocation(this.#rpcClient, this.#pageId, descriptor);\n  }\n}\n\nexport class WebMCPInvocation {\n  readonly invocationId: string;\n  readonly toolName: string;\n  readonly frameId: string;\n  readonly input: WebMCPInvocationDescriptor[\"input\"];\n\n  readonly #rpcClient: StagehandCommandClient;\n  readonly #pageId: string;\n  #terminalResult?: WebMCPToolResponse;\n\n  constructor(\n    rpcClient: StagehandCommandClient,\n    pageId: string,\n    descriptor: WebMCPInvocationDescriptor,\n  ) {\n    this.#rpcClient = rpcClient;\n    this.#pageId = pageId;\n    this.invocationId = descriptor.invocationId;\n    this.toolName = descriptor.toolName;\n    this.frameId = descriptor.frameId;\n    this.input = descriptor.input;\n  }\n\n  async result(options?: WebMCPResultOptions): Promise<WebMCPToolResponse> {\n    if (this.#terminalResult !== undefined) return this.#terminalResult;\n\n    const result = await this.#rpcClient.send(StagehandMethods.pageWebMCPInvocationResult, {\n      pageId: this.#pageId,\n      invocationId: this.invocationId,\n      ...(options ? { options } : {}),\n    });\n    this.#terminalResult ??= result;\n    return this.#terminalResult;\n  }\n\n  async cancel(): Promise<void> {\n    await this.#rpcClient.send(StagehandMethods.pageWebMCPCancelInvocation, {\n      pageId: this.#pageId,\n      invocationId: this.invocationId,\n    });\n  }\n}\n","import type {\n  LoadState,\n  PageCDPEvent,\n  PageEventName,\n  PageSubscriptionEventName,\n  StagehandRpcNotification,\n  WebMCPToolIdentity,\n  PageClickParams,\n  PageDragAndDropParams,\n  PageKeyPressParams,\n  PageNavigationOptions,\n  PagePDFOptions,\n  PageRef,\n  PageReloadParams,\n  PageScreenshotOptions,\n  PageSetExtraHTTPHeadersParams,\n  PageSetViewportSizeParams,\n  PageSnapshotOptions,\n  SnapshotResult,\n  PageTypeParams,\n  PageWaitForSelectorParams,\n  PageWaitForFunctionParams,\n  PageWaitForTimeoutParams,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport {\n  StagehandMethods,\n  StagehandNotifications,\n} from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport { decodeBase64 } from \"./base64.js\";\nimport { Locator } from \"./locator.js\";\nimport {\n  type InitScriptSource,\n  normalizeEvaluationExpression,\n  normalizeFunctionWaitExpression,\n  normalizeInitScriptSource,\n} from \"./pageScripts.js\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\nimport { Response } from \"./response.js\";\nimport { WebMCPTool } from \"./webmcp.js\";\nimport type { WebMCPToolsOptions } from \"./clientSchemas.js\";\n\nexport type ScreenshotOptions = Omit<PageScreenshotOptions, \"mask\"> & {\n  mask?: Locator[];\n  path?: string;\n};\n\nexport type PDFOptions = PagePDFOptions & {\n  path?: string;\n};\n\nexport type PageClickOptions = NonNullable<PageClickParams[\"options\"]>;\nexport type PageDragAndDropOptions = NonNullable<PageDragAndDropParams[\"options\"]>;\nexport type PageKeyPressOptions = NonNullable<PageKeyPressParams[\"options\"]>;\nexport type PageReloadOptions = NonNullable<PageReloadParams[\"options\"]>;\nexport type PageSetViewportSizeOptions = NonNullable<PageSetViewportSizeParams[\"options\"]>;\nexport type PageTypeOptions = NonNullable<PageTypeParams[\"options\"]>;\nexport type PageWaitForSelectorOptions = NonNullable<PageWaitForSelectorParams[\"options\"]>;\nexport type PageWaitForFunctionOptions = NonNullable<PageWaitForFunctionParams[\"options\"]>;\n\nexport interface PageEventListener {\n  (event: PageCDPEvent): unknown;\n}\nexport type ToolsAddedListener = (tools: WebMCPTool[]) => unknown;\nexport type ToolsRemovedListener = (tools: WebMCPToolIdentity[]) => unknown;\n\nexport class CDPSubscription {\n  private unsubscribePromise: Promise<void> | undefined;\n\n  constructor(\n    private readonly rpcClient: StagehandCommandClient,\n    private readonly subscriptionId: string,\n    private readonly removeLocalListener: () => void,\n    private readonly onDisposed: () => void,\n  ) {}\n\n  unsubscribe(): Promise<void> {\n    this.unsubscribePromise ??= this.unsubscribeOnce().catch((error: unknown) => {\n      this.unsubscribePromise = undefined;\n      throw error;\n    });\n    return this.unsubscribePromise;\n  }\n\n  private async unsubscribeOnce(): Promise<void> {\n    this.removeLocalListener();\n    this.onDisposed();\n    await this.rpcClient.send(StagehandMethods.pageOff, {\n      subscriptionId: this.subscriptionId,\n    });\n  }\n}\n\nexport class Page {\n  currentRef: PageRef;\n  private readonly eventSubscriptions = new Set<CDPSubscription>();\n\n  constructor(\n    readonly rpcClient: StagehandCommandClient,\n    ref: PageRef,\n  ) {\n    this.currentRef = ref;\n  }\n\n  get pageId(): string {\n    return this.currentRef.pageId;\n  }\n\n  get ref(): PageRef {\n    return this.currentRef;\n  }\n\n  async goto(url: string, options?: PageNavigationOptions): Promise<Response | null> {\n    const result = await this.rpcClient.send(StagehandMethods.pageGoto, {\n      pageId: this.pageId,\n      url,\n      ...(options ? { options } : {}),\n    });\n    this.currentRef = result.page;\n    return result.response === null ? null : new Response(this.rpcClient, result.response);\n  }\n\n  async reload(options?: PageReloadOptions): Promise<Response | null> {\n    const result = await this.rpcClient.send(StagehandMethods.pageReload, {\n      pageId: this.pageId,\n      ...(options ? { options } : {}),\n    });\n    this.currentRef = result.page;\n    return result.response === null ? null : new Response(this.rpcClient, result.response);\n  }\n\n  async goBack(options?: PageNavigationOptions): Promise<Response | null> {\n    const result = await this.rpcClient.send(StagehandMethods.pageGoBack, {\n      pageId: this.pageId,\n      ...(options ? { options } : {}),\n    });\n    this.currentRef = result.page;\n    return result.response === null ? null : new Response(this.rpcClient, result.response);\n  }\n\n  async goForward(options?: PageNavigationOptions): Promise<Response | null> {\n    const result = await this.rpcClient.send(StagehandMethods.pageGoForward, {\n      pageId: this.pageId,\n      ...(options ? { options } : {}),\n    });\n    this.currentRef = result.page;\n    return result.response === null ? null : new Response(this.rpcClient, result.response);\n  }\n\n  async click(x: number, y: number, options?: PageClickOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageClick, {\n      pageId: this.pageId,\n      x,\n      y,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async hover(x: number, y: number): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageHover, {\n      pageId: this.pageId,\n      x,\n      y,\n    });\n  }\n\n  async scroll(x: number, y: number, deltaX: number, deltaY: number): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageScroll, {\n      pageId: this.pageId,\n      x,\n      y,\n      deltaX,\n      deltaY,\n    });\n  }\n\n  async dragAndDrop(\n    fromX: number,\n    fromY: number,\n    toX: number,\n    toY: number,\n    options?: PageDragAndDropOptions,\n  ): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageDragAndDrop, {\n      pageId: this.pageId,\n      fromX,\n      fromY,\n      toX,\n      toY,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async type(text: string, options?: PageTypeOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageType, {\n      pageId: this.pageId,\n      text,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async keyPress(key: string, options?: PageKeyPressOptions): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageKeyPress, {\n      pageId: this.pageId,\n      key,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async evaluate<R = unknown, Arg = unknown>(\n    expression: string | ((arg: Arg) => R | Promise<R>),\n    arg?: Arg,\n  ): Promise<R> {\n    const result = await this.rpcClient.send(StagehandMethods.pageEvaluate, {\n      pageId: this.pageId,\n      expression: normalizeEvaluationExpression(expression, arg),\n    });\n    return result.value as R;\n  }\n\n  async addInitScript<Arg = unknown>(script: InitScriptSource<Arg>, arg?: Arg): Promise<void> {\n    const source = await normalizeInitScriptSource(script, arg);\n    await this.rpcClient.send(StagehandMethods.pageAddInitScript, {\n      pageId: this.pageId,\n      source,\n    });\n  }\n\n  async on(event: PageEventName, listener: PageEventListener): Promise<CDPSubscription> {\n    if (event !== \"console\") throw new Error('page.on only supports \"console\" events');\n    return this.subscribe(event, (notification) => {\n      if (notification.method === StagehandNotifications.pageCDPEvent.name) {\n        return listener(notification.params.event);\n      }\n    });\n  }\n\n  async onToolsAdded(listener: ToolsAddedListener): Promise<CDPSubscription> {\n    return this.subscribe(\"toolsadded\", (notification) => {\n      if (\n        notification.method === StagehandNotifications.pageEvent.name &&\n        notification.params.event === \"toolsadded\"\n      ) {\n        return listener(\n          notification.params.tools.map(\n            (tool) => new WebMCPTool(this.rpcClient, this.pageId, tool),\n          ),\n        );\n      }\n    });\n  }\n\n  async onToolsRemoved(listener: ToolsRemovedListener): Promise<CDPSubscription> {\n    return this.subscribe(\"toolsremoved\", (notification) => {\n      if (\n        notification.method === StagehandNotifications.pageEvent.name &&\n        notification.params.event === \"toolsremoved\"\n      ) {\n        return listener(notification.params.tools);\n      }\n    });\n  }\n\n  private async subscribe(\n    event: PageSubscriptionEventName,\n    deliver: (notification: StagehandRpcNotification) => unknown,\n  ): Promise<CDPSubscription> {\n    const subscriptionId = crypto.randomUUID();\n    const removeNotificationListener = this.rpcClient.onNotification((notification) => {\n      if (\n        (notification.method !== StagehandNotifications.pageCDPEvent.name &&\n          notification.method !== StagehandNotifications.pageEvent.name) ||\n        notification.params.subscriptionId !== subscriptionId\n      ) {\n        return;\n      }\n      try {\n        const result = deliver(notification);\n        if (result && typeof result === \"object\" && \"then\" in result) {\n          void Promise.resolve(result).catch(reportPageEventListenerError);\n        }\n      } catch (error) {\n        reportPageEventListenerError(error);\n      }\n    });\n\n    let subscription: CDPSubscription;\n    subscription = new CDPSubscription(\n      this.rpcClient,\n      subscriptionId,\n      removeNotificationListener,\n      () => this.eventSubscriptions.delete(subscription),\n    );\n    this.eventSubscriptions.add(subscription);\n\n    try {\n      await this.rpcClient.send(StagehandMethods.pageOn, {\n        pageId: this.pageId,\n        subscriptionId,\n        event,\n      });\n      return subscription;\n    } catch (error) {\n      removeNotificationListener();\n      try {\n        // A failed response does not mean the runtime stopped registering.\n        await this.rpcClient.send(StagehandMethods.pageOff, { subscriptionId });\n        this.eventSubscriptions.delete(subscription);\n      } catch (cleanupError) {\n        process.emitWarning(\n          cleanupError instanceof Error ? cleanupError.message : String(cleanupError),\n          { code: \"STAGEHAND_PAGE_SUBSCRIPTION_CLEANUP_ERROR\" },\n        );\n      }\n      throw error;\n    }\n  }\n\n  async setExtraHTTPHeaders(headers: PageSetExtraHTTPHeadersParams[\"headers\"]): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageSetExtraHTTPHeaders, {\n      pageId: this.pageId,\n      headers,\n    });\n  }\n\n  async setViewportSize(\n    width: number,\n    height: number,\n    options?: PageSetViewportSizeOptions,\n  ): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageSetViewportSize, {\n      pageId: this.pageId,\n      width,\n      height,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async waitForLoadState(state: LoadState, timeout?: number): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageWaitForLoadState, {\n      pageId: this.pageId,\n      state,\n      ...(timeout === undefined ? {} : { timeout }),\n    });\n  }\n\n  async waitForTimeout(ms: PageWaitForTimeoutParams[\"ms\"]): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.pageWaitForTimeout, {\n      pageId: this.pageId,\n      ms,\n    });\n  }\n\n  async waitForSelector(selector: string, options?: PageWaitForSelectorOptions): Promise<boolean> {\n    const result = await this.rpcClient.send(StagehandMethods.pageWaitForSelector, {\n      pageId: this.pageId,\n      selector,\n      ...(options ? { options } : {}),\n    });\n    return result.matched;\n  }\n\n  /** Poll in the page's main world until the expression returns a truthy JSON value. */\n  async waitForFunction<R = unknown, Arg = unknown>(\n    expression: string | ((arg: Arg) => R | Promise<R>),\n    arg?: Arg,\n    options?: PageWaitForFunctionOptions,\n  ): Promise<R> {\n    const result = await this.rpcClient.send(StagehandMethods.pageWaitForFunction, {\n      pageId: this.pageId,\n      expression: normalizeFunctionWaitExpression(expression, arg),\n      ...(options ? { options } : {}),\n    });\n    return result.value as R;\n  }\n\n  async screenshot(options?: ScreenshotOptions): Promise<Uint8Array> {\n    const { path, mask, ...screenshotOptions } = options ?? {};\n    const result = await this.rpcClient.send(StagehandMethods.pageScreenshot, {\n      pageId: this.pageId,\n      options: {\n        ...screenshotOptions,\n        ...(mask ? { mask: mask.map((locator) => locator.descriptor) } : {}),\n      },\n    });\n    return await decodeCaptureResult(result.data, \"screenshot\", path);\n  }\n\n  async pdf(options?: PDFOptions): Promise<Uint8Array> {\n    const { path, ...pdfOptions } = options ?? {};\n    const result = await this.rpcClient.send(StagehandMethods.pagePDF, {\n      pageId: this.pageId,\n      options: pdfOptions,\n    });\n    return await decodeCaptureResult(result.data, \"pdf\", path);\n  }\n\n  async snapshot(options?: PageSnapshotOptions): Promise<SnapshotResult> {\n    return await this.rpcClient.send(StagehandMethods.pageSnapshot, {\n      pageId: this.pageId,\n      ...(options ? { options } : {}),\n    });\n  }\n\n  async tools(options?: WebMCPToolsOptions): Promise<WebMCPTool[]> {\n    const result = await this.rpcClient.send(StagehandMethods.pageWebMCPTools, {\n      pageId: this.pageId,\n      ...(options ? { options } : {}),\n    });\n    return result.tools.map(\n      (descriptor) => new WebMCPTool(this.rpcClient, this.pageId, descriptor),\n    );\n  }\n\n  async url(): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.pageUrl, {\n      pageId: this.pageId,\n    });\n  }\n\n  async title(): Promise<string> {\n    return await this.rpcClient.send(StagehandMethods.pageTitle, {\n      pageId: this.pageId,\n    });\n  }\n\n  async close(): Promise<void> {\n    await Promise.allSettled(\n      [...this.eventSubscriptions].map((subscription) => subscription.unsubscribe()),\n    );\n    await this.rpcClient.send(StagehandMethods.pageClose, { pageId: this.pageId });\n  }\n\n  locator(selector: string): Locator {\n    return new Locator(this.rpcClient, {\n      pageId: this.pageId,\n      selector,\n    });\n  }\n}\n\nasync function decodeCaptureResult(\n  data: string,\n  method: \"screenshot\" | \"pdf\",\n  path?: string,\n): Promise<Uint8Array> {\n  const bytes = decodeBase64(data, `page.${method}`);\n  if (path !== undefined) {\n    const moduleName = \"node:\" + \"fs/promises\";\n    const { writeFile } = (await import(/* @vite-ignore */ moduleName).catch(() => {\n      throw new TypeError(\n        `page.${method}(): path is only supported in Node.js; omit path to receive ${method === \"pdf\" ? \"PDF\" : \"screenshot\"} bytes`,\n      );\n    })) as typeof import(\"node:fs/promises\");\n    await writeFile(path, bytes);\n  }\n  return bytes;\n}\n\nfunction reportPageEventListenerError(error: unknown): void {\n  process.emitWarning(error instanceof Error ? error.message : String(error), {\n    code: \"STAGEHAND_PAGE_EVENT_LISTENER_ERROR\",\n  });\n}\n","import type {\n  ContextClearCookiesParams,\n  ContextNewPageParams,\n  ContextSetExtraHTTPHeadersParams,\n  Cookie,\n  CookieParam,\n  DomainPolicy,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport type * as ProtocolTypes from \"@browserbasehq/stagehand-protocol/types\";\nimport { StagehandMethods } from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport { BrowserClipboard } from \"./browserClipboard.js\";\nimport { Page } from \"./page.js\";\nimport { normalizeInitScriptSource, type InitScriptSource } from \"./pageScripts.js\";\nimport type { StagehandCommandClient } from \"./commandClient.js\";\nexport type { Cookie, CookieParam, DomainPolicy } from \"@browserbasehq/stagehand-protocol/types\";\n\nexport type ClearCookieOptions = {\n  name?: string | RegExp;\n  domain?: string | RegExp;\n  path?: string | RegExp;\n};\n\nexport class BrowserContext {\n  clipboardRef?: BrowserClipboard;\n\n  constructor(\n    readonly rpcClient: StagehandCommandClient,\n    private readonly closeBrowser?: () => Promise<void>,\n  ) {}\n\n  get clipboard(): BrowserClipboard {\n    return (this.clipboardRef ??= new BrowserClipboard(this.rpcClient));\n  }\n\n  async pages(): Promise<Page[]> {\n    const pageRefs = await this.rpcClient.send(StagehandMethods.contextPages, {});\n    return pageRefs.map((pageRef) => new Page(this.rpcClient, pageRef));\n  }\n\n  async newPage(url?: string): Promise<Page> {\n    const params: ContextNewPageParams = url === undefined ? {} : { url };\n    const pageRef = await this.rpcClient.send(StagehandMethods.contextNewPage, params);\n    return new Page(this.rpcClient, pageRef);\n  }\n\n  async activePage(): Promise<Page | undefined> {\n    const pageRef = await this.rpcClient.send(StagehandMethods.contextActivePage, {});\n    return pageRef ? new Page(this.rpcClient, pageRef) : undefined;\n  }\n\n  async setActivePage(page: Page): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextSetActivePage, {\n      pageId: page.pageId,\n    });\n  }\n\n  /** Close the underlying browser. */\n  async close(): Promise<void> {\n    if (!this.closeBrowser) {\n      throw new Error(\"Browser context is not attached to a browser\");\n    }\n    await this.closeBrowser();\n  }\n\n  async addInitScript<Arg = unknown>(script: InitScriptSource<Arg>, arg?: Arg): Promise<void> {\n    const source = await normalizeInitScriptSource(script, arg, \"context.addInitScript\");\n    await this.rpcClient.send(StagehandMethods.contextAddInitScript, { source });\n  }\n\n  async setExtraHTTPHeaders(headers: ContextSetExtraHTTPHeadersParams[\"headers\"]): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextSetExtraHTTPHeaders, { headers });\n  }\n\n  async getDomainPolicy(): Promise<DomainPolicy | null> {\n    return await this.rpcClient.send(StagehandMethods.contextGetDomainPolicy, {});\n  }\n\n  async setDomainPolicy(policy: DomainPolicy | null): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextSetDomainPolicy, { policy });\n  }\n\n  async cookies(urls?: string | string[]): Promise<Cookie[]> {\n    const params = urls === undefined ? {} : { urls };\n    return await this.rpcClient.send(StagehandMethods.contextCookies, params);\n  }\n\n  async addCookies(cookies: CookieParam[]): Promise<void> {\n    await this.rpcClient.send(StagehandMethods.contextAddCookies, { cookies });\n  }\n\n  async clearCookies(options?: ClearCookieOptions): Promise<void> {\n    const params: ContextClearCookiesParams =\n      options === undefined ? {} : { options: serializeClearCookieOptions(options) };\n    await this.rpcClient.send(StagehandMethods.contextClearCookies, params);\n  }\n}\n\nfunction serializeClearCookieOptions(\n  options: ClearCookieOptions,\n): ProtocolTypes.ClearCookieOptions {\n  return {\n    ...(options.name === undefined ? {} : { name: serializeCookieFilter(options.name) }),\n    ...(options.domain === undefined ? {} : { domain: serializeCookieFilter(options.domain) }),\n    ...(options.path === undefined ? {} : { path: serializeCookieFilter(options.path) }),\n  };\n}\n\nfunction serializeCookieFilter(\n  filter: string | RegExp,\n): string | { source: string; flags: string } {\n  return typeof filter === \"string\" ? filter : { source: filter.source, flags: filter.flags };\n}\n","import type { ImplementationInfo } from \"@browserbasehq/stagehand-protocol/types\";\nimport {\n  ImplementationInfoSchema,\n  STAGEHAND_PROTOCOL_VERSION,\n} from \"@browserbasehq/stagehand-protocol/schemas\";\nimport { checkProtocolCompatibility } from \"@browserbasehq/stagehand-protocol/protocol-version\";\nimport { z } from \"zod/v4\";\n\nexport const STAGEHAND_RUNTIME_NAME = \"stagehand\";\n\nexport type RuntimeRequirement = {\n  protocolVersion: string;\n};\n/**\n * The marker a connected runtime published. Unlike the protocol's `RuntimeDescriptor`, the\n * server name is not pinned to \"stagehand\" so a foreign runtime can be reported as incompatible\n * rather than silently treated as unreadable.\n */\nexport type ReportedRuntimeDescriptor = {\n  protocolVersion: string;\n  serverInfo: ImplementationInfo;\n};\nexport type RuntimeIncompatibilityReason =\n  | \"protocol-invalid-version\"\n  | \"protocol-major-mismatch\"\n  | \"protocol-server-too-old\"\n  | \"protocol-prerelease-mismatch\"\n  | \"runtime-name-mismatch\";\nexport type RuntimeCompatibility =\n  | {\n      kind: \"compatible\";\n      protocolVersion: string;\n      serverInfo: ImplementationInfo;\n    }\n  | {\n      kind: \"incompatible\";\n      reason: RuntimeIncompatibilityReason;\n      detail: string;\n      required: RuntimeRequirement;\n      reported: ReportedRuntimeDescriptor;\n    }\n  | {\n      kind: \"unknown\";\n      reason: \"missing-marker\" | \"unreadable-marker\";\n      detail: string;\n    };\n\n// Accepts any server name so negotiation can distinguish a foreign runtime from garbage, and any\n// non-empty protocolVersion string so a non-SemVer version is reported as incompatible\n// (protocol-invalid-version) instead of being polled until the initialization timeout.\nconst ReportedRuntimeDescriptorSchema = z.strictObject({\n  protocolVersion: z.string().min(1),\n  serverInfo: ImplementationInfoSchema,\n});\n\nexport const DEFAULT_RUNTIME_REQUIREMENT: RuntimeRequirement = Object.freeze({\n  protocolVersion: STAGEHAND_PROTOCOL_VERSION,\n});\n\nexport function negotiateRuntimeCompatibility(\n  required: RuntimeRequirement,\n  raw: unknown,\n): RuntimeCompatibility {\n  if (raw == null)\n    return {\n      kind: \"unknown\",\n      reason: \"missing-marker\",\n      detail: \"Runtime marker is absent\",\n    };\n\n  try {\n    const result = ReportedRuntimeDescriptorSchema.safeParse(raw);\n    if (!result.success)\n      return {\n        kind: \"unknown\",\n        reason: \"unreadable-marker\",\n        detail: z.prettifyError(result.error),\n      };\n\n    const reported = descriptor(result.data);\n    if (reported.serverInfo.name !== STAGEHAND_RUNTIME_NAME)\n      return incompatible(\n        \"runtime-name-mismatch\",\n        `Runtime name mismatch: expected \"${STAGEHAND_RUNTIME_NAME}\", server reported \"${reported.serverInfo.name}\"`,\n        required,\n        reported,\n      );\n    const compatibility = checkProtocolCompatibility(\n      required.protocolVersion,\n      reported.protocolVersion,\n    );\n    if (!compatibility.compatible)\n      return incompatible(\n        compatibility.reason,\n        compatibilityDetail(\n          compatibility.reason,\n          required.protocolVersion,\n          reported.protocolVersion,\n        ),\n        required,\n        reported,\n      );\n    return {\n      kind: \"compatible\",\n      protocolVersion: reported.protocolVersion,\n      serverInfo: reported.serverInfo,\n    };\n  } catch {\n    return {\n      kind: \"unknown\",\n      reason: \"unreadable-marker\",\n      detail: \"Runtime marker could not be read\",\n    };\n  }\n}\n\nfunction compatibilityDetail(\n  reason: Exclude<RuntimeIncompatibilityReason, \"runtime-name-mismatch\">,\n  clientVersion: string,\n  serverVersion: string,\n): string {\n  switch (reason) {\n    case \"protocol-invalid-version\":\n      return `Invalid protocol version: client ${clientVersion}, server ${serverVersion}`;\n    case \"protocol-major-mismatch\":\n      return `Protocol major mismatch: client ${clientVersion}, server ${serverVersion}`;\n    case \"protocol-server-too-old\":\n      return `Server protocol ${serverVersion} is older than client requirement ${clientVersion}`;\n    case \"protocol-prerelease-mismatch\":\n      return `Protocol prereleases must match exactly: client ${clientVersion}, server ${serverVersion}`;\n  }\n}\n\nfunction descriptor(value: ReportedRuntimeDescriptor): ReportedRuntimeDescriptor {\n  return {\n    protocolVersion: value.protocolVersion,\n    serverInfo: { ...value.serverInfo },\n  };\n}\n\nfunction incompatible(\n  reason: RuntimeIncompatibilityReason,\n  detail: string,\n  required: RuntimeRequirement,\n  reported: ReportedRuntimeDescriptor,\n): RuntimeCompatibility {\n  return {\n    kind: \"incompatible\",\n    reason,\n    detail,\n    required: { ...required },\n    reported,\n  };\n}\n","export function abortReason(signal: AbortSignal): Error {\n  return signal.reason instanceof Error ? signal.reason : new Error(\"Operation aborted\");\n}\n\nexport function throwIfAborted(signal?: AbortSignal): void {\n  if (signal?.aborted) throw abortReason(signal);\n}\n\nexport async function abortable<T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> {\n  if (!signal) return await promise;\n  throwIfAborted(signal);\n\n  return await new Promise<T>((resolve, reject) => {\n    const onAbort = () => reject(abortReason(signal));\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n    promise.then(\n      (value) => {\n        signal.removeEventListener(\"abort\", onAbort);\n        resolve(value);\n      },\n      (error: unknown) => {\n        signal.removeEventListener(\"abort\", onAbort);\n        reject(error);\n      },\n    );\n  });\n}\n\nexport async function abortableDelay(ms: number, signal?: AbortSignal): Promise<void> {\n  if (!signal) {\n    await new Promise<void>((resolve) => setTimeout(resolve, ms));\n    return;\n  }\n  throwIfAborted(signal);\n\n  await new Promise<void>((resolve, reject) => {\n    const onAbort = () => {\n      clearTimeout(timeoutId);\n      reject(abortReason(signal));\n    };\n    const timeoutId = setTimeout(() => {\n      signal.removeEventListener(\"abort\", onAbort);\n      resolve();\n    }, ms);\n    signal.addEventListener(\"abort\", onAbort, { once: true });\n  });\n}\n","import { appendFileSync } from \"node:fs\";\nimport type { JSONRPCMessage } from \"@browserbasehq/stagehand-protocol/json-rpc/types\";\nimport {\n  STAGEHAND_SEND_TO_HOST_BINDING,\n  StagehandMethods,\n  StagehandSendToHostBindingSchema,\n} from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport { z } from \"zod/v4\";\nimport type { ImplementationInfo } from \"@browserbasehq/stagehand-protocol/types\";\nimport {\n  DEFAULT_RUNTIME_REQUIREMENT,\n  negotiateRuntimeCompatibility,\n  type RuntimeCompatibility,\n  type RuntimeIncompatibilityReason,\n  type RuntimeRequirement,\n} from \"./runtimeCompatibility.js\";\nimport { abortable, abortableDelay, abortReason, throwIfAborted } from \"./abort.js\";\n\ntype JsonObject = Record<string, unknown>;\n\ntype TargetInfo = {\n  targetId: string;\n  type: string;\n  title: string;\n  url: string;\n};\n\nexport type ServiceWorkerInfo = {\n  targetId: string;\n  url: string;\n  title: string;\n  extensionId?: string;\n};\n\nexport type CDPClientOptions = {\n  cdpUrl: string;\n  headers?: Record<string, string>;\n  extensionDir?: string;\n  /** Discover an installed runtime first; load this directory only if absent or unsupported. */\n  localExtensionDir?: string;\n  extensionId?: string;\n  preloadedExtension?: true;\n  serviceWorkerUrlIncludes?: string;\n  runtimeRequirement?: RuntimeRequirement;\n  allowFallbackInstall?: boolean;\n  signal: AbortSignal;\n};\n\ntype RuntimeEvaluateResult = {\n  result?: {\n    value?: unknown;\n  };\n  exceptionDetails?: {\n    text?: string;\n    exception?: {\n      description?: string;\n      value?: unknown;\n    };\n  };\n};\n\ntype PendingCDPRequest = {\n  method: string;\n  resolve: (value: unknown) => void;\n  reject: (reason: Error) => void;\n  removeAbortListener?: () => void;\n};\n\ntype VersionResponse = {\n  ok: boolean;\n  status: number;\n  statusText: string;\n  json(): Promise<unknown>;\n  headers?: Pick<Headers, \"get\">;\n  body?: { cancel(): Promise<void> } | null;\n};\n\ntype ResolveBrowserWebSocketUrlOptions = {\n  pollIntervalMs?: number;\n  headers?: Record<string, string>;\n  fetchFn?: (\n    url: string,\n    init?: { signal?: AbortSignal; headers?: Record<string, string>; redirect?: RequestRedirect },\n  ) => Promise<VersionResponse>;\n  delayFn?: (ms: number) => Promise<void>;\n  signal: AbortSignal;\n};\n\nfunction callbackBatchExpression(input: {\n  message: JSONRPCMessage;\n  callbackSource: string;\n}): string {\n  const serializedMessage = JSON.stringify(JSON.stringify(input.message));\n  return `(() => { const __name = (fn, name) => { try { Object.defineProperty(fn, \"name\", { value: name, configurable: true }); } catch {} return fn; }; void globalThis.__stagehandReceiveFromHost(${serializedMessage}, { callback: (${input.callbackSource}) }); return true; })()`;\n}\n\nfunction callbackSourceFromMessage(message: JSONRPCMessage): string | undefined {\n  if (!(\"method\" in message) || message.method !== StagehandMethods.stagehandCallbackBatch.name) {\n    return undefined;\n  }\n  const params = message.params;\n  if (typeof params !== \"object\" || params === null || Array.isArray(params)) {\n    throw new TypeError(\"Stagehand callback batch request is missing callback_source\");\n  }\n  const source = params.callback_source;\n  if (typeof source !== \"string\" || !source.trim()) {\n    throw new TypeError(\"Stagehand callback batch request is missing callback_source\");\n  }\n  return source;\n}\n\nexport function stagehandMessageExpression(message: JSONRPCMessage): string {\n  const callbackSource = callbackSourceFromMessage(message);\n  return callbackSource\n    ? callbackBatchExpression({ message, callbackSource })\n    : `void globalThis.__stagehandReceiveFromHost(${JSON.stringify(JSON.stringify(message))}); true`;\n}\n\nexport const RUNTIME_INCOMPATIBLE_REMEDIATION =\n  \"Upgrade the Stagehand SDK and the Stagehand extension together so their protocol majors match, \" +\n  \"or start the session with the extension bundled in this SDK.\";\n\n/**\n * Raised as soon as the connected Stagehand extension publishes a runtime marker this SDK cannot\n * talk to. Initialization does not keep polling: the extension will not change its protocol\n * version while the session is open.\n */\nexport class StagehandRuntimeIncompatibleError extends Error {\n  readonly reason: RuntimeIncompatibilityReason;\n  /** Human-readable negotiation failure, without the version summary or remediation. */\n  readonly detail: string;\n  /** Protocol version this SDK speaks. */\n  readonly clientProtocolVersion: string;\n  /** Protocol version the connected extension reported. */\n  readonly reportedProtocolVersion: string;\n  /** `serverInfo` published by the connected runtime (name + version). */\n  readonly serverInfo: ImplementationInfo;\n  readonly remediation = RUNTIME_INCOMPATIBLE_REMEDIATION;\n\n  constructor(readonly compatibility: Extract<RuntimeCompatibility, { kind: \"incompatible\" }>) {\n    super(\n      \"Incompatible Stagehand runtime: \" +\n        compatibility.detail +\n        \"; client protocol \" +\n        compatibility.required.protocolVersion +\n        \", reported protocol \" +\n        String(compatibility.reported.protocolVersion) +\n        \", server \" +\n        compatibility.reported.serverInfo.name +\n        \"/\" +\n        compatibility.reported.serverInfo.version +\n        \". \" +\n        RUNTIME_INCOMPATIBLE_REMEDIATION,\n    );\n    this.name = \"StagehandRuntimeIncompatibleError\";\n    this.reason = compatibility.reason;\n    this.detail = compatibility.detail;\n    this.clientProtocolVersion = compatibility.required.protocolVersion;\n    this.reportedProtocolVersion = compatibility.reported.protocolVersion;\n    this.serverInfo = { ...compatibility.reported.serverInfo };\n  }\n}\n\nconst CDPErrorSchema = z.looseObject({\n  code: z.int(),\n  message: z.string(),\n  data: z.unknown().optional(),\n});\n\nconst CDPCommandErrorCauseSchema = CDPErrorSchema.extend({\n  method: z.string(),\n});\n\nconst CDPResponseEnvelopeSchema = z.looseObject({\n  id: z.int(),\n  result: z.unknown().optional(),\n  error: CDPErrorSchema.optional(),\n  sessionId: z.string().optional(),\n});\n\nconst CDPEventEnvelopeSchema = z.looseObject({\n  method: z.string(),\n  params: z.unknown().optional(),\n  sessionId: z.string().optional(),\n});\n\nconst RuntimeBindingCalledSchema = z.looseObject({\n  name: StagehandSendToHostBindingSchema,\n  payload: z.string(),\n  executionContextId: z.int(),\n});\n\nconst RuntimeReadinessEnvelopeSchema = z.looseObject({\n  marker: z.unknown(),\n  hasReceiver: z.boolean(),\n});\n\nconst InstalledExtensionSchema = z.looseObject({\n  id: z.string().min(1),\n  name: z.string(),\n  version: z.string(),\n  path: z.string(),\n  enabled: z.boolean(),\n});\n\nconst InstalledExtensionsResultSchema = z.looseObject({\n  extensions: z.array(InstalledExtensionSchema),\n});\n\nconst STAGEHAND_EXTENSION_NAME = \"Stagehand Runtime\";\n\nexport class CDPConnectionClosedError extends Error {\n  constructor(options?: ErrorOptions & { code?: number; reason?: string }) {\n    const detail =\n      options?.code !== undefined\n        ? ` (close code ${options.code}${options.reason ? `: ${options.reason}` : \"\"})`\n        : \"\";\n    super(`CDP connection closed${detail}`, options);\n    this.name = \"CDPConnectionClosedError\";\n  }\n}\n\nexport class CDPClient {\n  onmessage?: (message: unknown) => void | Promise<void>;\n  onclose?: (reason?: Error) => void;\n  onerror?: (error: Error) => void;\n  readonly webSocketDebuggerUrl: string;\n  nextId = 1;\n  pending = new Map<number, PendingCDPRequest>();\n  sessionId: string | undefined;\n  attachedServiceWorker: ServiceWorkerInfo | undefined;\n  closed = false;\n  private readonly heartbeatMs = cdpHeartbeatMs(process.env.STAGEHAND_CDP_HEARTBEAT_MS);\n  private heartbeatTimer?: ReturnType<typeof setInterval>;\n  private heartbeatAbort?: AbortController;\n  private readonly connectedAt = Date.now();\n  private lastMsgAt = this.connectedAt;\n  private lastSentAt = this.connectedAt;\n  private lastMethod = \"\";\n\n  constructor(\n    readonly socket: WebSocket,\n    webSocketDebuggerUrl: string,\n  ) {\n    this.webSocketDebuggerUrl = webSocketDebuggerUrl;\n    this.socket.addEventListener(\"message\", (event) => {\n      if (this.closed) return;\n      this.lastMsgAt = Date.now();\n      this.handleMessage(event.data).catch((error: unknown) => {\n        this.finishDrop(asError(error), \"error\");\n      });\n    });\n\n    this.socket.addEventListener(\"close\", (event) => {\n      const { code, reason: closeReason } = event as Event & { code?: number; reason?: string };\n      this.finishDrop(new CDPConnectionClosedError({ code, reason: closeReason }), \"close\", code);\n    });\n\n    this.socket.addEventListener(\"error\", (event) => {\n      const socketError = asError((event as Event & { error?: unknown }).error ?? event);\n      this.finishDrop(new CDPConnectionClosedError({ cause: socketError }), \"error\");\n    });\n    this.startHeartbeat();\n  }\n\n  /** Browser-level traffic only; no replay, transport replacement or reconnection. */\n  private startHeartbeat(): void {\n    this.heartbeatTimer = setInterval(() => {\n      if (this.closed || this.socket.readyState !== WebSocket.OPEN || this.heartbeatAbort) return;\n      const controller = new AbortController();\n      this.heartbeatAbort = controller;\n      const timeout = setTimeout(\n        () => controller.abort(new Error(\"CDP heartbeat timed out\")),\n        Math.min(this.heartbeatMs, 10_000),\n      );\n      timeout.unref?.();\n      void this.sendCommand(\"Browser.getVersion\", {}, undefined, controller.signal)\n        .catch(() => undefined)\n        .finally(() => {\n          clearTimeout(timeout);\n          if (this.heartbeatAbort === controller) this.heartbeatAbort = undefined;\n        });\n    }, this.heartbeatMs);\n    this.heartbeatTimer.unref?.();\n  }\n\n  private stopHeartbeat(): void {\n    clearInterval(this.heartbeatTimer);\n    this.heartbeatTimer = undefined;\n    this.heartbeatAbort?.abort(new Error(\"CDP heartbeat stopped\"));\n    this.heartbeatAbort = undefined;\n  }\n\n  private finishDrop(reason: Error, kind: \"close\" | \"error\", code?: number): void {\n    if (this.closed) return;\n    // Mark terminal before closing the socket: synchronous error->close must\n    // notify once and retain the original error rather than the cleanup close.\n    this.closed = true;\n    this.logDrop(reason, kind, code);\n    this.stopHeartbeat();\n    this.rejectPending(reason);\n    if (kind === \"error\") {\n      try {\n        this.socket.close();\n      } catch {\n        /* preserve the terminal error */\n      }\n      this.onerror?.(reason);\n    } else {\n      this.onclose?.(reason);\n    }\n  }\n\n  private logDrop(reason: Error, kind: \"close\" | \"error\", code?: number): void {\n    if (process.env.STAGEHAND_CDP_LOG !== \"1\") return;\n    const now = Date.now();\n    const line = `CDP_DROP ${JSON.stringify({\n      ts: new Date(now).toISOString(),\n      kind,\n      code: code ?? null,\n      idle_ms: now - this.lastMsgAt,\n      since_send_ms: now - this.lastSentAt,\n      age_ms: now - this.connectedAt,\n      pending: this.pending.size,\n      last_method: /^[A-Za-z][A-Za-z0-9_.]*$/u.test(this.lastMethod) ? this.lastMethod : \"\",\n      reason: cdpDiagnosticReason(reason),\n    })}\\n`;\n    // Diagnostics never change the connection's terminal outcome.\n    try {\n      process.stderr.write(line);\n    } catch {\n      /* best effort */\n    }\n    const file = process.env.STAGEHAND_CDP_LOG_FILE;\n    if (file) {\n      try {\n        appendFileSync(file, line);\n      } catch {\n        /* best effort */\n      }\n    }\n  }\n\n  static async connect(options: CDPClientOptions): Promise<CDPClient> {\n    const signal = options.signal;\n    const webSocketDebuggerUrl = await resolveBrowserWebSocketUrl(options.cdpUrl, {\n      signal,\n      headers: options.headers,\n    });\n    throwIfAborted(signal);\n    let headers = options.headers;\n    if (\n      headers &&\n      Object.keys(headers).length > 0 &&\n      !canForwardCDPHeaders(options.cdpUrl, webSocketDebuggerUrl)\n    ) {\n      headers = undefined;\n      if (process.env.STAGEHAND_CDP_LOG === \"1\") {\n        try {\n          process.stderr.write(\n            \"CDP headers were withheld from the advertised WebSocket endpoint because its host or port differs, or forwarding would downgrade transport security. If the handshake is rejected, check the gateway's advertised CDP endpoint.\\n\",\n          );\n        } catch {\n          /* Diagnostics must not interrupt the connection. */\n        }\n      }\n    }\n    const socket = await openCDPWebSocket(webSocketDebuggerUrl, signal, undefined, headers);\n\n    const client = new CDPClient(socket, webSocketDebuggerUrl);\n\n    try {\n      let extensionId: string;\n      if (options.localExtensionDir) {\n        extensionId = await resolveExtension(client, {\n          loadIfNotFound: true,\n          extensionDir: options.localExtensionDir,\n          signal,\n        });\n      } else if (options.extensionDir) {\n        extensionId = await loadUnpackedExtension(client, options.extensionDir, signal);\n      } else if (options.extensionId) {\n        extensionId = options.extensionId;\n      } else if (options.preloadedExtension) {\n        extensionId = await resolveExtension(client, { loadIfNotFound: false, signal });\n      } else {\n        throw new Error(\n          \"Exactly one of localExtensionDir, extensionDir, extensionId, or preloadedExtension is required\",\n        );\n      }\n      const serviceWorker = await waitForServiceWorker(client, {\n        extensionId,\n        urlIncludes: options.serviceWorkerUrlIncludes,\n        signal,\n      });\n      const attached = await client.sendCommand<{ sessionId: string }>(\n        \"Target.attachToTarget\",\n        {\n          targetId: serviceWorker.targetId,\n          flatten: true,\n        },\n        undefined,\n        signal,\n      );\n\n      client.sessionId = attached.sessionId;\n      client.attachedServiceWorker = {\n        targetId: serviceWorker.targetId,\n        title: serviceWorker.title,\n        url: serviceWorker.url,\n        extensionId,\n      };\n\n      await client.sendCommand(\"Runtime.enable\", {}, attached.sessionId, signal).catch(() => {\n        throwIfAborted(signal);\n        return undefined;\n      });\n      await client.sendCommand(\n        \"Runtime.addBinding\",\n        { name: STAGEHAND_SEND_TO_HOST_BINDING },\n        attached.sessionId,\n        signal,\n      );\n      await waitForRuntimeReady(client, attached.sessionId, {\n        runtimeRequirement: options.runtimeRequirement,\n        allowFallbackInstall: options.allowFallbackInstall,\n        signal,\n      });\n      return client;\n    } catch (error) {\n      client.close();\n      throw error;\n    }\n  }\n\n  get serviceWorker(): ServiceWorkerInfo {\n    if (!this.attachedServiceWorker) {\n      throw new Error(\"Stagehand service worker is not attached\");\n    }\n    return this.attachedServiceWorker;\n  }\n\n  async send(message: JSONRPCMessage, signal?: AbortSignal): Promise<void> {\n    if (this.closed) throw new Error(\"CDP client is closed\");\n    if (!this.sessionId) throw new Error(\"Stagehand service worker is not attached\");\n\n    const expression = stagehandMessageExpression(message);\n    const evaluated = await this.sendCommand<RuntimeEvaluateResult>(\n      \"Runtime.evaluate\",\n      {\n        expression,\n        awaitPromise: false,\n        returnByValue: true,\n      },\n      this.sessionId,\n      signal,\n    );\n\n    if (evaluated.exceptionDetails) {\n      throw new Error(\n        evaluated.exceptionDetails.exception?.description ??\n          evaluated.exceptionDetails.text ??\n          \"Stagehand service worker rejected an RPC message\",\n      );\n    }\n  }\n\n  async sendCommand<Result = JsonObject>(\n    method: string,\n    params: JsonObject = {},\n    sessionId?: string,\n    signal?: AbortSignal,\n  ): Promise<Result> {\n    throwIfAborted(signal);\n    if (this.closed) throw new CDPConnectionClosedError();\n    if (this.socket.readyState !== WebSocket.OPEN) {\n      throw new Error(\"CDP connection is not open\");\n    }\n\n    const id = this.nextId++;\n    const message = sessionId ? { id, method, params, sessionId } : { id, method, params };\n\n    return await new Promise<Result>((resolve, reject) => {\n      const onAbort = () => {\n        this.pending.delete(id);\n        reject(signal ? abortReason(signal) : new Error(\"CDP command aborted\"));\n      };\n      signal?.addEventListener(\"abort\", onAbort, { once: true });\n\n      this.pending.set(id, {\n        method,\n        resolve: (value) => resolve(value as Result),\n        reject,\n        ...(signal\n          ? { removeAbortListener: () => signal.removeEventListener(\"abort\", onAbort) }\n          : {}),\n      });\n\n      if (signal?.aborted) {\n        onAbort();\n        return;\n      }\n      try {\n        this.socket.send(JSON.stringify(message));\n        this.lastSentAt = Date.now();\n        if (method !== \"Browser.getVersion\") this.lastMethod = method;\n      } catch (error) {\n        this.pending.delete(id);\n        signal?.removeEventListener(\"abort\", onAbort);\n        reject(asError(error));\n      }\n    });\n  }\n\n  close(): void {\n    if (this.closed) return;\n    this.closed = true;\n    this.stopHeartbeat();\n    const onclose = this.onclose;\n    this.onmessage = undefined;\n    this.onclose = undefined;\n    this.onerror = undefined;\n    const reason = new Error(\"CDP client closed\");\n    this.rejectPending(reason);\n    try {\n      this.socket.close();\n    } finally {\n      // Explicit close must notify RPC even without a socket close event.\n      onclose?.(reason);\n    }\n  }\n\n  async handleMessage(data: unknown): Promise<void> {\n    const text = await messageDataToString(data);\n    const rawMessage = JSON.parse(text) as unknown;\n    const response = CDPResponseEnvelopeSchema.safeParse(rawMessage);\n\n    if (response.success) {\n      this.handleResponse(response.data);\n      return;\n    }\n\n    const event = CDPEventEnvelopeSchema.parse(rawMessage);\n    if (event.method !== \"Runtime.bindingCalled\" || event.sessionId !== this.sessionId) return;\n\n    const binding = RuntimeBindingCalledSchema.safeParse(event.params);\n    if (!binding.success) return;\n    void Promise.resolve(this.onmessage?.(binding.data.payload)).catch((error: unknown) => {\n      this.onerror?.(asError(error));\n    });\n  }\n\n  handleResponse(message: z.output<typeof CDPResponseEnvelopeSchema>): void {\n    const pending = this.pending.get(message.id);\n    if (!pending) return;\n\n    this.pending.delete(message.id);\n    pending.removeAbortListener?.();\n\n    if (message.error) {\n      pending.reject(\n        new Error(message.error.message, {\n          cause: CDPCommandErrorCauseSchema.parse({\n            ...message.error,\n            method: pending.method,\n          }),\n        }),\n      );\n      return;\n    }\n\n    pending.resolve(message.result);\n  }\n\n  rejectPending(error: Error): void {\n    for (const pending of this.pending.values()) {\n      pending.reject(error);\n      pending.removeAbortListener?.();\n    }\n    this.pending.clear();\n  }\n}\n\ntype CDPWebSocketFactory = (url: string, headers?: Record<string, string>) => WebSocket;\n\nexport async function openCDPWebSocket(\n  url: string,\n  signal: AbortSignal,\n  createSocket: CDPWebSocketFactory = (socketUrl, socketHeaders) => {\n    // Node supports handshake headers, but the DOM WebSocket declaration omits this overload.\n    const NodeWebSocket = WebSocket as typeof WebSocket & {\n      new (url: string, options: { headers: Record<string, string> }): WebSocket;\n    };\n    return socketHeaders\n      ? new NodeWebSocket(socketUrl, { headers: socketHeaders })\n      : new WebSocket(socketUrl);\n  },\n  headers?: Record<string, string>,\n): Promise<WebSocket> {\n  throwIfAborted(signal);\n  const socket = headers === undefined ? createSocket(url) : createSocket(url, headers);\n\n  await new Promise<void>((resolve, reject) => {\n    const cleanup = () => {\n      signal?.removeEventListener(\"abort\", onAbort);\n      socket.removeEventListener(\"open\", onOpen);\n      socket.removeEventListener(\"error\", onError);\n    };\n    const onAbort = () => {\n      cleanup();\n      socket.close();\n      reject(signal ? abortReason(signal) : new Error(\"CDP WebSocket opening aborted\"));\n    };\n    const onOpen = () => {\n      cleanup();\n      resolve();\n    };\n    const onError = () => {\n      cleanup();\n      reject(new Error(\"Failed to open CDP WebSocket\"));\n    };\n\n    signal?.addEventListener(\"abort\", onAbort, { once: true });\n    socket.addEventListener(\"open\", onOpen, { once: true });\n    socket.addEventListener(\"error\", onError, { once: true });\n    if (signal?.aborted) onAbort();\n  });\n\n  return socket;\n}\n\ntype CDPCommandSender = {\n  sendCommand<Result = JsonObject>(\n    method: string,\n    params?: JsonObject,\n    sessionId?: string,\n    signal?: AbortSignal,\n  ): Promise<Result>;\n};\n\nexport async function waitForRuntimeReady(\n  cdp: CDPCommandSender,\n  sessionId: string,\n  options: {\n    pollIntervalMs?: number;\n    delayFn?: (ms: number) => Promise<void>;\n    runtimeRequirement?: RuntimeRequirement;\n    /**\n     * Reserved for flows that can replace an incompatible preloaded extension. When not explicitly\n     * `true`, an incompatible marker fails initialization on the first poll instead of polling\n     * until the initialization timeout.\n     */\n    allowFallbackInstall?: boolean;\n    signal: AbortSignal;\n  },\n): Promise<void> {\n  const pollIntervalMs = options.pollIntervalMs ?? 100;\n  const delayFn = options.delayFn ?? delay;\n\n  while (true) {\n    throwIfAborted(options.signal);\n    const evaluated = await evaluateRuntimeReadiness(cdp, sessionId, options.signal);\n\n    if (!evaluated.exceptionDetails) {\n      const readiness = parseRuntimeReadiness(evaluated.result?.value);\n\n      const compatibility = negotiateRuntimeCompatibility(\n        options.runtimeRequirement ?? DEFAULT_RUNTIME_REQUIREMENT,\n        readiness.marker,\n      );\n      if (compatibility.kind === \"incompatible\" && options.allowFallbackInstall !== true)\n        throw new StagehandRuntimeIncompatibleError(compatibility);\n      if (compatibility.kind === \"compatible\" && readiness.hasReceiver) return;\n    }\n\n    await abortable(delayFn(pollIntervalMs), options.signal);\n  }\n}\n\n/** @internal Discover the runtime, optionally loading a bundled extension if needed. */\nexport async function resolveExtension(\n  cdp: CDPCommandSender,\n  options: {\n    signal: AbortSignal;\n    loadIfNotFound: boolean;\n    extensionDir?: string;\n  },\n): Promise<string> {\n  let id: string | undefined;\n  try {\n    id = await getInstalledStagehandExtensionId(cdp, options);\n  } catch (error) {\n    if (\n      !options.loadIfNotFound ||\n      !isExtensionCommandUnavailable(error, \"Extensions.getExtensions\")\n    ) {\n      throw error;\n    }\n  }\n  throwIfAborted(options.signal);\n  if (id !== undefined) return id;\n  if (options.loadIfNotFound) {\n    if (!options.extensionDir) {\n      throw new Error(\"extensionDir is required to load the Stagehand extension\");\n    }\n    return await loadUnpackedExtension(cdp, options.extensionDir, options.signal);\n  }\n  throw new Error(\n    \"Stagehand extension is not installed in the connected browser. \" +\n      \"The extension must be included when the Browserbase session is created.\",\n  );\n}\n\nasync function getInstalledStagehandExtensionId(\n  cdp: CDPCommandSender,\n  options: { signal: AbortSignal },\n): Promise<string | undefined> {\n  throwIfAborted(options.signal);\n  const response = await cdp.sendCommand<unknown>(\n    \"Extensions.getExtensions\",\n    {},\n    undefined,\n    options.signal,\n  );\n  const installed = InstalledExtensionsResultSchema.parse(response).extensions.filter(\n    (extension) => extension.name === STAGEHAND_EXTENSION_NAME,\n  );\n  const enabled = installed.filter((extension) => extension.enabled);\n\n  if (enabled.length === 1) return enabled[0].id;\n  if (enabled.length > 1) {\n    const ids = enabled\n      .map((extension) => extension.id)\n      .sort()\n      .join(\", \");\n    throw new Error(`Multiple enabled Stagehand extensions are installed: ${ids}`);\n  }\n  if (installed.length > 0) {\n    throw new Error(\"Stagehand extension is installed in the connected browser but is disabled.\");\n  }\n  return undefined;\n}\n\nasync function evaluateRuntimeReadiness(\n  cdp: CDPCommandSender,\n  sessionId: string,\n  signal: AbortSignal,\n): Promise<RuntimeEvaluateResult> {\n  return await cdp.sendCommand<RuntimeEvaluateResult>(\n    \"Runtime.evaluate\",\n    {\n      expression: `(() => ({\n  marker: globalThis.__stagehand_runtime ?? null,\n  hasReceiver: typeof globalThis.__stagehandReceiveFromHost === \"function\",\n}))()`,\n      returnByValue: true,\n    },\n    sessionId,\n    signal,\n  );\n}\n\nfunction parseRuntimeReadiness(value: unknown): z.output<typeof RuntimeReadinessEnvelopeSchema> {\n  const parsed = RuntimeReadinessEnvelopeSchema.safeParse(value);\n  return parsed.success ? parsed.data : { marker: null, hasReceiver: false };\n}\n\nexport async function waitForServiceWorker(\n  cdp: CDPCommandSender,\n  options: {\n    extensionId: string;\n    urlIncludes?: string;\n    activationDelayMs?: number;\n    pollIntervalMs?: number;\n    delayFn?: (ms: number) => Promise<void>;\n    signal: AbortSignal;\n  },\n): Promise<TargetInfo> {\n  const startedAt = Date.now();\n  const activationDelayMs = options.activationDelayMs ?? 1_000;\n  const pollIntervalMs = options.pollIntervalMs ?? 100;\n  const delayFn = options.delayFn ?? delay;\n  const workerUrlIncludes = options.urlIncludes ?? \"service-worker.js\";\n  let activationTargetId: string | undefined;\n\n  try {\n    while (true) {\n      throwIfAborted(options.signal);\n      const targets = await cdp.sendCommand<{ targetInfos: TargetInfo[] }>(\n        \"Target.getTargets\",\n        {},\n        undefined,\n        options.signal,\n      );\n      const serviceWorker = targets.targetInfos.find(\n        (target) =>\n          target.type === \"service_worker\" &&\n          target.url.startsWith(\"chrome-extension://\") &&\n          target.url.startsWith(`chrome-extension://${options.extensionId}/`) &&\n          target.url.includes(workerUrlIncludes),\n      );\n\n      if (serviceWorker) return serviceWorker;\n\n      if (!activationTargetId && Date.now() - startedAt >= activationDelayMs) {\n        const activation = await cdp\n          .sendCommand<{ targetId?: string }>(\n            \"Target.createTarget\",\n            {\n              url: `chrome-extension://${options.extensionId}/wake-service-worker.html`,\n            },\n            undefined,\n            options.signal,\n          )\n          .catch(() => {\n            throwIfAborted(options.signal);\n            return undefined;\n          });\n        activationTargetId = activation?.targetId;\n      }\n\n      await abortable(delayFn(pollIntervalMs), options.signal);\n    }\n  } finally {\n    if (activationTargetId) {\n      // Cleanup must not inherit an already-aborted init signal or delay its rejection.\n      void cdp\n        .sendCommand(\"Target.closeTarget\", { targetId: activationTargetId })\n        .catch(() => undefined);\n    }\n  }\n}\n\nexport async function loadUnpackedExtension(\n  cdp: CDPCommandSender,\n  extensionDir: string,\n  signal: AbortSignal,\n): Promise<string> {\n  let loaded: { id?: string };\n\n  try {\n    loaded = await cdp.sendCommand<{ id?: string }>(\n      \"Extensions.loadUnpacked\",\n      {\n        path: extensionDir,\n      },\n      undefined,\n      signal,\n    );\n  } catch (error) {\n    if (isExtensionCommandUnavailable(error, \"Extensions.loadUnpacked\")) {\n      throw new Error(\n        \"This Chrome build does not support Extensions.loadUnpacked. Preload the Stagehand extension and connect using a Chrome build that supports Extensions.getExtensions.\",\n        { cause: error },\n      );\n    }\n\n    throw error;\n  }\n\n  if (!loaded.id) {\n    throw new Error(\"Extensions.loadUnpacked did not return an extension id\");\n  }\n\n  return loaded.id;\n}\n\n/** @internal Require the same host and effective port, without downgrading TLS. */\nexport function canForwardCDPHeaders(source: string, destination: string): boolean {\n  const ports: Record<string, string> = {\n    \"http:\": \"80\",\n    \"ws:\": \"80\",\n    \"https:\": \"443\",\n    \"wss:\": \"443\",\n  };\n  try {\n    const first = new URL(source);\n    const second = new URL(destination);\n    return Boolean(\n      ports[first.protocol] &&\n      ports[second.protocol] &&\n      first.hostname &&\n      first.hostname === second.hostname &&\n      (first.port || ports[first.protocol]) === (second.port || ports[second.protocol]) &&\n      !([\"https:\", \"wss:\"].includes(first.protocol) && [\"http:\", \"ws:\"].includes(second.protocol)),\n    );\n  } catch {\n    return false;\n  }\n}\n\nclass CDPDiscoveryError extends Error {}\n\nasync function fetchCDPVersion(\n  url: string,\n  options: ResolveBrowserWebSocketUrlOptions,\n): Promise<VersionResponse> {\n  const fetchFn = options.fetchFn ?? fetch;\n  const authenticated = options.headers !== undefined && Object.keys(options.headers).length > 0;\n  for (let redirects = 0; ; redirects++) {\n    const response = await abortable(\n      fetchFn(url, {\n        signal: options.signal,\n        ...(options.headers === undefined ? {} : { headers: options.headers }),\n        ...(authenticated ? { redirect: \"manual\" as const } : {}),\n      }),\n      options.signal,\n    );\n    if (!response.ok) await response.body?.cancel();\n    if (response.status === 401 || response.status === 403) {\n      throw new CDPDiscoveryError(\n        `CDP discovery was rejected with HTTP ${response.status}. Check the gateway credentials and access permissions.`,\n      );\n    }\n    if (!authenticated || ![301, 302, 303, 307, 308].includes(response.status)) return response;\n    const location = response.headers?.get(\"location\");\n    if (!location) return response;\n    let destination: URL;\n    try {\n      destination = new URL(location, url);\n    } catch {\n      throw new CDPDiscoveryError(\"Invalid CDP HTTP redirect.\");\n    }\n    if (\n      !canForwardCDPHeaders(url, destination.href) ||\n      ![\"http:\", \"https:\"].includes(destination.protocol) ||\n      destination.username ||\n      destination.password\n    ) {\n      throw new CDPDiscoveryError(\n        \"Refusing CDP HTTP redirect with headers to a different host or port, an insecure transport, or a URL containing credentials.\",\n      );\n    }\n    if (redirects >= 20) throw new CDPDiscoveryError(\"Too many CDP HTTP redirects.\");\n    url = destination.href;\n  }\n}\n\nexport async function resolveBrowserWebSocketUrl(\n  cdpUrl: string,\n  options: ResolveBrowserWebSocketUrlOptions,\n): Promise<string> {\n  throwIfAborted(options.signal);\n  if (cdpUrl.startsWith(\"ws://\") || cdpUrl.startsWith(\"wss://\")) return cdpUrl;\n\n  const pollIntervalMs = options.pollIntervalMs ?? 250;\n  const delayFn = options.delayFn ?? delay;\n  const baseUrl = cdpUrl.replace(/\\/$/, \"\");\n\n  while (true) {\n    throwIfAborted(options.signal);\n    try {\n      const response = await fetchCDPVersion(`${baseUrl}/json/version`, options);\n\n      if (response.ok) {\n        const version = (await abortable(response.json(), options.signal)) as {\n          webSocketDebuggerUrl?: string;\n        };\n        if (version.webSocketDebuggerUrl) return version.webSocketDebuggerUrl;\n      }\n    } catch (error) {\n      if (error instanceof CDPDiscoveryError) throw error;\n      throwIfAborted(options.signal);\n    }\n\n    await abortable(delayFn(pollIntervalMs), options.signal);\n  }\n}\n\nasync function messageDataToString(data: unknown): Promise<string> {\n  if (typeof data === \"string\") return data;\n  if (data instanceof ArrayBuffer) return Buffer.from(data).toString(\"utf8\");\n  if (data instanceof Blob) return data.text();\n\n  const view = data as ArrayBufferView;\n  return Buffer.from(view.buffer as ArrayBuffer, view.byteOffset, view.byteLength).toString(\"utf8\");\n}\n\nfunction delay(ms: number): Promise<void> {\n  return abortableDelay(ms);\n}\n\nfunction isExtensionCommandUnavailable(error: unknown, method: string): boolean {\n  if (!(error instanceof Error)) return false;\n\n  const cause = CDPCommandErrorCauseSchema.safeParse(error.cause);\n  if (!cause.success) return false;\n\n  return (\n    cause.data.method === method &&\n    (cause.data.code === -32601 || /method not found|wasn't found/i.test(cause.data.message))\n  );\n}\n\nfunction asError(error: unknown): Error {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\nfunction cdpHeartbeatMs(raw: string | undefined): number {\n  const value = Number(raw);\n  return raw?.trim() && Number.isInteger(value) && value >= 1_000 && value <= 2_147_483_647\n    ? value\n    : 20_000;\n}\n\n/** Keep transport causes useful without serializing errors, payloads or arbitrary objects. */\nfunction cdpDiagnosticReason(reason: Error): string {\n  const messages: string[] = [];\n  const seen = new Set<Error>();\n  let current: unknown = reason;\n  for (let depth = 0; depth < 4; depth++) {\n    try {\n      if (typeof current === \"string\") {\n        messages.push(sanitizeCdpDiagnostic(current));\n        break;\n      }\n      if (!(current instanceof Error) || seen.has(current)) break;\n      seen.add(current);\n      if (typeof current.message === \"string\" && current.message)\n        messages.push(sanitizeCdpDiagnostic(current.message));\n      current = current.cause;\n    } catch {\n      // A diagnostic accessor must not interrupt rejection or transport cleanup.\n      break;\n    }\n  }\n  return (messages.join(\": \") || \"CDP connection closed\").slice(0, 160);\n}\n\n/** The diagnostic contains no payloads or connection URLs, including close text URLs. */\nfunction sanitizeCdpDiagnostic(message: string): string {\n  return message\n    .replace(/(?:https?|wss?):\\/\\/[^\\s\"']+/giu, \"[url]\")\n    .replace(\n      /\\b(?:sk-[A-Za-z0-9_-]+|bb_(?:live|test)_[A-Za-z0-9_-]+|AIza[A-Za-z0-9_-]{20,})/gu,\n      \"[redacted]\",\n    )\n    .replace(/\\bBearer\\s+[^\\s]+/giu, \"Bearer [redacted]\");\n}\n","export class RPCResponseTimeoutError extends Error {\n  readonly method: string;\n  readonly timeoutMs: number;\n\n  constructor(method: string, timeoutMs: number) {\n    super(`RPC response timed out after ${timeoutMs}ms: ${method}`, {\n      cause: { method, timeoutMs },\n    });\n    this.name = \"RPCResponseTimeoutError\";\n    this.method = method;\n    this.timeoutMs = timeoutMs;\n  }\n}\n","import { DEFAULT_LOCATOR_TIMEOUT_MS } from \"@browserbasehq/stagehand-protocol/schemas\";\nimport {\n  ROOT_CONTEXT,\n  context,\n  defaultTextMapGetter,\n  defaultTextMapSetter,\n  SpanKind,\n  SpanStatusCode,\n  trace,\n  type Context,\n  type Span,\n} from \"@opentelemetry/api\";\nimport { W3CTraceContextPropagator } from \"@opentelemetry/core\";\nimport {\n  JSONRPCEnvelopeSchema,\n  JSONRPCErrorCodes,\n  JSONRPCErrorObjectSchema,\n  JSONRPCErrorResponseSchema,\n  JSONRPCRequestIdSchema,\n  JSONRPCRequestSchema,\n  JSONRPCResponseSchema,\n  JSONRPCSuccessResponseSchema,\n  JSONRPCWireInputSchema,\n  type RPCMethod,\n} from \"@browserbasehq/stagehand-protocol/json-rpc/schemas\";\nimport type {\n  JSONRPCMessage,\n  JSONRPCRequest,\n  JSONRPCResponse,\n} from \"@browserbasehq/stagehand-protocol/json-rpc/types\";\nimport {\n  encodeWireValue,\n  wireSchema,\n} from \"@browserbasehq/stagehand-protocol/json-rpc/wire-casing\";\nimport {\n  StagehandMethods,\n  StagehandRpcNotificationSchema,\n} from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type { StagehandRpcNotification } from \"@browserbasehq/stagehand-protocol/types\";\nimport { z } from \"zod/v4\";\nimport { CDPClient, type ServiceWorkerInfo } from \"./cdpClient.js\";\nimport { abortReason } from \"./abort.js\";\nimport { RPCResponseTimeoutError } from \"./rpcErrors.js\";\n\ntype PendingRequest = {\n  method: RPCMethod;\n  resolve(value: unknown): void;\n  reject(error: Error): void;\n  removeAbortListener?: () => void;\n};\n\nexport type RPCRequestContext = {\n  readonly requestId: number;\n  /** Aborted when the RPC connection closes. */\n  readonly signal: AbortSignal;\n};\n\ntype RegisteredRequestHandler = {\n  method: RPCMethod;\n  handle(params: unknown, context: RPCRequestContext): Promise<unknown>;\n};\n\ntype RPCSendOptions = {\n  signal?: AbortSignal;\n  /** Replaces the method's derived response deadline for this one request. */\n  responseTimeoutMs?: number;\n};\n\nconst TRACER = trace.getTracer(\"@browserbasehq/stagehand\");\nconst W3C_TRACE_CONTEXT_PROPAGATOR = new W3CTraceContextPropagator();\nconst MAX_PENDING_NOTIFICATIONS = 100;\nconst RPC_RESPONSE_GRACE_MS = 10_000;\nconst DEFAULT_OPERATION_TIMEOUT_MS = new Map<string, number>([\n  [StagehandMethods.pageGoto.name, 15_000],\n  [StagehandMethods.pageReload.name, 15_000],\n  [StagehandMethods.pageGoBack.name, 15_000],\n  [StagehandMethods.pageGoForward.name, 15_000],\n  [StagehandMethods.pageWaitForLoadState.name, 15_000],\n  [StagehandMethods.pageWaitForSelector.name, 30_000],\n  [StagehandMethods.pagePDF.name, 30_000],\n  [StagehandMethods.pageSnapshot.name, 20_000],\n  [StagehandMethods.pageWebMCPTools.name, 1_000],\n]);\nconst UNBOUNDED_BY_DEFAULT_METHODS = new Set<string>([\n  StagehandMethods.pageWaitForFunction.name,\n  StagehandMethods.stagehandInit.name,\n  StagehandMethods.stagehandClose.name,\n  StagehandMethods.stagehandAct.name,\n  StagehandMethods.stagehandExtract.name,\n  StagehandMethods.stagehandObserve.name,\n  StagehandMethods.contextNewPage.name,\n  StagehandMethods.contextAddInitScript.name,\n  StagehandMethods.contextSetExtraHTTPHeaders.name,\n  StagehandMethods.contextGetDomainPolicy.name,\n  StagehandMethods.contextSetDomainPolicy.name,\n  StagehandMethods.contextCookies.name,\n  StagehandMethods.contextAddCookies.name,\n  StagehandMethods.contextClearCookies.name,\n  StagehandMethods.contextClipboardReadText.name,\n  StagehandMethods.contextClipboardWriteText.name,\n  StagehandMethods.contextClipboardClear.name,\n  StagehandMethods.contextClipboardPaste.name,\n  StagehandMethods.contextClipboardCopy.name,\n  StagehandMethods.contextClipboardCut.name,\n  StagehandMethods.pageClose.name,\n  StagehandMethods.pageEvaluate.name,\n  StagehandMethods.pageScreenshot.name,\n  StagehandMethods.pageWebMCPInvocationResult.name,\n]);\n\nconst RPCClientOptionsBaseSchema = z\n  .object({\n    cdpUrl: z.string().min(1),\n    serviceWorkerUrlIncludes: z.string().min(1).optional(),\n    signal: z.custom<AbortSignal>((value) => value instanceof AbortSignal),\n  })\n  .strict();\n\nexport const RPCClientOptionsSchema = z.union([\n  RPCClientOptionsBaseSchema.extend({\n    extensionDir: z.string().min(1),\n    extensionId: z.never().optional(),\n    preloadedExtension: z.never().optional(),\n  }).strict(),\n  RPCClientOptionsBaseSchema.extend({\n    extensionId: z.string().min(1),\n    extensionDir: z.never().optional(),\n    preloadedExtension: z.never().optional(),\n  }).strict(),\n  RPCClientOptionsBaseSchema.extend({\n    preloadedExtension: z.literal(true),\n    extensionDir: z.never().optional(),\n    extensionId: z.never().optional(),\n  }).strict(),\n]);\n\nexport type RPCClientOptions = z.input<typeof RPCClientOptionsSchema>;\n\nexport type CDPTransport = {\n  readonly serviceWorker: ServiceWorkerInfo;\n  readonly webSocketDebuggerUrl?: string;\n  onmessage?: (message: unknown) => void | Promise<void>;\n  onclose?: (reason?: Error) => void;\n  onerror?: (error: Error) => void;\n  send(message: JSONRPCMessage, signal?: AbortSignal): Promise<void>;\n  close(): void;\n};\n\nexport class RPCClient {\n  readonly serviceWorker: ServiceWorkerInfo;\n  readonly browserWebSocketDebuggerUrl?: string;\n  nextRequestId = 1;\n  pending = new Map<number, PendingRequest>();\n  requestHandlers = new Map<string, RegisteredRequestHandler>();\n  notificationListeners = new Set<(notification: StagehandRpcNotification) => void>();\n  pendingNotifications: StagehandRpcNotification[] = [];\n  closed = false;\n  private readonly closeController = new AbortController();\n  readonly cdp: CDPTransport;\n\n  constructor(cdp: CDPTransport) {\n    this.cdp = cdp;\n    this.serviceWorker = cdp.serviceWorker;\n    this.browserWebSocketDebuggerUrl = cdp.webSocketDebuggerUrl;\n    this.cdp.onmessage = (message) => this.receive(message);\n    this.cdp.onclose = (reason) => this.close(reason);\n    this.cdp.onerror = (error) => this.close(error);\n  }\n\n  async send<Method extends RPCMethod>(\n    method: Method,\n    params: z.input<Method[\"params\"]>,\n    options: RPCSendOptions = {},\n  ): Promise<z.output<Method[\"result\"]>> {\n    if (this.closed) throw new Error(\"RPC client is closed\");\n    if (method.name === StagehandMethods.stagehandInit.name && !options.signal) {\n      throw new Error(\"stagehand.init requires an initialization lifecycle signal\");\n    }\n\n    const parentContext = context.active();\n    const span = TRACER.startSpan(\n      method.name,\n      {\n        kind: SpanKind.CLIENT,\n        attributes: {\n          \"rpc.system.name\": \"jsonrpc\",\n          \"rpc.method\": method.name,\n        },\n      },\n      parentContext,\n    );\n    const requestContext = trace.setSpan(parentContext, span);\n    const requestId = this.nextRequestId++;\n\n    try {\n      return await context.with(requestContext, async () => {\n        const parsedParams = method.params.parse(params);\n        const request = JSONRPCRequestSchema.parse({\n          jsonrpc: \"2.0\",\n          id: requestId,\n          method: method.name,\n          params: encodeWireValue(parsedParams, method.paramsWire),\n          ...getTraceContextFields(requestContext),\n        });\n        span.setAttribute(\"jsonrpc.request.id\", String(request.id));\n        const responseTimeoutMs =\n          options.responseTimeoutMs ?? rpcResponseTimeoutMs(method.name, parsedParams);\n        const timeoutController =\n          responseTimeoutMs === undefined ? undefined : new AbortController();\n        const signal =\n          options.signal && timeoutController\n            ? AbortSignal.any([options.signal, timeoutController.signal])\n            : (options.signal ?? timeoutController?.signal);\n        let timeoutId: ReturnType<typeof setTimeout> | undefined;\n        if (timeoutController && responseTimeoutMs !== undefined) {\n          const deadline = performance.now() + responseTimeoutMs;\n          const tick = () => {\n            const remaining = deadline - performance.now();\n            if (remaining > 0) {\n              timeoutId = setTimeout(tick, Math.min(2_147_483_647, Math.ceil(remaining)));\n            } else {\n              timeoutController.abort(new RPCResponseTimeoutError(method.name, responseTimeoutMs));\n            }\n          };\n          tick();\n        }\n\n        try {\n          const response = this.waitForResponse(request.id, method, signal);\n          const [, result] = await Promise.all([\n            this.cdp.send(request, signal).catch((error: unknown) => {\n              this.rejectPending(request.id, asError(error));\n            }),\n            response,\n          ]);\n          return result as z.output<Method[\"result\"]>;\n        } finally {\n          if (timeoutId !== undefined) clearTimeout(timeoutId);\n        }\n      });\n    } catch (error) {\n      markSpanError(span, error);\n      throw error;\n    } finally {\n      span.end();\n    }\n  }\n\n  async sendStagehandInit(\n    params: z.input<typeof StagehandMethods.stagehandInit.params>,\n    signal: AbortSignal,\n  ): Promise<z.output<typeof StagehandMethods.stagehandInit.result>> {\n    return await this.send(StagehandMethods.stagehandInit, params, { signal });\n  }\n\n  onRequest<Method extends RPCMethod>(\n    method: Method,\n    handler: (\n      params: z.output<Method[\"params\"]>,\n      context: RPCRequestContext,\n    ) => z.input<Method[\"result\"]> | Promise<z.input<Method[\"result\"]>>,\n  ): () => void {\n    if (this.closed) throw new Error(\"RPC client is closed\");\n\n    const registeredHandler: RegisteredRequestHandler = {\n      method,\n      handle: async (params, context) =>\n        await handler(params as z.output<Method[\"params\"]>, context),\n    };\n    this.requestHandlers.set(method.name, registeredHandler);\n\n    return () => {\n      if (this.requestHandlers.get(method.name) === registeredHandler) {\n        this.requestHandlers.delete(method.name);\n      }\n    };\n  }\n\n  onNotification(listener: (notification: StagehandRpcNotification) => void): () => void {\n    this.notificationListeners.add(listener);\n    const pending = this.pendingNotifications;\n    this.pendingNotifications = [];\n    for (const notification of pending) listener(notification);\n\n    return () => this.notificationListeners.delete(listener);\n  }\n\n  close(\n    reason: Error = new Error(\"RPC client closed\"),\n    { closeTransport = true }: { closeTransport?: boolean } = {},\n  ): void {\n    if (this.closed) return;\n    this.closed = true;\n    this.closeController.abort(reason);\n    this.requestHandlers.clear();\n    this.notificationListeners.clear();\n    this.pendingNotifications = [];\n    for (const [id] of this.pending) this.rejectPending(id, reason);\n    this.cdp.onmessage = undefined;\n    this.cdp.onclose = undefined;\n    this.cdp.onerror = undefined;\n    if (closeTransport) {\n      this.cdp.close();\n    }\n  }\n\n  waitForResponse(id: number, method: RPCMethod, signal?: AbortSignal): Promise<unknown> {\n    return new Promise((resolve, reject) => {\n      const onAbort = () => this.rejectPending(id, abortReason(signal!));\n      this.pending.set(id, {\n        method,\n        resolve,\n        reject,\n        ...(signal\n          ? { removeAbortListener: () => signal.removeEventListener(\"abort\", onAbort) }\n          : {}),\n      });\n      signal?.addEventListener(\"abort\", onAbort, { once: true });\n      if (signal?.aborted) onAbort();\n    });\n  }\n\n  async receive(raw: unknown): Promise<void> {\n    if (this.closed) return;\n\n    const wireInput = JSONRPCWireInputSchema.safeParse(raw);\n    if (!wireInput.success) {\n      await this.sendError(null, JSONRPCErrorCodes.parseError, \"Parse error\");\n      return;\n    }\n\n    const envelope = JSONRPCEnvelopeSchema.safeParse(wireInput.data);\n    if (!envelope.success) {\n      await this.sendError(null, JSONRPCErrorCodes.invalidRequest, \"Invalid request\");\n      return;\n    }\n    const message = envelope.data;\n\n    if (\"result\" in message || \"error\" in message) {\n      const response = JSONRPCResponseSchema.safeParse(message);\n      if (!response.success) {\n        this.close(new Error(\"Invalid JSON-RPC response\"));\n        return;\n      }\n      this.receiveResponse(response.data);\n      return;\n    }\n\n    if (\"method\" in message && !(\"id\" in message)) {\n      const notification = StagehandRpcNotificationSchema.safeParse(message);\n      if (!notification.success) return;\n      this.handleNotification(notification.data);\n      return;\n    }\n\n    const request = JSONRPCRequestSchema.safeParse(message);\n    if (request.success) {\n      await this.handleRequest(request.data);\n      return;\n    }\n\n    const requestId = JSONRPCRequestIdSchema.safeParse(message.id);\n    await this.sendError(\n      requestId.success ? requestId.data : null,\n      JSONRPCErrorCodes.invalidRequest,\n      \"Invalid request\",\n    );\n  }\n\n  async handleRequest(request: JSONRPCRequest): Promise<void> {\n    const registeredHandler = this.requestHandlers.get(request.method);\n    if (!registeredHandler) {\n      await this.sendError(request.id, JSONRPCErrorCodes.methodNotFound, \"Method not found\");\n      return;\n    }\n\n    const params = wireSchema(\n      registeredHandler.method.params,\n      registeredHandler.method.paramsWire,\n    ).safeParse(request.params);\n    if (!params.success) {\n      await this.sendError(request.id, JSONRPCErrorCodes.invalidParams, \"Invalid params\");\n      return;\n    }\n\n    const parentContext = W3C_TRACE_CONTEXT_PROPAGATOR.extract(\n      ROOT_CONTEXT,\n      request,\n      defaultTextMapGetter,\n    );\n    const span = TRACER.startSpan(\n      request.method,\n      {\n        kind: SpanKind.SERVER,\n        attributes: {\n          \"rpc.system.name\": \"jsonrpc\",\n          \"rpc.method\": request.method,\n          \"jsonrpc.request.id\": String(request.id),\n        },\n      },\n      parentContext,\n    );\n    const requestContext = trace.setSpan(parentContext, span);\n\n    try {\n      const result = await context.with(requestContext, () =>\n        registeredHandler.handle(params.data, {\n          requestId: request.id,\n          signal: this.closeController.signal,\n        }),\n      );\n      if (this.closed) return;\n      const parsedResult = registeredHandler.method.result.safeParse(result);\n      if (!parsedResult.success) {\n        span.setAttribute(\"rpc.response.status_code\", String(JSONRPCErrorCodes.internalError));\n        span.setAttribute(\"error.type\", String(JSONRPCErrorCodes.internalError));\n        span.setStatus({ code: SpanStatusCode.ERROR });\n        await this.sendError(request.id, JSONRPCErrorCodes.internalError, \"Internal error\");\n        return;\n      }\n\n      await this.cdp.send(\n        JSONRPCSuccessResponseSchema.parse({\n          jsonrpc: \"2.0\",\n          id: request.id,\n          result: encodeWireValue(parsedResult.data, registeredHandler.method.resultWire),\n        }),\n      );\n    } catch (error) {\n      markSpanError(span, error);\n      if (this.closed) return;\n      await this.sendError(\n        request.id,\n        JSONRPCErrorCodes.internalError,\n        error instanceof Error ? error.message : String(error),\n        { name: error instanceof Error ? error.name : \"Error\" },\n      );\n    } finally {\n      span.end();\n    }\n  }\n\n  receiveResponse(response: JSONRPCResponse): void {\n    if (response.id === null) return;\n    const pending = this.pending.get(response.id);\n    if (!pending) return;\n\n    this.pending.delete(response.id);\n    pending.removeAbortListener?.();\n\n    if (\"error\" in response) {\n      const error = new Error(response.error.message, { cause: response.error });\n      if (recordProperty(response.error.data, \"name\") === \"TimeoutError\") {\n        error.name = \"TimeoutError\";\n      }\n      pending.reject(error);\n      return;\n    }\n\n    try {\n      pending.resolve(\n        wireSchema(pending.method.result, pending.method.resultWire).parse(response.result),\n      );\n    } catch (error) {\n      pending.reject(asError(error));\n    }\n  }\n\n  rejectPending(id: number, error: Error): void {\n    const pending = this.pending.get(id);\n    if (!pending) return;\n    this.pending.delete(id);\n    pending.removeAbortListener?.();\n    pending.reject(error);\n  }\n\n  async sendError(id: number | null, code: number, message: string, data?: unknown): Promise<void> {\n    await this.cdp.send(\n      JSONRPCErrorResponseSchema.parse({\n        jsonrpc: \"2.0\",\n        id,\n        error: { code, message, ...(data === undefined ? {} : { data }) },\n      }),\n    );\n  }\n\n  handleNotification(notification: StagehandRpcNotification): void {\n    if (this.notificationListeners.size === 0) {\n      if (this.pendingNotifications.length === MAX_PENDING_NOTIFICATIONS) {\n        this.pendingNotifications.shift();\n      }\n      this.pendingNotifications.push(notification);\n      return;\n    }\n\n    for (const listener of this.notificationListeners) listener(notification);\n  }\n}\n\nexport async function connectRPCClient(input: RPCClientOptions): Promise<RPCClient> {\n  const options = RPCClientOptionsSchema.parse(input);\n  const cdpClient = await CDPClient.connect({\n    cdpUrl: options.cdpUrl,\n    ...(options.extensionDir ? { extensionDir: options.extensionDir } : {}),\n    ...(options.extensionId ? { extensionId: options.extensionId } : {}),\n    ...(options.preloadedExtension ? { preloadedExtension: true as const } : {}),\n    ...(options.serviceWorkerUrlIncludes\n      ? { serviceWorkerUrlIncludes: options.serviceWorkerUrlIncludes }\n      : {}),\n    signal: options.signal,\n  });\n  return new RPCClient(cdpClient);\n}\n\nexport function getTraceContextFields(requestContext: Context): {\n  traceparent?: string;\n  tracestate?: string;\n} {\n  const fields: { traceparent?: string; tracestate?: string } = {};\n\n  W3C_TRACE_CONTEXT_PROPAGATOR.inject(requestContext, fields, defaultTextMapSetter);\n\n  return fields;\n}\n\nfunction markSpanError(span: Span, error: unknown): void {\n  const rpcError = error instanceof Error ? JSONRPCErrorObjectSchema.safeParse(error.cause) : null;\n  if (rpcError?.success) {\n    span.setAttribute(\"rpc.response.status_code\", String(rpcError.data.code));\n    span.setAttribute(\"error.type\", String(rpcError.data.code));\n  } else if (error instanceof Error) {\n    span.setAttribute(\"error.type\", error.name);\n  }\n  span.setStatus({ code: SpanStatusCode.ERROR });\n}\n\nfunction asError(error: unknown): Error {\n  return error instanceof Error ? error : new Error(String(error));\n}\n\nexport function rpcResponseTimeoutMs(method: string, params: unknown): number | undefined {\n  if (method.startsWith(\"locator.\")) {\n    const timeout =\n      numericProperty(recordProperty(params, \"options\"), \"timeout\") ?? DEFAULT_LOCATOR_TIMEOUT_MS;\n    return timeout === 0 ? undefined : timeout + RPC_RESPONSE_GRACE_MS;\n  }\n\n  let operationTimeoutMs: number | undefined;\n  switch (method) {\n    case StagehandMethods.stagehandAct.name:\n    case StagehandMethods.stagehandExtract.name:\n    case StagehandMethods.stagehandObserve.name:\n    case StagehandMethods.stagehandCallbackBatch.name:\n    case StagehandMethods.pageGoto.name:\n    case StagehandMethods.pageReload.name:\n    case StagehandMethods.pageGoBack.name:\n    case StagehandMethods.pageGoForward.name:\n    case StagehandMethods.pageScreenshot.name:\n    case StagehandMethods.pagePDF.name:\n    case StagehandMethods.pageSnapshot.name:\n    case StagehandMethods.pageWaitForSelector.name:\n    case StagehandMethods.pageWaitForFunction.name:\n    case StagehandMethods.pageWebMCPTools.name:\n    case StagehandMethods.pageWebMCPInvocationResult.name:\n      operationTimeoutMs = numericProperty(recordProperty(params, \"options\"), \"timeout\");\n      break;\n    case StagehandMethods.pageWaitForLoadState.name:\n      operationTimeoutMs = numericProperty(params, \"timeout\");\n      break;\n    case StagehandMethods.pageWaitForTimeout.name:\n      operationTimeoutMs = numericProperty(params, \"ms\");\n      break;\n  }\n\n  if (operationTimeoutMs !== undefined) {\n    if (\n      (method === StagehandMethods.pagePDF.name ||\n        method === StagehandMethods.pageSnapshot.name ||\n        method === StagehandMethods.pageWaitForSelector.name ||\n        method === StagehandMethods.pageWaitForFunction.name) &&\n      operationTimeoutMs === 0\n    )\n      return undefined;\n    return RPC_RESPONSE_GRACE_MS + Math.max(0, operationTimeoutMs);\n  }\n\n  const defaultOperationTimeoutMs = DEFAULT_OPERATION_TIMEOUT_MS.get(method);\n  if (defaultOperationTimeoutMs !== undefined) {\n    return RPC_RESPONSE_GRACE_MS + defaultOperationTimeoutMs;\n  }\n\n  // These operations had no v3 deadline. Keep the server as the owner of their\n  // lifetime instead of turning the transport grace period into a 10s ceiling.\n  if (UNBOUNDED_BY_DEFAULT_METHODS.has(method)) {\n    return undefined;\n  }\n\n  return RPC_RESPONSE_GRACE_MS;\n}\n\nfunction recordProperty(value: unknown, property: string): unknown {\n  return typeof value === \"object\" && value !== null\n    ? (value as Record<string, unknown>)[property]\n    : undefined;\n}\n\nfunction numericProperty(value: unknown, property: string): number | undefined {\n  const candidate = recordProperty(value, property);\n  return typeof candidate === \"number\" && Number.isFinite(candidate) ? candidate : undefined;\n}\n","import type { BrowserbaseRegion } from \"@browserbasehq/stagehand-protocol/types\";\nimport type { StagehandWorkerInitMetadata } from \"./browser/factories.js\";\nimport type { ResolvedStagehandClientCreateConfig } from \"./clientSchemas.js\";\n\nconst REGION_API_URLS: Record<BrowserbaseRegion, string> = {\n  \"us-west-2\": \"https://api.stagehand.browserbase.com\",\n  \"us-east-1\": \"https://api.use1.stagehand.browserbase.com\",\n  \"eu-central-1\": \"https://api.euc1.stagehand.browserbase.com\",\n  \"ap-southeast-1\": \"https://api.apse1.stagehand.browserbase.com\",\n};\n\nexport type BrowserbaseConnection = Readonly<{\n  apiKey: string;\n  apiUrl: string;\n  sessionId: string;\n}>;\n\n/** Resolves Gateway/cache settings from validated options and claimed-browser metadata. */\nexport function resolveBrowserbaseConnection(\n  createConfig: Pick<ResolvedStagehandClientCreateConfig, \"apiKey\" | \"apiUrl\">,\n  workerInitMetadata: StagehandWorkerInitMetadata,\n): BrowserbaseConnection | undefined {\n  const { apiKey, browser } = { apiKey: createConfig.apiKey, ...workerInitMetadata };\n  if (!apiKey || !browser?.sessionId) return undefined;\n\n  const baseUrl = createConfig.apiUrl ?? REGION_API_URLS[browser.region ?? \"us-west-2\"];\n  return Object.freeze({\n    apiKey,\n    apiUrl: `${baseUrl.replace(/\\/+$/, \"\")}/v1`,\n    sessionId: browser.sessionId,\n  });\n}\n","import { validateHeaderName, validateHeaderValue } from \"node:http\";\nimport { BrowserbaseRequestParamsSchema } from \"@browserbasehq/stagehand-protocol/schemas\";\nimport type {\n  BrowserbaseRequestParams,\n  BrowserbaseRequestResult,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport type { BrowserbaseConnection } from \"./browserbaseConnection.js\";\n\nconst OPERATION_PATHS: Record<BrowserbaseRequestParams[\"operation\"], string> = {\n  \"gateway.responses\": \"/llm/responses\",\n  \"cache.get\": \"/cache/get\",\n  \"cache.set\": \"/cache/set\",\n};\n\n// These headers are supplied by the HTTP client or the SDK connection.\nconst OMITTED_REQUEST_HEADERS = [\n  \"host\",\n  \"content-length\",\n  \"connection\",\n  \"keep-alive\",\n  \"proxy-authenticate\",\n  \"proxy-authorization\",\n  \"proxy-connection\",\n  \"te\",\n  \"trailer\",\n  \"transfer-encoding\",\n  \"upgrade\",\n  \"forwarded\",\n  \"x-bb-api-key\",\n  \"x-bb-session-id\",\n];\n\nfunction requestHeaders(input: Record<string, string>): Headers {\n  for (const [name, value] of Object.entries(input)) {\n    validateHeaderName(name);\n    validateHeaderValue(name, value);\n  }\n  const headers = new Headers(input);\n  const omitted = new Set([\n    ...OMITTED_REQUEST_HEADERS,\n    ...(headers.get(\"connection\") ?? \"\").split(\",\").map((name) => name.trim().toLowerCase()),\n  ]);\n  const namesToRemove = [...headers.keys()].filter(\n    (name) => omitted.has(name) || name.startsWith(\"x-forwarded-\"),\n  );\n  for (const name of namesToRemove) headers.delete(name);\n  return headers;\n}\n\n/** Executes one Browserbase HTTP attempt; the worker interprets the response. */\nexport async function executeBrowserbaseRequest(\n  connection: BrowserbaseConnection | undefined,\n  input: BrowserbaseRequestParams,\n  callerSignal?: AbortSignal,\n): Promise<BrowserbaseRequestResult> {\n  const params = BrowserbaseRequestParamsSchema.parse(input);\n  if (!connection) {\n    return {\n      type: \"error\",\n      reason: \"unavailable\",\n      message: \"Browserbase connection is unavailable\",\n    };\n  }\n\n  const deadline =\n    params.remainingTimeoutMs === undefined\n      ? undefined\n      : performance.now() + params.remainingTimeoutMs;\n  // Construction errors are validation failures, separate from fetch failures.\n  let request: Request;\n  try {\n    const headers = requestHeaders(params.headers);\n    if (!headers.has(\"content-type\")) headers.set(\"content-type\", \"application/json\");\n    headers.set(\"x-bb-api-key\", connection.apiKey);\n    if (params.operation === \"gateway.responses\") {\n      headers.set(\"x-bb-session-id\", connection.sessionId);\n      if (!headers.has(\"authorization\"))\n        headers.set(\"authorization\", `Bearer ${connection.apiKey}`);\n    }\n    for (const [name, value] of headers) validateHeaderValue(name, value);\n    request = new Request(`${connection.apiUrl}${OPERATION_PATHS[params.operation]}`, {\n      method: \"POST\",\n      headers,\n      body: params.body,\n      redirect: \"manual\",\n    });\n  } catch {\n    throw new TypeError(\"Invalid Browserbase HTTP request\");\n  }\n  const timeoutController = new AbortController();\n  const signal = callerSignal\n    ? AbortSignal.any([callerSignal, timeoutController.signal])\n    : timeoutController.signal;\n  let timer: ReturnType<typeof setTimeout> | undefined;\n  if (deadline !== undefined) {\n    const tick = () => {\n      const remaining = deadline - performance.now();\n      if (remaining > 0) {\n        timer = setTimeout(tick, Math.min(2_147_483_647, Math.ceil(remaining)));\n      } else {\n        timeoutController.abort(new DOMException(\"Browserbase request timed out\", \"TimeoutError\"));\n      }\n    };\n    tick();\n  }\n\n  try {\n    signal.throwIfAborted();\n    const response = await fetch(request, { signal });\n    const body = await response.text();\n    const responseHeaders = new Headers(response.headers);\n    // Native fetch decodes the body; these describe the original transfer bytes.\n    responseHeaders.delete(\"content-encoding\");\n    responseHeaders.delete(\"content-length\");\n    return {\n      type: \"response\",\n      status: response.status,\n      statusText: response.statusText,\n      headers: Object.fromEntries(responseHeaders),\n      body,\n    };\n  } catch {\n    if (signal.aborted) {\n      const timedOut = signal.reason instanceof Error && signal.reason.name === \"TimeoutError\";\n      return {\n        type: \"error\",\n        reason: timedOut ? \"timeout\" : \"cancelled\",\n        message: timedOut ? \"Browserbase request timed out\" : \"Browserbase request cancelled\",\n      };\n    }\n    return { type: \"error\", reason: \"network\", message: \"Browserbase HTTP request failed\" };\n  } finally {\n    if (timer !== undefined) clearTimeout(timer);\n  }\n}\n","import {\n  StagehandMethods,\n  StagehandNotifications,\n} from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type { BrowserbaseConnection } from \"./browserbaseConnection.js\";\nimport { executeBrowserbaseRequest } from \"./browserbaseTransport.js\";\nimport type { RPCClient } from \"./rpcClient.js\";\n\n/** Installs Browserbase request handling for one RPC connection. */\nexport function registerBrowserbaseTransport(\n  client: RPCClient,\n  connection: BrowserbaseConnection | undefined,\n): () => void {\n  const pending = new Map<number, AbortController>();\n  const removeRequest = client.onRequest(\n    StagehandMethods.browserbaseRequest,\n    async (params, context) => {\n      if (pending.has(context.requestId))\n        throw new Error(\"Browserbase request ID is already in use\");\n      const controller = new AbortController();\n      pending.set(context.requestId, controller);\n      try {\n        return await executeBrowserbaseRequest(\n          connection,\n          params,\n          AbortSignal.any([context.signal, controller.signal]),\n        );\n      } finally {\n        pending.delete(context.requestId);\n      }\n    },\n  );\n  const removeNotification = client.onNotification((notification) => {\n    if (notification.method !== StagehandNotifications.browserbaseCancel.name) return;\n    const { requestId, reason } = notification.params;\n    pending\n      .get(requestId)\n      ?.abort(\n        new DOMException(\n          reason === \"timeout\" ? \"Browserbase request timed out\" : \"Browserbase request cancelled\",\n          reason === \"timeout\" ? \"TimeoutError\" : \"AbortError\",\n        ),\n      );\n  });\n  return () => {\n    removeRequest();\n    removeNotification();\n    for (const controller of pending.values()) controller.abort();\n    pending.clear();\n  };\n}\n","import type { Locator } from \"./locator.js\";\n\nexport type ClientLocatorOptions = {\n  locator?: Locator;\n  ignoreLocators?: Locator[];\n};\n\nexport function serializeClientLocator(locator: Locator, pageId: string, method: string) {\n  if (locator.descriptor.pageId !== pageId) {\n    throw new TypeError(`${method}(): locator must belong to the target page`);\n  }\n  const { selector, nth } = locator.descriptor;\n  return {\n    selector,\n    ...(nth === undefined ? {} : { nth }),\n  };\n}\n\nexport function serializeClientLocatorOptions<Options extends ClientLocatorOptions>(\n  method: string,\n  pageId: string,\n  options: Options,\n) {\n  const { locator, ignoreLocators, ...rest } = options;\n  return {\n    ...rest,\n    ...(locator ? { locator: serializeClientLocator(locator, pageId, method) } : {}),\n    ...(ignoreLocators\n      ? {\n          ignoreLocators: ignoreLocators.map((ignoredLocator) =>\n            serializeClientLocator(ignoredLocator, pageId, method),\n          ),\n        }\n      : {}),\n  };\n}\n","import type {\n  BrowserbaseClientOptions,\n  BrowserbaseConnectOptions,\n  BrowserbaseFetchOptions,\n  BrowserbaseFetchResult,\n  BrowserbaseLaunchOptions,\n  BrowserbaseSearchOptions,\n  BrowserbaseSearchResult,\n  LocalBrowserConnectOptions,\n  LocalBrowserLaunchOptions,\n} from \"../clientSchemas.js\";\nimport type { BrowserContext } from \"../browserContext.js\";\n\nexport type {\n  BrowserbaseClientOptions,\n  BrowserbaseConnectOptions,\n  BrowserbaseFetchOptions,\n  BrowserbaseFetchResult,\n  BrowserbaseLaunchOptions,\n  BrowserbaseSearchOptions,\n  BrowserbaseSearchResult,\n  LocalBrowserConnectOptions,\n  LocalBrowserLaunchOptions,\n};\n\nconst stagehandBrowserBrand: unique symbol = Symbol(\"StagehandBrowser\");\n\nexport type StagehandBrowserProvider = \"local\" | \"browserbase\";\nexport type StagehandBrowserOrigin = \"launched\" | \"connected\";\n\n/**\n * A browser whose Stagehand extension is ready for its first RPC call.\n *\n * Browser handles are created by Stagehand's browser factories. The private\n * brand prevents arbitrary CDP connections from being passed to Stagehand.\n */\nexport interface StagehandBrowser {\n  readonly [stagehandBrowserBrand]: true;\n  readonly provider: StagehandBrowserProvider;\n  readonly origin: StagehandBrowserOrigin;\n  /** Browserbase session id backing this browser; undefined for local browsers. */\n  readonly sessionId?: string;\n  readonly context: BrowserContext;\n  readonly closed: boolean;\n  close(): Promise<void>;\n}\n\nexport interface LocalBrowser {\n  launch(options?: LocalBrowserLaunchOptions): Promise<StagehandBrowser>;\n  connect(options: LocalBrowserConnectOptions): Promise<StagehandBrowser>;\n}\n\nexport interface BrowserbaseBrowser {\n  launch(options: BrowserbaseLaunchOptions): Promise<StagehandBrowser>;\n  connect(options: BrowserbaseConnectOptions): Promise<StagehandBrowser>;\n  search(options: BrowserbaseSearchOptions): Promise<BrowserbaseSearchResult>;\n  fetch(options: BrowserbaseFetchOptions): Promise<BrowserbaseFetchResult>;\n}\n\ntype BrowserHandleInternals = {\n  claimed: boolean;\n  attachment: unknown;\n  context?: BrowserContext;\n  close: () => Promise<void> | void;\n  invalidate: () => Promise<void> | void;\n  terminalPromise?: Promise<void>;\n};\n\nconst browserHandleInternals = new WeakMap<StagehandBrowser, BrowserHandleInternals>();\n\nclass StagehandBrowserHandle implements StagehandBrowser {\n  readonly [stagehandBrowserBrand] = true as const;\n\n  constructor(\n    readonly provider: StagehandBrowserProvider,\n    readonly origin: StagehandBrowserOrigin,\n    internals: BrowserHandleInternals,\n    readonly sessionId?: string,\n  ) {\n    browserHandleInternals.set(this, internals);\n  }\n\n  get closed(): boolean {\n    return browserHandleInternals.get(this)?.terminalPromise !== undefined;\n  }\n\n  get context(): BrowserContext {\n    const context = requireBrowserHandleInternals(this).context;\n    if (!context) {\n      throw new Error(\n        \"Browser context is unavailable. Attach the browser with await Stagehand.create({ browser }).\",\n      );\n    }\n    return context;\n  }\n\n  close(): Promise<void> {\n    const internals = requireBrowserHandleInternals(this);\n    internals.terminalPromise ??= Promise.resolve().then(internals.close);\n    return internals.terminalPromise;\n  }\n}\n\n/** @internal */\nexport function createStagehandBrowserHandle<Attachment>(options: {\n  provider: StagehandBrowserProvider;\n  origin: StagehandBrowserOrigin;\n  attachment: Attachment;\n  close: () => Promise<void> | void;\n  invalidate?: () => Promise<void> | void;\n  sessionId?: string;\n}): StagehandBrowser {\n  return new StagehandBrowserHandle(\n    options.provider,\n    options.origin,\n    {\n      claimed: false,\n      attachment: options.attachment,\n      close: options.close,\n      invalidate: options.invalidate ?? options.close,\n    },\n    options.sessionId,\n  );\n}\n\n/** @internal */\nexport function claimStagehandBrowserHandle<Attachment>(browser: StagehandBrowser): Attachment {\n  const internals = requireBrowserHandleInternals(browser);\n  if (internals.terminalPromise) {\n    throw new Error(\"Cannot attach Stagehand to a closed browser\");\n  }\n  if (internals.claimed) {\n    throw new Error(\"This browser is already attached to a Stagehand instance\");\n  }\n  internals.claimed = true;\n  return internals.attachment as Attachment;\n}\n\n/** @internal */\nexport function invalidateStagehandBrowserHandle(browser: StagehandBrowser): Promise<void> {\n  const internals = requireBrowserHandleInternals(browser);\n  internals.terminalPromise ??= Promise.resolve().then(internals.invalidate);\n  return internals.terminalPromise;\n}\n\n/** @internal */\nexport function releaseStagehandBrowserHandle(browser: StagehandBrowser): void {\n  const internals = requireBrowserHandleInternals(browser);\n  internals.claimed = false;\n}\n\n/** @internal */\nexport function attachStagehandBrowserContext(\n  browser: StagehandBrowser,\n  context: BrowserContext,\n): void {\n  const internals = requireBrowserHandleInternals(browser);\n  if (!internals.claimed) {\n    throw new Error(\"Cannot attach a browser context before Stagehand claims the browser\");\n  }\n  if (internals.context) {\n    throw new Error(\"This browser already has a Stagehand context\");\n  }\n  internals.context = context;\n}\n\n/** @internal */\nexport function detachStagehandBrowserContext(browser: StagehandBrowser): void {\n  const internals = requireBrowserHandleInternals(browser);\n  internals.context = undefined;\n}\n\nexport function isStagehandBrowser(value: unknown): value is StagehandBrowser {\n  return (\n    typeof value === \"object\" &&\n    value !== null &&\n    browserHandleInternals.has(value as StagehandBrowser)\n  );\n}\n\nfunction requireBrowserHandleInternals(browser: StagehandBrowser): BrowserHandleInternals {\n  const internals = browserHandleInternals.get(browser);\n  if (!internals) {\n    throw new TypeError(\"browser must be created by localBrowser or browserbase\");\n  }\n  return internals;\n}\n","/**\n * TypeScript SDK-owned schemas. They extend protocol schemas with SDK-only values such as local/CDP\n * connection options, JavaScript callbacks, and Page instances. Those values are consumed by the\n * SDK and never cross the RPC boundary. Other language SDKs should follow the same pattern around\n * the shared wire params.\n */\n\nimport { z } from \"zod/v4\";\nimport type Browserbase from \"@browserbasehq/sdk\";\nimport type { ClientOptions } from \"@browserbasehq/sdk\";\nimport * as ProtocolSchemas from \"@browserbasehq/stagehand-protocol/schemas\";\nimport type { StagehandLog } from \"@browserbasehq/stagehand-protocol/types\";\nimport {\n  ActOptionsSchema,\n  BrowserbaseRegionSchema,\n  ExtractOptionsSchema,\n  LLMGenerateParamsSchema,\n  LLMGenerateResultSchema,\n  ModelConfigSchema,\n  ObserveOptionsSchema,\n  StagehandInitParamsSchema,\n  StagehandLogLevelSchema,\n} from \"@browserbasehq/stagehand-protocol/schemas\";\nimport { Page } from \"./page.js\";\nimport { Locator } from \"./locator.js\";\nimport { isStagehandBrowser, type StagehandBrowser } from \"./browser/index.js\";\n\nexport const LocalBrowserLaunchOptionsSchema = z\n  .strictObject({\n    args: z.array(z.string()).optional(),\n    executablePath: z.string().optional(),\n    port: z.number().optional(),\n    userDataDir: z.string().optional(),\n    preserveUserDataDir: z.boolean().optional(),\n    headless: z.boolean().optional(),\n    devtools: z.boolean().optional(),\n    chromiumSandbox: z.boolean().optional(),\n    ignoreDefaultArgs: z.union([z.boolean(), z.array(z.string())]).optional(),\n    proxy: z\n      .strictObject({\n        server: z.string(),\n        bypass: z.string().optional(),\n        username: z.string().optional(),\n        password: z.string().optional(),\n      })\n      .optional(),\n    locale: z.string().optional(),\n    viewport: z.strictObject({ width: z.number(), height: z.number() }).optional(),\n    deviceScaleFactor: z.number().optional(),\n    hasTouch: z.boolean().optional(),\n    ignoreHTTPSErrors: z.boolean().optional(),\n    downloadsPath: z.string().optional(),\n    acceptDownloads: z.boolean().optional(),\n    keepAlive: z.boolean().optional(),\n  })\n  .meta({ id: \"LocalBrowserLaunchOptions\" });\n\n// Validate the whole map before record parsing so errors never contain header names or values.\nconst CDPHeadersSchema = z.preprocess(\n  (value) => {\n    try {\n      if (\n        typeof value !== \"object\" ||\n        value === null ||\n        Array.isArray(value) ||\n        ![Object.prototype, null].includes(Object.getPrototypeOf(value))\n      )\n        return null;\n      const entries = Object.entries(value);\n      if (\n        !entries.every(\n          ([name, content]) =>\n            name.length > 0 &&\n            !/[^!#$%&'*+\\-.^_`|~0-9A-Za-z]/.test(name) &&\n            typeof content === \"string\" &&\n            !/[^\\t\\x20-\\x7e]/.test(content) &&\n            content === content.replace(/^[ \\t]+|[ \\t]+$/g, \"\"),\n        )\n      )\n        return null;\n      // Parse a snapshot so Zod cannot invoke getters or proxy traps a second time.\n      return Object.fromEntries(entries);\n    } catch {\n      return null;\n    }\n  },\n  z.record(z.string(), z.string(), {\n    error:\n      \"headers must map valid HTTP header names to ASCII string values without leading or trailing spaces or tabs\",\n  }),\n);\n\nexport const LocalBrowserConnectOptionsSchema = z\n  .strictObject({\n    cdpUrl: z.string().min(1),\n    /** Headers for client-side CDP discovery and WebSocket connections. */\n    headers: CDPHeadersSchema.optional(),\n    extensionId: z.string().optional(),\n    /**\n     * Browser-level CDP WebSocket URL dialed by the extension inside Chrome.\n     * Defaults to the client's URL. Set this when the client connects through\n     * a gateway the extension cannot or should not use.\n     */\n    extensionCdpUrl: z\n      .url({ protocol: /^wss?$/, hostname: /.+/ })\n      .refine(\n        (value) => {\n          try {\n            return new URL(value).port !== \"0\";\n          } catch {\n            return false;\n          }\n        },\n        { message: \"Port must be between 1 and 65535\" },\n      )\n      .optional(),\n  })\n  .meta({ id: \"LocalBrowserConnectOptions\" });\n\nexport const DEFAULT_BROWSERBASE_URL = \"https://api.browserbase.com\";\n\n/**\n * HTTP settings for the Browserbase SDK client that Stagehand creates for session and extension\n * management. `apiKey` and `baseUrl` stay top-level so one key authenticates both Browserbase and\n * the Stagehand runtime.\n */\nexport type BrowserbaseClientOptions = Pick<\n  ClientOptions,\n  \"timeout\" | \"maxRetries\" | \"defaultHeaders\" | \"defaultQuery\" | \"fetch\"\n>;\n\nconst BrowserbaseClientOptionsSchema: z.ZodType<\n  BrowserbaseClientOptions,\n  BrowserbaseClientOptions\n> = z.strictObject({\n  timeout: z.int().nonnegative().optional(),\n  maxRetries: z.int().nonnegative().optional(),\n  defaultHeaders: z.record(z.string(), z.string().nullable().optional()).optional(),\n  defaultQuery: z.record(z.string(), z.string().optional()).optional(),\n  fetch: z\n    .custom<NonNullable<ClientOptions[\"fetch\"]>>((value) => typeof value === \"function\", {\n      message: \"fetch must be a function\",\n    })\n    .optional(),\n});\n\ntype BrowserbaseLaunchOptionsInput = Browserbase.SessionCreateParams & {\n  apiKey: string;\n  baseUrl?: string;\n  clientOptions?: BrowserbaseClientOptions;\n};\n\ntype BrowserbaseLaunchOptionsOutput = Browserbase.SessionCreateParams & {\n  apiKey: string;\n  baseUrl: string;\n  clientOptions?: BrowserbaseClientOptions;\n};\n\n/**\n * Browserbase owns the session option surface. Keep this object loose so newly added SDK options\n * pass through without requiring a Stagehand protocol or schema update.\n */\nexport const BrowserbaseLaunchOptionsSchema = z\n  .looseObject({\n    apiKey: z.string().min(1),\n    baseUrl: z.url().default(DEFAULT_BROWSERBASE_URL),\n    clientOptions: BrowserbaseClientOptionsSchema.optional(),\n    apiUrl: z.never().optional(),\n    type: z.never().optional(),\n  })\n  .meta({ id: \"BrowserbaseLaunchOptions\" }) as z.ZodType<\n  BrowserbaseLaunchOptionsOutput,\n  BrowserbaseLaunchOptionsInput\n>;\n\nexport const BrowserbaseConnectOptionsSchema = z\n  .strictObject({\n    apiKey: z.string().min(1),\n    baseUrl: z.url().default(DEFAULT_BROWSERBASE_URL),\n    clientOptions: BrowserbaseClientOptionsSchema.optional(),\n    sessionId: z.string().min(1),\n    extensionId: z.string().optional(),\n  })\n  .meta({ id: \"BrowserbaseConnectOptions\" });\n\nconst BrowserbaseCredentialsShape = {\n  apiKey: z.string().min(1),\n  baseUrl: z.url().default(DEFAULT_BROWSERBASE_URL),\n};\n\nexport const BrowserbaseSearchOptionsSchema = z\n  .strictObject({\n    ...BrowserbaseCredentialsShape,\n    query: z.string().min(1).max(200),\n    numResults: z.int().min(1).max(25).optional(),\n  })\n  .meta({ id: \"BrowserbaseSearchOptions\" });\n\nexport const BrowserbaseFetchOptionsSchema = z\n  .strictObject({\n    ...BrowserbaseCredentialsShape,\n    url: z.url(),\n    allowInsecureSsl: z.boolean().optional(),\n    allowRedirects: z.boolean().optional(),\n    format: z.enum([\"raw\", \"json\", \"markdown\"]).optional(),\n    proxies: z.boolean().optional(),\n    schema: z.record(z.string(), z.unknown()).optional(),\n  })\n  .refine(({ format, schema }) => schema === undefined || format === \"json\", {\n    message: 'schema is only valid when format is \"json\"',\n    path: [\"schema\"],\n  })\n  .refine(({ format, schema }) => format !== \"json\" || schema !== undefined, {\n    message: 'schema is required when format is \"json\"',\n    path: [\"schema\"],\n  })\n  .meta({ id: \"BrowserbaseFetchOptions\" });\n\nexport const BrowserbaseSearchResultSchema = z\n  .object({\n    query: z.string(),\n    requestId: z.string(),\n    results: z.array(\n      z.object({\n        id: z.string(),\n        title: z.string(),\n        url: z.string(),\n        author: z.string().nullish(),\n        favicon: z.string().nullish(),\n        image: z.string().nullish(),\n        publishedDate: z.string().nullish(),\n      }),\n    ),\n  })\n  .meta({ id: \"BrowserbaseSearchResult\" });\n\nexport const BrowserbaseFetchResultSchema = z\n  .object({\n    id: z.string(),\n    content: z.union([z.string(), z.record(z.string(), z.unknown())]),\n    contentType: z.string(),\n    encoding: z.string(),\n    headers: z.record(z.string(), z.string()),\n    statusCode: z.number().int(),\n  })\n  .meta({ id: \"BrowserbaseFetchResult\" });\n\n/** Data returned by the Browserbase SDK after creating a session. */\nexport const BrowserbaseSessionCreateResultSchema = z\n  .object({\n    id: z.string(),\n    connectUrl: z.string(),\n  })\n  .meta({ id: \"BrowserbaseSessionCreateResult\" });\n\n/** Data returned by the Browserbase SDK when retrieving a session. */\nexport const BrowserbaseSessionRetrieveResultSchema = z\n  .object({\n    id: z.string(),\n    connectUrl: z.string().optional(),\n    region: BrowserbaseRegionSchema.optional(),\n  })\n  .meta({ id: \"BrowserbaseSessionRetrieveResult\" });\n\n/** Normalized connection data shared by Browserbase launch and connect flows. */\nexport const BrowserbaseSessionConnectionSchema = z\n  .strictObject({\n    sessionId: z.string().trim().min(1),\n    cdpUrl: z.string().trim().min(1),\n    region: BrowserbaseRegionSchema.optional(),\n  })\n  .meta({ id: \"BrowserbaseSessionConnection\" });\n\nexport const WebMCPToolsOptionsSchema = ProtocolSchemas.WebMCPToolsOptionsSchema.partial();\n\nexport const WebMCPInvokeOptionsSchema = ProtocolSchemas.WebMCPInvokeOptionsSchema.partial();\n\nexport const WebMCPResultOptionsSchema = ProtocolSchemas.WebMCPResultOptionsSchema;\n\n/** An LLM callback implemented locally by the SDK consumer. It never crosses the wire. */\nexport const ClientLLMSchema = z\n  .strictObject({\n    generate: z.function({\n      input: [LLMGenerateParamsSchema],\n      output: z.promise(LLMGenerateResultSchema),\n    }),\n  })\n  .meta({ id: \"ClientLLM\" });\n\nexport const StagehandClientLogLevelSchema = z\n  .union([StagehandLogLevelSchema, z.literal(\"off\")])\n  .meta({ id: \"StagehandClientLogLevel\" });\n\nexport const StagehandClientLogFormatSchema = z\n  .enum([\"pretty\", \"json\"])\n  .meta({ id: \"StagehandClientLogFormat\" });\n\nexport const StagehandClientOnLogSchema = z\n  .custom<(log: StagehandLog) => void | Promise<void>>(\n    (value) => typeof value === \"function\",\n    \"onLog must be a function\",\n  )\n  .meta({ id: \"StagehandClientOnLog\" });\n\nexport const StagehandClientLoggingConfigSchema = z\n  .strictObject({\n    level: StagehandClientLogLevelSchema.default(\"info\"),\n    format: StagehandClientLogFormatSchema.default(\"pretty\"),\n    onLog: StagehandClientOnLogSchema.optional(),\n  })\n  .meta({ id: \"StagehandClientLoggingConfig\" });\n\nexport const StagehandClientActOptionsSchema = ActOptionsSchema.extend({\n  locator: z.instanceof(Locator).optional(),\n  ignoreLocators: z.array(z.instanceof(Locator)).optional(),\n  page: z.instanceof(Page).optional(),\n}).meta({ id: \"StagehandClientActOptions\" });\n\nexport const StagehandClientObserveOptionsSchema = ObserveOptionsSchema.extend({\n  locator: z.instanceof(Locator).optional(),\n  ignoreLocators: z.array(z.instanceof(Locator)).optional(),\n  page: z.instanceof(Page).optional(),\n}).meta({ id: \"StagehandClientObserveOptions\" });\n\nexport const StagehandClientExtractOptionsSchema = ExtractOptionsSchema.extend({\n  locator: z.instanceof(Locator).optional(),\n  ignoreLocators: z.array(z.instanceof(Locator)).optional(),\n  page: z.instanceof(Page).optional(),\n}).meta({ id: \"StagehandClientExtractOptions\" });\n\nexport const StagehandClientCreateConfigSchema = z\n  .strictObject(StagehandInitParamsSchema.shape)\n  .omit({\n    browserbase: true,\n    protocolVersion: true,\n    clientInfo: true,\n    browserCdpUrl: true,\n    logLevel: true,\n    browser: true,\n  })\n  .extend({\n    apiKey: z.string().min(1).optional().meta({\n      description:\n        \"Browserbase API key. A Browserbase browser uses the key supplied to its launch/connect factory; this option does not override that key.\",\n    }),\n    apiUrl: z\n      .url({ protocol: /^https?$/ })\n      .refine(\n        (value) => !value.includes(\"?\") && !value.includes(\"#\"),\n        \"Stagehand apiUrl must not include a query string or fragment\",\n      )\n      .refine((value) => !new URL(value).pathname.replace(/\\/+$/, \"\").endsWith(\"/v1\"), {\n        message: \"Stagehand apiUrl must be a service origin without /v1\",\n      })\n      .optional()\n      .meta({\n        description:\n          \"Stagehand API base URL override for managed services such as Model Gateway and server-side caching\",\n      }),\n    model: z.union([ModelConfigSchema, ClientLLMSchema]).optional(),\n    logging: StagehandClientLoggingConfigSchema.default({\n      level: \"info\",\n      format: \"pretty\",\n    }),\n  })\n  .strict()\n  .meta({ id: \"StagehandClientCreateConfig\" });\n\nexport const StagehandBrowserSchema = z\n  .custom<StagehandBrowser>(\n    isStagehandBrowser,\n    \"browser must be created by localBrowser or browserbase\",\n  )\n  .meta({ id: \"StagehandBrowser\" });\n\nexport const StagehandCreateOptionsSchema = StagehandClientCreateConfigSchema.extend({\n  browser: StagehandBrowserSchema,\n}).meta({ id: \"StagehandCreateOptions\" });\n\nexport type ClientLLM = z.infer<typeof ClientLLMSchema>;\nexport type StagehandClientLoggingConfig = z.input<typeof StagehandClientLoggingConfigSchema>;\nexport type ResolvedStagehandClientLoggingConfig = z.output<\n  typeof StagehandClientLoggingConfigSchema\n>;\nexport type StagehandClientActOptions = z.input<typeof StagehandClientActOptionsSchema>;\nexport type StagehandClientObserveOptions = z.input<typeof StagehandClientObserveOptionsSchema>;\nexport type StagehandClientExtractOptions = z.input<typeof StagehandClientExtractOptionsSchema>;\nexport type LocalBrowserLaunchOptions = z.infer<typeof LocalBrowserLaunchOptionsSchema>;\nexport interface LocalBrowserConnectOptions extends z.infer<\n  typeof LocalBrowserConnectOptionsSchema\n> {\n  /** @deprecated Ignored. Omit this option; Stagehand discovers the installed extension automatically. */\n  extensionId?: string | undefined;\n}\nexport type BrowserbaseLaunchOptions = z.input<typeof BrowserbaseLaunchOptionsSchema>;\nexport interface BrowserbaseConnectOptions extends z.input<typeof BrowserbaseConnectOptionsSchema> {\n  /** @deprecated Ignored. Omit this option; Stagehand discovers the installed extension automatically. */\n  extensionId?: string | undefined;\n}\nexport type BrowserbaseSearchOptions = z.input<typeof BrowserbaseSearchOptionsSchema>;\nexport type BrowserbaseFetchOptions = z.input<typeof BrowserbaseFetchOptionsSchema>;\nexport type BrowserbaseSearchResult = z.infer<typeof BrowserbaseSearchResultSchema>;\nexport type BrowserbaseFetchResult = z.infer<typeof BrowserbaseFetchResultSchema>;\nexport type BrowserbaseSessionCreateResult = z.infer<typeof BrowserbaseSessionCreateResultSchema>;\nexport type BrowserbaseSessionRetrieveResult = z.infer<\n  typeof BrowserbaseSessionRetrieveResultSchema\n>;\nexport type BrowserbaseSessionConnection = z.infer<typeof BrowserbaseSessionConnectionSchema>;\nexport type StagehandClientCreateConfig = z.input<typeof StagehandClientCreateConfigSchema>;\nexport type ResolvedStagehandClientCreateConfig = z.output<\n  typeof StagehandClientCreateConfigSchema\n>;\nexport type StagehandCreateOptions = z.input<typeof StagehandCreateOptionsSchema>;\nexport type ResolvedStagehandCreateOptions = z.output<typeof StagehandCreateOptionsSchema>;\nexport type WebMCPToolsOptions = z.infer<typeof WebMCPToolsOptionsSchema>;\nexport type WebMCPInvokeOptions = z.infer<typeof WebMCPInvokeOptionsSchema>;\nexport type WebMCPResultOptions = z.infer<typeof WebMCPResultOptionsSchema>;\n","","import packageJson from \"../package.json\" with { type: \"json\" };\n\nexport const STAGEHAND_SDK_VERSION = packageJson.version;\n","import { STAGEHAND_SDK_VERSION } from \"./version.js\";\n\nconst STAGEHAND_SDK_IDENTITY = {\n  name: \"stagehand-sdk-ts\",\n  language: \"typescript\",\n  version: STAGEHAND_SDK_VERSION,\n} as const;\n\nexport const STAGEHAND_SDK_CLIENT_INFO = {\n  name: STAGEHAND_SDK_IDENTITY.name,\n  version: STAGEHAND_SDK_IDENTITY.version,\n} as const;\n\nexport const STAGEHAND_SESSION_METADATA = {\n  stagehand: \"true\",\n  stagehand_sdk_language: STAGEHAND_SDK_IDENTITY.language,\n  stagehand_sdk_version: STAGEHAND_SDK_IDENTITY.version,\n} as const;\n","import { readFile } from \"node:fs/promises\";\nimport { fileURLToPath } from \"node:url\";\n\nconst packageRoot = new URL(\"../\", import.meta.url);\n\n// Env overrides exist for bundlers (nitro, eve dev's authored-module\n// compiler) that inline this module and re-anchor import.meta.url away from\n// the installed package, leaving the derived paths pointing at files the\n// bundle does not carry.\nfunction nonEmpty(value: string | undefined): string | undefined {\n  const trimmed = value?.trim();\n  return trimmed ? trimmed : undefined;\n}\n\nexport const STAGEHAND_EXTENSION_ARCHIVE_PATH =\n  nonEmpty(process.env.STAGEHAND_EXTENSION_ARCHIVE_PATH) ??\n  fileURLToPath(new URL(\"dist/assets/stagehand-extension.zip\", packageRoot));\n\nexport const STAGEHAND_EXTENSION_DIRECTORY_PATH =\n  nonEmpty(process.env.STAGEHAND_EXTENSION_DIRECTORY_PATH) ??\n  fileURLToPath(new URL(\"dist/extension/\", packageRoot));\n\n/**\n * Returns the ZIP archive of the extension bundled with this SDK.\n * Save or upload the bytes directly, or extract it to a directory for Chrome's\n * Load unpacked option. No browser session is required.\n */\nexport async function getExtensionArchive(): Promise<Uint8Array> {\n  return readFile(STAGEHAND_EXTENSION_ARCHIVE_PATH);\n}\n","import { createReadStream } from \"node:fs\";\nimport Browserbase from \"@browserbasehq/sdk\";\nimport { STAGEHAND_EXTENSION_ARCHIVE_PATH } from \"./extensionAssets.js\";\n\nexport type BrowserbaseExtensionClient = {\n  uploadExtension(archivePath: string): Promise<{ id: string }>;\n  deleteExtension(extensionId: string): Promise<void>;\n};\n\nexport type ProvisionedBrowserbaseExtension = {\n  extensionId: string;\n  cleanup(): Promise<void>;\n};\n\nexport type BrowserbaseExtensionSdk = {\n  extensions: {\n    create(\n      params: { file: ReturnType<typeof createReadStream> },\n      options?: { maxRetries?: number },\n    ): Promise<{ id: string }>;\n    delete(\n      extensionId: string,\n      options?: { headers?: Record<string, string | null> },\n    ): Promise<void>;\n  };\n};\n\ntype BrowserbaseSdkFactory = (apiKey: string) => BrowserbaseExtensionSdk;\n\nexport function createBrowserbaseExtensionClient(\n  apiKey: string,\n  createSdk: BrowserbaseSdkFactory = (key) => new Browserbase({ apiKey: key }),\n): BrowserbaseExtensionClient {\n  const browserbase = createSdk(apiKey);\n  return {\n    async uploadExtension(archivePath) {\n      const extension = await browserbase.extensions.create(\n        { file: createReadStream(archivePath) },\n        { maxRetries: 0 },\n      );\n      return { id: extension.id };\n    },\n    async deleteExtension(extensionId) {\n      await browserbase.extensions.delete(extensionId, {\n        headers: { \"Content-Type\": null },\n      });\n    },\n  };\n}\n\n/**\n * Upload attempts and the pause between them. Many Stagehand sessions\n * launching at once each upload the same archive; Browserbase rejects part\n * of such a burst, and one rejection used to kill the session for good.\n */\nconst UPLOAD_ATTEMPTS = 4;\nconst UPLOAD_BACKOFF_MS = [500, 1500, 4000];\n\nexport type ProvisionBrowserbaseExtensionOptions = {\n  attempts?: number;\n  /** Test seam; defaults to a real delay. */\n  sleep?: (ms: number) => Promise<void>;\n};\n\nexport async function provisionBrowserbaseExtension(\n  client: BrowserbaseExtensionClient,\n  archivePath = STAGEHAND_EXTENSION_ARCHIVE_PATH,\n  options: ProvisionBrowserbaseExtensionOptions = {},\n): Promise<ProvisionedBrowserbaseExtension> {\n  const attempts = options.attempts ?? UPLOAD_ATTEMPTS;\n  if (!Number.isInteger(attempts) || attempts < 1 || attempts > UPLOAD_ATTEMPTS) {\n    throw new Error(`attempts must be an integer between 1 and ${UPLOAD_ATTEMPTS}`);\n  }\n  const sleep = options.sleep ?? ((ms: number) => new Promise((r) => setTimeout(r, ms)));\n  let uploaded: { id: string } | undefined;\n  let lastError: unknown;\n  let attemptsMade = 0;\n\n  for (let attempt = 0; attempt < attempts && uploaded === undefined; attempt += 1) {\n    attemptsMade += 1;\n    try {\n      uploaded = await client.uploadExtension(archivePath);\n    } catch (error) {\n      lastError = error;\n      // Retry an explicit rate-limit rejection only. A transport/server error\n      // may follow a successful create whose ID we never received.\n      if (!error || typeof error !== \"object\" || !(\"status\" in error) || error.status !== 429)\n        break;\n      if (attempt + 1 < attempts) {\n        await sleep(UPLOAD_BACKOFF_MS[Math.min(attempt, UPLOAD_BACKOFF_MS.length - 1)]!);\n      }\n    }\n  }\n  if (uploaded === undefined) {\n    throw new Error(\n      `Failed to upload the Stagehand extension to Browserbase after ${attemptsMade} attempt(s).`,\n      { cause: lastError },\n    );\n  }\n\n  const extensionId = uploaded.id.trim();\n  if (extensionId.length === 0) {\n    throw new Error(\"Browserbase extension upload returned an empty extension ID\");\n  }\n\n  let cleaned = false;\n  return {\n    extensionId,\n    async cleanup() {\n      if (cleaned) return;\n      await client.deleteExtension(extensionId);\n      cleaned = true;\n    },\n  };\n}\n","import Browserbase from \"@browserbasehq/sdk\";\nimport {\n  createBrowserbaseExtensionClient,\n  provisionBrowserbaseExtension,\n  type BrowserbaseExtensionClient,\n  type BrowserbaseExtensionSdk,\n  type ProvisionedBrowserbaseExtension,\n} from \"../browserbaseExtension.js\";\nimport { STAGEHAND_SESSION_METADATA } from \"../sdkIdentity.js\";\nimport {\n  BrowserbaseSessionConnectionSchema,\n  type BrowserbaseClientOptions,\n  BrowserbaseSessionCreateResultSchema,\n  BrowserbaseSessionRetrieveResultSchema,\n  type BrowserbaseSessionConnection,\n  type BrowserbaseSessionCreateResult,\n  type BrowserbaseSessionRetrieveResult,\n} from \"../clientSchemas.js\";\n\ntype OwnedBrowserbaseSession = BrowserbaseSessionConnection & {\n  close: () => Promise<void> | void;\n};\n\nexport type BrowserbaseSessionClient = {\n  createSession(params: Browserbase.SessionCreateParams): Promise<OwnedBrowserbaseSession>;\n  connectSession?(sessionId: string): Promise<OwnedBrowserbaseSession>;\n};\n\nexport type BrowserbaseSessionClientFactory = (\n  apiKey: string,\n  baseUrl: string,\n  clientOptions?: BrowserbaseClientOptions,\n) => BrowserbaseSessionClient;\n\nexport type BrowserbaseApiClient = BrowserbaseExtensionClient & {\n  createSession(params: Browserbase.SessionCreateParams): Promise<BrowserbaseSessionCreateResult>;\n  retrieveSession(sessionId: string): Promise<BrowserbaseSessionRetrieveResult>;\n  releaseSession(sessionId: string): Promise<void>;\n};\n\ntype BrowserbaseSessionClientDependencies = {\n  browserbase?: BrowserbaseApiClient;\n  provisionExtension?: (\n    client: BrowserbaseExtensionClient,\n  ) => Promise<ProvisionedBrowserbaseExtension>;\n};\n\ntype BrowserbaseSdk = BrowserbaseExtensionSdk & {\n  sessions: {\n    create(params: Browserbase.SessionCreateParams): Promise<unknown>;\n    retrieve(sessionId: string): Promise<unknown>;\n    update(sessionId: string, params: { status: \"REQUEST_RELEASE\" }): Promise<unknown>;\n  };\n};\n\ntype BrowserbaseSdkFactory = (\n  apiKey: string,\n  baseUrl: string,\n  clientOptions: BrowserbaseClientOptions,\n) => BrowserbaseSdk;\n\nexport class BrowserbaseSessionError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"BrowserbaseSessionError\";\n  }\n}\n\nexport function createBrowserbaseSessionClient(\n  apiKey: string,\n  baseUrl: string,\n  clientOptions: BrowserbaseClientOptions = {},\n  dependencies: BrowserbaseSessionClientDependencies = {},\n): BrowserbaseSessionClient {\n  const browserbase =\n    dependencies.browserbase ?? createBrowserbaseApiClient(apiKey, baseUrl, clientOptions);\n  const provisionExtension = dependencies.provisionExtension ?? provisionBrowserbaseExtension;\n\n  return {\n    async createSession(params) {\n      const callerExtensionId = params.extensionId ?? params.browserSettings?.extensionId;\n      const extension =\n        callerExtensionId === undefined ? await provisionExtension(browserbase) : undefined;\n      let session: BrowserbaseSessionCreateResult;\n\n      try {\n        session = await browserbase.createSession({\n          ...params,\n          ...(extension === undefined ? {} : { extensionId: extension.extensionId }),\n          userMetadata: {\n            ...params.userMetadata,\n            ...STAGEHAND_SESSION_METADATA,\n          },\n        });\n      } catch {\n        await extension?.cleanup().catch(() => undefined);\n        throw new BrowserbaseSessionError(\"Failed to create a Browserbase session\");\n      }\n\n      const sessionId = session.id.trim();\n      const cdpUrl = session.connectUrl.trim();\n      if (sessionId.length === 0 || cdpUrl.length === 0) {\n        await cleanupInvalidSession(browserbase, sessionId, extension);\n        throw new Error(\n          sessionId.length === 0\n            ? \"Browserbase session creation returned an empty session ID\"\n            : \"Browserbase session creation returned an empty connection URL\",\n        );\n      }\n\n      let sessionReleased = false;\n      let extensionCleaned = extension === undefined;\n      const connection = BrowserbaseSessionConnectionSchema.parse({ sessionId, cdpUrl });\n      return {\n        ...connection,\n        async close() {\n          let releaseError: unknown;\n          if (!sessionReleased) {\n            try {\n              await browserbase.releaseSession(sessionId);\n              sessionReleased = true;\n            } catch (error) {\n              releaseError = error;\n            }\n          }\n\n          let extensionCleanupError: unknown;\n          if (!extensionCleaned && extension) {\n            try {\n              await extension.cleanup();\n              extensionCleaned = true;\n            } catch (error) {\n              extensionCleanupError = error;\n            }\n          }\n\n          if (releaseError) throw releaseError;\n          if (extensionCleanupError) throw extensionCleanupError;\n        },\n      };\n    },\n    async connectSession(sessionId) {\n      const normalizedSessionId = sessionId.trim();\n      if (normalizedSessionId.length === 0) {\n        throw new BrowserbaseSessionError(\"A Browserbase session ID is required\");\n      }\n\n      let session: Awaited<ReturnType<BrowserbaseApiClient[\"retrieveSession\"]>>;\n      try {\n        session = await browserbase.retrieveSession(normalizedSessionId);\n      } catch {\n        throw new BrowserbaseSessionError(\"Failed to retrieve the Browserbase session\");\n      }\n      const cdpUrl = session.connectUrl?.trim();\n      if (!cdpUrl) {\n        throw new BrowserbaseSessionError(\"Browserbase session is not available for connection\");\n      }\n      let sessionReleased = false;\n      const connection = BrowserbaseSessionConnectionSchema.parse({\n        sessionId: session.id.trim() || normalizedSessionId,\n        cdpUrl,\n        ...(session.region === undefined ? {} : { region: session.region }),\n      });\n      return {\n        ...connection,\n        async close() {\n          if (sessionReleased) return;\n          await browserbase.releaseSession(connection.sessionId);\n          sessionReleased = true;\n        },\n      };\n    },\n  };\n}\n\nexport function createBrowserbaseApiClient(\n  apiKey: string,\n  baseUrl: string,\n  clientOptions: BrowserbaseClientOptions = {},\n  createSdk: BrowserbaseSdkFactory = (key, baseURL, options) =>\n    new Browserbase({ ...options, apiKey: key, baseURL }),\n): BrowserbaseApiClient {\n  const sdk = createSdk(apiKey, baseUrl, clientOptions);\n  const extensionClient = createBrowserbaseExtensionClient(apiKey, () => sdk);\n\n  return {\n    ...extensionClient,\n    async createSession(params) {\n      const session = await sdk.sessions.create(params as Browserbase.SessionCreateParams);\n      return BrowserbaseSessionCreateResultSchema.parse(session);\n    },\n    async retrieveSession(sessionId) {\n      const session = await sdk.sessions.retrieve(sessionId);\n      return BrowserbaseSessionRetrieveResultSchema.parse(session);\n    },\n    async releaseSession(sessionId) {\n      await sdk.sessions.update(sessionId, { status: \"REQUEST_RELEASE\" });\n    },\n  };\n}\n\nasync function cleanupInvalidSession(\n  browserbase: BrowserbaseApiClient,\n  sessionId: string,\n  extension: ProvisionedBrowserbaseExtension | undefined,\n): Promise<void> {\n  if (sessionId.length > 0) {\n    await browserbase.releaseSession(sessionId).catch(() => undefined);\n  }\n  await extension?.cleanup().catch(() => undefined);\n}\n","import Browserbase from \"@browserbasehq/sdk\";\nimport {\n  BrowserbaseFetchResultSchema,\n  BrowserbaseSearchResultSchema,\n  type BrowserbaseFetchResult,\n  type BrowserbaseSearchResult,\n} from \"../clientSchemas.js\";\n\nexport type BrowserbaseSearchParams = {\n  query: string;\n  numResults?: number;\n};\n\nexport type BrowserbaseFetchParams = {\n  url: string;\n  allowInsecureSsl?: boolean;\n  allowRedirects?: boolean;\n  format?: \"raw\" | \"json\" | \"markdown\";\n  proxies?: boolean;\n  schema?: Record<string, unknown>;\n};\n\nexport type BrowserbaseServicesClient = {\n  search(params: BrowserbaseSearchParams): Promise<BrowserbaseSearchResult>;\n  fetch(params: BrowserbaseFetchParams): Promise<BrowserbaseFetchResult>;\n};\n\ntype BrowserbaseSdk = {\n  search: {\n    web(params: BrowserbaseSearchParams): Promise<unknown>;\n  };\n  fetchAPI: {\n    create(params: BrowserbaseFetchParams): Promise<unknown>;\n  };\n};\ntype BrowserbaseSdkFactory = (apiKey: string, baseUrl: string) => BrowserbaseSdk;\n\nexport function createBrowserbaseServicesClient(\n  apiKey: string,\n  baseUrl: string,\n  createSdk: BrowserbaseSdkFactory = (key, baseURL) => new Browserbase({ apiKey: key, baseURL }),\n): BrowserbaseServicesClient {\n  const sdk = createSdk(apiKey, baseUrl);\n  return {\n    async search(params) {\n      return BrowserbaseSearchResultSchema.parse(await sdk.search.web(params));\n    },\n    async fetch(params) {\n      return BrowserbaseFetchResultSchema.parse(await sdk.fetchAPI.create(params));\n    },\n  };\n}\n","import { spawn, type ChildProcess } from \"node:child_process\";\nimport { access, mkdir, mkdtemp, rm, stat } from \"node:fs/promises\";\nimport { constants } from \"node:fs\";\nimport { createServer } from \"node:net\";\nimport { tmpdir } from \"node:os\";\nimport path from \"node:path\";\nimport type { LocalBrowserLaunchOptions } from \"../clientSchemas.js\";\nimport { abortable, abortableDelay, throwIfAborted } from \"../abort.js\";\n\nconst CHROME_POLL_INTERVAL_MS = 100;\nconst CHROME_REQUEST_TIMEOUT_MS = 100;\nconst CHROME_TERMINATION_TIMEOUT_MS = 3_000;\n\nexport const DEFAULT_CHROME_FLAGS = [\n  \"--disable-features=Translate,OptimizationHints,MediaRouter,DialMediaRouteProvider,\" +\n    \"CalculateNativeWinOcclusion,InterestFeedContentSuggestions,\" +\n    \"CertificateTransparencyComponentUpdater,AutofillServerCommunication,\" +\n    \"PrivacySandboxSettings4,RenderDocument\",\n  \"--disable-component-extensions-with-background-pages\",\n  \"--disable-background-networking\",\n  \"--disable-component-update\",\n  \"--disable-client-side-phishing-detection\",\n  \"--disable-sync\",\n  \"--metrics-recording-only\",\n  \"--disable-default-apps\",\n  \"--mute-audio\",\n  \"--no-default-browser-check\",\n  \"--no-first-run\",\n  \"--disable-backgrounding-occluded-windows\",\n  \"--disable-renderer-backgrounding\",\n  \"--disable-background-timer-throttling\",\n  \"--disable-ipc-flooding-protection\",\n  \"--password-store=basic\",\n  \"--use-mock-keychain\",\n  \"--force-fieldtrials=*BackgroundTracing/default/\",\n  \"--disable-hang-monitor\",\n  \"--disable-prompt-on-repost\",\n  \"--disable-domain-reliability\",\n  \"--propagate-iph-for-testing\",\n  \"--enable-unsafe-extension-debugging\",\n  \"--remote-allow-origins=*\",\n  \"--enable-features=WebMCP,WebMCPTesting,DevToolsWebMCPSupport\",\n] as const;\n\ntype ChromeProcessExit = {\n  code: number | null;\n  signal: NodeJS.Signals | null;\n  error?: Error;\n};\n\ntype ChromeProcessMonitor = {\n  spawned: Promise<void>;\n  exited: Promise<ChromeProcessExit>;\n  currentExit(): ChromeProcessExit | undefined;\n};\n\ntype LocalBrowserLauncherDependencies = {\n  platform: NodeJS.Platform;\n  env: NodeJS.ProcessEnv;\n  getuid: (() => number) | undefined;\n  isExecutableFile(filePath: string): Promise<boolean>;\n  mkdir(directory: string, options: { recursive: true; mode: number }): Promise<string | undefined>;\n  mkdtemp(prefix: string): Promise<string>;\n  rm(directory: string, options: { force: true; recursive: true }): Promise<void>;\n  spawnChrome(executablePath: string, args: string[], options: SpawnChromeOptions): ChildProcess;\n  fetch: typeof globalThis.fetch;\n  findAvailablePort(): Promise<number>;\n  assertPortAvailable(port: number): Promise<void>;\n  signalProcess(pid: number, signal: NodeJS.Signals): void;\n  runTaskkill(pid: number, force: boolean): Promise<void>;\n};\n\ntype SpawnChromeOptions = {\n  detached: boolean;\n  env: NodeJS.ProcessEnv;\n};\n\nconst defaultDependencies: LocalBrowserLauncherDependencies = {\n  platform: process.platform,\n  env: process.env,\n  getuid: process.getuid,\n  isExecutableFile,\n  mkdir,\n  mkdtemp,\n  rm,\n  spawnChrome: (executablePath, args, options) =>\n    spawn(executablePath, args, {\n      detached: options.detached,\n      env: options.env,\n      stdio: \"ignore\",\n    }),\n  fetch: globalThis.fetch,\n  findAvailablePort,\n  assertPortAvailable,\n  signalProcess: (pid, signal) => process.kill(pid, signal),\n  runTaskkill,\n};\n\nexport type LocalBrowserLauncher = (\n  options: LocalBrowserLaunchOptions,\n  signal?: AbortSignal,\n) => Promise<{ cdpUrl: string; close: () => Promise<void> }>;\n\nexport async function launchLocalBrowser(\n  options: LocalBrowserLaunchOptions,\n  signal?: AbortSignal,\n): Promise<{ cdpUrl: string; close: () => Promise<void> }> {\n  return await launchChrome(options, signal, defaultDependencies);\n}\n\nasync function launchChrome(\n  options: LocalBrowserLaunchOptions,\n  signal: AbortSignal | undefined,\n  dependencies: LocalBrowserLauncherDependencies,\n): Promise<{ cdpUrl: string; close: () => Promise<void> }> {\n  validateLocalBrowserOptions(options);\n  throwIfAborted(signal);\n\n  const chromePath = await findChromePath(options.executablePath, dependencies);\n  const port = await resolveChromePort(options.port, dependencies);\n  const { userDataDir, removeProfile } = await resolveChromeProfile(options, dependencies);\n\n  let child: ChildProcess | undefined;\n  let close: (() => Promise<void>) | undefined;\n  try {\n    throwIfAborted(signal);\n    const args = localBrowserChromeFlags(\n      options,\n      port,\n      userDataDir,\n      shouldDisableSandbox(options, dependencies),\n    );\n    child = dependencies.spawnChrome(chromePath, args, {\n      detached: dependencies.platform !== \"win32\",\n      env: dependencies.env,\n    });\n    const monitor = monitorChromeProcess(child);\n    close = memoizedChromeClose(child, monitor, userDataDir, removeProfile, dependencies);\n    await abortable(monitor.spawned, signal);\n\n    const cdpUrl = `http://127.0.0.1:${port}`;\n    await waitForChrome(cdpUrl, monitor, signal, dependencies.fetch);\n    return { cdpUrl, close };\n  } catch (error) {\n    if (close) {\n      try {\n        await close();\n      } catch (cleanupError) {\n        throw new AggregateError(\n          [error, cleanupError],\n          \"Chrome launch failed and browser cleanup also failed\",\n          { cause: error },\n        );\n      }\n    } else if (removeProfile) {\n      try {\n        await dependencies.rm(userDataDir, { force: true, recursive: true });\n      } catch (cleanupError) {\n        throw new AggregateError(\n          [error, cleanupError],\n          \"Chrome launch failed and profile cleanup also failed\",\n          { cause: error },\n        );\n      }\n    }\n    throw error;\n  }\n}\n\nasync function resolveChromeProfile(\n  options: LocalBrowserLaunchOptions,\n  dependencies: Pick<LocalBrowserLauncherDependencies, \"mkdir\" | \"mkdtemp\">,\n): Promise<{ userDataDir: string; removeProfile: boolean }> {\n  if (options.userDataDir !== undefined && options.userDataDir !== \"\") {\n    await dependencies.mkdir(options.userDataDir, { recursive: true, mode: 0o700 });\n    return { userDataDir: options.userDataDir, removeProfile: false };\n  }\n  const userDataDir = await dependencies.mkdtemp(path.join(tmpdir(), \"stagehand-chrome-\"));\n  return {\n    userDataDir,\n    removeProfile: options.preserveUserDataDir !== true,\n  };\n}\n\nexport function localBrowserChromeFlags(\n  options: LocalBrowserLaunchOptions,\n  port: number,\n  userDataDir: string,\n  disableSandbox: boolean,\n): string[] {\n  const ignoredDefaultArgs = options.ignoreDefaultArgs;\n  const ignoredFlags = new Set(Array.isArray(ignoredDefaultArgs) ? ignoredDefaultArgs : []);\n  const includeDefaults = ignoredDefaultArgs !== true;\n  const viewport = options.viewport ?? { width: 1280, height: 800 };\n  const windowSizeFlag = `--window-size=${viewport.width},${viewport.height}`;\n\n  return [\n    ...(includeDefaults ? selectedChromeFlags(DEFAULT_CHROME_FLAGS, ignoredFlags) : []),\n    ...(options.viewport !== undefined || (includeDefaults && !ignoredFlags.has(windowSizeFlag))\n      ? [windowSizeFlag]\n      : []),\n    `--remote-debugging-port=${port}`,\n    `--user-data-dir=${userDataDir}`,\n    ...(options.headless === true ? [\"--headless\"] : []),\n    ...(options.devtools ? [\"--auto-open-devtools-for-tabs\"] : []),\n    ...(disableSandbox ? [\"--no-sandbox\"] : []),\n    ...(options.proxy ? [`--proxy-server=${options.proxy.server}`] : []),\n    ...(options.proxy?.bypass ? [`--proxy-bypass-list=${options.proxy.bypass}`] : []),\n    ...(options.locale ? [`--lang=${options.locale}`] : []),\n    ...(options.deviceScaleFactor === undefined\n      ? []\n      : [`--force-device-scale-factor=${options.deviceScaleFactor}`]),\n    ...(options.hasTouch === true ? [\"--touch-events=enabled\"] : []),\n    ...(options.ignoreHTTPSErrors === true ? [\"--ignore-certificate-errors\"] : []),\n    ...(options.args ?? []),\n    \"about:blank\",\n  ];\n}\n\nfunction selectedChromeFlags(\n  flags: readonly string[],\n  ignoredFlags: ReadonlySet<string>,\n): string[] {\n  return flags.filter((flag) => !ignoredFlags.has(flag));\n}\n\nfunction validateLocalBrowserOptions(options: LocalBrowserLaunchOptions): void {\n  if (\n    options.port !== undefined &&\n    (!Number.isInteger(options.port) || options.port < 1 || options.port > 65_535)\n  ) {\n    throw new Error(\"Chrome port must be an integer between 1 and 65535\");\n  }\n  if (\n    options.viewport !== undefined &&\n    (!Number.isInteger(options.viewport.width) ||\n      !Number.isInteger(options.viewport.height) ||\n      options.viewport.width <= 0 ||\n      options.viewport.height <= 0)\n  ) {\n    throw new Error(\"Chrome viewport dimensions must be positive integers\");\n  }\n  if (\n    options.deviceScaleFactor !== undefined &&\n    (!Number.isFinite(options.deviceScaleFactor) || options.deviceScaleFactor <= 0)\n  ) {\n    throw new Error(\"Chrome device scale factor must be positive and finite\");\n  }\n  if (options.proxy !== undefined) {\n    if (options.proxy.server.length === 0) {\n      throw new Error(\"Chrome proxy server is required\");\n    }\n    if (options.proxy.username !== undefined || options.proxy.password !== undefined) {\n      throw new Error(\"Authenticated local browser proxies are not supported yet\");\n    }\n  }\n}\n\nasync function findChromePath(\n  explicitPath: string | undefined,\n  dependencies: Pick<LocalBrowserLauncherDependencies, \"platform\" | \"env\" | \"isExecutableFile\">,\n): Promise<string> {\n  if (explicitPath !== undefined) {\n    if (await dependencies.isExecutableFile(explicitPath)) return explicitPath;\n    throw new Error(`Chrome executable ${JSON.stringify(explicitPath)} does not exist`);\n  }\n\n  const configuredPath = dependencies.env.CHROME_PATH;\n  if (configuredPath && (await dependencies.isExecutableFile(configuredPath))) {\n    return configuredPath;\n  }\n\n  const candidates = chromeCandidates(dependencies.platform, dependencies.env);\n  for (const candidate of candidates) {\n    if (await dependencies.isExecutableFile(candidate)) return candidate;\n  }\n  throw new Error(\"Chrome installation not found; set CHROME_PATH\");\n}\n\nfunction chromeCandidates(platform: NodeJS.Platform, env: NodeJS.ProcessEnv): string[] {\n  if (platform === \"darwin\") {\n    return [\n      \"/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary\",\n      \"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome\",\n      \"/Applications/Google Chrome Beta.app/Contents/MacOS/Google Chrome Beta\",\n      \"/Applications/Chromium.app/Contents/MacOS/Chromium\",\n    ];\n  }\n  if (platform === \"win32\") {\n    const roots = [env.LOCALAPPDATA, env.PROGRAMFILES, env[\"PROGRAMFILES(X86)\"]].filter(\n      (root): root is string => Boolean(root),\n    );\n    const suffixes = [\n      [\"Google\", \"Chrome SxS\", \"Application\", \"chrome.exe\"],\n      [\"Google\", \"Chrome\", \"Application\", \"chrome.exe\"],\n    ];\n    return roots.flatMap((root) => suffixes.map((suffix) => path.win32.join(root, ...suffix)));\n  }\n  if (platform === \"linux\") {\n    const directories = (env.PATH ?? \"\").split(path.delimiter).filter(Boolean);\n    const names = [\"google-chrome-stable\", \"google-chrome\", \"chromium-browser\", \"chromium\"];\n    return names.flatMap((name) => directories.map((directory) => path.join(directory, name)));\n  }\n  throw new Error(`Chrome launching is not supported on ${platform}`);\n}\n\nasync function isExecutableFile(filePath: string): Promise<boolean> {\n  try {\n    const info = await stat(filePath);\n    if (!info.isFile()) return false;\n    if (process.platform !== \"win32\") await access(filePath, constants.X_OK);\n    return true;\n  } catch {\n    return false;\n  }\n}\n\nasync function resolveChromePort(\n  requestedPort: number | undefined,\n  dependencies: Pick<LocalBrowserLauncherDependencies, \"assertPortAvailable\" | \"findAvailablePort\">,\n): Promise<number> {\n  if (requestedPort === undefined) return await dependencies.findAvailablePort();\n  await dependencies.assertPortAvailable(requestedPort);\n  return requestedPort;\n}\n\nasync function findAvailablePort(): Promise<number> {\n  return await inspectPort(0);\n}\n\nasync function assertPortAvailable(port: number): Promise<void> {\n  try {\n    await inspectPort(port);\n  } catch (error) {\n    throw new Error(`Chrome debugging port ${port} is already in use`, { cause: error });\n  }\n}\n\nasync function inspectPort(port: number): Promise<number> {\n  const server = createServer();\n  server.unref();\n  try {\n    return await new Promise<number>((resolve, reject) => {\n      server.once(\"error\", reject);\n      server.listen(port, \"127.0.0.1\", () => {\n        const address = server.address();\n        if (typeof address === \"object\" && address !== null) resolve(address.port);\n        else reject(new Error(\"Failed to resolve Chrome debugging port\"));\n      });\n    });\n  } finally {\n    await new Promise<void>((resolve, reject) => {\n      if (!server.listening) {\n        resolve();\n        return;\n      }\n      server.close((error) => (error ? reject(error) : resolve()));\n    });\n  }\n}\n\nfunction shouldDisableSandbox(\n  options: LocalBrowserLaunchOptions,\n  dependencies: Pick<LocalBrowserLauncherDependencies, \"platform\" | \"env\" | \"getuid\">,\n): boolean {\n  return (\n    Boolean(dependencies.env.CI) ||\n    options.chromiumSandbox === false ||\n    (dependencies.platform === \"linux\" && dependencies.getuid?.() === 0)\n  );\n}\n\nfunction monitorChromeProcess(child: ChildProcess): ChromeProcessMonitor {\n  let currentExit: ChromeProcessExit | undefined;\n  let resolveSpawned!: () => void;\n  let rejectSpawned!: (error: Error) => void;\n  let resolveExited!: (exit: ChromeProcessExit) => void;\n  const spawned = new Promise<void>((resolve, reject) => {\n    resolveSpawned = resolve;\n    rejectSpawned = reject;\n  });\n  const exited = new Promise<ChromeProcessExit>((resolve) => {\n    resolveExited = resolve;\n  });\n\n  child.once(\"spawn\", resolveSpawned);\n  child.once(\"error\", (error) => {\n    rejectSpawned(error);\n    if (!currentExit) {\n      currentExit = { code: null, signal: null, error };\n      resolveExited(currentExit);\n    }\n  });\n  child.once(\"exit\", (code, signal) => {\n    if (!currentExit) {\n      currentExit = { code, signal };\n      resolveExited(currentExit);\n    }\n  });\n\n  if (child.exitCode !== null || child.signalCode !== null) {\n    currentExit = { code: child.exitCode, signal: child.signalCode };\n    resolveSpawned();\n    resolveExited(currentExit);\n  }\n\n  return { spawned, exited, currentExit: () => currentExit };\n}\n\nasync function waitForChrome(\n  cdpUrl: string,\n  monitor: ChromeProcessMonitor,\n  signal: AbortSignal | undefined,\n  fetchImplementation: typeof globalThis.fetch,\n): Promise<void> {\n  while (true) {\n    throwIfAborted(signal);\n    const exited = monitor.currentExit();\n    if (exited) throw chromeExitedBeforeReadyError(exited);\n\n    const outcome = await abortable(\n      Promise.race([\n        chromeDebuggingReady(cdpUrl, signal, fetchImplementation).then((ready) => ({\n          kind: \"ready\" as const,\n          ready,\n        })),\n        monitor.exited.then((exit) => ({ kind: \"exit\" as const, exit })),\n      ]),\n      signal,\n    );\n    if (outcome.kind === \"exit\") throw chromeExitedBeforeReadyError(outcome.exit);\n    if (outcome.ready) {\n      const exitAfterReadiness = monitor.currentExit();\n      if (exitAfterReadiness) throw chromeExitedBeforeReadyError(exitAfterReadiness);\n      return;\n    }\n\n    await abortable(\n      Promise.race([\n        abortableDelay(CHROME_POLL_INTERVAL_MS, signal),\n        monitor.exited.then((exit) => {\n          throw chromeExitedBeforeReadyError(exit);\n        }),\n      ]),\n      signal,\n    );\n  }\n}\n\nasync function chromeDebuggingReady(\n  cdpUrl: string,\n  signal: AbortSignal | undefined,\n  fetchImplementation: typeof globalThis.fetch,\n): Promise<boolean> {\n  const requestController = new AbortController();\n  const timeoutId = setTimeout(() => requestController.abort(), CHROME_REQUEST_TIMEOUT_MS);\n  const requestSignal = signal\n    ? AbortSignal.any([signal, requestController.signal])\n    : requestController.signal;\n  try {\n    const response = await fetchImplementation(`${cdpUrl.replace(/\\/$/, \"\")}/json/version`, {\n      signal: requestSignal,\n    });\n    if (!response.ok) return false;\n    const version: unknown = await response.json();\n    return (\n      typeof version === \"object\" &&\n      version !== null &&\n      \"webSocketDebuggerUrl\" in version &&\n      typeof version.webSocketDebuggerUrl === \"string\" &&\n      version.webSocketDebuggerUrl.trim().length > 0\n    );\n  } catch {\n    throwIfAborted(signal);\n    return false;\n  } finally {\n    clearTimeout(timeoutId);\n  }\n}\n\nfunction chromeExitedBeforeReadyError(exit: ChromeProcessExit): Error {\n  if (exit.error) {\n    return new Error(`Chrome exited before its debugging port was ready: ${exit.error.message}`, {\n      cause: exit.error,\n    });\n  }\n  const detail = exit.signal ? `signal ${exit.signal}` : `code ${exit.code ?? \"unknown\"}`;\n  return new Error(`Chrome exited before its debugging port was ready with ${detail}`);\n}\n\nfunction memoizedChromeClose(\n  child: ChildProcess,\n  monitor: ChromeProcessMonitor,\n  userDataDir: string,\n  removeProfile: boolean,\n  dependencies: LocalBrowserLauncherDependencies,\n): () => Promise<void> {\n  let closePromise: Promise<void> | undefined;\n  return () => {\n    closePromise ??= closeChrome(child, monitor, userDataDir, removeProfile, dependencies);\n    return closePromise;\n  };\n}\n\nasync function closeChrome(\n  child: ChildProcess,\n  monitor: ChromeProcessMonitor,\n  userDataDir: string,\n  removeProfile: boolean,\n  dependencies: LocalBrowserLauncherDependencies,\n): Promise<void> {\n  let processError: unknown;\n  try {\n    await closeChromeProcess(child, monitor, dependencies);\n  } catch (error) {\n    processError = error;\n  }\n\n  let profileError: unknown;\n  if (removeProfile) {\n    try {\n      await dependencies.rm(userDataDir, { force: true, recursive: true });\n    } catch (error) {\n      profileError = error;\n    }\n  }\n\n  if (processError && profileError) {\n    throw new AggregateError(\n      [processError, profileError],\n      \"Chrome termination and profile cleanup both failed\",\n    );\n  }\n  if (processError) throw processError;\n  if (profileError) throw profileError;\n}\n\nasync function closeChromeProcess(\n  child: ChildProcess,\n  monitor: ChromeProcessMonitor,\n  dependencies: LocalBrowserLauncherDependencies,\n): Promise<void> {\n  if (monitor.currentExit()) return;\n  const pid = child.pid;\n  if (pid === undefined) return;\n\n  try {\n    await terminateChromeProcess(pid, false, dependencies);\n  } catch (error) {\n    if (!isFinishedProcessError(error)) throw error;\n  }\n  if (await waitForExit(monitor, CHROME_TERMINATION_TIMEOUT_MS)) return;\n\n  try {\n    await terminateChromeProcess(pid, true, dependencies);\n  } catch (error) {\n    if (!isFinishedProcessError(error)) throw error;\n  }\n  await monitor.exited;\n}\n\nasync function terminateChromeProcess(\n  pid: number,\n  force: boolean,\n  dependencies: Pick<\n    LocalBrowserLauncherDependencies,\n    \"platform\" | \"runTaskkill\" | \"signalProcess\"\n  >,\n): Promise<void> {\n  if (dependencies.platform === \"win32\") {\n    await dependencies.runTaskkill(pid, force);\n    return;\n  }\n  dependencies.signalProcess(-pid, force ? \"SIGKILL\" : \"SIGTERM\");\n}\n\nasync function waitForExit(monitor: ChromeProcessMonitor, timeoutMs: number): Promise<boolean> {\n  if (monitor.currentExit()) return true;\n  return await new Promise<boolean>((resolve) => {\n    const timeoutId = setTimeout(() => resolve(false), timeoutMs);\n    void monitor.exited.then(() => {\n      clearTimeout(timeoutId);\n      resolve(true);\n    });\n  });\n}\n\nfunction isFinishedProcessError(error: unknown): boolean {\n  return (\n    typeof error === \"object\" &&\n    error !== null &&\n    \"code\" in error &&\n    (error.code === \"ESRCH\" || error.code === 128)\n  );\n}\n\nasync function runTaskkill(pid: number, force: boolean): Promise<void> {\n  const args = [\"/PID\", String(pid), \"/T\", ...(force ? [\"/F\"] : [])];\n  const taskkill = spawn(\"taskkill\", args, { stdio: \"ignore\" });\n  await new Promise<void>((resolve, reject) => {\n    taskkill.once(\"error\", reject);\n    taskkill.once(\"exit\", (code) => {\n      if (code === 0) resolve();\n      else\n        reject(\n          Object.assign(new Error(`taskkill exited with code ${code ?? \"unknown\"}`), { code }),\n        );\n    });\n  });\n}\n\n/** @internal */\nexport function createLocalBrowserLauncherForTest(\n  overrides: Partial<LocalBrowserLauncherDependencies>,\n): LocalBrowserLauncher {\n  const dependencies = { ...defaultDependencies, ...overrides };\n  return async (options, signal) => await launchChrome(options, signal, dependencies);\n}\n","import { abortable } from \"./abort.js\";\n\nexport const STAGEHAND_INIT_TIMEOUT_MS = 60_000;\n\nexport async function withStagehandInitDeadline<T>(\n  operation: (signal: AbortSignal) => Promise<T>,\n): Promise<T> {\n  const controller = new AbortController();\n  const timeoutId = setTimeout(() => {\n    controller.abort(\n      new Error(`Stagehand initialization timed out after ${STAGEHAND_INIT_TIMEOUT_MS}ms`),\n    );\n  }, STAGEHAND_INIT_TIMEOUT_MS);\n\n  try {\n    return await abortable(operation(controller.signal), controller.signal);\n  } finally {\n    clearTimeout(timeoutId);\n  }\n}\n","import type { StagehandInitParams } from \"@browserbasehq/stagehand-protocol/types\";\nimport {\n  BrowserbaseConnectOptionsSchema,\n  BrowserbaseFetchOptionsSchema,\n  BrowserbaseLaunchOptionsSchema,\n  BrowserbaseSearchOptionsSchema,\n  LocalBrowserConnectOptionsSchema,\n  LocalBrowserLaunchOptionsSchema,\n} from \"../clientSchemas.js\";\nimport {\n  claimStagehandBrowserHandle,\n  createStagehandBrowserHandle,\n  invalidateStagehandBrowserHandle,\n  isStagehandBrowser,\n  releaseStagehandBrowserHandle,\n  type BrowserbaseBrowser,\n  type LocalBrowser,\n  type StagehandBrowser,\n  type StagehandBrowserOrigin,\n  type StagehandBrowserProvider,\n} from \"./index.js\";\nimport { CDPClient, CDPConnectionClosedError, type CDPClientOptions } from \"../cdpClient.js\";\nimport {\n  createBrowserbaseSessionClient,\n  type BrowserbaseSessionClientFactory,\n} from \"./browserbaseSession.js\";\nimport {\n  createBrowserbaseServicesClient,\n  type BrowserbaseServicesClient,\n} from \"./browserbaseServices.js\";\nimport { launchLocalBrowser, type LocalBrowserLauncher } from \"./localBrowser.js\";\nimport { STAGEHAND_EXTENSION_DIRECTORY_PATH } from \"../extensionAssets.js\";\nimport { abortable } from \"../abort.js\";\nimport { withStagehandInitDeadline } from \"../timeouts.js\";\n\nexport { isStagehandBrowser };\nexport type { BrowserbaseBrowser, LocalBrowser, StagehandBrowser } from \"./index.js\";\n\nexport type StagehandWorkerInitMetadata = {\n  browserCdpUrl?: string;\n  apiKey?: string;\n  browser?: StagehandInitParams[\"browser\"];\n};\n\nexport type ClaimedStagehandBrowser = {\n  cdpClient: CDPClient;\n  workerInitMetadata: StagehandWorkerInitMetadata;\n};\n\ntype BrowserFactoryDependencies = {\n  launchLocalBrowser?: LocalBrowserLauncher;\n  createBrowserbaseSessionClient?: BrowserbaseSessionClientFactory;\n  createBrowserbaseServicesClient?: (apiKey: string, baseUrl: string) => BrowserbaseServicesClient;\n  connectCdp?: (options: CDPClientOptions) => Promise<CDPClient>;\n};\n\ntype BrowserConnectionSource = {\n  cdpUrl: string;\n  keepAlive: boolean;\n  close?: () => Promise<void> | void;\n};\n\nfunction createBrowserFactories(dependencies: BrowserFactoryDependencies = {}): {\n  localBrowser: LocalBrowser;\n  browserbase: BrowserbaseBrowser;\n} {\n  const launchLocal = dependencies.launchLocalBrowser ?? launchLocalBrowser;\n  const createBrowserbase =\n    dependencies.createBrowserbaseSessionClient ?? createBrowserbaseSessionClient;\n  const createBrowserbaseServices =\n    dependencies.createBrowserbaseServicesClient ?? createBrowserbaseServicesClient;\n  const connectCdp = dependencies.connectCdp ?? ((options) => CDPClient.connect(options));\n\n  return {\n    localBrowser: {\n      async launch(input = {}) {\n        const options = LocalBrowserLaunchOptionsSchema.parse(input);\n        if (options.acceptDownloads === true && options.downloadsPath === undefined) {\n          throw new Error(\"downloadsPath is required when acceptDownloads is true\");\n        }\n        return await withStagehandInitDeadline(async (signal) => {\n          const launchPromise = launchLocal(options, signal);\n          let launched: Awaited<typeof launchPromise>;\n          try {\n            launched = await abortable(launchPromise, signal);\n          } catch (error) {\n            if (signal.aborted && options.keepAlive !== true) {\n              // A launcher may finish after the deadline; close that late-owned browser.\n              void launchPromise.then((lateBrowser) => lateBrowser.close()).catch(() => undefined);\n            }\n            throw error;\n          }\n          const source: BrowserConnectionSource = {\n            cdpUrl: launched.cdpUrl,\n            keepAlive: options.keepAlive ?? false,\n            close: launched.close,\n          };\n          return await connectBrowser({\n            provider: \"local\",\n            origin: \"launched\",\n            source,\n            connectCdp,\n            extension: { extensionDir: STAGEHAND_EXTENSION_DIRECTORY_PATH },\n            signal,\n            afterConnect:\n              options.acceptDownloads === undefined && options.downloadsPath === undefined\n                ? undefined\n                : async (cdpClient, commandSignal) => {\n                    await cdpClient.sendCommand(\n                      \"Browser.setDownloadBehavior\",\n                      {\n                        behavior: options.acceptDownloads === false ? \"deny\" : \"allow\",\n                        ...(options.downloadsPath === undefined\n                          ? {}\n                          : { downloadPath: options.downloadsPath }),\n                      },\n                      undefined,\n                      commandSignal,\n                    );\n                  },\n            workerInitMetadata: {},\n          });\n        });\n      },\n\n      async connect(options) {\n        const parsed = LocalBrowserConnectOptionsSchema.parse(options);\n        const source: BrowserConnectionSource = {\n          cdpUrl: parsed.cdpUrl,\n          keepAlive: true,\n        };\n        return await withStagehandInitDeadline(async (signal) =>\n          connectBrowser({\n            provider: \"local\",\n            origin: \"connected\",\n            source,\n            connectCdp,\n            extension: { localExtensionDir: STAGEHAND_EXTENSION_DIRECTORY_PATH },\n            signal,\n            headers: parsed.headers,\n            workerInitMetadata: { browserCdpUrl: parsed.extensionCdpUrl },\n          }),\n        );\n      },\n    },\n\n    browserbase: {\n      async launch(input) {\n        const { apiKey, baseUrl, clientOptions, ...sessionOptions } =\n          BrowserbaseLaunchOptionsSchema.parse(input);\n        return await withStagehandInitDeadline(async (signal) => {\n          const sessionPromise = createBrowserbase(apiKey, baseUrl, clientOptions).createSession(\n            sessionOptions,\n          );\n          let session: Awaited<typeof sessionPromise>;\n          try {\n            session = await abortable(sessionPromise, signal);\n          } catch (error) {\n            if (signal.aborted && sessionOptions.keepAlive !== true) {\n              // A remote session may finish launching after the deadline; release it when owned.\n              void sessionPromise\n                .then((lateSession) => lateSession.close?.())\n                .catch(() => undefined);\n            }\n            throw error;\n          }\n          const source: BrowserConnectionSource = {\n            cdpUrl: session.cdpUrl,\n            keepAlive: sessionOptions.keepAlive ?? false,\n            close: session.close,\n          };\n          return await connectBrowser({\n            provider: \"browserbase\",\n            origin: \"launched\",\n            source,\n            connectCdp,\n            extension: { preloadedExtension: true },\n            signal,\n            workerInitMetadata: {\n              apiKey,\n              browser: {\n                sessionId: session.sessionId,\n                ...(sessionOptions.region === undefined ? {} : { region: sessionOptions.region }),\n              },\n            },\n          });\n        });\n      },\n\n      async connect(input) {\n        const options = BrowserbaseConnectOptionsSchema.parse(input);\n        const client = createBrowserbase(options.apiKey, options.baseUrl, options.clientOptions);\n        if (!client.connectSession) {\n          throw new Error(\"Browserbase session connection is not supported by this client\");\n        }\n        return await withStagehandInitDeadline(async (signal) => {\n          const session = await abortable(client.connectSession!(options.sessionId), signal);\n          const source: BrowserConnectionSource = {\n            cdpUrl: session.cdpUrl,\n            keepAlive: true,\n            close: session.close,\n          };\n          return await connectBrowser({\n            provider: \"browserbase\",\n            origin: \"connected\",\n            source,\n            connectCdp,\n            extension: { preloadedExtension: true },\n            signal,\n            workerInitMetadata: {\n              apiKey: options.apiKey,\n              browser: {\n                sessionId: session.sessionId,\n                ...(session.region === undefined ? {} : { region: session.region }),\n              },\n            },\n          });\n        });\n      },\n\n      async search(input) {\n        const { apiKey, baseUrl, ...params } = BrowserbaseSearchOptionsSchema.parse(input);\n        return await createBrowserbaseServices(apiKey, baseUrl).search(params);\n      },\n\n      async fetch(input) {\n        const { apiKey, baseUrl, ...params } = BrowserbaseFetchOptionsSchema.parse(input);\n        return await createBrowserbaseServices(apiKey, baseUrl).fetch(params);\n      },\n    },\n  };\n}\n\nconst factories = createBrowserFactories();\nexport const localBrowser = factories.localBrowser;\nexport const browserbase = factories.browserbase;\n\n/** @internal */\nexport function createBrowserFactoriesForTest(\n  dependencies: BrowserFactoryDependencies,\n): ReturnType<typeof createBrowserFactories> {\n  return createBrowserFactories(dependencies);\n}\n\n/** @internal */\nexport function claimStagehandBrowser(browser: StagehandBrowser): ClaimedStagehandBrowser {\n  return claimStagehandBrowserHandle<ClaimedStagehandBrowser>(browser);\n}\n\n/** @internal */\nexport function releaseStagehandBrowser(browser: StagehandBrowser): void {\n  releaseStagehandBrowserHandle(browser);\n}\n\n/** @internal */\nexport function invalidateStagehandBrowser(browser: StagehandBrowser): Promise<void> {\n  return invalidateStagehandBrowserHandle(browser);\n}\n\nasync function connectBrowser(options: {\n  provider: StagehandBrowserProvider;\n  origin: StagehandBrowserOrigin;\n  source: BrowserConnectionSource;\n  connectCdp: (options: CDPClientOptions) => Promise<CDPClient>;\n  extension:\n    | { extensionDir: string }\n    | { localExtensionDir: string }\n    | { preloadedExtension: true };\n  signal: AbortSignal;\n  afterConnect?: (cdpClient: CDPClient, signal: AbortSignal) => Promise<void>;\n  headers?: Record<string, string>;\n  workerInitMetadata: StagehandWorkerInitMetadata;\n}): Promise<StagehandBrowser> {\n  const ownsSource = options.origin === \"launched\" && !options.source.keepAlive;\n  let cdpClient: CDPClient | undefined;\n  try {\n    const connectionPromise = options.connectCdp({\n      cdpUrl: options.source.cdpUrl,\n      ...(options.headers === undefined ? {} : { headers: options.headers }),\n      ...options.extension,\n      serviceWorkerUrlIncludes: \"service-worker.js\",\n      signal: options.signal,\n    });\n    try {\n      cdpClient = await abortable(connectionPromise, options.signal);\n    } catch (error) {\n      if (options.signal.aborted) {\n        // An injected connector may ignore AbortSignal and resolve after the factory rejects.\n        void connectionPromise.then((lateClient) => lateClient.close()).catch(() => undefined);\n      }\n      throw error;\n    }\n    await options.afterConnect?.(cdpClient, options.signal);\n    const connectedClient = cdpClient;\n    const invalidate = async () => {\n      connectedClient.close();\n      if (ownsSource) {\n        await closeSource(options.source);\n      }\n    };\n    const close = async () => {\n      try {\n        if (options.provider === \"local\" && options.origin === \"connected\") {\n          try {\n            await connectedClient.sendCommand(\"Browser.close\");\n          } catch (error) {\n            if (!(error instanceof CDPConnectionClosedError)) throw error;\n          }\n        } else {\n          await closeSource(options.source);\n        }\n      } finally {\n        connectedClient.close();\n      }\n    };\n    return createStagehandBrowserHandle({\n      provider: options.provider,\n      origin: options.origin,\n      sessionId: options.workerInitMetadata.browser?.sessionId,\n      attachment: {\n        cdpClient: connectedClient,\n        workerInitMetadata: options.workerInitMetadata,\n      } satisfies ClaimedStagehandBrowser,\n      close,\n      invalidate,\n    });\n  } catch (error) {\n    cdpClient?.close();\n    // No browser handle escaped this failed launch. A newly created remote\n    // session remains ours to release, even if successful handles stay alive\n    // after transport loss. Connecting to somebody else's session stays unowned.\n    if (ownsSource || (options.provider === \"browserbase\" && options.origin === \"launched\")) {\n      try {\n        await closeSource(options.source);\n      } catch (cleanupError) {\n        throw new AggregateError(\n          [error, cleanupError],\n          \"Browser connection failed and browser cleanup also failed\",\n          { cause: error },\n        );\n      }\n    }\n    throw error;\n  }\n}\n\nasync function closeSource(source: BrowserConnectionSource): Promise<void> {\n  await source.close?.();\n}\n","import type {\n  Action,\n  ActResult,\n  ObserveResult,\n  StagehandMetrics,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport type { BrowserContext } from \"./browserContext.js\";\nimport type {\n  StagehandClientActOptions,\n  StagehandClientExtractOptions,\n  StagehandClientObserveOptions,\n} from \"./clientSchemas.js\";\nimport type { Page } from \"./page.js\";\n\nexport type ExperimentalBatchOptions = {\n  /** Page exposed as `batch.page`. AI operations still default to the active page. */\n  page?: Page;\n  /**\n   * Overall callback deadline in milliseconds, enforced by the browser-side\n   * executor. The client waits `CALLBACK_BATCH_CLIENT_GRACE_MS` beyond it for\n   * the response. That local deadline fires when the executor never answers\n   * at all (stalled navigation, hung service worker), which the browser-side\n   * `timeout` cannot cover.\n   */\n  timeout?: number;\n};\n\n/** Slack the client grants the executor to report its own `timeout` before giving up locally. */\nexport const CALLBACK_BATCH_CLIENT_GRACE_MS = 15_000;\n\n/**\n * The batch round trip exceeded its client-side deadline. The executor may\n * still be running the callback; the browser session should be treated as\n * unresponsive rather than retried blindly.\n */\nexport class StagehandBatchTimeoutError extends Error {\n  readonly timeout: number;\n  readonly clientTimeout: number;\n\n  constructor(details: { timeout: number; clientTimeout: number }, options?: ErrorOptions) {\n    super(\n      `stagehand.experimentalBatch() received no response within ${details.clientTimeout}ms (callback timeout ${details.timeout}ms)`,\n      options,\n    );\n    this.name = \"StagehandBatchTimeoutError\";\n    this.timeout = details.timeout;\n    this.clientTimeout = details.clientTimeout;\n  }\n}\n\nexport type ExperimentalBatchBrowserContext = Omit<\n  BrowserContext,\n  \"close\" | \"rpcClient\" | \"clipboardRef\"\n>;\nexport type ExperimentalBatchExtractOptions = StagehandClientExtractOptions;\n\nexport type ExperimentalBatchContext = {\n  /** Page selected when the batch starts; this does not change the default target of AI operations. */\n  page: Page;\n  context: ExperimentalBatchBrowserContext;\n  act(instruction: string | Action, options?: StagehandClientActOptions): Promise<ActResult>;\n  observe(instruction?: string, options?: StagehandClientObserveOptions): Promise<ObserveResult>;\n  extract(instruction: string, options?: ExperimentalBatchExtractOptions): Promise<unknown>;\n  extract(\n    instruction: string,\n    schema: unknown,\n    options?: ExperimentalBatchExtractOptions,\n  ): Promise<unknown>;\n  metrics(): Promise<StagehandMetrics>;\n};\n\nexport type ExperimentalBatchCallback<Input, Result> = (\n  batch: ExperimentalBatchContext,\n  input: Input,\n) => Result | Promise<Result>;\n","import { RPCClient } from \"./rpcClient.js\";\nimport { RPCResponseTimeoutError } from \"./rpcErrors.js\";\nimport {\n  DefaultExtractDataSchema,\n  MAX_CALLBACK_BATCH_TIMEOUT_MS,\n  STAGEHAND_PROTOCOL_VERSION,\n  StagehandInitParamsSchema,\n} from \"@browserbasehq/stagehand-protocol/schemas\";\nimport { JSONRPCErrorObjectSchema } from \"@browserbasehq/stagehand-protocol/json-rpc/schemas\";\nimport {\n  StagehandMethods,\n  StagehandNotifications,\n} from \"@browserbasehq/stagehand-protocol/schema-registry\";\nimport type {\n  Action,\n  ActResult,\n  CallbackBatchResult,\n  DefaultExtractData,\n  ObserveResult,\n  StagehandMetrics,\n  StagehandRpcNotification,\n} from \"@browserbasehq/stagehand-protocol/types\";\nimport { z } from \"zod/v4\";\nimport { BrowserContext } from \"./browserContext.js\";\nimport { resolveBrowserbaseConnection } from \"./browserbaseConnection.js\";\nimport { registerBrowserbaseTransport } from \"./browserbaseRpc.js\";\nimport { serializeClientLocatorOptions } from \"./clientLocatorOptions.js\";\nimport {\n  StagehandClientActOptionsSchema,\n  StagehandClientExtractOptionsSchema,\n  StagehandCreateOptionsSchema,\n  StagehandClientObserveOptionsSchema,\n  type StagehandClientActOptions,\n  type StagehandClientExtractOptions,\n  type ResolvedStagehandClientLoggingConfig,\n  type ResolvedStagehandClientCreateConfig,\n  type StagehandCreateOptions,\n  type StagehandClientObserveOptions,\n} from \"./clientSchemas.js\";\nimport { CDPConnectionClosedError } from \"./cdpClient.js\";\nimport { STAGEHAND_SDK_CLIENT_INFO } from \"./sdkIdentity.js\";\nimport {\n  claimStagehandBrowser,\n  invalidateStagehandBrowser,\n  releaseStagehandBrowser,\n  type ClaimedStagehandBrowser,\n  type StagehandBrowser,\n} from \"./browser/factories.js\";\nimport { attachStagehandBrowserContext, detachStagehandBrowserContext } from \"./browser/index.js\";\nimport { withStagehandInitDeadline } from \"./timeouts.js\";\nimport {\n  CALLBACK_BATCH_CLIENT_GRACE_MS,\n  StagehandBatchTimeoutError,\n  type ExperimentalBatchCallback,\n  type ExperimentalBatchOptions,\n} from \"./batch.js\";\n\ntype ProtocolExtractResult = import(\"@browserbasehq/stagehand-protocol/types\").ExtractResult;\n\nexport type ExtractResult<Schema extends z.ZodType> = Omit<ProtocolExtractResult, \"data\"> & {\n  data: z.output<Schema>;\n};\n\nconst isZodSchema = (value: unknown): value is z.ZodType =>\n  typeof value === \"object\" &&\n  value !== null &&\n  \"parse\" in value &&\n  typeof value.parse === \"function\" &&\n  \"safeParse\" in value &&\n  typeof value.safeParse === \"function\";\n\n// setTimeout treats larger delays as 1ms; MAX_CALLBACK_BATCH_TIMEOUT_MS leaves 10s below this.\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nconst nativeFunctionSourcePattern =\n  /^\\s*function(?:\\s+[^()]*)?\\([^)]*\\)\\s*\\{\\s*\\[native code\\]\\s*\\}\\s*$/;\n\nexport class Stagehand {\n  isInitialized = false;\n  rpcClient: RPCClient | undefined;\n  removeNotificationListener: (() => void) | undefined;\n  removeClientLLMHandler: (() => void) | undefined;\n  private removeBrowserbaseTransport: (() => void) | undefined;\n  closePromise: Promise<void> | undefined;\n  initRequestStarted = false;\n\n  private constructor(\n    private readonly browserHandle: StagehandBrowser,\n    private readonly createConfig: ResolvedStagehandClientCreateConfig,\n  ) {}\n\n  static async create(input: StagehandCreateOptions): Promise<Stagehand> {\n    const { browser, ...createConfig } = StagehandCreateOptionsSchema.parse(input);\n    const claimedBrowser = claimStagehandBrowser(browser);\n    const stagehand = new Stagehand(browser, createConfig);\n    let lifecycleSignal: AbortSignal | undefined;\n    try {\n      await withStagehandInitDeadline((signal) => {\n        lifecycleSignal = signal;\n        return stagehand.initialize(claimedBrowser, signal);\n      });\n      return stagehand;\n    } catch (error) {\n      const initFailureIsAmbiguous =\n        lifecycleSignal?.aborted ||\n        (stagehand.initRequestStarted && !isDefinitiveRPCErrorResponse(error));\n      if (initFailureIsAmbiguous) {\n        try {\n          await invalidateStagehandBrowser(browser);\n        } catch (cleanupError) {\n          throw new AggregateError(\n            [error, cleanupError],\n            \"Stagehand initialization failed ambiguously and browser invalidation also failed\",\n            { cause: error },\n          );\n        }\n      } else {\n        releaseStagehandBrowser(browser);\n      }\n      throw error;\n    }\n  }\n\n  get browser(): StagehandBrowser {\n    return this.browserHandle;\n  }\n\n  get initialized(): boolean {\n    return this.isInitialized;\n  }\n\n  async metrics(): Promise<StagehandMetrics> {\n    return this.connectedRpcClient.send(StagehandMethods.stagehandMetrics, {});\n  }\n\n  async experimentalBatch<Result>(\n    callback: ExperimentalBatchCallback<undefined, Result>,\n  ): Promise<Awaited<Result>>;\n  async experimentalBatch<Input, Result>(\n    callback: ExperimentalBatchCallback<Input, Result>,\n    input: Input,\n    options?: ExperimentalBatchOptions,\n  ): Promise<Awaited<Result>>;\n  async experimentalBatch<Input, Result>(\n    callback: ExperimentalBatchCallback<Input, Result>,\n    input?: Input,\n    options: ExperimentalBatchOptions = {},\n  ): Promise<Awaited<Result>> {\n    if (typeof callback !== \"function\") {\n      throw new TypeError(\"stagehand.experimentalBatch() requires a callback function\");\n    }\n    if (options === null || typeof options !== \"object\" || Array.isArray(options)) {\n      throw new TypeError(\"stagehand.experimentalBatch() options must be an object\");\n    }\n    const parsedInput = input === undefined ? undefined : z.json().parse(input);\n    const timeout = options.timeout ?? 30_000;\n    if (!Number.isInteger(timeout) || timeout <= 0) {\n      throw new RangeError(\"stagehand.experimentalBatch() timeout must be a positive integer\");\n    }\n    if (timeout > MAX_CALLBACK_BATCH_TIMEOUT_MS) {\n      throw new RangeError(\n        `stagehand.experimentalBatch() timeout must not exceed ${MAX_CALLBACK_BATCH_TIMEOUT_MS} milliseconds`,\n      );\n    }\n    const callbackSource = Function.prototype.toString.call(callback);\n    if (nativeFunctionSourcePattern.test(callbackSource)) {\n      throw new TypeError(\"stagehand.experimentalBatch() callback must be serializable JavaScript\");\n    }\n    const clientTimeout = Math.min(timeout + CALLBACK_BATCH_CLIENT_GRACE_MS, MAX_TIMER_DELAY_MS);\n\n    let result: CallbackBatchResult;\n    try {\n      result = await this.connectedRpcClient.send(\n        StagehandMethods.stagehandCallbackBatch,\n        {\n          callbackSource,\n          ...(parsedInput === undefined ? {} : { input: parsedInput }),\n          options: {\n            ...(options.page ? { pageId: options.page.pageId } : {}),\n            timeout,\n          },\n        },\n        { responseTimeoutMs: clientTimeout },\n      );\n    } catch (error) {\n      if (error instanceof RPCResponseTimeoutError) {\n        throw new StagehandBatchTimeoutError({ timeout, clientTimeout }, { cause: error });\n      }\n      throw error;\n    }\n    return result.value as Awaited<Result>;\n  }\n\n  private async initialize(browser: ClaimedStagehandBrowser, signal: AbortSignal): Promise<void> {\n    const createConfig = this.createConfig;\n    const browserbaseConnection = resolveBrowserbaseConnection(\n      createConfig,\n      browser.workerInitMetadata,\n    );\n    const rpcClient = new RPCClient(browser.cdpClient);\n    this.rpcClient = rpcClient;\n\n    try {\n      this.removeBrowserbaseTransport = registerBrowserbaseTransport(\n        rpcClient,\n        browserbaseConnection,\n      );\n      this.removeNotificationListener = rpcClient.onNotification((notification) =>\n        handleStagehandNotification(notification, createConfig.logging),\n      );\n      if (createConfig.model && \"generate\" in createConfig.model) {\n        const { generate } = createConfig.model;\n        this.removeClientLLMHandler = rpcClient.onRequest(StagehandMethods.llmGenerate, (params) =>\n          generate(params),\n        );\n      }\n\n      this.initRequestStarted = true;\n      await rpcClient.sendStagehandInit(\n        stagehandCreateParamsForWorker(createConfig, browser, browserbaseConnection !== undefined),\n        signal,\n      );\n      attachStagehandBrowserContext(\n        this.browserHandle,\n        new BrowserContext(rpcClient, () => this.browserHandle.close()),\n      );\n    } catch (error) {\n      this.removeBrowserbaseTransport?.();\n      this.removeBrowserbaseTransport = undefined;\n      this.removeClientLLMHandler?.();\n      this.removeClientLLMHandler = undefined;\n      this.removeNotificationListener?.();\n      this.removeNotificationListener = undefined;\n      rpcClient.close(new Error(\"Stagehand initialization failed\", { cause: error }), {\n        closeTransport: false,\n      });\n      this.rpcClient = undefined;\n      throw error;\n    }\n\n    this.isInitialized = true;\n    this.closePromise = undefined;\n  }\n\n  async act(instruction: string, options?: StagehandClientActOptions): Promise<ActResult>;\n  async act(instruction: Action, options?: StagehandClientActOptions): Promise<ActResult>;\n  async act(instruction: string | Action, options?: StagehandClientActOptions): Promise<ActResult> {\n    const { page, ...clientOptions } = StagehandClientActOptionsSchema.parse(options ?? {});\n    const targetPage = page ?? (await this.browser.context.activePage());\n    if (!targetPage) throw new Error(\"Stagehand has no active page.\");\n    const protocolOptions = serializeClientLocatorOptions(\"act\", targetPage.pageId, clientOptions);\n    const response = await this.connectedRpcClient.send(StagehandMethods.stagehandAct, {\n      pageId: targetPage.pageId,\n      instruction,\n      ...(options === undefined ? {} : { options: protocolOptions }),\n    });\n\n    return response;\n  }\n\n  async observe(\n    instruction?: string,\n    options?: StagehandClientObserveOptions,\n  ): Promise<ObserveResult> {\n    const { page, ...clientOptions } = StagehandClientObserveOptionsSchema.parse(options ?? {});\n    const targetPage = page ?? (await this.browser.context.activePage());\n    if (!targetPage) throw new Error(\"Stagehand has no active page.\");\n    const protocolOptions = serializeClientLocatorOptions(\n      \"observe\",\n      targetPage.pageId,\n      clientOptions,\n    );\n    const response = await this.connectedRpcClient.send(StagehandMethods.stagehandObserve, {\n      pageId: targetPage.pageId,\n      ...(instruction === undefined ? {} : { instruction }),\n      ...(options === undefined ? {} : { options: protocolOptions }),\n    });\n\n    return response;\n  }\n\n  async extract(\n    instruction: string,\n    options?: StagehandClientExtractOptions,\n  ): Promise<ExtractResult<z.ZodType<DefaultExtractData>>>;\n  async extract<Schema extends z.ZodType>(\n    instruction: string,\n    schema: Schema,\n    options?: StagehandClientExtractOptions,\n  ): Promise<ExtractResult<Schema>>;\n  async extract<Schema extends z.ZodType | StagehandClientExtractOptions>(\n    instruction: string,\n    schema?: Schema,\n    options?: StagehandClientExtractOptions,\n  ): Promise<ExtractResult<z.ZodType>> {\n    const hasCustomSchema = isZodSchema(schema);\n    const resolvedSchema = hasCustomSchema ? schema : DefaultExtractDataSchema;\n    const resolvedOptions = hasCustomSchema ? options : schema;\n    const { page, ...clientOptions } = StagehandClientExtractOptionsSchema.parse(\n      resolvedOptions ?? {},\n    );\n    const targetPage = page ?? (await this.browser.context.activePage());\n    if (!targetPage) throw new Error(\"Stagehand has no active page.\");\n    const protocolOptions = serializeClientLocatorOptions(\n      \"extract\",\n      targetPage.pageId,\n      clientOptions,\n    );\n    const response = await this.connectedRpcClient.send(StagehandMethods.stagehandExtract, {\n      pageId: targetPage.pageId,\n      instruction,\n      ...(hasCustomSchema ? { schema: z.json().parse(z.toJSONSchema(resolvedSchema)) } : {}),\n      ...(resolvedOptions === undefined ? {} : { options: protocolOptions }),\n    });\n\n    return {\n      ...response,\n      data: resolvedSchema.parse(response.data),\n    };\n  }\n\n  close(): Promise<void> {\n    this.closePromise ??= (async () => {\n      let shouldReleaseBrowserClaim = !this.isInitialized;\n      try {\n        if (this.isInitialized) {\n          try {\n            await this.rpcClient?.send(StagehandMethods.stagehandClose, {});\n            shouldReleaseBrowserClaim = true;\n          } catch (error) {\n            if (!(error instanceof CDPConnectionClosedError)) throw error;\n            shouldReleaseBrowserClaim = true;\n          }\n        }\n      } finally {\n        this.removeBrowserbaseTransport?.();\n        this.removeBrowserbaseTransport = undefined;\n        this.removeClientLLMHandler?.();\n        this.removeClientLLMHandler = undefined;\n        this.removeNotificationListener?.();\n        this.removeNotificationListener = undefined;\n        this.rpcClient?.close(new Error(\"Stagehand closed\"), { closeTransport: false });\n        this.rpcClient = undefined;\n        detachStagehandBrowserContext(this.browserHandle);\n        if (shouldReleaseBrowserClaim) releaseStagehandBrowser(this.browserHandle);\n        this.isInitialized = false;\n      }\n    })();\n    return this.closePromise;\n  }\n\n  private get connectedRpcClient(): RPCClient {\n    if (!this.isInitialized || !this.rpcClient) {\n      throw new Error(\n        \"Stagehand is unavailable. Create a new instance with await Stagehand.create().\",\n      );\n    }\n    return this.rpcClient;\n  }\n}\n\nfunction isDefinitiveRPCErrorResponse(error: unknown): boolean {\n  return error instanceof Error && JSONRPCErrorObjectSchema.safeParse(error.cause).success;\n}\n\nfunction stagehandCreateParamsForWorker(\n  createConfig: ResolvedStagehandClientCreateConfig,\n  browser: ClaimedStagehandBrowser,\n  hasBrowserbaseConnection: boolean,\n) {\n  const { logging, model, apiKey: _apiKey, apiUrl: _apiUrl, ...protocolParams } = createConfig;\n  const protocolModel = model && \"generate\" in model ? { source: \"client\" as const } : model;\n\n  return StagehandInitParamsSchema.parse({\n    protocolVersion: STAGEHAND_PROTOCOL_VERSION,\n    clientInfo: STAGEHAND_SDK_CLIENT_INFO,\n    browserCdpUrl:\n      browser.workerInitMetadata.browserCdpUrl ?? browser.cdpClient.webSocketDebuggerUrl,\n    logLevel: logging.level,\n    ...protocolParams,\n    ...(browser.workerInitMetadata.browser === undefined\n      ? {}\n      : { browser: browser.workerInitMetadata.browser }),\n    ...(hasBrowserbaseConnection ? { browserbase: \"client\" } : {}),\n    ...(protocolModel === undefined ? {} : { model: protocolModel }),\n  });\n}\n\nconst LOG_LEVEL_PRIORITY = {\n  debug: 10,\n  info: 20,\n  warn: 30,\n  error: 40,\n  off: Number.POSITIVE_INFINITY,\n} as const;\n\nfunction handleStagehandNotification(\n  notification: StagehandRpcNotification,\n  logging: ResolvedStagehandClientLoggingConfig,\n): void {\n  if (notification.method !== StagehandNotifications.log.name) return;\n  const log = notification.params;\n  if (LOG_LEVEL_PRIORITY[log.level] < LOG_LEVEL_PRIORITY[logging.level]) return;\n\n  process.stderr.write(renderStagehandLog(log, logging.format) + \"\\n\");\n  if (!logging.onLog) return;\n\n  try {\n    const result = logging.onLog(log);\n    if (result && typeof result === \"object\" && \"then\" in result) {\n      void Promise.resolve(result).catch(reportOnLogError);\n    }\n  } catch (error) {\n    reportOnLogError(error);\n  }\n}\n\nfunction renderStagehandLog(\n  log: Extract<StagehandRpcNotification, { method: \"stagehand.log\" }>[\"params\"],\n  format: ResolvedStagehandClientLoggingConfig[\"format\"],\n): string {\n  if (format === \"json\") return JSON.stringify(log);\n\n  const data = Object.keys(log.data).length === 0 ? \"\" : ` ${JSON.stringify(log.data)}`;\n  return `[stagehand] ${log.level.toUpperCase()} ${log.message}${data}`;\n}\n\nfunction reportOnLogError(error: unknown): void {\n  const message = error instanceof Error ? error.message : String(error);\n  process.stderr.write(`[stagehand] ERROR onLog callback failed: ${message}\\n`);\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7],"mappings":"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"}