@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
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../tests/public-api/export-surface.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { describe, expect, it } from \"vitest\";\nimport StagehandDefaultExport, * as Stagehand from \"@browserbasehq/stagehand\";\nimport { publicErrorTypes } from \"./public-error-types.test.js\";\n\n// Type matcher guidelines:\n//\n// toEqualTypeOf \u2013 Default. Assert full, deep type equality; any type change should fail.\n// e.g. expectTypeOf<ReturnType<typeof foo>>().toEqualTypeOf<FooResult>()\n//\n// toMatchObjectType \u2013 Assert (part of) an object's shape while allowing extra fields.\n// e.g. expectTypeOf(user).toMatchObjectType<{ id: string; email: string }>()\n//\n// toExtend \u2013 Assert that a type is compatible with a broader contract (assignable/extends).\n// e.g. expectTypeOf<User>().toExtend<BaseUser>()\n\nconst publicApiShape = {\n __internalCreateInMemoryAgentCacheHandle:\n Stagehand.__internalCreateInMemoryAgentCacheHandle,\n AISdkClient: Stagehand.AISdkClient,\n Api: Stagehand.Api,\n AVAILABLE_CUA_MODELS: Stagehand.AVAILABLE_CUA_MODELS,\n AgentProvider: Stagehand.AgentProvider,\n AnnotatedScreenshotText: Stagehand.AnnotatedScreenshotText,\n ConsoleMessage: Stagehand.ConsoleMessage,\n CustomOpenAIClient: Stagehand.CustomOpenAIClient,\n LLMClient: Stagehand.LLMClient,\n LOG_LEVEL_NAMES: Stagehand.LOG_LEVEL_NAMES,\n Response: Stagehand.Response,\n Stagehand: Stagehand.Stagehand,\n V3: Stagehand.V3,\n V3Evaluator: Stagehand.V3Evaluator,\n V3FunctionName: Stagehand.V3FunctionName,\n connectToMCPServer: Stagehand.connectToMCPServer,\n default: StagehandDefaultExport,\n defaultExtractSchema: Stagehand.defaultExtractSchema,\n getAISDKLanguageModel: Stagehand.getAISDKLanguageModel,\n getZodType: Stagehand.getZodType,\n injectUrls: Stagehand.injectUrls,\n isRunningInBun: Stagehand.isRunningInBun,\n isZod3Schema: Stagehand.isZod3Schema,\n isZod4Schema: Stagehand.isZod4Schema,\n jsonSchemaToZod: Stagehand.jsonSchemaToZod,\n loadApiKeyFromEnv: Stagehand.loadApiKeyFromEnv,\n localBrowserLaunchOptionsSchema: Stagehand.localBrowserLaunchOptionsSchema,\n modelToAgentProviderMap: Stagehand.modelToAgentProviderMap,\n pageTextSchema: Stagehand.pageTextSchema,\n providerEnvVarMap: Stagehand.providerEnvVarMap,\n toGeminiSchema: Stagehand.toGeminiSchema,\n toJsonSchema: Stagehand.toJsonSchema,\n tool: Stagehand.tool,\n transformSchema: Stagehand.transformSchema,\n trimTrailingTextNode: Stagehand.trimTrailingTextNode,\n validateZodSchema: Stagehand.validateZodSchema,\n ...publicErrorTypes,\n} as const;\n\ntype StagehandExports = typeof Stagehand & {\n default: typeof StagehandDefaultExport;\n};\n\ntype PublicAPI = {\n [K in keyof typeof publicApiShape]: StagehandExports[K];\n};\n\ndescribe(\"Stagehand public API export surface\", () => {\n it(\"public API shape matches module exports\", () => {\n const _check: PublicAPI = publicApiShape;\n void _check;\n });\n\n it(\"does not expose unexpected top-level exports\", () => {\n const expected = Object.keys(publicApiShape).sort();\n const actual = Object.keys(Stagehand).sort();\n expect(actual).toStrictEqual(expected);\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,QAAQ,UAAU;AACrC,OAAO,6BAA6B,eAAe;AACnD,SAAS,wBAAwB;AAajC,MAAM,iBAAiB;AAAA,EACrB,0CACE,UAAU;AAAA,EACZ,aAAa,UAAU;AAAA,EACvB,KAAK,UAAU;AAAA,EACf,sBAAsB,UAAU;AAAA,EAChC,eAAe,UAAU;AAAA,EACzB,yBAAyB,UAAU;AAAA,EACnC,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,WAAW,UAAU;AAAA,EACrB,iBAAiB,UAAU;AAAA,EAC3B,UAAU,UAAU;AAAA,EACpB,WAAW,UAAU;AAAA,EACrB,IAAI,UAAU;AAAA,EACd,aAAa,UAAU;AAAA,EACvB,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,SAAS;AAAA,EACT,sBAAsB,UAAU;AAAA,EAChC,uBAAuB,UAAU;AAAA,EACjC,YAAY,UAAU;AAAA,EACtB,YAAY,UAAU;AAAA,EACtB,gBAAgB,UAAU;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,cAAc,UAAU;AAAA,EACxB,iBAAiB,UAAU;AAAA,EAC3B,mBAAmB,UAAU;AAAA,EAC7B,iCAAiC,UAAU;AAAA,EAC3C,yBAAyB,UAAU;AAAA,EACnC,gBAAgB,UAAU;AAAA,EAC1B,mBAAmB,UAAU;AAAA,EAC7B,gBAAgB,UAAU;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,MAAM,UAAU;AAAA,EAChB,iBAAiB,UAAU;AAAA,EAC3B,sBAAsB,UAAU;AAAA,EAChC,mBAAmB,UAAU;AAAA,EAC7B,GAAG;AACL;AAUA,SAAS,uCAAuC,MAAM;AACpD,KAAG,2CAA2C,MAAM;AAClD,UAAM,SAAoB;AAAA,
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it } from \"vitest\";\nimport StagehandDefaultExport, * as Stagehand from \"@browserbasehq/stagehand\";\nimport { publicErrorTypes } from \"./public-error-types.test.js\";\n\n// Type matcher guidelines:\n//\n// toEqualTypeOf \u2013 Default. Assert full, deep type equality; any type change should fail.\n// e.g. expectTypeOf<ReturnType<typeof foo>>().toEqualTypeOf<FooResult>()\n//\n// toMatchObjectType \u2013 Assert (part of) an object's shape while allowing extra fields.\n// e.g. expectTypeOf(user).toMatchObjectType<{ id: string; email: string }>()\n//\n// toExtend \u2013 Assert that a type is compatible with a broader contract (assignable/extends).\n// e.g. expectTypeOf<User>().toExtend<BaseUser>()\n\nconst publicApiShape = {\n __internalMaybeRunShutdownSupervisorFromArgv:\n Stagehand.__internalMaybeRunShutdownSupervisorFromArgv,\n __internalCreateInMemoryAgentCacheHandle:\n Stagehand.__internalCreateInMemoryAgentCacheHandle,\n AISdkClient: Stagehand.AISdkClient,\n Api: Stagehand.Api,\n AVAILABLE_CUA_MODELS: Stagehand.AVAILABLE_CUA_MODELS,\n AgentProvider: Stagehand.AgentProvider,\n AnnotatedScreenshotText: Stagehand.AnnotatedScreenshotText,\n ConsoleMessage: Stagehand.ConsoleMessage,\n CustomOpenAIClient: Stagehand.CustomOpenAIClient,\n LLMClient: Stagehand.LLMClient,\n LOG_LEVEL_NAMES: Stagehand.LOG_LEVEL_NAMES,\n Response: Stagehand.Response,\n Stagehand: Stagehand.Stagehand,\n V3: Stagehand.V3,\n V3Evaluator: Stagehand.V3Evaluator,\n V3FunctionName: Stagehand.V3FunctionName,\n connectToMCPServer: Stagehand.connectToMCPServer,\n default: StagehandDefaultExport,\n defaultExtractSchema: Stagehand.defaultExtractSchema,\n getAISDKLanguageModel: Stagehand.getAISDKLanguageModel,\n getZodType: Stagehand.getZodType,\n injectUrls: Stagehand.injectUrls,\n isRunningInBun: Stagehand.isRunningInBun,\n isZod3Schema: Stagehand.isZod3Schema,\n isZod4Schema: Stagehand.isZod4Schema,\n jsonSchemaToZod: Stagehand.jsonSchemaToZod,\n loadApiKeyFromEnv: Stagehand.loadApiKeyFromEnv,\n localBrowserLaunchOptionsSchema: Stagehand.localBrowserLaunchOptionsSchema,\n modelToAgentProviderMap: Stagehand.modelToAgentProviderMap,\n pageTextSchema: Stagehand.pageTextSchema,\n providerEnvVarMap: Stagehand.providerEnvVarMap,\n toGeminiSchema: Stagehand.toGeminiSchema,\n toJsonSchema: Stagehand.toJsonSchema,\n tool: Stagehand.tool,\n transformSchema: Stagehand.transformSchema,\n trimTrailingTextNode: Stagehand.trimTrailingTextNode,\n validateZodSchema: Stagehand.validateZodSchema,\n ...publicErrorTypes,\n} as const;\n\ntype StagehandExports = typeof Stagehand & {\n default: typeof StagehandDefaultExport;\n};\n\ntype PublicAPI = {\n [K in keyof typeof publicApiShape]: StagehandExports[K];\n};\n\ndescribe(\"Stagehand public API export surface\", () => {\n it(\"public API shape matches module exports\", () => {\n const _check: PublicAPI = publicApiShape;\n void _check;\n });\n\n it(\"does not expose unexpected top-level exports\", () => {\n const expected = Object.keys(publicApiShape).sort();\n const actual = Object.keys(Stagehand).sort();\n expect(actual).toStrictEqual(expected);\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,UAAU,QAAQ,UAAU;AACrC,OAAO,6BAA6B,eAAe;AACnD,SAAS,wBAAwB;AAajC,MAAM,iBAAiB;AAAA,EACrB,8CACE,UAAU;AAAA,EACZ,0CACE,UAAU;AAAA,EACZ,aAAa,UAAU;AAAA,EACvB,KAAK,UAAU;AAAA,EACf,sBAAsB,UAAU;AAAA,EAChC,eAAe,UAAU;AAAA,EACzB,yBAAyB,UAAU;AAAA,EACnC,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,WAAW,UAAU;AAAA,EACrB,iBAAiB,UAAU;AAAA,EAC3B,UAAU,UAAU;AAAA,EACpB,WAAW,UAAU;AAAA,EACrB,IAAI,UAAU;AAAA,EACd,aAAa,UAAU;AAAA,EACvB,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,SAAS;AAAA,EACT,sBAAsB,UAAU;AAAA,EAChC,uBAAuB,UAAU;AAAA,EACjC,YAAY,UAAU;AAAA,EACtB,YAAY,UAAU;AAAA,EACtB,gBAAgB,UAAU;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,cAAc,UAAU;AAAA,EACxB,iBAAiB,UAAU;AAAA,EAC3B,mBAAmB,UAAU;AAAA,EAC7B,iCAAiC,UAAU;AAAA,EAC3C,yBAAyB,UAAU;AAAA,EACnC,gBAAgB,UAAU;AAAA,EAC1B,mBAAmB,UAAU;AAAA,EAC7B,gBAAgB,UAAU;AAAA,EAC1B,cAAc,UAAU;AAAA,EACxB,MAAM,UAAU;AAAA,EAChB,iBAAiB,UAAU;AAAA,EAC3B,sBAAsB,UAAU;AAAA,EAChC,mBAAmB,UAAU;AAAA,EAC7B,GAAG;AACL;AAUA,SAAS,uCAAuC,MAAM;AACpD,KAAG,2CAA2C,MAAM;AAClD,UAAM,SAAoB;AAC1B,SAAK;AAAA,EACP,CAAC;AAED,KAAG,gDAAgD,MAAM;AACvD,UAAM,WAAW,OAAO,KAAK,cAAc,EAAE,KAAK;AAClD,UAAM,SAAS,OAAO,KAAK,SAAS,EAAE,KAAK;AAC3C,WAAO,MAAM,EAAE,cAAc,QAAQ;AAAA,EACvC,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../tests/public-api/llm-and-agents.test.ts"],
|
|
4
4
|
"sourcesContent": ["import { describe, expect, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\ndescribe(\"LLM and Agents public API types\", () => {\n describe(\"AISdkClient\", () => {\n type AISdkClientInstance = InstanceType<typeof Stagehand.AISdkClient>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AISdkClient).toBeDefined();\n });\n\n it(\"extends LLMClient\", () => {\n expectTypeOf<AISdkClientInstance>().toExtend<Stagehand.LLMClient>();\n });\n\n it(\"constructor accepts model parameter\", () => {\n // AISdkClient constructor takes { model: LanguageModelV2 }\n type CtorParams = ConstructorParameters<typeof Stagehand.AISdkClient>;\n expectTypeOf<CtorParams[\"length\"]>().toEqualTypeOf<1>();\n });\n });\n\n describe(\"AVAILABLE_CUA_MODELS\", () => {\n const expectedModels = [\n \"openai/computer-use-preview\",\n \"openai/computer-use-preview-2025-03-11\",\n \"anthropic/claude-3-7-sonnet-latest\",\n \"anthropic/claude-opus-4-5-20251101\",\n \"anthropic/claude-opus-4-6\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"google/gemini-3-flash-preview\",\n \"google/gemini-3-pro-preview\",\n \"microsoft/fara-7b\",\n ] as const;\n\n it(\"AvailableCuaModel matches the known literals\", () => {\n expectTypeOf<Stagehand.AvailableCuaModel>().toEqualTypeOf<\n (typeof expectedModels)[number]\n >();\n void expectedModels; // Mark as used to satisfy ESLint\n });\n });\n\n describe(\"AgentProvider\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n\n it(\"is exported\", () => {\n expect(Stagehand.AgentProvider).toBeDefined();\n });\n\n it(\"has getClient method\", () => {\n expectTypeOf<AgentProviderInstance[\"getClient\"]>().toBeCallableWith(\n \"test-model\",\n );\n });\n\n it(\"constructor accepts logger parameter\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.AgentProvider>\n >().toEqualTypeOf<[(message: Stagehand.LogLine) => void]>();\n });\n });\n\n describe(\"AnnotatedScreenshotText\", () => {\n type ExpectedAnnotatedScreenshotText = string;\n\n it(\"is a string literal\", () => {\n expectTypeOf<\n typeof Stagehand.AnnotatedScreenshotText\n >().toExtend<ExpectedAnnotatedScreenshotText>();\n });\n });\n\n describe(\"ConsoleMessage\", () => {\n type ExpectedShape = {\n type: () => string;\n text: () => string;\n args: () => unknown[];\n location: () => {\n url?: string;\n lineNumber?: number;\n columnNumber?: number;\n };\n page: () => unknown;\n timestamp: () => number | undefined;\n raw: () => unknown;\n toString: () => string;\n };\n\n type ConsoleMessageInstance = InstanceType<typeof Stagehand.ConsoleMessage>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ConsoleMessageInstance>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"AgentClient\", () => {\n type AgentProviderInstance = InstanceType<typeof Stagehand.AgentProvider>;\n type GetClientReturn = ReturnType<AgentProviderInstance[\"getClient\"]>;\n\n it(\"getClient returns object with expected methods\", () => {\n type ExpectedShape = {\n execute: (\n options: Stagehand.AgentExecutionOptions,\n ) => Promise<Stagehand.AgentResult>;\n captureScreenshot: (\n options?: Record<string, unknown>,\n ) => Promise<unknown>;\n setViewport: (width: number, height: number) => void;\n setCurrentUrl: (url: string) => void;\n setScreenshotProvider: (provider: () => Promise<string>) => void;\n setActionHandler: (\n handler: (action: Stagehand.AgentAction) => Promise<void>,\n ) => void;\n };\n expectTypeOf<GetClientReturn>().toExtend<ExpectedShape>();\n });\n });\n\n describe(\"LLMClient\", () => {\n type ExpectedShape = {\n type: \"openai\" | \"anthropic\" | \"cerebras\" | \"groq\" | (string & {});\n modelName: Stagehand.AvailableModel | (string & {});\n hasVision: boolean;\n clientOptions: Stagehand.ClientOptions;\n userProvidedInstructions?: string;\n };\n\n type ExpectedCtorParams = [Stagehand.AvailableModel, string?];\n\n type ExpectedBasicOptions = {\n options: {\n messages: Array<{\n role: \"system\" | \"user\" | \"assistant\";\n content: string | Array<unknown>;\n }>;\n };\n logger: (message: unknown) => void;\n retries?: number;\n };\n\n type ExpectedWithResponseModel = ExpectedBasicOptions & {\n options: ExpectedBasicOptions[\"options\"] & {\n response_model: {\n name: string;\n schema: Stagehand.StagehandZodSchema;\n };\n };\n };\n\n type LLMClientInstance = InstanceType<typeof Stagehand.LLMClient>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<LLMClientInstance>().toExtend<ExpectedShape>();\n });\n\n it(\"constructor parameters match expected signature\", () => {\n expectTypeOf<\n ConstructorParameters<typeof Stagehand.LLMClient>\n >().toEqualTypeOf<ExpectedCtorParams>();\n });\n\n it(\"createChatCompletion can be called with basic options\", () => {\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Hello\",\n },\n ],\n },\n logger: () => {},\n } satisfies ExpectedBasicOptions);\n });\n\n it(\"createChatCompletion can be called with response_model\", () => {\n const mockSchema = {} as Stagehand.StagehandZodSchema;\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toBeCallableWith({\n options: {\n messages: [\n {\n role: \"user\",\n content: \"Extract data\",\n },\n ],\n response_model: {\n name: \"extracted\",\n schema: mockSchema,\n },\n },\n logger: () => {},\n } satisfies ExpectedWithResponseModel);\n });\n\n it(\"createChatCompletion supports generic return type\", () => {\n type Result = { custom: string };\n type ExpectedSignature = (\n options: Stagehand.CreateChatCompletionOptions,\n ) => Promise<Result>;\n\n expectTypeOf<\n LLMClientInstance[\"createChatCompletion\"]\n >().toExtend<ExpectedSignature>();\n });\n\n it(\"has additional methods\", () => {\n // These methods exist on LLMClient but have complex signatures from the 'ai' library\n // We verify they exist by checking they're functions\n expectTypeOf<LLMClientInstance[\"generateText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamText\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"streamObject\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateImage\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embed\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"embedMany\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"transcribe\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n expectTypeOf<LLMClientInstance[\"generateSpeech\"]>().toExtend<\n (...args: unknown[]) => unknown\n >();\n });\n });\n\n describe(\"modelToAgentProviderMap\", () => {\n type ExpectedModelToAgentProviderMap = Record<\n string,\n Stagehand.AgentProviderType\n >;\n\n it(\"only stores valid provider types\", () => {\n expectTypeOf<\n typeof Stagehand.modelToAgentProviderMap\n >().toExtend<ExpectedModelToAgentProviderMap>();\n });\n });\n\n describe(\"Response\", () => {\n type ExpectedShape = {\n url: () => string;\n status: () => number;\n statusText: () => string;\n ok: () => boolean;\n frame: () => unknown;\n fromServiceWorker: () => boolean;\n securityDetails: () => Promise<unknown>;\n serverAddr: () => Promise<unknown>;\n headers: () => Record<string, string>;\n allHeaders: () => Promise<Record<string, string>>;\n headerValue: (name: string) => Promise<string | null>;\n headerValues: (name: string) => Promise<string[]>;\n headersArray: () => Promise<Array<{ name: string; value: string }>>;\n body: () => Promise<Buffer>;\n text: () => Promise<string>;\n json: <T = unknown>() => Promise<T>;\n finished: () => Promise<null | Error>;\n markFinished: (error: Error | null) => void;\n applyExtraInfo: (info: unknown) => void;\n };\n\n type ResponseInstance = InstanceType<typeof Stagehand.Response>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<ResponseInstance>().toExtend<ExpectedShape>();\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,QAAQ,cAAc,UAAU;AACnD,YAAY,eAAe;AAE3B,SAAS,mCAAmC,MAAM;AAChD,WAAS,eAAe,MAAM;AAG5B,OAAG,eAAe,MAAM;AACtB,aAAO,UAAU,WAAW,EAAE,YAAY;AAAA,IAC5C,CAAC;AAED,OAAG,qBAAqB,MAAM;AAC5B,mBAAkC,EAAE,SAA8B;AAAA,IACpE,CAAC;AAED,OAAG,uCAAuC,MAAM;AAG9C,mBAAmC,EAAE,cAAiB;AAAA,IACxD,CAAC;AAAA,EACH,CAAC;AAED,WAAS,wBAAwB,MAAM;AACrC,UAAM,iBAAiB;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,OAAG,gDAAgD,MAAM;AACvD,mBAA0C,EAAE,cAE1C;AAAA,
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../tests/public-api/public-error-types.test.ts"],
|
|
4
4
|
"sourcesContent": ["import { describe, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\nexport const publicErrorTypes = {\n AgentAbortError: Stagehand.AgentAbortError,\n AgentScreenshotProviderError: Stagehand.AgentScreenshotProviderError,\n BrowserbaseSessionNotFoundError: Stagehand.BrowserbaseSessionNotFoundError,\n CaptchaTimeoutError: Stagehand.CaptchaTimeoutError,\n ConnectionTimeoutError: Stagehand.ConnectionTimeoutError,\n ContentFrameNotFoundError: Stagehand.ContentFrameNotFoundError,\n CreateChatCompletionResponseError:\n Stagehand.CreateChatCompletionResponseError,\n CuaModelRequiredError: Stagehand.CuaModelRequiredError,\n ElementNotVisibleError: Stagehand.ElementNotVisibleError,\n ExperimentalApiConflictError: Stagehand.ExperimentalApiConflictError,\n ExperimentalNotConfiguredError: Stagehand.ExperimentalNotConfiguredError,\n HandlerNotInitializedError: Stagehand.HandlerNotInitializedError,\n InvalidAISDKModelFormatError: Stagehand.InvalidAISDKModelFormatError,\n LLMResponseError: Stagehand.LLMResponseError,\n MCPConnectionError: Stagehand.MCPConnectionError,\n MissingEnvironmentVariableError: Stagehand.MissingEnvironmentVariableError,\n MissingLLMConfigurationError: Stagehand.MissingLLMConfigurationError,\n PageNotFoundError: Stagehand.PageNotFoundError,\n ResponseBodyError: Stagehand.ResponseBodyError,\n ResponseParseError: Stagehand.ResponseParseError,\n StagehandAPIError: Stagehand.StagehandAPIError,\n StagehandAPIUnauthorizedError: Stagehand.StagehandAPIUnauthorizedError,\n StagehandClickError: Stagehand.StagehandClickError,\n StagehandClosedError: Stagehand.StagehandClosedError,\n StagehandDefaultError: Stagehand.StagehandDefaultError,\n StagehandDomProcessError: Stagehand.StagehandDomProcessError,\n StagehandElementNotFoundError: Stagehand.StagehandElementNotFoundError,\n StagehandEnvironmentError: Stagehand.StagehandEnvironmentError,\n StagehandError: Stagehand.StagehandError,\n StagehandEvalError: Stagehand.StagehandEvalError,\n StagehandHttpError: Stagehand.StagehandHttpError,\n StagehandIframeError: Stagehand.StagehandIframeError,\n StagehandInitError: Stagehand.StagehandInitError,\n StagehandInvalidArgumentError: Stagehand.StagehandInvalidArgumentError,\n StagehandLocatorError: Stagehand.StagehandLocatorError,\n StagehandMissingArgumentError: Stagehand.StagehandMissingArgumentError,\n StagehandNotInitializedError: Stagehand.StagehandNotInitializedError,\n StagehandResponseBodyError: Stagehand.StagehandResponseBodyError,\n StagehandResponseParseError: Stagehand.StagehandResponseParseError,\n StagehandServerError: Stagehand.StagehandServerError,\n StagehandShadowRootMissingError: Stagehand.StagehandShadowRootMissingError,\n StagehandShadowSegmentEmptyError: Stagehand.StagehandShadowSegmentEmptyError,\n StagehandShadowSegmentNotFoundError:\n Stagehand.StagehandShadowSegmentNotFoundError,\n StreamingCallbacksInNonStreamingModeError:\n Stagehand.StreamingCallbacksInNonStreamingModeError,\n StagehandSnapshotError: Stagehand.StagehandSnapshotError,\n TimeoutError: Stagehand.TimeoutError,\n UnsupportedAISDKModelProviderError:\n Stagehand.UnsupportedAISDKModelProviderError,\n UnsupportedModelError: Stagehand.UnsupportedModelError,\n UnsupportedModelProviderError: Stagehand.UnsupportedModelProviderError,\n XPathResolutionError: Stagehand.XPathResolutionError,\n ZodSchemaValidationError: Stagehand.ZodSchemaValidationError,\n ActTimeoutError: Stagehand.ActTimeoutError,\n ObserveTimeoutError: Stagehand.ObserveTimeoutError,\n ExtractTimeoutError: Stagehand.ExtractTimeoutError,\n UnderstudyCommandException: Stagehand.UnderstudyCommandException,\n} as const;\n\nconst errorTypes = Object.keys(publicErrorTypes) as Array<\n keyof typeof publicErrorTypes\n>;\n\ndescribe(\"Stagehand public error types\", () => {\n describe(\"errors\", () => {\n it.each(errorTypes)(\"%s extends Error\", (errorTypeName) => {\n const ErrorClass = Stagehand[errorTypeName];\n type ErrorClassType = typeof ErrorClass;\n expectTypeOf<InstanceType<ErrorClassType>>().toExtend<Error>();\n void ErrorClass; // Mark as used to satisfy ESLint\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,cAAc,UAAU;AAC3C,YAAY,eAAe;AAEpB,MAAM,mBAAmB;AAAA,EAC9B,iBAAiB,UAAU;AAAA,EAC3B,8BAA8B,UAAU;AAAA,EACxC,iCAAiC,UAAU;AAAA,EAC3C,qBAAqB,UAAU;AAAA,EAC/B,wBAAwB,UAAU;AAAA,EAClC,2BAA2B,UAAU;AAAA,EACrC,mCACE,UAAU;AAAA,EACZ,uBAAuB,UAAU;AAAA,EACjC,wBAAwB,UAAU;AAAA,EAClC,8BAA8B,UAAU;AAAA,EACxC,gCAAgC,UAAU;AAAA,EAC1C,4BAA4B,UAAU;AAAA,EACtC,8BAA8B,UAAU;AAAA,EACxC,kBAAkB,UAAU;AAAA,EAC5B,oBAAoB,UAAU;AAAA,EAC9B,iCAAiC,UAAU;AAAA,EAC3C,8BAA8B,UAAU;AAAA,EACxC,mBAAmB,UAAU;AAAA,EAC7B,mBAAmB,UAAU;AAAA,EAC7B,oBAAoB,UAAU;AAAA,EAC9B,mBAAmB,UAAU;AAAA,EAC7B,+BAA+B,UAAU;AAAA,EACzC,qBAAqB,UAAU;AAAA,EAC/B,sBAAsB,UAAU;AAAA,EAChC,uBAAuB,UAAU;AAAA,EACjC,0BAA0B,UAAU;AAAA,EACpC,+BAA+B,UAAU;AAAA,EACzC,2BAA2B,UAAU;AAAA,EACrC,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,oBAAoB,UAAU;AAAA,EAC9B,sBAAsB,UAAU;AAAA,EAChC,oBAAoB,UAAU;AAAA,EAC9B,+BAA+B,UAAU;AAAA,EACzC,uBAAuB,UAAU;AAAA,EACjC,+BAA+B,UAAU;AAAA,EACzC,8BAA8B,UAAU;AAAA,EACxC,4BAA4B,UAAU;AAAA,EACtC,6BAA6B,UAAU;AAAA,EACvC,sBAAsB,UAAU;AAAA,EAChC,iCAAiC,UAAU;AAAA,EAC3C,kCAAkC,UAAU;AAAA,EAC5C,qCACE,UAAU;AAAA,EACZ,2CACE,UAAU;AAAA,EACZ,wBAAwB,UAAU;AAAA,EAClC,cAAc,UAAU;AAAA,EACxB,oCACE,UAAU;AAAA,EACZ,uBAAuB,UAAU;AAAA,EACjC,+BAA+B,UAAU;AAAA,EACzC,sBAAsB,UAAU;AAAA,EAChC,0BAA0B,UAAU;AAAA,EACpC,iBAAiB,UAAU;AAAA,EAC3B,qBAAqB,UAAU;AAAA,EAC/B,qBAAqB,UAAU;AAAA,EAC/B,4BAA4B,UAAU;AACxC;AAEA,MAAM,aAAa,OAAO,KAAK,gBAAgB;AAI/C,SAAS,gCAAgC,MAAM;AAC7C,WAAS,UAAU,MAAM;AACvB,OAAG,KAAK,UAAU,EAAE,oBAAoB,CAAC,kBAAkB;AACzD,YAAM,aAAa,UAAU,aAAa;AAE1C,mBAA2C,EAAE,SAAgB;AAAA,
|
|
5
|
+
"mappings": "AAAA,SAAS,UAAU,cAAc,UAAU;AAC3C,YAAY,eAAe;AAEpB,MAAM,mBAAmB;AAAA,EAC9B,iBAAiB,UAAU;AAAA,EAC3B,8BAA8B,UAAU;AAAA,EACxC,iCAAiC,UAAU;AAAA,EAC3C,qBAAqB,UAAU;AAAA,EAC/B,wBAAwB,UAAU;AAAA,EAClC,2BAA2B,UAAU;AAAA,EACrC,mCACE,UAAU;AAAA,EACZ,uBAAuB,UAAU;AAAA,EACjC,wBAAwB,UAAU;AAAA,EAClC,8BAA8B,UAAU;AAAA,EACxC,gCAAgC,UAAU;AAAA,EAC1C,4BAA4B,UAAU;AAAA,EACtC,8BAA8B,UAAU;AAAA,EACxC,kBAAkB,UAAU;AAAA,EAC5B,oBAAoB,UAAU;AAAA,EAC9B,iCAAiC,UAAU;AAAA,EAC3C,8BAA8B,UAAU;AAAA,EACxC,mBAAmB,UAAU;AAAA,EAC7B,mBAAmB,UAAU;AAAA,EAC7B,oBAAoB,UAAU;AAAA,EAC9B,mBAAmB,UAAU;AAAA,EAC7B,+BAA+B,UAAU;AAAA,EACzC,qBAAqB,UAAU;AAAA,EAC/B,sBAAsB,UAAU;AAAA,EAChC,uBAAuB,UAAU;AAAA,EACjC,0BAA0B,UAAU;AAAA,EACpC,+BAA+B,UAAU;AAAA,EACzC,2BAA2B,UAAU;AAAA,EACrC,gBAAgB,UAAU;AAAA,EAC1B,oBAAoB,UAAU;AAAA,EAC9B,oBAAoB,UAAU;AAAA,EAC9B,sBAAsB,UAAU;AAAA,EAChC,oBAAoB,UAAU;AAAA,EAC9B,+BAA+B,UAAU;AAAA,EACzC,uBAAuB,UAAU;AAAA,EACjC,+BAA+B,UAAU;AAAA,EACzC,8BAA8B,UAAU;AAAA,EACxC,4BAA4B,UAAU;AAAA,EACtC,6BAA6B,UAAU;AAAA,EACvC,sBAAsB,UAAU;AAAA,EAChC,iCAAiC,UAAU;AAAA,EAC3C,kCAAkC,UAAU;AAAA,EAC5C,qCACE,UAAU;AAAA,EACZ,2CACE,UAAU;AAAA,EACZ,wBAAwB,UAAU;AAAA,EAClC,cAAc,UAAU;AAAA,EACxB,oCACE,UAAU;AAAA,EACZ,uBAAuB,UAAU;AAAA,EACjC,+BAA+B,UAAU;AAAA,EACzC,sBAAsB,UAAU;AAAA,EAChC,0BAA0B,UAAU;AAAA,EACpC,iBAAiB,UAAU;AAAA,EAC3B,qBAAqB,UAAU;AAAA,EAC/B,qBAAqB,UAAU;AAAA,EAC/B,4BAA4B,UAAU;AACxC;AAEA,MAAM,aAAa,OAAO,KAAK,gBAAgB;AAI/C,SAAS,gCAAgC,MAAM;AAC7C,WAAS,UAAU,MAAM;AACvB,OAAG,KAAK,UAAU,EAAE,oBAAoB,CAAC,kBAAkB;AACzD,YAAM,aAAa,UAAU,aAAa;AAE1C,mBAA2C,EAAE,SAAgB;AAC7D,WAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../tests/public-api/v3-core.test.ts"],
|
|
4
4
|
"sourcesContent": ["import { describe, expect, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\ndescribe(\"V3 Core public API types\", () => {\n describe(\"Stagehand\", () => {\n type ExpectedShape = {\n init: () => Promise<void>;\n close: (opts?: { force?: boolean }) => Promise<void>;\n act: (\n input: string | Stagehand.Action,\n options?: Stagehand.ActOptions,\n ) => Promise<Stagehand.ActResult>;\n extract: (...args: unknown[]) => Promise<unknown>;\n observe: (...args: unknown[]) => Promise<Stagehand.Action[]>;\n agent: (config?: Stagehand.AgentConfig) => {\n execute: (\n instructionOrOptions: string | Stagehand.AgentExecuteOptions,\n ) => Promise<Stagehand.AgentResult>;\n };\n connectURL: () => string;\n context: unknown;\n metrics: Promise<Stagehand.StagehandMetrics>;\n history: Promise<ReadonlyArray<Stagehand.HistoryEntry>>;\n llmClient: Stagehand.LLMClient;\n browserbaseSessionID: string | undefined;\n browserbaseSessionURL: string | undefined;\n browserbaseDebugURL: string | undefined;\n experimental: boolean;\n logInferenceToFile: boolean;\n verbose: 0 | 1 | 2;\n logger: (logLine: Stagehand.LogLine) => void;\n isAgentReplayActive: () => boolean;\n recordAgentReplayStep: (step: unknown) => void;\n };\n\n type StagehandInstance = InstanceType<typeof Stagehand.Stagehand>;\n\n it(\"has correct public interface shape\", () => {\n expectTypeOf<StagehandInstance>().toExtend<ExpectedShape>();\n });\n\n it(\"act accepts Action as first parameter\", () => {\n const mockAction = {} as Stagehand.Action;\n expectTypeOf<StagehandInstance[\"act\"]>().toBeCallableWith(\n mockAction,\n {} as Stagehand.ActOptions,\n );\n });\n\n it(\"extract accepts instruction and schema\", () => {\n const mockSchema = {} as Stagehand.StagehandZodSchema;\n expectTypeOf<StagehandInstance[\"extract\"]>().toBeCallableWith(\n \"instruction\",\n mockSchema,\n {} as Stagehand.ExtractOptions,\n );\n });\n\n it(\"observe accepts instruction and options\", () => {\n expectTypeOf<StagehandInstance[\"observe\"]>().toBeCallableWith(\n \"instruction\",\n {} as Stagehand.ObserveOptions,\n );\n });\n\n it(\"agent execute accepts page option\", () => {\n type AgentReturn = ReturnType<StagehandInstance[\"agent\"]>;\n const mockPage = {} as Stagehand.AnyPage;\n expectTypeOf<AgentReturn[\"execute\"]>().toBeCallableWith({\n instruction: \"test\",\n page: mockPage,\n } satisfies Stagehand.AgentExecuteOptions);\n });\n });\n\n describe(\"StagehandMetrics\", () => {\n type ExpectedStagehandMetrics = {\n actPromptTokens: number;\n actCompletionTokens: number;\n actReasoningTokens: number;\n actCachedInputTokens: number;\n actInferenceTimeMs: number;\n extractPromptTokens: number;\n extractCompletionTokens: number;\n extractReasoningTokens: number;\n extractCachedInputTokens: number;\n extractInferenceTimeMs: number;\n observePromptTokens: number;\n observeCompletionTokens: number;\n observeReasoningTokens: number;\n observeCachedInputTokens: number;\n observeInferenceTimeMs: number;\n agentPromptTokens: number;\n agentCompletionTokens: number;\n agentReasoningTokens: number;\n agentCachedInputTokens: number;\n agentInferenceTimeMs: number;\n totalPromptTokens: number;\n totalCompletionTokens: number;\n totalReasoningTokens: number;\n totalCachedInputTokens: number;\n totalInferenceTimeMs: number;\n };\n\n it(\"matches the published metrics shape\", () => {\n expectTypeOf<Stagehand.StagehandMetrics>().toEqualTypeOf<ExpectedStagehandMetrics>();\n });\n });\n\n describe(\"V3\", () => {\n // V3 is the same class as Stagehand, just re-exported with a different name.\n // The public interface shape is already tested in the \"Stagehand\" test above.\n it(\"is exported\", () => {\n expect(Stagehand.V3).toBeDefined();\n });\n });\n\n describe(\"V3Evaluator\", () => {\n type V3EvaluatorInstance = InstanceType<typeof Stagehand.V3Evaluator>;\n\n it(\"is exported\", () => {\n expect(Stagehand.V3Evaluator).toBeDefined();\n });\n\n it(\"has ask method\", () => {\n expectTypeOf<V3EvaluatorInstance[\"ask\"]>().toExtend<\n (options: unknown) => Promise<unknown>\n >();\n });\n\n it(\"has batchAsk method\", () => {\n expectTypeOf<V3EvaluatorInstance[\"batchAsk\"]>().toExtend<\n (options: unknown) => Promise<unknown[]>\n >();\n });\n });\n\n describe(\"V3FunctionName\", () => {\n const expectedFunctionNames = [\n \"ACT\",\n \"EXTRACT\",\n \"OBSERVE\",\n \"AGENT\",\n ] as const;\n\n it(\"matches the known function name literals\", () => {\n expectTypeOf<Stagehand.V3FunctionName>().toExtend<\n (typeof expectedFunctionNames)[number]\n >();\n void expectedFunctionNames; // Mark as used to satisfy ESLint\n });\n });\n\n describe(\"connectToMCPServer\", () => {\n type ExpectedServerConfig =\n | string\n | URL\n | { command: string; args?: string[]; env?: Record<string, string> }\n | { serverUrl: string | URL; clientOptions?: unknown };\n\n it(\"has correct parameter types\", () => {\n expectTypeOf(\n Stagehand.connectToMCPServer,\n ).parameters.branded.toEqualTypeOf<[ExpectedServerConfig]>();\n });\n });\n\n describe(\"LOG_LEVEL_NAMES\", () => {\n type ExpectedLOG_LEVEL_NAMES = Record<Stagehand.LogLevel, string>;\n\n it(\"maps numeric levels to strings\", () => {\n expectTypeOf<\n typeof Stagehand.LOG_LEVEL_NAMES\n >().toExtend<ExpectedLOG_LEVEL_NAMES>();\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,UAAU,QAAQ,cAAc,UAAU;AACnD,YAAY,eAAe;AAE3B,SAAS,4BAA4B,MAAM;AACzC,WAAS,aAAa,MAAM;AAiC1B,OAAG,sCAAsC,MAAM;AAC7C,mBAAgC,EAAE,SAAwB;AAAA,IAC5D,CAAC;AAED,OAAG,yCAAyC,MAAM;AAChD,YAAM,aAAa,CAAC;AACpB,mBAAuC,EAAE;AAAA,QACvC;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,0CAA0C,MAAM;AACjD,YAAM,aAAa,CAAC;AACpB,mBAA2C,EAAE;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,2CAA2C,MAAM;AAClD,mBAA2C,EAAE;AAAA,QAC3C;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,qCAAqC,MAAM;AAE5C,YAAM,WAAW,CAAC;AAClB,mBAAqC,EAAE,iBAAiB;AAAA,QACtD,aAAa;AAAA,QACb,MAAM;AAAA,MACR,CAAyC;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,WAAS,oBAAoB,MAAM;AA6BjC,OAAG,uCAAuC,MAAM;AAC9C,mBAAyC,EAAE,cAAwC;AAAA,IACrF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,MAAM,MAAM;AAGnB,OAAG,eAAe,MAAM;AACtB,aAAO,UAAU,EAAE,EAAE,YAAY;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAG5B,OAAG,eAAe,MAAM;AACtB,aAAO,UAAU,WAAW,EAAE,YAAY;AAAA,IAC5C,CAAC;AAED,OAAG,kBAAkB,MAAM;AACzB,mBAAyC,EAAE,SAEzC;AAAA,IACJ,CAAC;AAED,OAAG,uBAAuB,MAAM;AAC9B,mBAA8C,EAAE,SAE9C;AAAA,IACJ,CAAC;AAAA,EACH,CAAC;AAED,WAAS,kBAAkB,MAAM;AAC/B,UAAM,wBAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,OAAG,4CAA4C,MAAM;AACnD,mBAAuC,EAAE,SAEvC;AAAA,
|
|
5
|
+
"mappings": "AAAA,SAAS,UAAU,QAAQ,cAAc,UAAU;AACnD,YAAY,eAAe;AAE3B,SAAS,4BAA4B,MAAM;AACzC,WAAS,aAAa,MAAM;AAiC1B,OAAG,sCAAsC,MAAM;AAC7C,mBAAgC,EAAE,SAAwB;AAAA,IAC5D,CAAC;AAED,OAAG,yCAAyC,MAAM;AAChD,YAAM,aAAa,CAAC;AACpB,mBAAuC,EAAE;AAAA,QACvC;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,0CAA0C,MAAM;AACjD,YAAM,aAAa,CAAC;AACpB,mBAA2C,EAAE;AAAA,QAC3C;AAAA,QACA;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,2CAA2C,MAAM;AAClD,mBAA2C,EAAE;AAAA,QAC3C;AAAA,QACA,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,OAAG,qCAAqC,MAAM;AAE5C,YAAM,WAAW,CAAC;AAClB,mBAAqC,EAAE,iBAAiB;AAAA,QACtD,aAAa;AAAA,QACb,MAAM;AAAA,MACR,CAAyC;AAAA,IAC3C,CAAC;AAAA,EACH,CAAC;AAED,WAAS,oBAAoB,MAAM;AA6BjC,OAAG,uCAAuC,MAAM;AAC9C,mBAAyC,EAAE,cAAwC;AAAA,IACrF,CAAC;AAAA,EACH,CAAC;AAED,WAAS,MAAM,MAAM;AAGnB,OAAG,eAAe,MAAM;AACtB,aAAO,UAAU,EAAE,EAAE,YAAY;AAAA,IACnC,CAAC;AAAA,EACH,CAAC;AAED,WAAS,eAAe,MAAM;AAG5B,OAAG,eAAe,MAAM;AACtB,aAAO,UAAU,WAAW,EAAE,YAAY;AAAA,IAC5C,CAAC;AAED,OAAG,kBAAkB,MAAM;AACzB,mBAAyC,EAAE,SAEzC;AAAA,IACJ,CAAC;AAED,OAAG,uBAAuB,MAAM;AAC9B,mBAA8C,EAAE,SAE9C;AAAA,IACJ,CAAC;AAAA,EACH,CAAC;AAED,WAAS,kBAAkB,MAAM;AAC/B,UAAM,wBAAwB;AAAA,MAC5B;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,OAAG,4CAA4C,MAAM;AACnD,mBAAuC,EAAE,SAEvC;AACF,WAAK;AAAA,IACP,CAAC;AAAA,EACH,CAAC;AAED,WAAS,sBAAsB,MAAM;AAOnC,OAAG,+BAA+B,MAAM;AACtC;AAAA,QACE,UAAU;AAAA,MACZ,EAAE,WAAW,QAAQ,cAAsC;AAAA,IAC7D,CAAC;AAAA,EACH,CAAC;AAED,WAAS,mBAAmB,MAAM;AAGhC,OAAG,kCAAkC,MAAM;AACzC,mBAEE,EAAE,SAAkC;AAAA,IACxC,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../tests/snapshot-capture-orchestration.test.ts"],
|
|
4
4
|
"sourcesContent": ["import type { Protocol } from \"devtools-protocol\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport type { CDPSessionLike } from \"../lib/v3/understudy/cdp.js\";\nimport type { Page } from \"../lib/v3/understudy/page.js\";\nimport type {\n FrameContext,\n SessionDomIndex,\n} from \"../lib/v3/types/private/index.js\";\nimport * as capture from \"../lib/v3/understudy/a11y/snapshot/capture.js\";\nimport * as a11yTree from \"../lib/v3/understudy/a11y/snapshot/a11yTree.js\";\nimport * as domTree from \"../lib/v3/understudy/a11y/snapshot/domTree.js\";\nimport * as focusSelectors from \"../lib/v3/understudy/a11y/snapshot/focusSelectors.js\";\nimport { MockCDPSession } from \"./helpers/mockCDPSession.js\";\n\nconst makeProtocolFrame = (id: string): Protocol.Page.Frame =>\n ({\n id,\n loaderId: `${id}-loader`,\n url: \"https://example.com\",\n securityOrigin: \"https://example.com\",\n mimeType: \"text/html\",\n }) as unknown as Protocol.Page.Frame;\n\nconst makeFrameTree = (\n id: string,\n children: Protocol.Page.FrameTree[] = [],\n): Protocol.Page.FrameTree => ({\n frame: makeProtocolFrame(id),\n childFrames: children,\n});\n\ntype PageStub = Pick<\n Page,\n | \"mainFrameId\"\n | \"asProtocolFrameTree\"\n | \"listAllFrameIds\"\n | \"getSessionForFrame\"\n | \"getOrdinal\"\n>;\n\nconst makePage = (overrides: Partial<PageStub> = {}): Page => {\n const defaultSession = new MockCDPSession({}, \"default-session\");\n const base: PageStub = {\n mainFrameId: () => \"frame-1\",\n asProtocolFrameTree: () => makeFrameTree(\"frame-1\"),\n listAllFrameIds: () => [\"frame-1\"],\n getSessionForFrame: () => defaultSession,\n getOrdinal: () => 0,\n };\n return { ...base, ...overrides } as unknown as Page;\n};\n\nconst makeSessionIndex = (): SessionDomIndex => ({\n rootBackend: 100,\n absByBe: new Map([\n [100, \"/\"],\n [101, \"/html[1]\"],\n [102, \"/html[1]/body[1]\"],\n [150, \"/html[1]/body[1]/iframe[1]\"],\n [200, \"/html[1]/body[1]/iframe[1]\"],\n [201, \"/html[1]/body[1]/iframe[1]/div[1]\"],\n ]),\n tagByBe: new Map([\n [100, \"#document\"],\n [101, \"html\"],\n [102, \"body\"],\n [150, \"iframe\"],\n [200, \"#document\"],\n [201, \"div\"],\n ]),\n scrollByBe: new Map([[201, true]]),\n docRootOf: new Map([\n [100, 100],\n [101, 100],\n [102, 100],\n [150, 100],\n [200, 200],\n [201, 200],\n ]),\n contentDocRootByIframe: new Map([[150, 200]]),\n});\n\nbeforeEach(() => {\n vi.restoreAllMocks();\n});\n\ndescribe(\"buildFrameContext\", () => {\n it(\"indexes parent relationships from the frame tree\", () => {\n const frameTree = makeFrameTree(\"frame-1\", [\n makeFrameTree(\"frame-2\", [makeFrameTree(\"frame-3\")]),\n makeFrameTree(\"frame-4\"),\n ]);\n const page = makePage({\n asProtocolFrameTree: () => frameTree,\n listAllFrameIds: () => [\"frame-1\", \"frame-2\", \"frame-3\", \"frame-4\"],\n });\n\n const context = capture.buildFrameContext(page);\n\n expect(context.rootId).toBe(\"frame-1\");\n expect(context.frames).toEqual([\n \"frame-1\",\n \"frame-2\",\n \"frame-3\",\n \"frame-4\",\n ]);\n expect(context.parentByFrame.get(\"frame-1\")).toBeNull();\n expect(context.parentByFrame.get(\"frame-2\")).toBe(\"frame-1\");\n expect(context.parentByFrame.get(\"frame-3\")).toBe(\"frame-2\");\n expect(context.parentByFrame.get(\"frame-4\")).toBe(\"frame-1\");\n });\n});\n\ndescribe(\"buildSessionIndexes\", () => {\n it(\"deduplicates frames that share the same CDP session id\", async () => {\n const session = new MockCDPSession({}, \"session-a\");\n const page = makePage({\n // Every frame lookup returns the same session instance, so buildSessionIndexes\n // should call buildSessionDomIndex only once and reuse the result.\n getSessionForFrame: () => session,\n });\n const idx = makeSessionIndex();\n const spy = vi\n .spyOn(domTree, \"buildSessionDomIndex\")\n .mockResolvedValue(idx);\n\n const result = await capture.buildSessionIndexes(\n page,\n [\"frame-1\", \"frame-2\"],\n true,\n );\n\n expect(spy).toHaveBeenCalledTimes(1); // only one DOM.getDocument per session id\n expect(spy).toHaveBeenCalledWith(session, true);\n expect(result.get(\"session-a\")).toBe(idx);\n });\n\n it(\"builds indexes for sessions without ids using the 'root' key\", async () => {\n const sessionWithoutId: CDPSessionLike = {\n id: undefined,\n async send<R = unknown>(\n _method: string,\n _params?: Record<string, unknown>,\n ): Promise<R> {\n void _method;\n void _params;\n return {} as R;\n },\n on() {},\n off() {},\n async close() {},\n };\n const sessionWithId = new MockCDPSession({}, \"child-session\");\n const page = makePage({\n getSessionForFrame: (frameId: string) =>\n frameId === \"frame-1\" ? sessionWithoutId : sessionWithId,\n });\n\n const idxA = makeSessionIndex();\n const idxB = makeSessionIndex();\n const spy = vi\n .spyOn(domTree, \"buildSessionDomIndex\")\n .mockResolvedValueOnce(idxA)\n .mockResolvedValueOnce(idxB);\n\n const result = await capture.buildSessionIndexes(\n page,\n [\"frame-1\", \"frame-2\"],\n false,\n );\n\n // Verifies the helper invokes buildSessionDomIndex once for each unique session,\n // keying anonymous sessions as \"root\" so downstream lookups remain stable.\n expect(spy).toHaveBeenNthCalledWith(1, sessionWithoutId, false);\n expect(spy).toHaveBeenNthCalledWith(2, sessionWithId, false);\n expect(result.get(\"root\")).toBe(idxA);\n expect(result.get(\"child-session\")).toBe(idxB);\n });\n});\n\ndescribe(\"collectPerFrameMaps\", () => {\n it(\"builds per-frame xpath/tag maps and outlines from a shared session index\", async () => {\n const session = new MockCDPSession(\n {\n \"DOM.getFrameOwner\": async () => ({ backendNodeId: 150 }),\n },\n \"session-a\",\n );\n const page = makePage({\n getSessionForFrame: () => session,\n getOrdinal: (frameId: string) => (frameId === \"frame-1\" ? 0 : 1),\n });\n const context: FrameContext = {\n rootId: \"frame-1\",\n frames: [\"frame-1\", \"frame-2\"],\n parentByFrame: new Map([\n [\"frame-1\", null],\n [\"frame-2\", \"frame-1\"],\n ]),\n };\n const sessionIndex = makeSessionIndex();\n const sessionToIndex = new Map([[session.id, sessionIndex]]);\n\n vi.spyOn(a11yTree, \"a11yForFrame\").mockImplementation(\n async (_sess, frameId) => ({\n outline: `outline-${frameId}`,\n urlMap: { [`url-${frameId}`]: `https://${frameId}.test` },\n scopeApplied: false,\n }),\n );\n\n const result = await capture.collectPerFrameMaps(\n page,\n context,\n sessionToIndex,\n { experimental: true },\n true,\n context.frames,\n );\n\n expect(result.perFrameOutlines).toEqual([\n { frameId: \"frame-1\", outline: \"outline-frame-1\" },\n { frameId: \"frame-2\", outline: \"outline-frame-2\" },\n ]);\n const rootMaps = result.perFrameMaps.get(\"frame-1\");\n expect(rootMaps?.xpathMap[\"0-100\"]).toBe(\"/\");\n expect(rootMaps?.xpathMap[\"0-101\"]).toBe(\"/html[1]\");\n expect(rootMaps?.xpathMap[\"0-102\"]).toBe(\"/html[1]/body[1]\");\n const childMaps = result.perFrameMaps.get(\"frame-2\");\n expect(childMaps?.xpathMap[\"1-200\"]).toBe(\"/\");\n expect(childMaps?.xpathMap[\"1-201\"]).toBe(\"/div[1]\");\n expect(childMaps?.scrollableMap[\"1-201\"]).toBe(true);\n expect(childMaps?.urlMap).toEqual({\n \"url-frame-2\": \"https://frame-2.test\",\n });\n expect(session.callsFor(\"DOM.getFrameOwner\")).toHaveLength(1);\n });\n\n it(\"builds a missing session index on demand and memoizes it\", async () => {\n const session = new MockCDPSession({}, \"new-session\");\n const page = makePage({\n getSessionForFrame: () => session,\n getOrdinal: () => 2,\n });\n const context: FrameContext = {\n rootId: \"frame-9\",\n frames: [\"frame-9\"],\n parentByFrame: new Map([[\"frame-9\", null]]),\n };\n const idx = makeSessionIndex();\n const buildSpy = vi\n .spyOn(domTree, \"buildSessionDomIndex\")\n .mockResolvedValue(idx);\n vi.spyOn(a11yTree, \"a11yForFrame\").mockResolvedValue({\n outline: \"outline\",\n urlMap: {},\n scopeApplied: false,\n });\n\n const sessionToIndex = new Map<string, SessionDomIndex>();\n const result = await capture.collectPerFrameMaps(\n page,\n context,\n sessionToIndex,\n undefined,\n false,\n context.frames,\n );\n\n expect(buildSpy).toHaveBeenCalledWith(session, false);\n expect(sessionToIndex.get(\"new-session\")).toBe(idx);\n expect(result.perFrameMaps.get(\"frame-9\")?.xpathMap[\"2-100\"]).toBe(\"/\");\n });\n\n it(\"skips frames that are not listed in the frameIds argument\", async () => {\n const session = new MockCDPSession({}, \"session-a\");\n const page = makePage({\n getSessionForFrame: () => session,\n getOrdinal: (frameId: string) => (frameId === \"frame-1\" ? 0 : 1),\n });\n const context: FrameContext = {\n rootId: \"frame-1\",\n frames: [\"frame-1\", \"frame-2\"],\n parentByFrame: new Map([\n [\"frame-1\", null],\n [\"frame-2\", \"frame-1\"],\n ]),\n };\n const sessionIndex = makeSessionIndex();\n const sessionToIndex = new Map([[session.id, sessionIndex]]);\n\n const a11ySpy = vi.spyOn(a11yTree, \"a11yForFrame\").mockResolvedValue({\n outline: \"outline\",\n urlMap: {},\n scopeApplied: false,\n });\n\n const result = await capture.collectPerFrameMaps(\n page,\n context,\n sessionToIndex,\n undefined,\n true,\n [\"frame-1\"],\n );\n\n expect(a11ySpy).toHaveBeenCalledTimes(1);\n expect(result.perFrameMaps.has(\"frame-2\")).toBe(false);\n expect(result.perFrameOutlines.map((o) => o.frameId)).toEqual([\"frame-1\"]);\n });\n});\n\ndescribe(\"captureHybridSnapshot\", () => {\n it(\"returns early when the scoped snapshot path succeeds\", async () => {\n const session = new MockCDPSession({}, \"session-a\");\n const page = makePage({\n getSessionForFrame: () => session,\n });\n const options = { focusSelector: \"/html\" };\n\n vi.spyOn(focusSelectors, \"resolveFocusFrameAndTail\").mockResolvedValue({\n targetFrameId: \"frame-1\",\n tailXPath: \"\",\n absPrefix: \"\",\n });\n const domMapsSpy = vi\n .spyOn(domTree, \"domMapsForSession\")\n .mockResolvedValue({\n tagNameMap: { \"0-100\": \"#document\" },\n xpathMap: { \"0-100\": \"/\" },\n scrollableMap: {},\n });\n const a11ySpy = vi.spyOn(a11yTree, \"a11yForFrame\").mockResolvedValue({\n outline: \"scoped outline\",\n urlMap: { \"0-100\": \"https://frame-1.test\" },\n scopeApplied: true,\n });\n const buildIndexSpy = vi\n .spyOn(domTree, \"buildSessionDomIndex\")\n .mockImplementation(() => {\n throw new Error(\"should not build session index when scoped\");\n });\n\n const result = await capture.captureHybridSnapshot(page, options);\n\n expect(result.combinedTree).toBe(\"scoped outline\");\n expect(result.combinedUrlMap[\"0-100\"]).toBe(\"https://frame-1.test\");\n expect(domMapsSpy).toHaveBeenCalled();\n expect(a11ySpy).toHaveBeenCalled();\n expect(buildIndexSpy).not.toHaveBeenCalled();\n });\n\n it(\"scoped snapshot still succeeds when iframe inclusion is disabled\", async () => {\n const session = new MockCDPSession({}, \"session-a\");\n const page = makePage({\n getSessionForFrame: () => session,\n });\n const options = { focusSelector: \"/html\", includeIframes: false };\n\n vi.spyOn(focusSelectors, \"resolveFocusFrameAndTail\").mockResolvedValue({\n targetFrameId: \"frame-1\",\n tailXPath: \"\",\n absPrefix: \"\",\n });\n const domMapsSpy = vi\n .spyOn(domTree, \"domMapsForSession\")\n .mockResolvedValue({\n tagNameMap: { \"0-100\": \"#document\" },\n xpathMap: { \"0-100\": \"/\" },\n scrollableMap: {},\n });\n const a11ySpy = vi.spyOn(a11yTree, \"a11yForFrame\").mockResolvedValue({\n outline: \"scoped outline\",\n urlMap: { \"0-100\": \"https://frame-1.test\" },\n scopeApplied: true,\n });\n const buildIndexSpy = vi\n .spyOn(domTree, \"buildSessionDomIndex\")\n .mockImplementation(() => {\n throw new Error(\"should not build session index when scoped\");\n });\n\n const result = await capture.captureHybridSnapshot(page, options);\n\n expect(result.combinedTree).toBe(\"scoped outline\");\n expect(result.combinedUrlMap[\"0-100\"]).toBe(\"https://frame-1.test\");\n expect(domMapsSpy).toHaveBeenCalled();\n expect(a11ySpy).toHaveBeenCalled();\n expect(buildIndexSpy).not.toHaveBeenCalled();\n });\n\n it(\"collects per-frame data and merges it when no scoped snapshot is available\", async () => {\n const session = new MockCDPSession(\n {\n \"DOM.getFrameOwner\": async () => ({ backendNodeId: 150 }),\n },\n \"session-a\",\n );\n const page = makePage({\n asProtocolFrameTree: () =>\n makeFrameTree(\"frame-1\", [makeFrameTree(\"frame-2\")]),\n listAllFrameIds: () => [\"frame-1\", \"frame-2\"],\n getSessionForFrame: () => session,\n getOrdinal: (frameId: string) => (frameId === \"frame-1\" ? 0 : 1),\n });\n\n const idx = makeSessionIndex();\n vi.spyOn(domTree, \"buildSessionDomIndex\").mockResolvedValue(idx);\n vi.spyOn(a11yTree, \"a11yForFrame\").mockImplementation(\n async (_sess, frameId) => ({\n outline:\n frameId === \"frame-1\"\n ? \"[0-150] iframe host\"\n : \"[1-200] child subtree\",\n urlMap: { [`url-${frameId}`]: `https://${frameId}.test` },\n scopeApplied: false,\n }),\n );\n\n const snapshot = await capture.captureHybridSnapshot(page);\n\n expect(snapshot.combinedTree).toContain(\"[1-200] child subtree\");\n expect(snapshot.combinedXpathMap[\"0-100\"]).toBe(\"/\");\n expect(snapshot.combinedXpathMap[\"1-201\"]).toBe(\n \"/html[1]/body[1]/iframe[1]/div[1]\",\n );\n expect(snapshot.combinedUrlMap[\"url-frame-2\"]).toBe(\"https://frame-2.test\");\n expect(snapshot.perFrame?.map((pf) => pf.frameId)).toEqual([\n \"frame-1\",\n \"frame-2\",\n ]);\n });\n\n it(\"omits iframe frames when includeIframes is false\", async () => {\n const session = new MockCDPSession(\n {\n \"DOM.getFrameOwner\": async () => ({ backendNodeId: 150 }),\n },\n \"session-a\",\n );\n const page = makePage({\n asProtocolFrameTree: () =>\n makeFrameTree(\"frame-1\", [makeFrameTree(\"frame-2\")]),\n listAllFrameIds: () => [\"frame-1\", \"frame-2\"],\n getSessionForFrame: () => session,\n getOrdinal: (frameId: string) => (frameId === \"frame-1\" ? 0 : 1),\n });\n\n const idx = makeSessionIndex();\n vi.spyOn(domTree, \"buildSessionDomIndex\").mockResolvedValue(idx);\n const a11ySpy = vi\n .spyOn(a11yTree, \"a11yForFrame\")\n .mockImplementation(async (_sess, frameId) => ({\n outline:\n frameId === \"frame-1\"\n ? \"[0-150] iframe host\"\n : \"[1-200] child subtree\",\n urlMap: { [`url-${frameId}`]: `https://${frameId}.test` },\n scopeApplied: false,\n }));\n\n const snapshot = await capture.captureHybridSnapshot(page, {\n includeIframes: false,\n });\n\n expect(a11ySpy).toHaveBeenCalledTimes(1);\n expect(session.callsFor(\"DOM.getFrameOwner\")).toHaveLength(0);\n expect(snapshot.perFrame?.map((pf) => pf.frameId)).toEqual([\"frame-1\"]);\n expect(snapshot.combinedXpathMap[\"1-201\"]).toBeUndefined();\n expect(snapshot.combinedTree).not.toContain(\"[1-200] child subtree\");\n });\n});\n"],
|
|
5
|
-
"mappings": "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
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@browserbasehq/orca",
|
|
3
|
-
"version": "3.1.0-patch.
|
|
3
|
+
"version": "3.1.0-patch.3",
|
|
4
4
|
"description": "An AI web browsing framework focused on simplicity and extensibility.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/cjs/index.js",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"import": "./dist/esm/index.js",
|
|
13
13
|
"require": "./dist/cjs/index.js"
|
|
14
14
|
},
|
|
15
|
+
"./cli": "./dist/esm/lib/v3/cli.js",
|
|
15
16
|
"./*.js": {
|
|
16
17
|
"types": "./dist/esm/*.d.ts",
|
|
17
18
|
"import": "./dist/esm/*.js"
|
|
@@ -22,24 +23,27 @@
|
|
|
22
23
|
},
|
|
23
24
|
"./package.json": "./package.json"
|
|
24
25
|
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": "^20.19.0 || >=22.12.0"
|
|
28
|
+
},
|
|
25
29
|
"scripts": {
|
|
26
30
|
"gen-version": "tsx scripts/gen-version.ts",
|
|
31
|
+
"build-dom-scripts": "tsx lib/v3/dom/genDomScripts.ts && tsx lib/v3/dom/genLocatorScripts.ts && tsx lib/v3/dom/genScreenshotScripts.ts && tsx lib/v3/dom/genA11yScripts.ts",
|
|
27
32
|
"build:cjs": "tsx scripts/build-cjs.ts",
|
|
28
33
|
"build:esm": "tsx scripts/build-esm.ts",
|
|
29
|
-
"build
|
|
30
|
-
"typecheck": "pnpm -w --dir ../.. exec tsc -p packages/core/tsconfig.json --noEmit",
|
|
31
|
-
"build": "pnpm run build:esm && pnpm run typecheck",
|
|
34
|
+
"build": "pnpm run build:esm && pnpm run build:cjs",
|
|
32
35
|
"example": "node --import tsx -e \"const args=process.argv.slice(1).filter(a=>a!=='--'); const [p]=args; const n=(p||'example').replace(/^\\.\\//,'').replace(/\\.ts$/i,''); import('node:path').then(path=>import(new URL(path.resolve('examples', n + '.ts'), 'file:')));\" --",
|
|
33
|
-
"test": "pnpm run test:core --",
|
|
36
|
+
"test": "pnpm -w --dir ../.. exec turbo run test:core test:e2e --filter=@browserbasehq/stagehand --",
|
|
34
37
|
"test:core": "tsx scripts/test-core.ts",
|
|
35
38
|
"test:e2e": "tsx scripts/test-e2e.ts",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
39
|
+
"format": "prettier --write .",
|
|
40
|
+
"typecheck": "pnpm -w --dir ../.. exec tsc -p packages/core/tsconfig.json --noEmit",
|
|
41
|
+
"eslint": "eslint .",
|
|
42
|
+
"lint": "cd ../.. && prettier --check packages/core && cd packages/core && pnpm run eslint && pnpm run typecheck"
|
|
38
43
|
},
|
|
39
44
|
"files": [
|
|
40
45
|
"dist/esm",
|
|
41
|
-
"dist/cjs"
|
|
42
|
-
"dist/stagehand.config.d.ts"
|
|
46
|
+
"dist/cjs"
|
|
43
47
|
],
|
|
44
48
|
"keywords": [
|
|
45
49
|
"ai",
|
|
@@ -60,7 +64,6 @@
|
|
|
60
64
|
"@anthropic-ai/sdk": "0.39.0",
|
|
61
65
|
"@browserbasehq/sdk": "^2.4.0",
|
|
62
66
|
"@google/genai": "^1.22.0",
|
|
63
|
-
"@langchain/openai": "^0.4.4",
|
|
64
67
|
"@modelcontextprotocol/sdk": "^1.17.2",
|
|
65
68
|
"ai": "^5.0.133",
|
|
66
69
|
"devtools-protocol": "^0.0.1464554",
|
|
@@ -85,7 +88,6 @@
|
|
|
85
88
|
"@ai-sdk/perplexity": "^2.0.13",
|
|
86
89
|
"@ai-sdk/togetherai": "^1.0.23",
|
|
87
90
|
"@ai-sdk/xai": "^2.0.26",
|
|
88
|
-
"@langchain/core": "^0.3.40",
|
|
89
91
|
"bufferutil": "^4.0.9",
|
|
90
92
|
"chrome-launcher": "^1.2.0",
|
|
91
93
|
"ollama-ai-provider-v2": "^1.5.0",
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { getV3DynamicTestConfig } from "./v3.dynamic.config.js";
|
|
2
|
-
function summarizeV3Config() {
|
|
3
|
-
try {
|
|
4
|
-
const cfg = getV3DynamicTestConfig();
|
|
5
|
-
return {
|
|
6
|
-
env: cfg.env,
|
|
7
|
-
disableAPI: cfg.disableAPI,
|
|
8
|
-
selfHeal: cfg.selfHeal,
|
|
9
|
-
experimental: cfg.experimental,
|
|
10
|
-
localBrowserLaunchOptions: cfg.localBrowserLaunchOptions ? {
|
|
11
|
-
headless: cfg.localBrowserLaunchOptions.headless,
|
|
12
|
-
viewport: cfg.localBrowserLaunchOptions.viewport,
|
|
13
|
-
hasExecutablePath: Boolean(
|
|
14
|
-
cfg.localBrowserLaunchOptions.executablePath
|
|
15
|
-
),
|
|
16
|
-
argsCount: cfg.localBrowserLaunchOptions.args?.length ?? 0
|
|
17
|
-
} : void 0,
|
|
18
|
-
browserbaseSessionCreateParams: cfg.browserbaseSessionCreateParams ? {
|
|
19
|
-
region: cfg.browserbaseSessionCreateParams.region,
|
|
20
|
-
hasViewport: Boolean(
|
|
21
|
-
cfg.browserbaseSessionCreateParams.browserSettings?.viewport
|
|
22
|
-
)
|
|
23
|
-
} : void 0
|
|
24
|
-
};
|
|
25
|
-
} catch (error) {
|
|
26
|
-
return { error: String(error) };
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
function summarizeEnv() {
|
|
30
|
-
return {
|
|
31
|
-
STAGEHAND_BROWSER_TARGET: process.env.STAGEHAND_BROWSER_TARGET,
|
|
32
|
-
BB_ENV: process.env.BB_ENV,
|
|
33
|
-
// BB_ENV = 'local' | 'dev' | 'prod' (hosting environment the stagehand-api server is running in)
|
|
34
|
-
NODE_ENV: process.env.NODE_ENV,
|
|
35
|
-
// NODE_ENV = 'development' | 'test' | 'production' | 'staging' (used only to control logging)
|
|
36
|
-
CI: process.env.CI,
|
|
37
|
-
// CI = 'true' | 'false' (used only to control test parallelism and pnpm prepare script)
|
|
38
|
-
STAGEHAND_API_URL: process.env.STAGEHAND_API_URL,
|
|
39
|
-
BROWSERBASE_REGION: process.env.BROWSERBASE_REGION,
|
|
40
|
-
BROWSERBASE_API_KEY: process.env.BROWSERBASE_API_KEY ? "[redacted]" : "missing!",
|
|
41
|
-
BROWSERBASE_PROJECT_ID: process.env.BROWSERBASE_PROJECT_ID ? "[redacted]" : "missing!"
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
class EnvReporter {
|
|
45
|
-
onTestBegin(test) {
|
|
46
|
-
const payload = {
|
|
47
|
-
test: test.titlePath().join(" > "),
|
|
48
|
-
env: summarizeEnv(),
|
|
49
|
-
config: summarizeV3Config()
|
|
50
|
-
};
|
|
51
|
-
console.log(`[e2e-env] ${JSON.stringify(payload)}`);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
export {
|
|
55
|
-
EnvReporter as default
|
|
56
|
-
};
|
|
57
|
-
//# sourceMappingURL=envReporter.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../../../lib/v3/tests/envReporter.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Reporter, TestCase } from \"@playwright/test/reporter\";\nimport { getV3DynamicTestConfig } from \"./v3.dynamic.config.js\";\n\ntype ConfigSummary = {\n env?: string;\n disableAPI?: boolean;\n selfHeal?: boolean;\n experimental?: boolean;\n localBrowserLaunchOptions?: {\n headless?: boolean;\n viewport?: { width?: number; height?: number };\n hasExecutablePath?: boolean;\n argsCount?: number;\n };\n browserbaseSessionCreateParams?: {\n region?: string;\n hasViewport?: boolean;\n };\n error?: string;\n};\n\n// Keep this small and log-safe; never emit secrets in CI logs.\nfunction summarizeV3Config(): ConfigSummary {\n try {\n const cfg = getV3DynamicTestConfig();\n return {\n env: cfg.env,\n disableAPI: cfg.disableAPI,\n selfHeal: cfg.selfHeal,\n experimental: cfg.experimental,\n localBrowserLaunchOptions: cfg.localBrowserLaunchOptions\n ? {\n headless: cfg.localBrowserLaunchOptions.headless,\n viewport: cfg.localBrowserLaunchOptions.viewport,\n hasExecutablePath: Boolean(\n cfg.localBrowserLaunchOptions.executablePath,\n ),\n argsCount: cfg.localBrowserLaunchOptions.args?.length ?? 0,\n }\n : undefined,\n browserbaseSessionCreateParams: cfg.browserbaseSessionCreateParams\n ? {\n region: cfg.browserbaseSessionCreateParams.region,\n hasViewport: Boolean(\n cfg.browserbaseSessionCreateParams.browserSettings?.viewport,\n ),\n }\n : undefined,\n };\n } catch (error) {\n return { error: String(error) };\n }\n}\n\nfunction summarizeEnv() {\n return {\n STAGEHAND_BROWSER_TARGET: process.env.STAGEHAND_BROWSER_TARGET,\n BB_ENV: process.env.BB_ENV, // BB_ENV = 'local' | 'dev' | 'prod' (hosting environment the stagehand-api server is running in)\n NODE_ENV: process.env.NODE_ENV, // NODE_ENV = 'development' | 'test' | 'production' | 'staging' (used only to control logging)\n CI: process.env.CI, // CI = 'true' | 'false' (used only to control test parallelism and pnpm prepare script)\n STAGEHAND_API_URL: process.env.STAGEHAND_API_URL,\n BROWSERBASE_REGION: process.env.BROWSERBASE_REGION,\n BROWSERBASE_API_KEY: process.env.BROWSERBASE_API_KEY\n ? \"[redacted]\"\n : \"missing!\",\n BROWSERBASE_PROJECT_ID: process.env.BROWSERBASE_PROJECT_ID\n ? \"[redacted]\"\n : \"missing!\",\n };\n}\n\nexport default class EnvReporter implements Reporter {\n onTestBegin(test: TestCase): void {\n const payload = {\n test: test.titlePath().join(\" > \"),\n env: summarizeEnv(),\n config: summarizeV3Config(),\n };\n console.log(`[e2e-env] ${JSON.stringify(payload)}`);\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,SAAS,8BAA8B;AAqBvC,SAAS,oBAAmC;AAC1C,MAAI;AACF,UAAM,MAAM,uBAAuB;AACnC,WAAO;AAAA,MACL,KAAK,IAAI;AAAA,MACT,YAAY,IAAI;AAAA,MAChB,UAAU,IAAI;AAAA,MACd,cAAc,IAAI;AAAA,MAClB,2BAA2B,IAAI,4BAC3B;AAAA,QACE,UAAU,IAAI,0BAA0B;AAAA,QACxC,UAAU,IAAI,0BAA0B;AAAA,QACxC,mBAAmB;AAAA,UACjB,IAAI,0BAA0B;AAAA,QAChC;AAAA,QACA,WAAW,IAAI,0BAA0B,MAAM,UAAU;AAAA,MAC3D,IACA;AAAA,MACJ,gCAAgC,IAAI,iCAChC;AAAA,QACE,QAAQ,IAAI,+BAA+B;AAAA,QAC3C,aAAa;AAAA,UACX,IAAI,+BAA+B,iBAAiB;AAAA,QACtD;AAAA,MACF,IACA;AAAA,IACN;AAAA,EACF,SAAS,OAAO;AACd,WAAO,EAAE,OAAO,OAAO,KAAK,EAAE;AAAA,EAChC;AACF;AAEA,SAAS,eAAe;AACtB,SAAO;AAAA,IACL,0BAA0B,QAAQ,IAAI;AAAA,IACtC,QAAQ,QAAQ,IAAI;AAAA;AAAA,IACpB,UAAU,QAAQ,IAAI;AAAA;AAAA,IACtB,IAAI,QAAQ,IAAI;AAAA;AAAA,IAChB,mBAAmB,QAAQ,IAAI;AAAA,IAC/B,oBAAoB,QAAQ,IAAI;AAAA,IAChC,qBAAqB,QAAQ,IAAI,sBAC7B,eACA;AAAA,IACJ,wBAAwB,QAAQ,IAAI,yBAChC,eACA;AAAA,EACN;AACF;AAEA,MAAO,YAA8C;AAAA,EACnD,YAAY,MAAsB;AAChC,UAAM,UAAU;AAAA,MACd,MAAM,KAAK,UAAU,EAAE,KAAK,KAAK;AAAA,MACjC,KAAK,aAAa;AAAA,MAClB,QAAQ,kBAAkB;AAAA,IAC5B;AACA,YAAQ,IAAI,aAAa,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,EACpD;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|