@browserbasehq/orca 3.7.0-preview.1 → 3.7.2-gemini-cua

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 (165) hide show
  1. package/dist/cjs/lib/modelUtils.d.ts +10 -0
  2. package/dist/cjs/lib/modelUtils.js +11 -0
  3. package/dist/cjs/lib/modelUtils.js.map +1 -1
  4. package/dist/cjs/lib/v3/agent/AgentProvider.js +3 -0
  5. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/GoogleCUAClient.d.ts +23 -0
  7. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js +363 -206
  8. package/dist/cjs/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/tools/click.js +16 -5
  10. package/dist/cjs/lib/v3/agent/tools/click.js.map +1 -1
  11. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js +1 -1
  12. package/dist/cjs/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  13. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js +2 -2
  14. package/dist/cjs/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  15. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +18 -7
  16. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  17. package/dist/cjs/lib/v3/agent/tools/scroll.js +1 -1
  18. package/dist/cjs/lib/v3/agent/tools/scroll.js.map +1 -1
  19. package/dist/cjs/lib/v3/agent/tools/type.js +13 -4
  20. package/dist/cjs/lib/v3/agent/tools/type.js.map +1 -1
  21. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.d.ts +5 -2
  22. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js +5 -7
  23. package/dist/cjs/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  24. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +3 -1
  25. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  26. package/dist/cjs/lib/v3/api.d.ts +1 -1
  27. package/dist/cjs/lib/v3/api.js +11 -1
  28. package/dist/cjs/lib/v3/api.js.map +1 -1
  29. package/dist/cjs/lib/v3/cache/AgentCache.js +6 -1
  30. package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
  31. package/dist/cjs/lib/v3/external_clients/aisdk.js +2 -0
  32. package/dist/cjs/lib/v3/external_clients/aisdk.js.map +1 -1
  33. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js +20 -0
  34. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  35. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +5 -4
  36. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  37. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.d.ts +4 -0
  38. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js +126 -20
  39. package/dist/cjs/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  40. package/dist/cjs/lib/v3/index.d.ts +1 -1
  41. package/dist/cjs/lib/v3/launch/local.js +1 -1
  42. package/dist/cjs/lib/v3/launch/local.js.map +1 -1
  43. package/dist/cjs/lib/v3/llm/LLMProvider.js +9 -2
  44. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  45. package/dist/cjs/lib/v3/llm/aisdk.js +5 -3
  46. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  47. package/dist/cjs/lib/v3/llm/providerOptions.d.ts +7 -0
  48. package/dist/cjs/lib/v3/llm/providerOptions.js +9 -0
  49. package/dist/cjs/lib/v3/llm/providerOptions.js.map +1 -0
  50. package/dist/cjs/lib/v3/runtimePaths.js +0 -1
  51. package/dist/cjs/lib/v3/runtimePaths.js.map +1 -1
  52. package/dist/cjs/lib/v3/types/private/agent.d.ts +1 -1
  53. package/dist/cjs/lib/v3/types/private/agent.js +1 -0
  54. package/dist/cjs/lib/v3/types/private/agent.js.map +1 -1
  55. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  56. package/dist/cjs/lib/v3/types/public/agent.js +3 -0
  57. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  58. package/dist/cjs/lib/v3/types/public/api.d.ts +53 -0
  59. package/dist/cjs/lib/v3/types/public/api.js +8 -0
  60. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  61. package/dist/cjs/lib/v3/types/public/model.d.ts +12 -0
  62. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  63. package/dist/cjs/lib/v3/types/public/options.d.ts +13 -0
  64. package/dist/cjs/lib/v3/types/public/options.js.map +1 -1
  65. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
  66. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  67. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +39 -1
  68. package/dist/cjs/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -1
  69. package/dist/cjs/lib/v3/understudy/locator.d.ts +12 -0
  70. package/dist/cjs/lib/v3/understudy/locator.js +44 -0
  71. package/dist/cjs/lib/v3/understudy/locator.js.map +1 -1
  72. package/dist/cjs/lib/v3/understudy/page.d.ts +22 -3
  73. package/dist/cjs/lib/v3/understudy/page.js +55 -1
  74. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  75. package/dist/cjs/lib/v3/v3.d.ts +14 -0
  76. package/dist/cjs/lib/v3/v3.js +81 -16
  77. package/dist/cjs/lib/v3/v3.js.map +1 -1
  78. package/dist/cjs/lib/v3/verifier/types.d.ts +3 -2
  79. package/dist/cjs/lib/v3/verifier/types.js.map +1 -1
  80. package/dist/cjs/lib/version.d.ts +1 -1
  81. package/dist/cjs/lib/version.js +1 -1
  82. package/dist/cjs/lib/version.js.map +1 -1
  83. package/dist/esm/lib/modelUtils.d.ts +10 -0
  84. package/dist/esm/lib/modelUtils.js +9 -0
  85. package/dist/esm/lib/modelUtils.js.map +1 -1
  86. package/dist/esm/lib/v3/agent/AgentProvider.js +3 -0
  87. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  88. package/dist/esm/lib/v3/agent/GoogleCUAClient.d.ts +23 -0
  89. package/dist/esm/lib/v3/agent/GoogleCUAClient.js +363 -206
  90. package/dist/esm/lib/v3/agent/GoogleCUAClient.js.map +1 -1
  91. package/dist/esm/lib/v3/agent/tools/click.js +16 -5
  92. package/dist/esm/lib/v3/agent/tools/click.js.map +1 -1
  93. package/dist/esm/lib/v3/agent/tools/clickAndHold.js +1 -1
  94. package/dist/esm/lib/v3/agent/tools/clickAndHold.js.map +1 -1
  95. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js +2 -2
  96. package/dist/esm/lib/v3/agent/tools/dragAndDrop.js.map +1 -1
  97. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +19 -8
  98. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  99. package/dist/esm/lib/v3/agent/tools/scroll.js +1 -1
  100. package/dist/esm/lib/v3/agent/tools/scroll.js.map +1 -1
  101. package/dist/esm/lib/v3/agent/tools/type.js +13 -4
  102. package/dist/esm/lib/v3/agent/tools/type.js.map +1 -1
  103. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.d.ts +5 -2
  104. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js +5 -7
  105. package/dist/esm/lib/v3/agent/utils/coordinateNormalization.js.map +1 -1
  106. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +3 -1
  107. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  108. package/dist/esm/lib/v3/api.d.ts +1 -1
  109. package/dist/esm/lib/v3/api.js +11 -1
  110. package/dist/esm/lib/v3/api.js.map +1 -1
  111. package/dist/esm/lib/v3/cache/AgentCache.js +6 -1
  112. package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
  113. package/dist/esm/lib/v3/external_clients/aisdk.js +2 -0
  114. package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -1
  115. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js +20 -0
  116. package/dist/esm/lib/v3/handlers/handlerUtils/actHandlerUtils.js.map +1 -1
  117. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +5 -4
  118. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  119. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.d.ts +4 -0
  120. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js +126 -20
  121. package/dist/esm/lib/v3/handlers/v3CuaAgentHandler.js.map +1 -1
  122. package/dist/esm/lib/v3/index.d.ts +1 -1
  123. package/dist/esm/lib/v3/launch/local.js +1 -1
  124. package/dist/esm/lib/v3/launch/local.js.map +1 -1
  125. package/dist/esm/lib/v3/llm/LLMProvider.js +9 -2
  126. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  127. package/dist/esm/lib/v3/llm/aisdk.js +5 -3
  128. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  129. package/dist/esm/lib/v3/llm/providerOptions.d.ts +7 -0
  130. package/dist/esm/lib/v3/llm/providerOptions.js +6 -0
  131. package/dist/esm/lib/v3/llm/providerOptions.js.map +1 -0
  132. package/dist/esm/lib/v3/runtimePaths.js +0 -1
  133. package/dist/esm/lib/v3/runtimePaths.js.map +1 -1
  134. package/dist/esm/lib/v3/types/private/agent.d.ts +1 -1
  135. package/dist/esm/lib/v3/types/private/agent.js +1 -0
  136. package/dist/esm/lib/v3/types/private/agent.js.map +1 -1
  137. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  138. package/dist/esm/lib/v3/types/public/agent.js +3 -0
  139. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  140. package/dist/esm/lib/v3/types/public/api.d.ts +53 -0
  141. package/dist/esm/lib/v3/types/public/api.js +8 -0
  142. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  143. package/dist/esm/lib/v3/types/public/model.d.ts +12 -0
  144. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  145. package/dist/esm/lib/v3/types/public/options.d.ts +13 -0
  146. package/dist/esm/lib/v3/types/public/options.js.map +1 -1
  147. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
  148. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  149. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js +39 -1
  150. package/dist/esm/lib/v3/understudy/a11y/snapshot/coordinateResolver.js.map +1 -1
  151. package/dist/esm/lib/v3/understudy/locator.d.ts +12 -0
  152. package/dist/esm/lib/v3/understudy/locator.js +44 -0
  153. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  154. package/dist/esm/lib/v3/understudy/page.d.ts +22 -3
  155. package/dist/esm/lib/v3/understudy/page.js +55 -1
  156. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  157. package/dist/esm/lib/v3/v3.d.ts +14 -0
  158. package/dist/esm/lib/v3/v3.js +82 -17
  159. package/dist/esm/lib/v3/v3.js.map +1 -1
  160. package/dist/esm/lib/v3/verifier/types.d.ts +3 -2
  161. package/dist/esm/lib/v3/verifier/types.js.map +1 -1
  162. package/dist/esm/lib/version.d.ts +1 -1
  163. package/dist/esm/lib/version.js +1 -1
  164. package/dist/esm/lib/version.js.map +1 -1
  165. package/package.json +3 -3
