@browserbasehq/orca 3.7.2-preview.0 → 3.7.2-preview.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/dist/cjs/lib/inference.js +24 -18
  2. package/dist/cjs/lib/inference.js.map +1 -1
  3. package/dist/cjs/lib/v3/agent/tools/click.js +1 -1
  4. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  5. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js +1 -1
  6. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  7. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +2 -2
  8. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +6 -3
  10. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/tools/scroll.js +1 -1
  12. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/tools/type.js +1 -1
  14. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +5 -2
  16. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js +5 -7
  17. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  18. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +1 -1
  19. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  20. package/dist/cjs/lib/v3/api.d.ts +1 -1
  21. package/dist/cjs/lib/v3/api.js +2 -1
  22. package/dist/cjs/lib/v3/api.js.map +1 -1
  23. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +2 -20
  24. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  25. package/dist/cjs/lib/v3/launch/local.js +1 -1
  26. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  27. package/dist/cjs/lib/v3/llm/aisdk.js +3 -3
  28. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  29. package/dist/cjs/lib/v3/llm/anthropicOptions.d.ts +0 -6
  30. package/dist/cjs/lib/v3/llm/anthropicOptions.js +8 -5
  31. package/dist/cjs/lib/v3/llm/anthropicOptions.js.map +1 -1
  32. package/dist/cjs/lib/v3/runtimePaths.js +0 -1
  33. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  34. package/dist/cjs/lib/v3/types/public/api.js +3 -3
  35. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  36. package/dist/cjs/lib/v3/types/public/options.d.ts +8 -0
  37. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  38. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +39 -1
  39. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -1
  40. package/dist/cjs/lib/v3/v3.d.ts +8 -2
  41. package/dist/cjs/lib/v3/v3.js +36 -18
  42. package/dist/cjs/lib/v3/v3.js.map +1 -1
  43. package/dist/cjs/lib/version.d.ts +1 -1
  44. package/dist/cjs/lib/version.js +1 -1
  45. package/dist/cjs/lib/version.js.map +1 -1
  46. package/dist/esm/lib/inference.js +24 -18
  47. package/dist/esm/lib/inference.js.map +1 -1
  48. package/dist/esm/lib/v3/agent/tools/click.js +1 -1
  49. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  50. package/dist/esm/lib/v3/agent/tools/clickAndHold.js +1 -1
  51. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  52. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +2 -2
  53. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  54. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +7 -4
  55. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  56. package/dist/esm/lib/v3/agent/tools/scroll.js +1 -1
  57. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  58. package/dist/esm/lib/v3/agent/tools/type.js +1 -1
  59. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  60. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +5 -2
  61. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +5 -7
  62. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  63. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +1 -1
  64. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  65. package/dist/esm/lib/v3/api.d.ts +1 -1
  66. package/dist/esm/lib/v3/api.js +2 -1
  67. package/dist/esm/lib/v3/api.js.map +1 -1
  68. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +2 -20
  69. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  70. package/dist/esm/lib/v3/launch/local.js +1 -1
  71. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  72. package/dist/esm/lib/v3/llm/aisdk.js +3 -3
  73. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  74. package/dist/esm/lib/v3/llm/anthropicOptions.d.ts +0 -6
  75. package/dist/esm/lib/v3/llm/anthropicOptions.js +8 -5
  76. package/dist/esm/lib/v3/llm/anthropicOptions.js.map +1 -1
  77. package/dist/esm/lib/v3/runtimePaths.js +0 -1
  78. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  79. package/dist/esm/lib/v3/types/public/api.js +3 -3
  80. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  81. package/dist/esm/lib/v3/types/public/options.d.ts +8 -0
  82. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  83. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +39 -1
  84. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -1
  85. package/dist/esm/lib/v3/v3.d.ts +8 -2
  86. package/dist/esm/lib/v3/v3.js +36 -18
  87. package/dist/esm/lib/v3/v3.js.map +1 -1
  88. package/dist/esm/lib/version.d.ts +1 -1
  89. package/dist/esm/lib/version.js +1 -1
  90. package/dist/esm/lib/version.js.map +1 -1
  91. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"coordinateResolver.js","sourceRoot":"","sources":["../../../../../../../lib/v3/understudy/a11y/snapshot/coordinateResolver.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"../../cdp.js\";\nimport { Page } from \"../../page.js\";\nimport { executionContexts } from \"../../executionContextRegistry.js\";\nimport { a11yScriptSources } from \"../../../dom/build/a11yScripts.generated.js\";\nimport { buildA11yInvocation } from \"../../a11yInvocation.js\";\nimport type { ResolvedLocation } from \"../../../types/private/snapshot.js\";\nimport { listChildrenOf } from \"./focusSelectors.js\";\nimport { buildAbsoluteXPathFromChain } from \"./xpathUtils.js\";\n\n/**\n * Resolve deepest node for a page coordinate and compute its absolute XPath across frames.\n * More efficient than building a full hybrid snapshot when only a single node’s XPath is needed.\n */\nexport async function resolveXpathForLocation(\n page: Page,\n x: number,\n y: number,\n): Promise<ResolvedLocation | null> {\n const tree = page.getFullFrameTree();\n const parentByFrame = new Map<string, string | null>();\n (function index(n: Protocol.Page.FrameTree, parent: string | null) {\n parentByFrame.set(n.frame.id, parent);\n for (const c of n.childFrames ?? []) index(c, n.frame.id);\n })(tree, null);\n\n const iframeChain: Array<{\n parentSession: CDPSessionLike;\n iframeBackendNodeId: number;\n }> = [];\n\n let curFrameId = page.mainFrameId();\n let curSession = page.getSessionForFrame(curFrameId);\n let curX = x;\n let curY = y;\n\n for (let depth = 0; depth < 8; depth++) {\n try {\n await curSession.send(\"DOM.enable\").catch(() => {});\n\n let sx = 0;\n let sy = 0;\n try {\n await curSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await executionContexts\n .waitForMainWorld(curSession, curFrameId)\n .catch(() => {});\n const scrollExpr = buildA11yInvocation(\"getScrollOffsets\", []);\n const evalParams = ctxId\n ? {\n contextId: ctxId,\n expression: scrollExpr,\n returnByValue: true,\n }\n : { expression: scrollExpr, returnByValue: true };\n const { result } = await curSession.send<{\n result: { value?: { sx?: number; sy?: number } };\n }>(\"Runtime.evaluate\", evalParams);\n sx = Number(result?.value?.sx ?? 0);\n sy = Number(result?.value?.sy ?? 0);\n } catch {\n //\n }\n const xi = Math.max(0, Math.floor(curX + sx));\n const yi = Math.max(0, Math.floor(curY + sy));\n\n let res: { backendNodeId?: number; frameId?: string } | undefined;\n try {\n res = await curSession.send<{\n backendNodeId?: number;\n frameId?: string;\n }>(\"DOM.getNodeForLocation\", {\n x: xi,\n y: yi,\n includeUserAgentShadowDOM: false,\n ignorePointerEventsNone: false,\n });\n } catch {\n return null;\n }\n\n const be = res?.backendNodeId;\n const reportedFrameId = res?.frameId;\n if (\n typeof be === \"number\" &&\n reportedFrameId &&\n reportedFrameId !== curFrameId\n ) {\n const abs = await buildAbsoluteXPathFromChain(\n iframeChain,\n curSession,\n be,\n );\n return abs\n ? { frameId: reportedFrameId, backendNodeId: be, absoluteXPath: abs }\n : null;\n }\n\n if (typeof be !== \"number\") return null;\n\n let matchedChild: string | undefined;\n for (const fid of listChildrenOf(parentByFrame, curFrameId)) {\n try {\n const { backendNodeId } = await curSession.send<{\n backendNodeId?: number;\n }>(\"DOM.getFrameOwner\", { frameId: fid });\n if (backendNodeId === be) {\n matchedChild = fid;\n break;\n }\n } catch {\n continue;\n }\n }\n\n if (!matchedChild) {\n const abs = await buildAbsoluteXPathFromChain(\n iframeChain,\n curSession,\n be,\n );\n return abs\n ? { frameId: curFrameId, backendNodeId: be, absoluteXPath: abs }\n : null;\n }\n\n iframeChain.push({\n parentSession: curSession,\n iframeBackendNodeId: be,\n });\n\n let left = 0;\n let top = 0;\n try {\n const { object } = await curSession.send<{\n object: { objectId?: string };\n }>(\"DOM.resolveNode\", { backendNodeId: be });\n const objectId = object?.objectId;\n if (objectId) {\n const { result } = await curSession.send<{\n result: { value?: { left: number; top: number } };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: a11yScriptSources.getBoundingRectLite,\n returnByValue: true,\n });\n left = Number(result?.value?.left ?? 0);\n top = Number(result?.value?.top ?? 0);\n await curSession\n .send(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n } catch {\n //\n }\n curX = Math.max(0, curX - left);\n curY = Math.max(0, curY - top);\n curFrameId = matchedChild;\n curSession = page.getSessionForFrame(curFrameId);\n } catch {\n return null;\n }\n }\n return null;\n}\n"]}
