@browserbasehq/orca 3.1.0-patch.2 → 3.1.0-patch.3

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 (107) hide show
  1. package/dist/cjs/cli.js +45 -17
  2. package/dist/cjs/cli.js.map +2 -2
  3. package/dist/cjs/index.js +192 -123
  4. package/dist/cjs/index.js.map +3 -3
  5. package/dist/cjs/lib/logger.d.ts +1 -1
  6. package/dist/cjs/lib/modelUtils.d.ts +3 -0
  7. package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -1
  8. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -1
  9. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +2 -1
  10. package/dist/cjs/lib/v3/agent/tools/index.d.ts +2 -2
  11. package/dist/cjs/lib/v3/api.d.ts +16 -1
  12. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
  13. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  14. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +12 -12
  15. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  16. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +2 -2
  17. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  18. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +1 -0
  19. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  20. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +1 -0
  21. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +1 -1
  22. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +1 -0
  23. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  24. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +1 -0
  25. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  26. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +2 -2
  27. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  28. package/dist/cjs/lib/v3/types/public/api.d.ts +8 -0
  29. package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
  30. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
  31. package/dist/cjs/tests/agent-execution-model.test.js +139 -0
  32. package/dist/cjs/tests/agent-execution-model.test.js.map +7 -0
  33. package/dist/cjs/tests/api-multiregion.test.js +73 -0
  34. package/dist/cjs/tests/api-multiregion.test.js.map +7 -0
  35. package/dist/cjs/tests/model-utils.test.js +43 -0
  36. package/dist/cjs/tests/model-utils.test.js.map +7 -0
  37. package/dist/cjs/tests/public-api/export-surface.test.js +1 -0
  38. package/dist/cjs/tests/public-api/export-surface.test.js.map +1 -1
  39. package/dist/cjs/tests/public-api/llm-and-agents.test.js +1 -0
  40. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +1 -1
  41. package/dist/cjs/tests/public-api/public-error-types.test.js +3 -1
  42. package/dist/cjs/tests/public-api/public-error-types.test.js.map +2 -2
  43. package/dist/cjs/tests/public-api/v3-core.test.js +1 -0
  44. package/dist/cjs/tests/public-api/v3-core.test.js.map +1 -1
  45. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +2 -0
  46. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +1 -1
  47. package/dist/cjs/tests/understudy-command-exception.test.js +52 -0
  48. package/dist/cjs/tests/understudy-command-exception.test.js.map +7 -0
  49. package/dist/esm/lib/logger.d.ts +1 -1
  50. package/dist/esm/lib/v3/cli.d.ts +2 -0
  51. package/dist/esm/lib/v3/cli.js +10 -0
  52. package/dist/esm/lib/v3/cli.js.map +1 -0
  53. package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
  54. package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
  55. package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
  56. package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
  57. package/dist/esm/lib/v3/index.d.ts +1 -0
  58. package/dist/esm/lib/v3/index.js +1 -0
  59. package/dist/esm/lib/v3/index.js.map +1 -1
  60. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
  61. package/dist/esm/lib/v3/shutdown/supervisor.js +93 -64
  62. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  63. package/dist/esm/lib/v3/shutdown/supervisorClient.js +49 -52
  64. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  65. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +12 -12
  66. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  67. package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
  68. package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
  69. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +2 -2
  70. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  71. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
  72. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
  73. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +1 -0
  74. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  75. package/dist/esm/lib/v3/tests/locator-fill.spec.js +1 -0
  76. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +1 -1
  77. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +1 -0
  78. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  79. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +1 -0
  80. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  81. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +2 -2
  82. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  83. package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
  84. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
  85. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
  86. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  87. package/dist/esm/lib/v3/understudy/context.js +10 -1
  88. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  89. package/dist/esm/lib/v3/understudy/locator.js +2 -2
  90. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  91. package/dist/esm/lib/v3/understudy/page.js +2 -1
  92. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  93. package/dist/esm/lib/v3/v3.js +2 -6
  94. package/dist/esm/lib/v3/v3.js.map +1 -1
  95. package/dist/esm/tests/public-api/export-surface.test.js +2 -0
  96. package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
  97. package/dist/esm/tests/public-api/llm-and-agents.test.js +1 -0
  98. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +1 -1
  99. package/dist/esm/tests/public-api/public-error-types.test.js +1 -0
  100. package/dist/esm/tests/public-api/public-error-types.test.js.map +1 -1
  101. package/dist/esm/tests/public-api/v3-core.test.js +1 -0
  102. package/dist/esm/tests/public-api/v3-core.test.js.map +1 -1
  103. package/dist/esm/tests/snapshot-capture-orchestration.test.js +2 -0
  104. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +1 -1
  105. package/package.json +13 -11
  106. package/dist/esm/lib/v3/tests/envReporter.js +0 -57
  107. package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
package/dist/cjs/index.js CHANGED
@@ -4,7 +4,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
4
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
5
  var __getProtoOf = Object.getPrototypeOf;
6
6
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
7
+ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : /* @__PURE__ */ Symbol.for("Symbol." + name);
8
8
  var __typeError = (msg) => {
9
9
  throw TypeError(msg);
10
10
  };
@@ -104,7 +104,7 @@ var init_version = __esm({
104
104
  });
105
105
 
106
106
  // packages/core/lib/v3/types/public/sdkErrors.ts