@@ -73,6 +73,14 @@ export declare class V3 {
73
73
  * @deprecated Use `isVerified` instead. This alias will be removed in a future version.
74
74
  */
75
75
  get isAdvancedStealth(): boolean;
76
+ /**
77
+ * Whether coordinate pointer actions should actuate as touch instead of mouse.
78
+ *
79
+ * Explicit opt-in via the `useTouch` option — no session-derived or probed
80
+ * detection, so the answer is known before the first action, is stable for the
81
+ * whole run, and never surprises a caller who didn't ask for touch.
82
+ */
83
+ get usesTouch(): boolean;
76
84
  /**
77
85
  * Returns the configured viewport dimensions from launch options.
78
86
  * Falls back to default 1288x711 if not configured.
@@ -81,6 +89,12 @@ export declare class V3 {
81
89
  width: number;
82
90
  height: number;
83
91
  };
92
+ get hasConfiguredViewport(): boolean;
93
+ private rawConfiguredViewport;
94
+ resolveViewport(): Promise<{
95
+ width: number;
96
+ height: number;
97
+ }>;
84
98
  private _onCdpClosed;
85
99
  readonly experimental: boolean;
86
100
  readonly logInferenceToFile: boolean;
@@ -109,6 +109,7 @@ const EventEmitter_js_1 = require("./flowlogger/EventEmitter.js");
109
109
  const EventStore_js_1 = require("./flowlogger/EventStore.js");
110
110
  const timeoutGuard_js_1 = require("./handlers/handlerUtils/timeoutGuard.js");
111
111
  const sdkErrors_js_1 = require("./types/public/sdkErrors.js");
112
+ const AUTO_MODEL_API_ONLY_MESSAGE = `model: "${modelUtils_js_2.AUTO_MODEL_NAME}" is only supported when running through the Stagehand API (env: "BROWSERBASE" with disableAPI: false and experimental: false). Specify a concrete model (e.g. "openai/gpt-5") instead.`;
112
113
  const DEFAULT_MODEL_NAME = "openai/gpt-4.1-mini";
113
114
  const DEFAULT_VIEWPORT = { width: 1288, height: 711 };
114
115
  const DEFAULT_AGENT_TOOL_TIMEOUT_MS = 45000;
@@ -230,27 +231,55 @@ let V3 = (() => {
230
231
  get isAdvancedStealth() {
231
232
  return this.isVerified;
232
233
  }
234
+ /**
235
+ * Whether coordinate pointer actions should actuate as touch instead of mouse.
236
+ *
237
+ * Explicit opt-in via the `useTouch` option — no session-derived or probed
238
+ * detection, so the answer is known before the first action, is stable for the
239
+ * whole run, and never surprises a caller who didn't ask for touch.
240
+ */
241
+ get usesTouch() {
242
+ return this.opts.useTouch === true;
243
+ }
233
244
  /**
234
245
  * Returns the configured viewport dimensions from launch options.
235
246
  * Falls back to default 1288x711 if not configured.
236
247
  */
237
248
  get configuredViewport() {
238
- const defaultWidth = 1288;
239
- const defaultHeight = 711;
240
- if (this.opts.env === "BROWSERBASE") {
241
- const vp = this.opts.browserbaseSessionCreateParams?.browserSettings?.viewport;
242
- return {
243
- width: vp?.width ?? defaultWidth,
244
- height: vp?.height ?? defaultHeight,
245
- };
246
- }
247
- // LOCAL env
248
- const vp = this.opts.localBrowserLaunchOptions?.viewport;
249
+ const viewport = this.rawConfiguredViewport();
249
250
  return {
250
- width: vp?.width ?? defaultWidth,
251
- height: vp?.height ?? defaultHeight,
251
+ width: viewport?.width ?? 1288,
252
+ height: viewport?.height ?? 711,
252
253
  };
253
254
  }
255
+ get hasConfiguredViewport() {
256
+ return this.rawConfiguredViewport() !== undefined;
257
+ }
258
+ rawConfiguredViewport() {
259
+ if (this.opts.env === "BROWSERBASE") {
260
+ return this.opts.browserbaseSessionCreateParams?.browserSettings
261
+ ?.viewport;
262
+ }
263
+ return this.opts.localBrowserLaunchOptions?.viewport;
264
+ }
265
+ async resolveViewport() {
266
+ // Verified / advanced-stealth sessions do not honor the requested
267
+ // viewport (Browserbase picks a real-device size, e.g. 1280x720 for a
268
+ // requested 2560x1440), so trust the configured value only otherwise.
269
+ const configured = this.rawConfiguredViewport();
270
+ if (configured && !this.isVerified)
271
+ return this.configuredViewport;
272
+ try {
273
+ const page = await this.context.awaitActivePage();
274
+ const { width, height } = await page.mainFrame().evaluate("({ width: window.innerWidth, height: window.innerHeight })");
275
+ if (width && height)
276
+ return { width, height };
277
+ }
278
+ catch {
279
+ //
280
+ }
281
+ return this.configuredViewport;
282
+ }
254
283
  _onCdpClosed = (why) => {
255
284
  if (this.state.kind === "BROWSERBASE") {
256
285
  void this._logBrowserbaseSessionStatus();
@@ -350,7 +379,18 @@ let V3 = (() => {
350
379
  const baseClientOptions = clientOptions
351
380
  ? { ...clientOptions }
352
381
  : {};
353
- if (opts.llmClient) {
382
+ if ((0, modelUtils_js_2.isAutoModel)(this.modelName)) {
383
+ if (opts.llmClient ||
384
+ opts.env !== "BROWSERBASE" ||
385
+ this.disableAPI ||
386
+ this.experimental) {
387
+ throw new index_js_1.StagehandInvalidArgumentError(AUTO_MODEL_API_ONLY_MESSAGE);
388
+ }
389
+ // "auto" delegates model selection to the Stagehand API, so no local
390
+ // LLM client is created and no provider API key is required.
391
+ this.modelClientOptions = baseClientOptions;
392
+ }
393
+ else if (opts.llmClient) {
354
394
  this.llmClient = opts.llmClient;
355
395
  this.modelClientOptions = baseClientOptions;
356
396
  this.disableAPI = true;
@@ -526,6 +566,15 @@ let V3 = (() => {
526
566
  clientOptions = rest;
527
567
  perCallMiddleware = middleware;
528
568
  }
569
+ if ((0, modelUtils_js_2.isAutoModel)(modelName)) {
570
+ if (!this.apiClient) {
571
+ throw new index_js_1.StagehandInvalidArgumentError(AUTO_MODEL_API_ONLY_MESSAGE);
572
+ }
573
+ // The Stagehand API resolves "auto" server-side and intercepts every
574
+ // act/extract/observe, so the local client is never dereferenced here.
575
+ // Note it is undefined when the session's base model is also "auto".
576
+ return this.llmClient;
577
+ }
529
578
  if (modelName === this.modelName &&
530
579
  !perCallMiddleware &&
531
580
  (!clientOptions || Object.keys(clientOptions).length === 0)) {
@@ -878,10 +927,21 @@ let V3 = (() => {
878
927
  verbose: this.verbose,
879
928
  systemPrompt: this.opts.systemPrompt,
880
929
  selfHeal: this.opts.selfHeal,
930
+ useTouch: this.opts.useTouch,
881
931
  browserbaseSessionCreateParams: createSessionPayload,
882
932
  browserbaseSessionID: this.opts.browserbaseSessionID,
883
933
  });
884
934
  if (!available) {
935
+ if ((0, modelUtils_js_2.isAutoModel)(this.modelName)) {
936
+ // "auto" has no local fallback; end the just-created session
937
+ // best-effort before surfacing the error. Never end a
938
+ // caller-supplied (resumed) session we didn't create.
939
+ if (!this.opts.browserbaseSessionID) {
940
+ await this.apiClient.end().catch(() => { });
941
+ }
942
+ this.apiClient = null;
943
+ throw new index_js_1.StagehandInitError(`model: "${modelUtils_js_2.AUTO_MODEL_NAME}" requires the Stagehand API, but it is unavailable for this session (sessionId: ${sessionId}). Specify a concrete model (e.g. "openai/gpt-5") instead.`);
944
+ }
885
945
  this.apiClient = null;
886
946
  }
887
947
  this.opts.browserbaseSessionID = sessionId;
@@ -1034,7 +1094,10 @@ let V3 = (() => {
1034
1094
  let actCacheContext = null;
1035
1095
  const canUseCache = typeof input === "string" &&
1036
1096
  !this.isAgentReplayRecording() &&
1037
- this.actCache.enabled;
1097
+ this.actCache.enabled &&
1098
+ // "auto" sessions have no local LLM client for replay self-heal;
1099
+ // rely on the API (and its server-side cache) instead.
1100
+ !(0, modelUtils_js_2.isAutoModel)(this.modelName);
1038
1101
  if (canUseCache) {
1039
1102
  actCacheContext = await this.actCache.prepareContext(input, page, (0, variables_js_1.flattenVariables)(options?.variables));
1040
1103
  if (actCacheContext) {
@@ -1518,7 +1581,9 @@ let V3 = (() => {
1518
1581
  cua: { value: isCuaMode ? "true" : "false", type: "boolean" },
1519
1582
  mode: { value: loggedMode, type: "string" },
1520
1583
  model: {
1521
- value: (0, modelUtils_js_1.extractModelName)(options?.model) ?? this.llmClient.modelName,
1584
+ value: (0, modelUtils_js_1.extractModelName)(options?.model) ??
1585
+ this.llmClient?.modelName ??
1586
+ this.modelName,
1522
1587
  type: "string",
1523
1588
  },
1524
1589
  systemPrompt: { value: options?.systemPrompt ?? "", type: "string" },