1
+ {"version":3,"file":"coordinateResolver.js","sourceRoot":"","sources":["../../../../../../../lib/v3/understudy/a11y/snapshot/coordinateResolver.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC;AAChF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,IAAU,EACV,CAAS,EACT,CAAS;IAET,MAAM,IAAI,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACrC,MAAM,aAAa,GAAG,IAAI,GAAG,EAAyB,CAAC;IACvD,CAAC,SAAS,KAAK,CAAC,CAA0B,EAAE,MAAqB;QAC/D,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE;YAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEf,MAAM,WAAW,GAGZ,EAAE,CAAC;IAER,IAAI,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACpC,IAAI,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,IAAI,IAAI,GAAG,CAAC,CAAC;IAEb,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,EAAE,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAEpD,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,EAAE,GAAG,CAAC,CAAC;YACX,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACxD,MAAM,KAAK,GAAG,MAAM,iBAAiB;qBAClC,gBAAgB,CAAC,UAAU,EAAE,UAAU,CAAC;qBACxC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACnB,MAAM,UAAU,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;gBAC/D,MAAM,UAAU,GAAG,KAAK;oBACtB,CAAC,CAAC;wBACE,SAAS,EAAE,KAAK;wBAChB,UAAU,EAAE,UAAU;wBACtB,aAAa,EAAE,IAAI;qBACpB;oBACH,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBACpD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAErC,kBAAkB,EAAE,UAAU,CAAC,CAAC;gBACnC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;gBACpC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACtC,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YAE9C,IAAI,GAA6D,CAAC;YAClE,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,UAAU,CAAC,IAAI,CAGxB,wBAAwB,EAAE;oBAC3B,CAAC,EAAE,EAAE;oBACL,CAAC,EAAE,EAAE;oBACL,yBAAyB,EAAE,KAAK;oBAChC,uBAAuB,EAAE,KAAK;iBAC/B,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,EAAE,GAAG,GAAG,EAAE,aAAa,CAAC;YAC9B,MAAM,eAAe,GAAG,GAAG,EAAE,OAAO,CAAC;YACrC,IACE,OAAO,EAAE,KAAK,QAAQ;gBACtB,eAAe;gBACf,eAAe,KAAK,UAAU,EAC9B,CAAC;gBACD,MAAM,KAAK,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC;gBAC/B,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,IAAI,OAAO,GAA8B,eAAe,CAAC;gBACzD,OAAO,OAAO,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBACzC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAC3B,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;gBAED,IAAI,iBAAiB,GAAG,KAAK,CAAC;gBAC9B,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBAC3B,iBAAiB,GAAG,IAAI,CAAC;oBACzB,KAAK,MAAM,YAAY,IAAI,SAAS,EAAE,CAAC;wBACrC,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;wBACtD,IAAI,CAAC,aAAa,EAAE,CAAC;4BACnB,iBAAiB,GAAG,KAAK,CAAC;4BAC1B,MAAM;wBACR,CAAC;wBACD,IAAI,CAAC;4BACH,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;4BAC7D,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,aAAa,CAAC,IAAI,CAE/C,mBAAmB,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;4BACnD,IAAI,OAAO,aAAa,KAAK,QAAQ,EAAE,CAAC;gCACtC,iBAAiB,GAAG,KAAK,CAAC;gCAC1B,MAAM;4BACR,CAAC;4BAED,KAAK,CAAC,IAAI,CAAC;gCACT,aAAa;gCACb,mBAAmB,EAAE,aAAa;6BACnC,CAAC,CAAC;wBACL,CAAC;wBAAC,MAAM,CAAC;4BACP,iBAAiB,GAAG,KAAK,CAAC;4BAC1B,MAAM;wBACR,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,CAAC,iBAAiB,EAAE,CAAC;oBACvB,OAAO,IAAI,CAAC;gBACd,CAAC;gBAED,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;gBAC7D,MAAM,GAAG,GAAG,MAAM,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;gBACtE,OAAO,GAAG;oBACR,CAAC,CAAC,EAAE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;oBACrE,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;YAED,IAAI,OAAO,EAAE,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAC;YAExC,IAAI,YAAgC,CAAC;YACrC,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,EAAE,CAAC;gBAC5D,IAAI,CAAC;oBACH,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAE5C,mBAAmB,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;oBAC1C,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;wBACzB,YAAY,GAAG,GAAG,CAAC;wBACnB,MAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,SAAS;gBACX,CAAC;YACH,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,MAAM,2BAA2B,CAC3C,WAAW,EACX,UAAU,EACV,EAAE,CACH,CAAC;gBACF,OAAO,GAAG;oBACR,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE;oBAChE,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;YAED,WAAW,CAAC,IAAI,CAAC;gBACf,aAAa,EAAE,UAAU;gBACzB,mBAAmB,EAAE,EAAE;aACxB,CAAC,CAAC;YAEH,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,IAAI,GAAG,GAAG,CAAC,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAErC,iBAAiB,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC7C,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;gBAClC,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,IAAI,CAErC,wBAAwB,EAAE;wBAC3B,QAAQ;wBACR,mBAAmB,EAAE,iBAAiB,CAAC,mBAAmB;wBAC1D,aAAa,EAAE,IAAI;qBACpB,CAAC,CAAC;oBACH,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC;oBACxC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;oBACtC,MAAM,UAAU;yBACb,IAAI,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC;yBAC3C,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,EAAE;YACJ,CAAC;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,CAAC;YAChC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;YAC/B,UAAU,GAAG,YAAY,CAAC;YAC1B,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import type { Protocol } from \"devtools-protocol\";\nimport type { CDPSessionLike } from \"../../cdp.js\";\nimport { Page } from \"../../page.js\";\nimport { executionContexts } from \"../../executionContextRegistry.js\";\nimport { a11yScriptSources } from \"../../../dom/build/a11yScripts.generated.js\";\nimport { buildA11yInvocation } from \"../../a11yInvocation.js\";\nimport type { ResolvedLocation } from \"../../../types/private/snapshot.js\";\nimport { listChildrenOf } from \"./focusSelectors.js\";\nimport { buildAbsoluteXPathFromChain } from \"./xpathUtils.js\";\n\n/**\n * Resolve deepest node for a page coordinate and compute its absolute XPath across frames.\n * More efficient than building a full hybrid snapshot when only a single node’s XPath is needed.\n */\nexport async function resolveXpathForLocation(\n page: Page,\n x: number,\n y: number,\n): Promise<ResolvedLocation | null> {\n const tree = page.getFullFrameTree();\n const parentByFrame = new Map<string, string | null>();\n (function index(n: Protocol.Page.FrameTree, parent: string | null) {\n parentByFrame.set(n.frame.id, parent);\n for (const c of n.childFrames ?? []) index(c, n.frame.id);\n })(tree, null);\n\n const iframeChain: Array<{\n parentSession: CDPSessionLike;\n iframeBackendNodeId: number;\n }> = [];\n\n let curFrameId = page.mainFrameId();\n let curSession = page.getSessionForFrame(curFrameId);\n let curX = x;\n let curY = y;\n\n for (let depth = 0; depth < 8; depth++) {\n try {\n await curSession.send(\"DOM.enable\").catch(() => {});\n\n let sx = 0;\n let sy = 0;\n try {\n await curSession.send(\"Runtime.enable\").catch(() => {});\n const ctxId = await executionContexts\n .waitForMainWorld(curSession, curFrameId)\n .catch(() => {});\n const scrollExpr = buildA11yInvocation(\"getScrollOffsets\", []);\n const evalParams = ctxId\n ? {\n contextId: ctxId,\n expression: scrollExpr,\n returnByValue: true,\n }\n : { expression: scrollExpr, returnByValue: true };\n const { result } = await curSession.send<{\n result: { value?: { sx?: number; sy?: number } };\n }>(\"Runtime.evaluate\", evalParams);\n sx = Number(result?.value?.sx ?? 0);\n sy = Number(result?.value?.sy ?? 0);\n } catch {\n //\n }\n const xi = Math.max(0, Math.floor(curX + sx));\n const yi = Math.max(0, Math.floor(curY + sy));\n\n let res: { backendNodeId?: number; frameId?: string } | undefined;\n try {\n res = await curSession.send<{\n backendNodeId?: number;\n frameId?: string;\n }>(\"DOM.getNodeForLocation\", {\n x: xi,\n y: yi,\n includeUserAgentShadowDOM: false,\n ignorePointerEventsNone: false,\n });\n } catch {\n return null;\n }\n\n const be = res?.backendNodeId;\n const reportedFrameId = res?.frameId;\n if (\n typeof be === \"number\" &&\n reportedFrameId &&\n reportedFrameId !== curFrameId\n ) {\n const chain = [...iframeChain];\n const framePath: string[] = [];\n let frameId: string | null | undefined = reportedFrameId;\n while (frameId && frameId !== curFrameId) {\n framePath.unshift(frameId);\n frameId = parentByFrame.get(frameId);\n }\n\n let resolvedFramePath = false;\n if (frameId === curFrameId) {\n resolvedFramePath = true;\n for (const childFrameId of framePath) {\n const parentFrameId = parentByFrame.get(childFrameId);\n if (!parentFrameId) {\n resolvedFramePath = false;\n break;\n }\n try {\n const parentSession = page.getSessionForFrame(parentFrameId);\n const { backendNodeId } = await parentSession.send<{\n backendNodeId?: number;\n }>(\"DOM.getFrameOwner\", { frameId: childFrameId });\n if (typeof backendNodeId !== \"number\") {\n resolvedFramePath = false;\n break;\n }\n\n chain.push({\n parentSession,\n iframeBackendNodeId: backendNodeId,\n });\n } catch {\n resolvedFramePath = false;\n break;\n }\n }\n }\n\n if (!resolvedFramePath) {\n return null;\n }\n\n const leafSession = page.getSessionForFrame(reportedFrameId);\n const abs = await buildAbsoluteXPathFromChain(chain, leafSession, be);\n return abs\n ? { frameId: reportedFrameId, backendNodeId: be, absoluteXPath: abs }\n : null;\n }\n\n if (typeof be !== \"number\") return null;\n\n let matchedChild: string | undefined;\n for (const fid of listChildrenOf(parentByFrame, curFrameId)) {\n try {\n const { backendNodeId } = await curSession.send<{\n backendNodeId?: number;\n }>(\"DOM.getFrameOwner\", { frameId: fid });\n if (backendNodeId === be) {\n matchedChild = fid;\n break;\n }\n } catch {\n continue;\n }\n }\n\n if (!matchedChild) {\n const abs = await buildAbsoluteXPathFromChain(\n iframeChain,\n curSession,\n be,\n );\n return abs\n ? { frameId: curFrameId, backendNodeId: be, absoluteXPath: abs }\n : null;\n }\n\n iframeChain.push({\n parentSession: curSession,\n iframeBackendNodeId: be,\n });\n\n let left = 0;\n let top = 0;\n try {\n const { object } = await curSession.send<{\n object: { objectId?: string };\n }>(\"DOM.resolveNode\", { backendNodeId: be });\n const objectId = object?.objectId;\n if (objectId) {\n const { result } = await curSession.send<{\n result: { value?: { left: number; top: number } };\n }>(\"Runtime.callFunctionOn\", {\n objectId,\n functionDeclaration: a11yScriptSources.getBoundingRectLite,\n returnByValue: true,\n });\n left = Number(result?.value?.left ?? 0);\n top = Number(result?.value?.top ?? 0);\n await curSession\n .send(\"Runtime.releaseObject\", { objectId })\n .catch(() => {});\n }\n } catch {\n //\n }\n curX = Math.max(0, curX - left);\n curY = Math.max(0, curY - top);\n curFrameId = matchedChild;\n curSession = page.getSessionForFrame(curFrameId);\n } catch {\n return null;\n }\n }\n return null;\n}\n"]}
@@ -59,8 +59,8 @@ export declare class V3 {
59
59
  */
60
60
  get isBrowserbase(): boolean;
61
61
  /**
62
- * Returns true if captcha auto-solving is enabled on Browserbase.
63
- * Defaults to true when not explicitly set to false.
62
+ * Returns whether agents should wait for Browserbase CAPTCHA solve events.
63
+ * Local attachments can opt in without changing session lifecycle behavior.
64
64
  */
65
65
  get isCaptchaAutoSolveEnabled(): boolean;
66
66
  /**
@@ -89,6 +89,12 @@ export declare class V3 {
89
89
  width: number;
90
90
  height: number;
91
91
  };
92
+ get hasConfiguredViewport(): boolean;
93
+ private rawConfiguredViewport;
94
+ resolveViewport(): Promise<{
95
+ width: number;
96
+ height: number;
97
+ }>;
92
98
  private _onCdpClosed;
93
99
  readonly experimental: boolean;
94
100
  readonly logInferenceToFile: boolean;
@@ -167,13 +167,15 @@ let V3 = (() => {
167
167
  return this.state.kind === "BROWSERBASE";
168
168
  }
169
169
  /**
170
- * Returns true if captcha auto-solving is enabled on Browserbase.
171
- * Defaults to true when not explicitly set to false.
170
+ * Returns whether agents should wait for Browserbase CAPTCHA solve events.
171
+ * Local attachments can opt in without changing session lifecycle behavior.
172
172
  */
173
173
  get isCaptchaAutoSolveEnabled() {
174
- return (this.isBrowserbase &&
175
- this.opts.browserbaseSessionCreateParams?.browserSettings
176
- ?.solveCaptchas !== false);
174
+ const solveCaptchas = this.opts.browserbaseSessionCreateParams?.browserSettings?.solveCaptchas;
175
+ return ((this.opts.waitForCaptchaSolves ??
176
+ solveCaptchas ??
177
+ this.opts.env === "BROWSERBASE") &&
178
+ solveCaptchas !== false);
177
179
  }
178
180
  /**
179
181
  * Returns true if Browserbase Verified mode is enabled in settings.
@@ -206,22 +208,37 @@ let V3 = (() => {
206
208
  * Falls back to default 1288x711 if not configured.
207
209
  */
208
210
  get configuredViewport() {
209
- const defaultWidth = 1288;
210
- const defaultHeight = 711;
211
- if (this.opts.env === "BROWSERBASE") {
212
- const vp = this.opts.browserbaseSessionCreateParams?.browserSettings?.viewport;
213
- return {
214
- width: vp?.width ?? defaultWidth,
215
- height: vp?.height ?? defaultHeight,
216
- };
217
- }
218
- // LOCAL env
219
- const vp = this.opts.localBrowserLaunchOptions?.viewport;
211
+ const viewport = this.rawConfiguredViewport();
220
212
  return {
221
- width: vp?.width ?? defaultWidth,
222
- height: vp?.height ?? defaultHeight,
213
+ width: viewport?.width ?? 1288,
214
+ height: viewport?.height ?? 711,
223
215
  };
224
216
  }
217
+ get hasConfiguredViewport() {
218
+ return this.rawConfiguredViewport() !== undefined;
219
+ }
220
+ rawConfiguredViewport() {
221
+ if (this.opts.env === "BROWSERBASE") {
222
+ return this.opts.browserbaseSessionCreateParams?.browserSettings
223
+ ?.viewport;
224
+ }
225
+ return this.opts.localBrowserLaunchOptions?.viewport;
226
+ }
227
+ async resolveViewport() {
228
+ const configured = this.rawConfiguredViewport();
229
+ if (configured)
230
+ return this.configuredViewport;
231
+ try {
232
+ const page = await this.context.awaitActivePage();
233
+ const { width, height } = await page.mainFrame().evaluate("({ width: window.innerWidth, height: window.innerHeight })");
234
+ if (width && height)
235
+ return { width, height };
236
+ }
237
+ catch {
238
+ //
239
+ }
240
+ return this.configuredViewport;
241
+ }
225
242
  _onCdpClosed = (why) => {
226
243
  if (this.state.kind === "BROWSERBASE") {
227
244
  void this._logBrowserbaseSessionStatus();
@@ -869,6 +886,7 @@ let V3 = (() => {
869
886
  verbose: this.verbose,
870
887
  systemPrompt: this.opts.systemPrompt,
871
888
  selfHeal: this.opts.selfHeal,
889
+ waitForCaptchaSolves: this.isCaptchaAutoSolveEnabled,
872
890
  useTouch: this.opts.useTouch,
873
891
  browserbaseSessionCreateParams: createSessionPayload,
874
892
  browserbaseSessionID: this.opts.browserbaseSessionID,