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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/dist/cjs/cli.js +45 -17
  2. package/dist/cjs/cli.js.map +2 -2
  3. package/dist/cjs/index.js +192 -123
  4. package/dist/cjs/index.js.map +3 -3
  5. package/dist/cjs/lib/logger.d.ts +1 -1
  6. package/dist/cjs/lib/modelUtils.d.ts +3 -0
  7. package/dist/cjs/lib/v3/agent/tools/act.d.ts +2 -1
  8. package/dist/cjs/lib/v3/agent/tools/extract.d.ts +2 -1
  9. package/dist/cjs/lib/v3/agent/tools/fillform.d.ts +2 -1
  10. package/dist/cjs/lib/v3/agent/tools/index.d.ts +2 -2
  11. package/dist/cjs/lib/v3/api.d.ts +16 -1
  12. package/dist/cjs/lib/v3/handlers/handlerUtils/actHandlerUtils.d.ts +0 -3
  13. package/dist/cjs/lib/v3/handlers/v3AgentHandler.d.ts +2 -2
  14. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js +12 -12
  15. package/dist/cjs/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  16. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js +2 -2
  17. package/dist/cjs/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  18. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js +1 -0
  19. package/dist/cjs/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  20. package/dist/cjs/lib/v3/tests/locator-fill.spec.js +1 -0
  21. package/dist/cjs/lib/v3/tests/locator-fill.spec.js.map +1 -1
  22. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js +1 -0
  23. package/dist/cjs/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  24. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js +1 -0
  25. package/dist/cjs/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  26. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js +2 -2
  27. package/dist/cjs/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  28. package/dist/cjs/lib/v3/types/public/api.d.ts +8 -0
  29. package/dist/cjs/lib/v3/types/public/index.d.ts +1 -0
  30. package/dist/cjs/lib/v3/types/public/sdkErrors.d.ts +3 -0
  31. package/dist/cjs/tests/agent-execution-model.test.js +139 -0
  32. package/dist/cjs/tests/agent-execution-model.test.js.map +7 -0
  33. package/dist/cjs/tests/api-multiregion.test.js +73 -0
  34. package/dist/cjs/tests/api-multiregion.test.js.map +7 -0
  35. package/dist/cjs/tests/model-utils.test.js +43 -0
  36. package/dist/cjs/tests/model-utils.test.js.map +7 -0
  37. package/dist/cjs/tests/public-api/export-surface.test.js +1 -0
  38. package/dist/cjs/tests/public-api/export-surface.test.js.map +1 -1
  39. package/dist/cjs/tests/public-api/llm-and-agents.test.js +1 -0
  40. package/dist/cjs/tests/public-api/llm-and-agents.test.js.map +1 -1
  41. package/dist/cjs/tests/public-api/public-error-types.test.js +3 -1
  42. package/dist/cjs/tests/public-api/public-error-types.test.js.map +2 -2
  43. package/dist/cjs/tests/public-api/v3-core.test.js +1 -0
  44. package/dist/cjs/tests/public-api/v3-core.test.js.map +1 -1
  45. package/dist/cjs/tests/snapshot-capture-orchestration.test.js +2 -0
  46. package/dist/cjs/tests/snapshot-capture-orchestration.test.js.map +1 -1
  47. package/dist/cjs/tests/understudy-command-exception.test.js +52 -0
  48. package/dist/cjs/tests/understudy-command-exception.test.js.map +7 -0
  49. package/dist/esm/lib/logger.d.ts +1 -1
  50. package/dist/esm/lib/v3/cli.d.ts +2 -0
  51. package/dist/esm/lib/v3/cli.js +10 -0
  52. package/dist/esm/lib/v3/cli.js.map +1 -0
  53. package/dist/esm/lib/v3/dom/build/rerender-index.d.ts +0 -0
  54. package/dist/esm/lib/v3/dom/build/rerender-index.js.map +1 -0
  55. package/dist/esm/lib/v3/dom/build/v3-index.d.ts +0 -0
  56. package/dist/esm/lib/v3/dom/build/v3-index.js.map +1 -0
  57. package/dist/esm/lib/v3/index.d.ts +1 -0
  58. package/dist/esm/lib/v3/index.js +1 -0
  59. package/dist/esm/lib/v3/index.js.map +1 -1
  60. package/dist/esm/lib/v3/shutdown/supervisor.d.ts +7 -5
  61. package/dist/esm/lib/v3/shutdown/supervisor.js +93 -64
  62. package/dist/esm/lib/v3/shutdown/supervisor.js.map +1 -1
  63. package/dist/esm/lib/v3/shutdown/supervisorClient.js +49 -52
  64. package/dist/esm/lib/v3/shutdown/supervisorClient.js.map +1 -1
  65. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js +12 -12
  66. package/dist/esm/lib/v3/tests/agent-callbacks.spec.js.map +1 -1
  67. package/dist/esm/lib/v3/tests/click-count.spec.js +47 -12
  68. package/dist/esm/lib/v3/tests/click-count.spec.js.map +2 -2
  69. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js +2 -2
  70. package/dist/esm/lib/v3/tests/context-addInitScript.spec.js.map +1 -1
  71. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js +67 -21
  72. package/dist/esm/lib/v3/tests/iframe-ctx-addInitScript.spec.js.map +2 -2
  73. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js +1 -0
  74. package/dist/esm/lib/v3/tests/locator-content-methods.spec.js.map +1 -1
  75. package/dist/esm/lib/v3/tests/locator-fill.spec.js +1 -0
  76. package/dist/esm/lib/v3/tests/locator-fill.spec.js.map +1 -1
  77. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js +1 -0
  78. package/dist/esm/lib/v3/tests/locator-input-methods.spec.js.map +1 -1
  79. package/dist/esm/lib/v3/tests/locator-select-option.spec.js +1 -0
  80. package/dist/esm/lib/v3/tests/locator-select-option.spec.js.map +1 -1
  81. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js +2 -2
  82. package/dist/esm/lib/v3/tests/page-addInitScript.spec.js.map +1 -1
  83. package/dist/esm/lib/v3/tests/v3.playwright.config.js +3 -60
  84. package/dist/esm/lib/v3/tests/v3.playwright.config.js.map +2 -2
  85. package/dist/esm/lib/v3/types/private/shutdown.d.ts +1 -13
  86. package/dist/esm/lib/v3/types/private/shutdown.js.map +1 -1
  87. package/dist/esm/lib/v3/understudy/context.js +10 -1
  88. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  89. package/dist/esm/lib/v3/understudy/locator.js +2 -2
  90. package/dist/esm/lib/v3/understudy/locator.js.map +1 -1
  91. package/dist/esm/lib/v3/understudy/page.js +2 -1
  92. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  93. package/dist/esm/lib/v3/v3.js +2 -6
  94. package/dist/esm/lib/v3/v3.js.map +1 -1
  95. package/dist/esm/tests/public-api/export-surface.test.js +2 -0
  96. package/dist/esm/tests/public-api/export-surface.test.js.map +2 -2
  97. package/dist/esm/tests/public-api/llm-and-agents.test.js +1 -0
  98. package/dist/esm/tests/public-api/llm-and-agents.test.js.map +1 -1
  99. package/dist/esm/tests/public-api/public-error-types.test.js +1 -0
  100. package/dist/esm/tests/public-api/public-error-types.test.js.map +1 -1
  101. package/dist/esm/tests/public-api/v3-core.test.js +1 -0
  102. package/dist/esm/tests/public-api/v3-core.test.js.map +1 -1
  103. package/dist/esm/tests/snapshot-capture-orchestration.test.js +2 -0
  104. package/dist/esm/tests/snapshot-capture-orchestration.test.js.map +1 -1
  105. package/package.json +13 -11
  106. package/dist/esm/lib/v3/tests/envReporter.js +0 -57
  107. package/dist/esm/lib/v3/tests/envReporter.js.map +0 -7