107
- var StagehandError, StagehandDefaultError, StagehandEnvironmentError, MissingEnvironmentVariableError, UnsupportedModelError, UnsupportedModelProviderError, UnsupportedAISDKModelProviderError, InvalidAISDKModelFormatError, StagehandNotInitializedError, BrowserbaseSessionNotFoundError, CaptchaTimeoutError, MissingLLMConfigurationError, HandlerNotInitializedError, StagehandInvalidArgumentError, StagehandElementNotFoundError, AgentScreenshotProviderError, StagehandMissingArgumentError, CreateChatCompletionResponseError, StagehandEvalError, StagehandDomProcessError, StagehandLocatorError, StagehandClickError, LLMResponseError, StagehandIframeError, ContentFrameNotFoundError, XPathResolutionError, ExperimentalApiConflictError, ExperimentalNotConfiguredError, CuaModelRequiredError, ZodSchemaValidationError, StagehandInitError, MCPConnectionError, StagehandShadowRootMissingError, StagehandShadowSegmentEmptyError, StagehandShadowSegmentNotFoundError, ElementNotVisibleError, ResponseBodyError, ResponseParseError, TimeoutError, ActTimeoutError, ExtractTimeoutError, ObserveTimeoutError, PageNotFoundError, ConnectionTimeoutError, StreamingCallbacksInNonStreamingModeError, AgentAbortError, StagehandClosedError, StagehandSnapshotError;
107
+ var StagehandError, StagehandDefaultError, StagehandEnvironmentError, MissingEnvironmentVariableError, UnsupportedModelError, UnsupportedModelProviderError, UnsupportedAISDKModelProviderError, InvalidAISDKModelFormatError, StagehandNotInitializedError, BrowserbaseSessionNotFoundError, CaptchaTimeoutError, MissingLLMConfigurationError, HandlerNotInitializedError, StagehandInvalidArgumentError, StagehandElementNotFoundError, AgentScreenshotProviderError, StagehandMissingArgumentError, CreateChatCompletionResponseError, StagehandEvalError, StagehandDomProcessError, StagehandLocatorError, StagehandClickError, LLMResponseError, StagehandIframeError, ContentFrameNotFoundError, XPathResolutionError, ExperimentalApiConflictError, ExperimentalNotConfiguredError, CuaModelRequiredError, ZodSchemaValidationError, StagehandInitError, MCPConnectionError, StagehandShadowRootMissingError, StagehandShadowSegmentEmptyError, StagehandShadowSegmentNotFoundError, ElementNotVisibleError, ResponseBodyError, ResponseParseError, TimeoutError, ActTimeoutError, ExtractTimeoutError, ObserveTimeoutError, PageNotFoundError, ConnectionTimeoutError, StreamingCallbacksInNonStreamingModeError, AgentAbortError, StagehandClosedError, StagehandSnapshotError, UnderstudyCommandException;
108
108
  var init_sdkErrors = __esm({
109
109
  "packages/core/lib/v3/types/public/sdkErrors.ts"() {
110
110
  init_version();
@@ -282,16 +282,16 @@ For a complete list of supported models and providers, see: https://docs.stageha
282
282
  ExperimentalApiConflictError = class extends StagehandError {
283
283
  constructor() {
284
284
  super(
285
- "`experimental` mode cannot be used together with the Stagehand API. To use experimental features, set experimental: true, and useApi: false in the stagehand constructor. To use the Stagehand API, set experimental: false and useApi: true in the stagehand constructor. "
285
+ "`experimental` mode cannot be used together with the Stagehand API. To use experimental features, set experimental: true and disableAPI: true in the stagehand constructor. To use the Stagehand API, set experimental: false and disableAPI: false (or omit it) in the stagehand constructor."
286
286
  );
287
287
  }
288
288
  };
289
289
  ExperimentalNotConfiguredError = class extends StagehandError {
290
290
  constructor(featureName) {
291
- super(`Feature "${featureName}" is an experimental feature, and cannot be configured when useAPI: true.
292
- Please set experimental: true and useAPI: false in the stagehand constructor to use this feature.
293
- If you wish to use the Stagehand API, please ensure ${featureName} is not defined in your function call,
294
- and set experimental: false, useAPI: true in the Stagehand constructor. `);
291
+ super(`Feature "${featureName}" is an experimental feature, and cannot be configured when disableAPI: false.
292
+ Please set experimental: true and disableAPI: true in the stagehand constructor to use this feature.
293
+ If you wish to use the Stagehand API, please ensure ${featureName} is not defined in your function call,
294
+ and set experimental: false, disableAPI: false (or omit it) in the Stagehand constructor.`);
295
295
  }
296
296
  };
297
297
  CuaModelRequiredError = class extends StagehandError {
@@ -427,6 +427,12 @@ ${JSON.stringify(issues, null, 2)}`);
427
427
  super(`error taking snapshot${suffix}`, cause);
428
428
  }
429
429
  };
430
+ UnderstudyCommandException = class extends StagehandError {
431
+ constructor(message, cause) {
432
+ super(message, cause);
433
+ this.name = "UnderstudyCommandException";
434
+ }
435
+ };
430
436
  }
431
437
  });
432
438
 
@@ -656,6 +662,7 @@ function toGeminiSchema(zodSchema) {
656
662
  normalizedSchema
657
663
  );
658
664
  }
665
+ // Standalone transforms and any unknown types fall through to default
659
666
  default:
660
667
  return decorateGeminiSchema(
661
668
  {
@@ -1062,6 +1069,27 @@ var init_utils = __esm({
1062
1069
  }
1063
1070
  });
1064
1071
 
1072
+ // packages/core/lib/v3/types/public/agent.ts
1073
+ var AVAILABLE_CUA_MODELS;
1074
+ var init_agent = __esm({
1075
+ "packages/core/lib/v3/types/public/agent.ts"() {
1076
+ AVAILABLE_CUA_MODELS = [
1077
+ "openai/computer-use-preview",
1078
+ "openai/computer-use-preview-2025-03-11",
1079
+ "anthropic/claude-3-7-sonnet-latest",
1080
+ "anthropic/claude-opus-4-5-20251101",
1081
+ "anthropic/claude-opus-4-6",
1082
+ "anthropic/claude-haiku-4-5-20251001",
1083
+ "anthropic/claude-sonnet-4-20250514",
1084
+ "anthropic/claude-sonnet-4-5-20250929",
1085
+ "google/gemini-2.5-computer-use-preview-10-2025",
1086
+ "google/gemini-3-flash-preview",
1087
+ "google/gemini-3-pro-preview",
1088
+ "microsoft/fara-7b"
1089
+ ];
1090
+ }
1091
+ });
1092
+
1065
1093
  // packages/core/lib/v3/logger.ts
1066
1094
  function bindInstanceLogger(instanceId, logger) {
1067
1095
  instanceLoggers.set(instanceId, logger);
@@ -5063,27 +5091,6 @@ var init_LLMClient = __esm({
5063
5091
  }
5064
5092
  });
5065
5093
 
5066
- // packages/core/lib/v3/types/public/agent.ts
5067
- var AVAILABLE_CUA_MODELS;
5068
- var init_agent = __esm({
5069
- "packages/core/lib/v3/types/public/agent.ts"() {
5070
- AVAILABLE_CUA_MODELS = [
5071
- "openai/computer-use-preview",
5072
- "openai/computer-use-preview-2025-03-11",
5073
- "anthropic/claude-3-7-sonnet-latest",
5074
- "anthropic/claude-opus-4-5-20251101",
5075
- "anthropic/claude-opus-4-6",
5076
- "anthropic/claude-haiku-4-5-20251001",
5077
- "anthropic/claude-sonnet-4-20250514",
5078
- "anthropic/claude-sonnet-4-5-20250929",
5079
- "google/gemini-2.5-computer-use-preview-10-2025",
5080
- "google/gemini-3-flash-preview",
5081
- "google/gemini-3-pro-preview",
5082
- "microsoft/fara-7b"
5083
- ];
5084
- }
5085
- });
5086
-
5087
5094
  // packages/core/lib/v3/types/public/api.ts
5088
5095
  var api_exports = {};
5089
5096
  __export(api_exports, {
@@ -5109,6 +5116,7 @@ __export(api_exports, {
5109
5116
  BrowserbaseFingerprintScreenSchema: () => BrowserbaseFingerprintScreenSchema,
5110
5117
  BrowserbaseProxyConfigSchema: () => BrowserbaseProxyConfigSchema,
5111
5118
  BrowserbaseProxyGeolocationSchema: () => BrowserbaseProxyGeolocationSchema,
5119
+ BrowserbaseRegionSchema: () => BrowserbaseRegionSchema,
5112
5120
  BrowserbaseSessionCreateParamsSchema: () => BrowserbaseSessionCreateParamsSchema,
5113
5121
  BrowserbaseViewportSchema: () => BrowserbaseViewportSchema,
5114
5122
  ErrorResponseSchema: () => ErrorResponseSchema,
@@ -5151,7 +5159,7 @@ __export(api_exports, {
5151
5159
  openApiLinks: () => openApiLinks,
5152
5160
  openApiSecuritySchemes: () => openApiSecuritySchemes
5153
5161
  });
5154
- var import_v4, LocalBrowserLaunchOptionsSchema, ModelConfigObjectSchema, ModelConfigSchema, ActionSchema, SessionIdParamsSchema, BrowserConfigSchema, SessionHeadersSchema, wrapResponse, ErrorResponseSchema, BrowserbaseViewportSchema, BrowserbaseFingerprintScreenSchema, BrowserbaseFingerprintSchema, BrowserbaseContextSchema, BrowserbaseBrowserSettingsSchema, BrowserbaseProxyGeolocationSchema, BrowserbaseProxyConfigSchema, ExternalProxyConfigSchema, ProxyConfigSchema, BrowserbaseSessionCreateParamsSchema, SessionStartRequestSchema, SessionStartResultSchema, SessionStartResponseSchema, SessionEndRequestSchema, SessionEndResultSchema, SessionEndResponseSchema, ActOptionsSchema, ActRequestSchema, ActResultDataSchema, ActResultSchema, ActResponseSchema, ExtractOptionsSchema, ExtractRequestSchema, ExtractResultSchema, ExtractResponseSchema, ObserveOptionsSchema, ObserveRequestSchema, ObserveResultSchema, ObserveResponseSchema, AgentConfigSchema, AgentActionSchema, AgentUsageSchema, AgentResultDataSchema, AgentCacheEntrySchema, AgentExecuteOptionsSchema, AgentExecuteRequestSchema, AgentExecuteResultSchema, AgentExecuteResponseSchema, NavigateOptionsSchema, NavigateRequestSchema, NavigateResultSchema, NavigateResponseSchema, TokenUsageSchema, ReplayActionSchema, ReplayPageSchema, ReplayResultSchema, ReplayResponseSchema, StreamEventStatusSchema, StreamEventTypeSchema, StreamEventSystemDataSchema, StreamEventLogDataSchema, StreamEventSchema, openApiSecuritySchemes, openApiLinks, Operations;
5162
+ var import_v4, LocalBrowserLaunchOptionsSchema, ModelConfigObjectSchema, ModelConfigSchema, ActionSchema, SessionIdParamsSchema, BrowserConfigSchema, SessionHeadersSchema, wrapResponse, ErrorResponseSchema, BrowserbaseViewportSchema, BrowserbaseFingerprintScreenSchema, BrowserbaseFingerprintSchema, BrowserbaseContextSchema, BrowserbaseBrowserSettingsSchema, BrowserbaseProxyGeolocationSchema, BrowserbaseProxyConfigSchema, ExternalProxyConfigSchema, ProxyConfigSchema, BrowserbaseRegionSchema, BrowserbaseSessionCreateParamsSchema, SessionStartRequestSchema, SessionStartResultSchema, SessionStartResponseSchema, SessionEndRequestSchema, SessionEndResultSchema, SessionEndResponseSchema, ActOptionsSchema, ActRequestSchema, ActResultDataSchema, ActResultSchema, ActResponseSchema, ExtractOptionsSchema, ExtractRequestSchema, ExtractResultSchema, ExtractResponseSchema, ObserveOptionsSchema, ObserveRequestSchema, ObserveResultSchema, ObserveResponseSchema, AgentConfigSchema, AgentActionSchema, AgentUsageSchema, AgentResultDataSchema, AgentCacheEntrySchema, AgentExecuteOptionsSchema, AgentExecuteRequestSchema, AgentExecuteResultSchema, AgentExecuteResponseSchema, NavigateOptionsSchema, NavigateRequestSchema, NavigateResultSchema, NavigateResponseSchema, TokenUsageSchema, ReplayActionSchema, ReplayPageSchema, ReplayResultSchema, ReplayResponseSchema, StreamEventStatusSchema, StreamEventTypeSchema, StreamEventSystemDataSchema, StreamEventLogDataSchema, StreamEventSchema, openApiSecuritySchemes, openApiLinks, Operations;
5155
5163
  var init_api = __esm({
5156
5164
  "packages/core/lib/v3/types/public/api.ts"() {
5157
5165
  import_v4 = require("zod/v4");
@@ -5314,13 +5322,14 @@ var init_api = __esm({
5314
5322
  BrowserbaseProxyConfigSchema,
5315
5323
  ExternalProxyConfigSchema
5316
5324
  ]).meta({ id: "ProxyConfig" });
5325
+ BrowserbaseRegionSchema = import_v4.z.enum(["us-west-2", "us-east-1", "eu-central-1", "ap-southeast-1"]).meta({ id: "BrowserbaseRegion" });
5317
5326
  BrowserbaseSessionCreateParamsSchema = import_v4.z.object({
5318
5327
  projectId: import_v4.z.string().optional(),
5319
5328
  browserSettings: BrowserbaseBrowserSettingsSchema.optional(),
5320
5329
  extensionId: import_v4.z.string().optional(),
5321
5330
  keepAlive: import_v4.z.boolean().optional(),
5322
5331
  proxies: import_v4.z.union([import_v4.z.boolean(), import_v4.z.array(ProxyConfigSchema)]).optional(),
5323
- region: import_v4.z.enum(["us-west-2", "us-east-1", "eu-central-1", "ap-southeast-1"]).optional(),
5332
+ region: BrowserbaseRegionSchema.optional(),
5324
5333
  timeout: import_v4.z.number().optional(),
5325
5334
  userMetadata: import_v4.z.record(import_v4.z.string(), import_v4.z.unknown()).optional()
5326
5335
  }).meta({ id: "BrowserbaseSessionCreateParams" });
@@ -9631,6 +9640,7 @@ var init_page2 = __esm({
9631
9640
  normalizeModifierKey(key) {
9632
9641
  const lower = key.toLowerCase();
9633
9642
  switch (lower) {
9643
+ // Modifier keys
9634
9644
  case "cmd":
9635
9645
  case "command":
9636
9646
  case "controlormeta":
@@ -9648,6 +9658,7 @@ var init_page2 = __esm({
9648
9658
  return "Shift";
9649
9659
  case "meta":
9650
9660
  return "Meta";
9661
+ // Action keys
9651
9662
  case "enter":
9652
9663
  case "return":
9653
9664
  return "Enter";
@@ -9664,6 +9675,7 @@ var init_page2 = __esm({
9664
9675
  case "delete":
9665
9676
  case "del":
9666
9677
  return "Delete";
9678
+ // Arrow keys
9667
9679
  case "left":
9668
9680
  case "arrowleft":
9669
9681
  return "ArrowLeft";
@@ -9676,6 +9688,7 @@ var init_page2 = __esm({
9676
9688
  case "down":
9677
9689
  case "arrowdown":
9678
9690
  return "ArrowDown";
9691
+ // Navigation keys
9679
9692
  case "home":
9680
9693
  return "Home";
9681
9694
  case "end":
@@ -9925,8 +9938,8 @@ var init_page2 = __esm({
9925
9938
  });
9926
9939
 
9927
9940
  // packages/core/lib/v3/index.ts
9928
- var v3_exports = {};
9929
- __export(v3_exports, {
9941
+ var index_exports = {};
9942
+ __export(index_exports, {
9930
9943
  AISdkClient: () => AISdkClient2,
9931
9944
  AVAILABLE_CUA_MODELS: () => AVAILABLE_CUA_MODELS,
9932
9945
  ActTimeoutError: () => ActTimeoutError,
@@ -9987,6 +10000,7 @@ __export(v3_exports, {
9987
10000
  StagehandSnapshotError: () => StagehandSnapshotError,
9988
10001
  StreamingCallbacksInNonStreamingModeError: () => StreamingCallbacksInNonStreamingModeError,
9989
10002
  TimeoutError: () => TimeoutError,
10003
+ UnderstudyCommandException: () => UnderstudyCommandException,
9990
10004
  UnsupportedAISDKModelProviderError: () => UnsupportedAISDKModelProviderError,
9991
10005
  UnsupportedModelError: () => UnsupportedModelError,
9992
10006
  UnsupportedModelProviderError: () => UnsupportedModelProviderError,
@@ -10018,7 +10032,7 @@ __export(v3_exports, {
10018
10032
  trimTrailingTextNode: () => trimTrailingTextNode,
10019
10033
  validateZodSchema: () => validateZodSchema
10020
10034
  });
10021
- module.exports = __toCommonJS(v3_exports);
10035
+ module.exports = __toCommonJS(index_exports);
10022
10036
 
10023
10037
  // packages/core/lib/v3/v3.ts
10024
10038
  var import_events = require("events");
@@ -10030,6 +10044,44 @@ var import_uuid6 = require("uuid");
10030
10044
  init_zodCompat();
10031
10045
  init_utils();
10032
10046
 
10047
+ // packages/core/lib/modelUtils.ts
10048
+ init_agent();
10049
+ function extractModelName(model) {
10050
+ if (!model) return void 0;
10051
+ return typeof model === "string" ? model : model.modelName;
10052
+ }
10053
+ function splitModelName(model) {
10054
+ const firstSlashIndex = model.indexOf("/");
10055
+ const provider = model.substring(0, firstSlashIndex);
10056
+ const modelName = model.substring(firstSlashIndex + 1);
10057
+ return { provider, modelName };
10058
+ }
10059
+ function resolveModel(model) {
10060
+ const modelString = extractModelName(model);
10061
+ const clientOptions = typeof model === "string" ? {} : (() => {
10062
+ const { modelName: _, ...rest } = model;
10063
+ return rest;
10064
+ })();
10065
+ const hasExplicitProvider = clientOptions.provider !== void 0;
10066
+ let provider;
10067
+ let parsedModelName;
10068
+ if (hasExplicitProvider) {
10069
+ provider = clientOptions.provider;
10070
+ parsedModelName = modelString;
10071
+ } else {
10072
+ const split = splitModelName(modelString);
10073
+ provider = split.provider;
10074
+ parsedModelName = split.modelName;
10075
+ }
10076
+ const isCua = hasExplicitProvider || AVAILABLE_CUA_MODELS.includes(modelString);
10077
+ return {
10078
+ provider,
10079
+ modelName: parsedModelName,
10080
+ clientOptions,
10081
+ isCua
10082
+ };
10083
+ }
10084
+
10033
10085
  // packages/core/lib/logger.ts
10034
10086
  var import_pino = __toESM(require("pino"), 1);
10035
10087
  var levelMapping = {
@@ -12093,12 +12145,6 @@ init_deepLocator();
12093
12145
  init_logger();
12094
12146
  init_flowLogger();
12095
12147
  init_sdkErrors();
12096
- var UnderstudyCommandException = class extends Error {
12097
- constructor(message) {
12098
- super(message);
12099
- this.name = "UnderstudyCommandException";
12100
- }
12101
- };
12102
12148
  function normalizeRootXPath(input) {
12103
12149
  const s = String(input ?? "").trim();
12104
12150
  if (s === "/") return "/html";
@@ -12181,7 +12227,10 @@ async function performUnderstudyMethod(page, frame, method, rawXPath, args, domS
12181
12227
  args: { value: JSON.stringify(args), type: "object" }
12182
12228
  }
12183
12229
  });
12184
- throw new UnderstudyCommandException(msg);
12230
+ if (e instanceof UnderstudyCommandException) {
12231
+ throw e;
12232
+ }
12233
+ throw new UnderstudyCommandException(msg, e);
12185
12234
  } finally {
12186
12235
  SessionFileLogger.logUnderstudyActionCompleted();
12187
12236
  }
@@ -12210,17 +12259,19 @@ async function selectOption(ctx) {
12210
12259
  const text = args[0]?.toString() || "";
12211
12260
  await locator.selectOption(text);
12212
12261
  } catch (e) {
12262
+ const msg = e instanceof Error ? e.message : String(e);
12263
+ const stack = e instanceof Error ? e.stack : void 0;
12213
12264
  v3Logger({
12214
12265
  category: "action",
12215
12266
  message: "error selecting option",
12216
12267
  level: 0,
12217
12268
  auxiliary: {
12218
- error: { value: e.message, type: "string" },
12219
- trace: { value: e.stack, type: "string" },
12269
+ error: { value: msg, type: "string" },
12270
+ trace: { value: stack ?? "", type: "string" },
12220
12271
  xpath: { value: xpath, type: "string" }
12221
12272
  }
12222
12273
  });
12223
- throw new UnderstudyCommandException(e.message);
12274
+ throw new UnderstudyCommandException(msg, e);
12224
12275
  }
12225
12276
  }
12226
12277
  async function scrollIntoView(ctx) {
@@ -12259,7 +12310,8 @@ async function scrollByPixelOffset(ctx) {
12259
12310
  const { x, y } = await locator.centroid();
12260
12311
  await page.scroll(x, y, dx, dy);
12261
12312
  } catch (e) {
12262
- throw new UnderstudyCommandException(e.message);
12313
+ const msg = e instanceof Error ? e.message : String(e);
12314
+ throw new UnderstudyCommandException(msg, e);
12263
12315
  }
12264
12316
  }
12265
12317
  async function wheelScroll(ctx) {
@@ -12295,7 +12347,7 @@ async function fillOrType(ctx) {
12295
12347
  xpath: { value: xpath, type: "string" }
12296
12348
  }
12297
12349
  });
12298
- throw new UnderstudyCommandException(msg);
12350
+ throw new UnderstudyCommandException(msg, e);
12299
12351
  }
12300
12352
  }
12301
12353
  async function typeText(ctx) {
@@ -12313,7 +12365,7 @@ async function typeText(ctx) {
12313
12365
  xpath: { value: xpath, type: "string" }
12314
12366
  }
12315
12367
  });
12316
- throw new UnderstudyCommandException(msg);
12368
+ throw new UnderstudyCommandException(msg, e);
12317
12369
  }
12318
12370
  }
12319
12371
  async function pressKey(ctx) {
@@ -12342,7 +12394,7 @@ async function pressKey(ctx) {
12342
12394
  xpath: { value: xpath, type: "string" }
12343
12395
  }
12344
12396
  });
12345
- throw new UnderstudyCommandException(msg);
12397
+ throw new UnderstudyCommandException(msg, e);
12346
12398
  }
12347
12399
  }
12348
12400
  async function clickElement(ctx) {
@@ -12378,7 +12430,7 @@ async function doubleClick(ctx) {
12378
12430
  xpath: { value: xpath, type: "string" }
12379
12431
  }
12380
12432
  });
12381
- throw new UnderstudyCommandException(msg);
12433
+ throw new UnderstudyCommandException(msg, e);
12382
12434
  }
12383
12435
  }
12384
12436
  async function dragAndDrop(ctx) {
@@ -12442,7 +12494,7 @@ async function dragAndDrop(ctx) {
12442
12494
  to: { value: toXPath, type: "string" }
12443
12495
  }
12444
12496
  });
12445
- throw new UnderstudyCommandException(msg);
12497
+ throw new UnderstudyCommandException(msg, e);
12446
12498
  }
12447
12499
  }
12448
12500
  async function scrollToNextChunk(ctx) {
@@ -12515,17 +12567,19 @@ async function hover(ctx) {
12515
12567
  try {
12516
12568
  await locator.hover();
12517
12569
  } catch (e) {
12570
+ const msg = e instanceof Error ? e.message : String(e);
12571
+ const stack = e instanceof Error ? e.stack : void 0;
12518
12572
  v3Logger({
12519
12573
  category: "action",
12520
12574
  message: "error attempting to hover",
12521
12575
  level: 0,
12522
12576
  auxiliary: {
12523
- error: { value: e.message, type: "string" },
12524
- trace: { value: e.stack, type: "string" },
12577
+ error: { value: msg, type: "string" },
12578
+ trace: { value: stack ?? "", type: "string" },
12525
12579
  xpath: { value: xpath, type: "string" }
12526
12580
  }
12527
12581
  });
12528
- throw new UnderstudyCommandException(e.message);
12582
+ throw new UnderstudyCommandException(msg, e);
12529
12583
  }
12530
12584
  }
12531
12585
  async function getFrameUrl(frame) {
@@ -19483,9 +19537,12 @@ var AISdkClient = class extends LLMClient {
19483
19537
  const isGPT5 = this.model.modelId.includes("gpt-5");
19484
19538
  const isCodex = this.model.modelId.includes("codex");
19485
19539
  const usesLowReasoningEffort = (this.model.modelId.includes("gpt-5.1") || this.model.modelId.includes("gpt-5.2")) && !isCodex;
19486
- const isDeepSeek = this.model.modelId.includes("deepseek");
19487
19540
  const isKimi = this.model.modelId.includes("kimi");
19488
19541
  const temperature = isKimi ? 1 : options.temperature;
19542
+ const PROMPT_JSON_FALLBACK_PATTERNS = ["deepseek", "kimi", "glm"];
19543
+ const needsPromptJsonFallback = PROMPT_JSON_FALLBACK_PATTERNS.some(
19544
+ (p) => this.model.modelId.includes(p)
19545
+ );
19489
19546
  if (options.response_model) {
19490
19547
  const llmRequestId2 = (0, import_uuid5.v7)();
19491
19548
  const promptPreview2 = formatLlmPromptPreview(options.messages, {
@@ -19497,7 +19554,7 @@ var AISdkClient = class extends LLMClient {
19497
19554
  operation: "generateObject",
19498
19555
  prompt: promptPreview2
19499
19556
  });
19500
- if (isDeepSeek || isKimi) {
19557
+ if (needsPromptJsonFallback) {
19501
19558
  const parsedSchema = JSON.stringify(
19502
19559
  toJsonSchema(options.response_model.schema)
19503
19560
  );
@@ -21377,7 +21434,8 @@ function startShutdownSupervisor(config2, opts) {
21377
21434
  }
21378
21435
  const child = (0, import_node_child_process.spawn)(resolved.command, resolved.args, {
21379
21436
  // stdin is the parent lifeline.
21380
- stdio: ["pipe", "ignore", "ignore"],
21437
+ // Preserve supervisor stderr so crash-cleanup debug lines are visible.
21438
+ stdio: ["pipe", "ignore", "inherit"],
21381
21439
  detached: true
21382
21440
  });
21383
21441
  child.on("error", (error) => {
@@ -22225,11 +22283,11 @@ var V3Context = class _V3Context {
22225
22283
  if (!owner) {
22226
22284
  for (const p of this.pagesByTarget.values()) {
22227
22285
  const tree = p.asProtocolFrameTree(p.mainFrameId());
22228
- const has = function find(n) {
22286
+ const has = (function find(n) {
22229
22287
  if (n.frame.id === childMainId) return true;
22230
22288
  for (const c of n.childFrames ?? []) if (find(c)) return true;
22231
22289
  return false;
22232
- }(tree);
22290
+ })(tree);
22233
22291
  if (has) {
22234
22292
  owner = p;
22235
22293
  break;
@@ -22407,52 +22465,29 @@ var V3Context = class _V3Context {
22407
22465
  }
22408
22466
  };
22409
22467
 
22410
- // packages/core/lib/modelUtils.ts
22411
- init_agent();
22412
- function splitModelName(model) {
22413
- const firstSlashIndex = model.indexOf("/");
22414
- const provider = model.substring(0, firstSlashIndex);
22415
- const modelName = model.substring(firstSlashIndex + 1);
22416
- return { provider, modelName };
22417
- }
22418
- function resolveModel(model) {
22419
- const modelString = typeof model === "string" ? model : model.modelName;
22420
- const clientOptions = typeof model === "string" ? {} : (() => {
22421
- const { modelName: _, ...rest } = model;
22422
- return rest;
22423
- })();
22424
- const hasExplicitProvider = clientOptions.provider !== void 0;
22425
- let provider;
22426
- let parsedModelName;
22427
- if (hasExplicitProvider) {
22428
- provider = clientOptions.provider;
22429
- parsedModelName = modelString;
22430
- } else {
22431
- const split = splitModelName(modelString);
22432
- provider = split.provider;
22433
- parsedModelName = split.modelName;
22434
- }
22435
- const isCua = hasExplicitProvider || AVAILABLE_CUA_MODELS.includes(modelString);
22436
- return {
22437
- provider,
22438
- modelName: parsedModelName,
22439
- clientOptions,
22440
- isCua
22441
- };
22442
- }
22443
-
22444
22468
  // packages/core/lib/v3/api.ts
22445
22469
  var import_fetch_cookie = __toESM(require("fetch-cookie"), 1);
22446
22470
  init_utils();
22447
22471
  init_version();
22448
22472
  init_public();
22449
22473
  init_zodCompat();
22474
+ var REGION_API_URLS = {
22475
+ "us-west-2": "https://api.stagehand.browserbase.com",
22476
+ "us-east-1": "https://api.use1.stagehand.browserbase.com",
22477
+ "eu-central-1": "https://api.euc1.stagehand.browserbase.com",
22478
+ "ap-southeast-1": "https://api.apse1.stagehand.browserbase.com"
22479
+ };
22480
+ function getApiUrlForRegion(region) {
22481
+ const baseUrl = REGION_API_URLS[region] ?? REGION_API_URLS["us-west-2"];
22482
+ return `${baseUrl}/v1`;
22483
+ }
22450
22484
  var StagehandAPIClient = class {
22451
22485
  apiKey;
22452
22486
  projectId;
22453
22487
  sessionId;
22454
22488
  modelApiKey;
22455
22489
  modelProvider;
22490
+ region;
22456
22491
  logger;
22457
22492
  fetchWithCookies;
22458
22493
  lastFinishedEventData = null;
@@ -22479,10 +22514,7 @@ var StagehandAPIClient = class {
22479
22514
  }
22480
22515
  this.modelApiKey = modelApiKey;
22481
22516
  this.modelProvider = modelName?.includes("/") ? modelName.split("/")[0] : void 0;
22482
- const region = browserbaseSessionCreateParams?.region;
22483
- if (region && region !== "us-west-2") {
22484
- return { sessionId: browserbaseSessionID ?? null, available: false };
22485
- }
22517
+ this.region = browserbaseSessionCreateParams?.region;
22486
22518
  this.logger({
22487
22519
  category: "init",
22488
22520
  message: "Creating new browserbase session...",
@@ -22897,16 +22929,20 @@ var StagehandAPIClient = class {
22897
22929
  if (options.method === "POST" && options.body) {
22898
22930
  defaultHeaders["Content-Type"] = "application/json";
22899
22931
  }
22900
- const response = await this.fetchWithCookies(
22901
- `${process.env.STAGEHAND_API_URL ?? "https://api.stagehand.browserbase.com/v1"}${path7}`,
22902
- {
22903
- ...options,
22904
- headers: {
22905
- ...defaultHeaders,
22906
- ...options.headers
22907
- }
22932
+ let baseUrl;
22933
+ if (process.env.STAGEHAND_API_URL) {
22934
+ const envUrl = process.env.STAGEHAND_API_URL.replace(/\/+$/, "");
22935
+ baseUrl = envUrl.endsWith("/v1") ? envUrl : `${envUrl}/v1`;
22936
+ } else {
22937
+ baseUrl = getApiUrlForRegion(this.region);
22938
+ }
22939
+ const response = await this.fetchWithCookies(`${baseUrl}${path7}`, {
22940
+ ...options,
22941
+ headers: {
22942
+ ...defaultHeaders,
22943
+ ...options.headers
22908
22944
  }
22909
- );
22945
+ });
22910
22946
  return response;
22911
22947
  }
22912
22948
  };
@@ -24156,11 +24192,12 @@ var _V3 = class _V3 {
24156
24192
  }
24157
24193
  const tools = options?.integrations ? await resolveTools(options.integrations, options.tools) : options?.tools ?? {};
24158
24194
  const agentLlmClient = options?.model ? this.resolveLlmClient(options.model) : this.llmClient;
24195
+ const resolvedExecutionModel = options?.executionModel ?? options?.model;
24159
24196
  const handler = new V3AgentHandler(
24160
24197
  this,
24161
24198
  this.logger,
24162
24199
  agentLlmClient,
24163
- typeof options?.executionModel === "string" ? options.executionModel : options?.executionModel?.modelName,
24200
+ resolvedExecutionModel,
24164
24201
  options?.systemPrompt,
24165
24202
  tools,
24166
24203
  options?.mode
@@ -24211,7 +24248,10 @@ var _V3 = class _V3 {
24211
24248
  auxiliary: {
24212
24249
  cua: { value: isCuaMode ? "true" : "false", type: "boolean" },
24213
24250
  mode: { value: options?.mode ?? "dom", type: "string" },
24214
- model: options?.model ? typeof options?.model === "string" ? { value: options.model, type: "string" } : { value: options.model.modelName, type: "string" } : { value: this.llmClient.modelName, type: "string" },
24251
+ model: {
24252
+ value: extractModelName(options?.model) ?? this.llmClient.modelName,
24253
+ type: "string"
24254
+ },
24215
24255
  systemPrompt: { value: options?.systemPrompt ?? "", type: "string" },
24216
24256
  tools: { value: JSON.stringify(options?.tools ?? {}), type: "object" },
24217
24257
  ...options?.integrations && {
@@ -24740,6 +24780,7 @@ var PID_POLL_INTERVAL_MS = 500;
24740
24780
  var config = null;
24741
24781
  var cleanupPromise = null;
24742
24782
  var started = false;
24783
+ var localPidKnownGone = false;
24743
24784
  var exit = (code = 0) => {
24744
24785
  try {
24745
24786
  process.exit(code);
@@ -24779,26 +24820,43 @@ var startPidPolling = (pid) => {
24779
24820
  pidPollTimer = setInterval(() => {
24780
24821
  try {
24781
24822
  process.kill(pid, 0);
24782
- } catch {
24783
- if (pidPollTimer) {
24784
- clearInterval(pidPollTimer);
24785
- pidPollTimer = null;
24786
- }
24787
- void runCleanup().finally(() => exit(0));
24823
+ return;
24824
+ } catch (error) {
24825
+ const err = error;
24826
+ if (err.code !== "ESRCH") return;
24827
+ }
24828
+ localPidKnownGone = true;
24829
+ if (pidPollTimer) {
24830
+ clearInterval(pidPollTimer);
24831
+ pidPollTimer = null;
24788
24832
  }
24833
+ void runCleanup("Browser process exited").finally(() => exit(0));
24789
24834
  }, PID_POLL_INTERVAL_MS);
24790
24835
  };
24791
- var cleanupLocal = async (cfg) => {
24836
+ var cleanupLocal = async (cfg, reason) => {
24837
+ const deletingUserDataDir = Boolean(
24838
+ cfg.createdTempProfile && !cfg.preserveUserDataDir && cfg.userDataDir
24839
+ );
24792
24840
  await cleanupLocalBrowser({
24793
- killChrome: cfg.pid ? () => politeKill(cfg.pid) : void 0,
24841
+ // If polling already observed ESRCH, avoid a follow-up PID kill.
24842
+ // The PID could be reused by a different process before cleanup runs.
24843
+ killChrome: cfg.pid && !localPidKnownGone ? () => {
24844
+ console.error(
24845
+ `[shutdown-supervisor] Shutting down Chrome pid=${cfg.pid} (reason=${reason}, deletingUserDataDir=${deletingUserDataDir})`
24846
+ );
24847
+ return politeKill(cfg.pid);
24848
+ } : void 0,
24794
24849
  userDataDir: cfg.userDataDir,
24795
24850
  createdTempProfile: cfg.createdTempProfile,
24796
24851
  preserveUserDataDir: cfg.preserveUserDataDir
24797
24852
  });
24798
24853
  };
24799
- var cleanupBrowserbase = async (cfg) => {
24854
+ var cleanupBrowserbase = async (cfg, reason) => {
24800
24855
  if (!cfg.apiKey || !cfg.projectId || !cfg.sessionId) return;
24801
24856
  try {
24857
+ console.error(
24858
+ `[shutdown-supervisor] Ending Browserbase session ${cfg.sessionId} (reason=${reason})`
24859
+ );
24802
24860
  const bb = new import_sdk4.default({ apiKey: cfg.apiKey });
24803
24861
  await bb.sessions.update(cfg.sessionId, {
24804
24862
  status: "REQUEST_RELEASE",
@@ -24807,17 +24865,17 @@ var cleanupBrowserbase = async (cfg) => {
24807
24865
  } catch {
24808
24866
  }
24809
24867
  };
24810
- var runCleanup = () => {
24868
+ var runCleanup = (reason) => {
24811
24869
  if (!cleanupPromise) {
24812
24870
  cleanupPromise = (async () => {
24813
24871
  const cfg = config;
24814
24872
  if (!cfg) return;
24815
24873
  if (cfg.kind === "LOCAL") {
24816
- await cleanupLocal(cfg);
24874
+ await cleanupLocal(cfg, reason);
24817
24875
  return;
24818
24876
  }
24819
24877
  if (cfg.kind === "STAGEHAND_API") {
24820
- await cleanupBrowserbase(cfg);
24878
+ await cleanupBrowserbase(cfg, reason);
24821
24879
  }
24822
24880
  })();
24823
24881
  }
@@ -24825,12 +24883,13 @@ var runCleanup = () => {
24825
24883
  };
24826
24884
  var applyConfig = (nextConfig) => {
24827
24885
  config = nextConfig;
24886
+ localPidKnownGone = false;
24828
24887
  if (config.kind === "LOCAL" && config.pid) {
24829
24888
  startPidPolling(config.pid);
24830
24889
  }
24831
24890
  };
24832
- var onLifelineClosed = () => {
24833
- void runCleanup().finally(() => exit(0));
24891
+ var onLifelineClosed = (reason) => {
24892
+ void runCleanup(reason).finally(() => exit(0));
24834
24893
  };
24835
24894
  var parseConfigFromArgv = (argv = process.argv.slice(2)) => {
24836
24895
  const prefix = "--supervisor-config=";
@@ -24848,9 +24907,18 @@ var runShutdownSupervisor = (initialConfig) => {
24848
24907
  applyConfig(initialConfig);
24849
24908
  try {
24850
24909
  process.stdin.resume();
24851
- process.stdin.on("end", onLifelineClosed);
24852
- process.stdin.on("close", onLifelineClosed);
24853
- process.stdin.on("error", onLifelineClosed);
24910
+ process.stdin.on(
24911
+ "end",
24912
+ () => onLifelineClosed("Stagehand process completed")
24913
+ );
24914
+ process.stdin.on(
24915
+ "close",
24916
+ () => onLifelineClosed("Stagehand process completed")
24917
+ );
24918
+ process.stdin.on(
24919
+ "error",
24920
+ () => onLifelineClosed("Stagehand process crashed or was killed")
24921
+ );
24854
24922
  } catch {
24855
24923
  }
24856
24924
  };
@@ -24922,6 +24990,7 @@ var maybeRunShutdownSupervisorFromArgv = (argv = process.argv.slice(2)) => {
24922
24990
  StagehandSnapshotError,
24923
24991
  StreamingCallbacksInNonStreamingModeError,
24924
24992
  TimeoutError,
24993
+ UnderstudyCommandException,
24925
24994
  UnsupportedAISDKModelProviderError,
24926
24995
  UnsupportedModelError,
24927
24996
  UnsupportedModelProviderError,