@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.
- package/dist/cjs/cli.js +45 -17
- package/dist/cjs/cli.js.map +2 -2
- package/dist/cjs/index.js +192 -123
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/lib/logger.d.ts +1 -1
- package/dist/cjs/lib/modelUtils.d.ts +3 -0
- package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -1
- package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -1
- package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +2 -1
- package/dist/cjs/lib/v3/agent/tools/index.d.ts +2 -2
- package/dist/cjs/lib/v3/api.d.ts +16 -1
- package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
- package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +12 -12
- package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +2 -2
- package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +1 -0
- package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js +1 -0
- package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +1 -0
- package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +1 -0
- package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +1 -1
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +2 -2
- package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
- package/dist/cjs/lib/v3/types/public/api.d.ts +8 -0
- package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
- package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
- package/dist/cjs/tests/agent-execution-model.test.js +139 -0
- package/dist/cjs/tests/agent-execution-model.test.js.map +7 -0
- package/dist/cjs/tests/api-multiregion.test.js +73 -0
- package/dist/cjs/tests/api-multiregion.test.js.map +7 -0
- package/dist/cjs/tests/model-utils.test.js +43 -0
- package/dist/cjs/tests/model-utils.test.js.map +7 -0
- package/dist/cjs/tests/public-api/export-surface.test.js +1 -0
- package/dist/cjs/tests/public-api/export-surface.test.js.map +1 -1
- package/dist/cjs/tests/public-api/llm-and-agents.test.js +1 -0
- package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/cjs/tests/public-api/public-error-types.test.js +3 -1
- package/dist/cjs/tests/public-api/public-error-types.test.js.map +2 -2
- package/dist/cjs/tests/public-api/v3-core.test.js +1 -0
- package/dist/cjs/tests/public-api/v3-core.test.js.map +1 -1
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js +2 -0
- package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +1 -1
- package/dist/cjs/tests/understudy-command-exception.test.js +52 -0
- package/dist/cjs/tests/understudy-command-exception.test.js.map +7 -0
- package/dist/esm/lib/logger.d.ts +1 -1
- package/dist/esm/lib/v3/cli.d.ts +2 -0
- package/dist/esm/lib/v3/cli.js +10 -0
- package/dist/esm/lib/v3/cli.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
- package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
- package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
- package/dist/esm/lib/v3/index.d.ts +1 -0
- package/dist/esm/lib/v3/index.js +1 -0
- package/dist/esm/lib/v3/index.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
- package/dist/esm/lib/v3/shutdown/supervisor.js +93 -64
- package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
- package/dist/esm/lib/v3/shutdown/supervisorClient.js +49 -52
- package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +12 -12
- package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
- package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +2 -2
- package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
- package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +1 -0
- package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/locator-fill.spec.js +1 -0
- package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +1 -0
- package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js +1 -0
- package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +2 -2
- package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
- package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
- package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
- package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
- package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
- package/dist/esm/lib/v3/understudy/context.js +10 -1
- package/dist/esm/lib/v3/understudy/context.js.map +1 -1
- package/dist/esm/lib/v3/understudy/locator.js +2 -2
- package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
- package/dist/esm/lib/v3/understudy/page.js +2 -1
- package/dist/esm/lib/v3/understudy/page.js.map +1 -1
- package/dist/esm/lib/v3/v3.js +2 -6
- package/dist/esm/lib/v3/v3.js.map +1 -1
- package/dist/esm/tests/public-api/export-surface.test.js +2 -0
- package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
- package/dist/esm/tests/public-api/llm-and-agents.test.js +1 -0
- package/dist/esm/tests/public-api/llm-and-agents.test.js.map +1 -1
- package/dist/esm/tests/public-api/public-error-types.test.js +1 -0
- package/dist/esm/tests/public-api/public-error-types.test.js.map +1 -1
- package/dist/esm/tests/public-api/v3-core.test.js +1 -0
- package/dist/esm/tests/public-api/v3-core.test.js.map +1 -1
- package/dist/esm/tests/snapshot-capture-orchestration.test.js +2 -0
- package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +1 -1
- package/package.json +13 -11
- package/dist/esm/lib/v3/tests/envReporter.js +0 -57
- 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
|
|
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
|
|
292
|
-
Please set experimental: true and
|
|
293
|
-
If you wish to use the Stagehand API, please ensure ${featureName} is not defined in your function call,
|
|
294
|
-
and set experimental: false,
|
|
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:
|
|
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
|
|
9929
|
-
__export(
|
|
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(
|
|
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
|
-
|
|
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:
|
|
12219
|
-
trace: { value:
|
|
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
|
|
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
|
-
|
|
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:
|
|
12524
|
-
trace: { value:
|
|
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
|
|
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 (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
22901
|
-
|
|
22902
|
-
|
|
22903
|
-
|
|
22904
|
-
|
|
22905
|
-
|
|
22906
|
-
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
24783
|
-
|
|
24784
|
-
|
|
24785
|
-
|
|
24786
|
-
|
|
24787
|
-
|
|
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
|
-
|
|
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(
|
|
24852
|
-
|
|
24853
|
-
|
|
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,
|