@@ -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,EAE5B,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;",
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
  }
@@ -29,6 +29,7 @@ describe("LLM and Agents public API types", () => {
29
29
  ];
30
30
  it("AvailableCuaModel matches the known literals", () => {
31
31
  expectTypeOf().toEqualTypeOf();
32
+ void expectedModels;
32
33
  });
33
34
  });
34
35
  describe("AgentProvider", () => {
@@ -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": "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",
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -63,6 +63,7 @@ describe("Stagehand public error types", () => {
63
63
  it.each(errorTypes)("%s extends Error", (errorTypeName) => {
64
64
  const ErrorClass = Stagehand[errorTypeName];
65
65
  expectTypeOf().toExtend();
66
+ void ErrorClass;
66
67
  });
67
68
  });
68
69
  });
@@ -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,IAE/D,CAAC;AAAA,EACH,CAAC;AACH,CAAC;",
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
  }
@@ -64,6 +64,7 @@ describe("V3 Core public API types", () => {
64
64
  ];
65
65
  it("matches the known function name literals", () => {
66
66
  expectTypeOf().toExtend();
67
+ void expectedFunctionNames;
67
68
  });
68
69
  });
69
70
  describe("connectToMCPServer", () => {
@@ -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,IAEJ,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;",
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
  }
@@ -105,6 +105,8 @@ describe("buildSessionIndexes", () => {
105
105
  const sessionWithoutId = {
106
106
  id: void 0,
107
107
  async send(_method, _params) {
108
+ void _method;
109
+ void _params;
108
110
  return {};
109
111
  },
110
112
  on() {
@@ -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.2",
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-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",
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
- "lint": "cd ../.. && prettier --check packages/core && cd packages/core && eslint . && pnpm run typecheck",
37
- "format": "prettier --write ."
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
- }