@browserbasehq/orca 3.2.0-middleware.1 → 3.2.0-middleware.2

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 (135) hide show
  1. package/dist/cjs/lib/inference.d.ts +3 -1
  2. package/dist/cjs/lib/inference.js +3 -3
  3. package/dist/cjs/lib/inference.js.map +1 -1
  4. package/dist/cjs/lib/prompt.d.ts +1 -1
  5. package/dist/cjs/lib/prompt.js +24 -18
  6. package/dist/cjs/lib/prompt.js.map +1 -1
  7. package/dist/cjs/lib/v3/agent/OpenAICUAClient.d.ts +6 -2
  8. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js +40 -10
  9. package/dist/cjs/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  10. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js +4 -5
  11. package/dist/cjs/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  12. package/dist/cjs/lib/v3/agent/tools/fillform.js +2 -2
  13. package/dist/cjs/lib/v3/agent/tools/fillform.js.map +1 -1
  14. package/dist/cjs/lib/v3/agent/utils/variables.d.ts +5 -0
  15. package/dist/cjs/lib/v3/agent/utils/variables.js +9 -0
  16. package/dist/cjs/lib/v3/agent/utils/variables.js.map +1 -1
  17. package/dist/cjs/lib/v3/handlers/observeHandler.js +2 -1
  18. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  19. package/dist/cjs/lib/v3/llm/LLMProvider.js +1 -0
  20. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  21. package/dist/cjs/lib/v3/llm/aisdk.d.ts +3 -1
  22. package/dist/cjs/lib/v3/llm/aisdk.js +13 -11
  23. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  24. package/dist/cjs/lib/v3/types/private/handlers.d.ts +1 -0
  25. package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
  26. package/dist/cjs/lib/v3/types/public/api.d.ts +20 -7
  27. package/dist/cjs/lib/v3/types/public/api.js +33 -14
  28. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  29. package/dist/cjs/lib/v3/types/public/methods.d.ts +1 -0
  30. package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
  31. package/dist/cjs/lib/v3/types/public/model.d.ts +2 -0
  32. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  33. package/dist/cjs/lib/v3/types/public/variables.d.ts +7 -0
  34. package/dist/cjs/lib/v3/types/public/variables.js +22 -0
  35. package/dist/cjs/lib/v3/types/public/variables.js.map +1 -0
  36. package/dist/cjs/lib/v3/understudy/context.js +6 -2
  37. package/dist/cjs/lib/v3/understudy/context.js.map +1 -1
  38. package/dist/cjs/lib/v3/understudy/page.js +1 -1
  39. package/dist/cjs/lib/v3/understudy/page.js.map +1 -1
  40. package/dist/cjs/lib/v3/v3.js +9 -1
  41. package/dist/cjs/lib/v3/v3.js.map +1 -1
  42. package/dist/cjs/lib/version.d.ts +1 -1
  43. package/dist/cjs/lib/version.js +1 -1
  44. package/dist/cjs/lib/version.js.map +1 -1
  45. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
  46. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js +56 -0
  47. package/dist/cjs/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  48. package/dist/cjs/tests/unit/agent-execution-model.test.js +24 -2
  49. package/dist/cjs/tests/unit/agent-execution-model.test.js.map +1 -1
  50. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  51. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js +23 -0
  52. package/dist/cjs/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  53. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.d.ts +1 -0
  54. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.js +153 -0
  55. package/dist/cjs/tests/unit/aisdk-reasoning-effort.test.js.map +1 -0
  56. package/dist/cjs/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  57. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +86 -0
  58. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +1 -0
  59. package/dist/cjs/tests/unit/api-variables-schema.test.d.ts +1 -0
  60. package/dist/cjs/tests/unit/api-variables-schema.test.js +37 -0
  61. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +1 -0
  62. package/dist/cjs/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  63. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +19 -0
  64. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +1 -0
  65. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  66. package/dist/cjs/tests/unit/timeout-handlers.test.js +50 -0
  67. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -1
  68. package/dist/esm/lib/inference.d.ts +3 -1
  69. package/dist/esm/lib/inference.js +3 -3
  70. package/dist/esm/lib/inference.js.map +1 -1
  71. package/dist/esm/lib/prompt.d.ts +1 -1
  72. package/dist/esm/lib/prompt.js +24 -18
  73. package/dist/esm/lib/prompt.js.map +1 -1
  74. package/dist/esm/lib/v3/agent/OpenAICUAClient.d.ts +6 -2
  75. package/dist/esm/lib/v3/agent/OpenAICUAClient.js +40 -10
  76. package/dist/esm/lib/v3/agent/OpenAICUAClient.js.map +1 -1
  77. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js +4 -5
  78. package/dist/esm/lib/v3/agent/prompts/agentSystemPrompt.js.map +1 -1
  79. package/dist/esm/lib/v3/agent/tools/fillform.js +2 -2
  80. package/dist/esm/lib/v3/agent/tools/fillform.js.map +1 -1
  81. package/dist/esm/lib/v3/agent/utils/variables.d.ts +5 -0
  82. package/dist/esm/lib/v3/agent/utils/variables.js +8 -0
  83. package/dist/esm/lib/v3/agent/utils/variables.js.map +1 -1
  84. package/dist/esm/lib/v3/handlers/observeHandler.js +2 -1
  85. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  86. package/dist/esm/lib/v3/llm/LLMProvider.js +1 -0
  87. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  88. package/dist/esm/lib/v3/llm/aisdk.d.ts +3 -1
  89. package/dist/esm/lib/v3/llm/aisdk.js +13 -11
  90. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  91. package/dist/esm/lib/v3/types/private/handlers.d.ts +1 -0
  92. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
  93. package/dist/esm/lib/v3/types/public/api.d.ts +20 -7
  94. package/dist/esm/lib/v3/types/public/api.js +28 -12
  95. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  96. package/dist/esm/lib/v3/types/public/methods.d.ts +1 -0
  97. package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
  98. package/dist/esm/lib/v3/types/public/model.d.ts +2 -0
  99. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  100. package/dist/esm/lib/v3/types/public/variables.d.ts +7 -0
  101. package/dist/esm/lib/v3/types/public/variables.js +19 -0
  102. package/dist/esm/lib/v3/types/public/variables.js.map +1 -0
  103. package/dist/esm/lib/v3/understudy/context.js +6 -2
  104. package/dist/esm/lib/v3/understudy/context.js.map +1 -1
  105. package/dist/esm/lib/v3/understudy/page.js +1 -1
  106. package/dist/esm/lib/v3/understudy/page.js.map +1 -1
  107. package/dist/esm/lib/v3/v3.js +9 -1
  108. package/dist/esm/lib/v3/v3.js.map +1 -1
  109. package/dist/esm/lib/version.d.ts +1 -1
  110. package/dist/esm/lib/version.js +1 -1
  111. package/dist/esm/lib/version.js.map +1 -1
  112. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.d.ts +1 -0
  113. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js +54 -0
  114. package/dist/esm/tests/integration/chrome-newtab-page-tracking.spec.js.map +1 -0
  115. package/dist/esm/tests/unit/agent-execution-model.test.js +24 -2
  116. package/dist/esm/tests/unit/agent-execution-model.test.js.map +1 -1
  117. package/dist/esm/tests/unit/agent-system-prompt-variables.test.d.ts +1 -0
  118. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js +21 -0
  119. package/dist/esm/tests/unit/agent-system-prompt-variables.test.js.map +1 -0
  120. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.d.ts +1 -0
  121. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.js +118 -0
  122. package/dist/esm/tests/unit/aisdk-reasoning-effort.test.js.map +1 -0
  123. package/dist/esm/tests/unit/api-client-observe-variables.test.d.ts +1 -0
  124. package/dist/esm/tests/unit/api-client-observe-variables.test.js +84 -0
  125. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +1 -0
  126. package/dist/esm/tests/unit/api-variables-schema.test.d.ts +1 -0
  127. package/dist/esm/tests/unit/api-variables-schema.test.js +35 -0
  128. package/dist/esm/tests/unit/api-variables-schema.test.js.map +1 -0
  129. package/dist/esm/tests/unit/prompt-observe-variables.test.d.ts +1 -0
  130. package/dist/esm/tests/unit/prompt-observe-variables.test.js +17 -0
  131. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +1 -0
  132. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  133. package/dist/esm/tests/unit/timeout-handlers.test.js +50 -0
  134. package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -1
  135. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"public-types.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/public-types.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\n// Type-level manifest of all expected exported types\n// Since these types don't exist at runtime, we currently need to manually add new publicly exported types\n// to this list ourselves - it's not automatically going to catch changes like our export-surface.test.ts does.\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype ExpectedExportedTypes = {\n // Types from model.ts\n AvailableModel: Stagehand.AvailableModel;\n AvailableCuaModel: Stagehand.AvailableCuaModel;\n ModelProvider: Stagehand.ModelProvider;\n ClientOptions: Stagehand.ClientOptions;\n ModelConfiguration: Stagehand.ModelConfiguration;\n AnthropicJsonSchemaObject: Stagehand.AnthropicJsonSchemaObject;\n AISDKProvider: Stagehand.AISDKProvider;\n AISDKCustomProvider: Stagehand.AISDKCustomProvider;\n LLMTool: Stagehand.LLMTool;\n // Types from methods.ts\n ActOptions: Stagehand.ActOptions;\n ActResult: Stagehand.ActResult;\n ExtractResult: Stagehand.ExtractResult<Stagehand.StagehandZodSchema>;\n Action: Stagehand.Action;\n HistoryEntry: Stagehand.HistoryEntry;\n ExtractOptions: Stagehand.ExtractOptions;\n ObserveOptions: Stagehand.ObserveOptions;\n ObserveResult: Stagehand.ObserveResult;\n V3FunctionName: Stagehand.V3FunctionName;\n // Types from agent.ts\n Tool: Stagehand.Tool;\n AgentAction: Stagehand.AgentAction;\n AgentResult: Stagehand.AgentResult;\n AgentExecuteOptions: Stagehand.AgentExecuteOptions;\n AgentType: Stagehand.AgentType;\n AgentExecutionOptions: Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>;\n AgentHandlerOptions: Stagehand.AgentHandlerOptions;\n ActionExecutionResult: Stagehand.ActionExecutionResult;\n ToolUseItem: Stagehand.ToolUseItem;\n AnthropicMessage: Stagehand.AnthropicMessage;\n AnthropicContentBlock: Stagehand.AnthropicContentBlock;\n AnthropicTextBlock: Stagehand.AnthropicTextBlock;\n AnthropicToolResult: Stagehand.AnthropicToolResult;\n ResponseItem: Stagehand.ResponseItem;\n ComputerCallItem: Stagehand.ComputerCallItem;\n FunctionCallItem: Stagehand.FunctionCallItem;\n ResponseInputItem: Stagehand.ResponseInputItem;\n AgentInstance: Stagehand.AgentInstance;\n AgentProviderType: Stagehand.AgentProviderType;\n AgentModelConfig: Stagehand.AgentModelConfig;\n AgentConfig: Stagehand.AgentConfig;\n AgentToolMode: Stagehand.AgentToolMode;\n VariableValue: Stagehand.VariableValue;\n Variables: Stagehand.Variables;\n AgentCallbacks: Stagehand.AgentCallbacks;\n AgentExecuteCallbacks: Stagehand.AgentExecuteCallbacks;\n AgentStreamCallbacks: Stagehand.AgentStreamCallbacks;\n AgentExecuteOptionsBase: Stagehand.AgentExecuteOptionsBase;\n AgentStreamExecuteOptions: Stagehand.AgentStreamExecuteOptions;\n ModelMessage: Stagehand.ModelMessage;\n // Types from agent/tools\n AgentTools: Stagehand.AgentTools;\n AgentToolTypesMap: Stagehand.AgentToolTypesMap;\n AgentUITools: Stagehand.AgentUITools;\n AgentToolCall: Stagehand.AgentToolCall;\n AgentToolResult: Stagehand.AgentToolResult;\n // Types from logs.ts\n LogLevel: Stagehand.LogLevel;\n LogLine: Stagehand.LogLine;\n Logger: Stagehand.Logger;\n // Types from metrics.ts\n StagehandMetrics: Stagehand.StagehandMetrics;\n // Types from options.ts\n V3Env: Stagehand.V3Env;\n LocalBrowserLaunchOptions: Stagehand.LocalBrowserLaunchOptions;\n V3Options: Stagehand.V3Options;\n // Types from page.ts\n AnyPage: Stagehand.AnyPage;\n Page: Stagehand.Page;\n PlaywrightPage: Stagehand.PlaywrightPage;\n PatchrightPage: Stagehand.PatchrightPage;\n PuppeteerPage: Stagehand.PuppeteerPage;\n ConsoleListener: Stagehand.ConsoleListener;\n LoadState: Stagehand.LoadState;\n // Types from LLMClient.ts\n ChatMessage: Stagehand.ChatMessage;\n ChatMessageContent: Stagehand.ChatMessageContent;\n ChatMessageImageContent: Stagehand.ChatMessageImageContent;\n ChatMessageTextContent: Stagehand.ChatMessageTextContent;\n ChatCompletionOptions: Stagehand.ChatCompletionOptions;\n LLMResponse: Stagehand.LLMResponse;\n CreateChatCompletionOptions: Stagehand.CreateChatCompletionOptions;\n LLMUsage: Stagehand.LLMUsage;\n LLMParsedResponse: Stagehand.LLMParsedResponse<Record<string, unknown>>;\n // Types from zodCompat.ts\n StagehandZodSchema: Stagehand.StagehandZodSchema;\n StagehandZodObject: Stagehand.StagehandZodObject;\n InferStagehandSchema: Stagehand.InferStagehandSchema<Stagehand.StagehandZodSchema>;\n JsonSchemaDocument: Stagehand.JsonSchemaDocument;\n // Types from utils.ts\n JsonSchema: Stagehand.JsonSchema;\n JsonSchemaProperty: Stagehand.JsonSchemaProperty;\n // Types from cookies.ts\n Cookie: Stagehand.Cookie;\n CookieParam: Stagehand.CookieParam;\n ClearCookieOptions: Stagehand.ClearCookieOptions;\n};\n\ndescribe(\"Stagehand public API types\", () => {\n describe(\"AnyPage\", () => {\n type ExpectedAnyPage =\n | Stagehand.PlaywrightPage\n | Stagehand.PuppeteerPage\n | Stagehand.PatchrightPage\n | Stagehand.Page;\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AnyPage>().toEqualTypeOf<ExpectedAnyPage>();\n });\n });\n\n describe(\"ActOptions\", () => {\n type ExpectedActOptions = {\n model?: Stagehand.ModelConfiguration;\n variables?: Stagehand.Variables;\n timeout?: number;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActOptions>().toEqualTypeOf<ExpectedActOptions>();\n });\n });\n\n describe(\"ActResult\", () => {\n type ExpectedActResult = {\n success: boolean;\n message: string;\n actionDescription: string;\n actions: Stagehand.Action[];\n cacheStatus?: \"HIT\" | \"MISS\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActResult>().toEqualTypeOf<ExpectedActResult>();\n });\n });\n\n describe(\"ExtractOptions\", () => {\n type ExpectedExtractOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ExtractOptions>().toEqualTypeOf<ExpectedExtractOptions>();\n });\n });\n\n describe(\"ObserveOptions\", () => {\n type ExpectedObserveOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ObserveOptions>().toEqualTypeOf<ExpectedObserveOptions>();\n });\n });\n\n describe(\"ObserveResult\", () => {\n it(\"is an Action array with optional cacheStatus\", () => {\n expectTypeOf<Stagehand.ObserveResult>().toExtend<Stagehand.Action[]>();\n expectTypeOf<Stagehand.ObserveResult[\"cacheStatus\"]>().toEqualTypeOf<\n \"HIT\" | \"MISS\" | undefined\n >();\n });\n });\n\n describe(\"Action\", () => {\n type ExpectedAction = {\n selector: string;\n description: string;\n method?: string;\n arguments?: string[];\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Action>().toEqualTypeOf<ExpectedAction>();\n });\n });\n\n describe(\"AgentAction\", () => {\n // AgentAction is a separate type from Action, not an extension\n // It has additional fields like type, reasoning, taskCompleted, etc.\n it(\"has type field\", () => {\n type TestAction = { type: string } & Stagehand.AgentAction;\n expectTypeOf<TestAction[\"type\"]>().toEqualTypeOf<string>();\n });\n });\n\n describe(\"AgentExecuteOptions\", () => {\n type ExpectedAgentExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentExecuteCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentExecuteOptions>().toEqualTypeOf<ExpectedAgentExecuteOptions>();\n });\n });\n\n describe(\"AgentStreamExecuteOptions\", () => {\n type ExpectedAgentStreamExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentStreamCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentStreamExecuteOptions>().toEqualTypeOf<ExpectedAgentStreamExecuteOptions>();\n });\n });\n\n describe(\"AgentExecutionOptions\", () => {\n type ExpectedAgentExecutionOptions<T = Stagehand.AgentExecuteOptions> = {\n options: T;\n logger: (message: Stagehand.LogLine) => void;\n retries?: number;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<\n Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >().toEqualTypeOf<\n ExpectedAgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >();\n });\n });\n\n describe(\"AgentResult\", () => {\n type ExpectedAgentResult = {\n success: boolean;\n message: string;\n actions: Stagehand.AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n messages?: Stagehand.ModelMessage[];\n output?: Record<string, unknown>;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentResult>().toEqualTypeOf<ExpectedAgentResult>();\n });\n });\n\n describe(\"AgentConfig\", () => {\n type ExpectedAgentConfig = {\n systemPrompt?: string;\n integrations?: (unknown | string)[];\n tools?: unknown;\n cua?: boolean;\n model?: string | Stagehand.AgentModelConfig<string>;\n executionModel?: string | Stagehand.AgentModelConfig<string>;\n stream?: boolean;\n mode?: Stagehand.AgentToolMode;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentConfig>().toExtend<ExpectedAgentConfig>();\n });\n });\n\n describe(\"AgentToolMode\", () => {\n type ExpectedAgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentToolMode>().toEqualTypeOf<ExpectedAgentToolMode>();\n });\n });\n\n describe(\"HistoryEntry\", () => {\n type ExpectedHistoryEntry = {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"agent\";\n parameters: unknown;\n result: unknown;\n timestamp: string;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.HistoryEntry>().toEqualTypeOf<ExpectedHistoryEntry>();\n });\n });\n\n describe(\"Cookie\", () => {\n type ExpectedCookie = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Cookie>().toEqualTypeOf<ExpectedCookie>();\n });\n });\n\n describe(\"CookieParam\", () => {\n type ExpectedCookieParam = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.CookieParam>().toEqualTypeOf<ExpectedCookieParam>();\n });\n });\n\n describe(\"ClearCookieOptions\", () => {\n type ExpectedClearCookieOptions = {\n name?: string | RegExp;\n domain?: string | RegExp;\n path?: string | RegExp;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ClearCookieOptions>().toEqualTypeOf<ExpectedClearCookieOptions>();\n });\n });\n});\n"]}
1
+ {"version":3,"file":"public-types.test.js","sourceRoot":"","sources":["../../../../../tests/unit/public-api/public-types.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expectTypeOf, it } from \"vitest\";\nimport * as Stagehand from \"@browserbasehq/stagehand\";\n\n// Type-level manifest of all expected exported types\n// Since these types don't exist at runtime, we currently need to manually add new publicly exported types\n// to this list ourselves - it's not automatically going to catch changes like our export-surface.test.ts does.\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ntype ExpectedExportedTypes = {\n // Types from model.ts\n AvailableModel: Stagehand.AvailableModel;\n AvailableCuaModel: Stagehand.AvailableCuaModel;\n ModelProvider: Stagehand.ModelProvider;\n ClientOptions: Stagehand.ClientOptions;\n ModelConfiguration: Stagehand.ModelConfiguration;\n AnthropicJsonSchemaObject: Stagehand.AnthropicJsonSchemaObject;\n AISDKProvider: Stagehand.AISDKProvider;\n AISDKCustomProvider: Stagehand.AISDKCustomProvider;\n LLMTool: Stagehand.LLMTool;\n // Types from methods.ts\n ActOptions: Stagehand.ActOptions;\n ActResult: Stagehand.ActResult;\n ExtractResult: Stagehand.ExtractResult<Stagehand.StagehandZodSchema>;\n Action: Stagehand.Action;\n HistoryEntry: Stagehand.HistoryEntry;\n ExtractOptions: Stagehand.ExtractOptions;\n ObserveOptions: Stagehand.ObserveOptions;\n ObserveResult: Stagehand.ObserveResult;\n V3FunctionName: Stagehand.V3FunctionName;\n // Types from agent.ts\n Tool: Stagehand.Tool;\n AgentAction: Stagehand.AgentAction;\n AgentResult: Stagehand.AgentResult;\n AgentExecuteOptions: Stagehand.AgentExecuteOptions;\n AgentType: Stagehand.AgentType;\n AgentExecutionOptions: Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>;\n AgentHandlerOptions: Stagehand.AgentHandlerOptions;\n ActionExecutionResult: Stagehand.ActionExecutionResult;\n ToolUseItem: Stagehand.ToolUseItem;\n AnthropicMessage: Stagehand.AnthropicMessage;\n AnthropicContentBlock: Stagehand.AnthropicContentBlock;\n AnthropicTextBlock: Stagehand.AnthropicTextBlock;\n AnthropicToolResult: Stagehand.AnthropicToolResult;\n ResponseItem: Stagehand.ResponseItem;\n ComputerCallItem: Stagehand.ComputerCallItem;\n FunctionCallItem: Stagehand.FunctionCallItem;\n ResponseInputItem: Stagehand.ResponseInputItem;\n AgentInstance: Stagehand.AgentInstance;\n AgentProviderType: Stagehand.AgentProviderType;\n AgentModelConfig: Stagehand.AgentModelConfig;\n AgentConfig: Stagehand.AgentConfig;\n AgentToolMode: Stagehand.AgentToolMode;\n VariableValue: Stagehand.VariableValue;\n Variables: Stagehand.Variables;\n AgentCallbacks: Stagehand.AgentCallbacks;\n AgentExecuteCallbacks: Stagehand.AgentExecuteCallbacks;\n AgentStreamCallbacks: Stagehand.AgentStreamCallbacks;\n AgentExecuteOptionsBase: Stagehand.AgentExecuteOptionsBase;\n AgentStreamExecuteOptions: Stagehand.AgentStreamExecuteOptions;\n ModelMessage: Stagehand.ModelMessage;\n // Types from agent/tools\n AgentTools: Stagehand.AgentTools;\n AgentToolTypesMap: Stagehand.AgentToolTypesMap;\n AgentUITools: Stagehand.AgentUITools;\n AgentToolCall: Stagehand.AgentToolCall;\n AgentToolResult: Stagehand.AgentToolResult;\n // Types from logs.ts\n LogLevel: Stagehand.LogLevel;\n LogLine: Stagehand.LogLine;\n Logger: Stagehand.Logger;\n // Types from metrics.ts\n StagehandMetrics: Stagehand.StagehandMetrics;\n // Types from options.ts\n V3Env: Stagehand.V3Env;\n LocalBrowserLaunchOptions: Stagehand.LocalBrowserLaunchOptions;\n V3Options: Stagehand.V3Options;\n // Types from page.ts\n AnyPage: Stagehand.AnyPage;\n Page: Stagehand.Page;\n PlaywrightPage: Stagehand.PlaywrightPage;\n PatchrightPage: Stagehand.PatchrightPage;\n PuppeteerPage: Stagehand.PuppeteerPage;\n ConsoleListener: Stagehand.ConsoleListener;\n LoadState: Stagehand.LoadState;\n // Types from LLMClient.ts\n ChatMessage: Stagehand.ChatMessage;\n ChatMessageContent: Stagehand.ChatMessageContent;\n ChatMessageImageContent: Stagehand.ChatMessageImageContent;\n ChatMessageTextContent: Stagehand.ChatMessageTextContent;\n ChatCompletionOptions: Stagehand.ChatCompletionOptions;\n LLMResponse: Stagehand.LLMResponse;\n CreateChatCompletionOptions: Stagehand.CreateChatCompletionOptions;\n LLMUsage: Stagehand.LLMUsage;\n LLMParsedResponse: Stagehand.LLMParsedResponse<Record<string, unknown>>;\n // Types from zodCompat.ts\n StagehandZodSchema: Stagehand.StagehandZodSchema;\n StagehandZodObject: Stagehand.StagehandZodObject;\n InferStagehandSchema: Stagehand.InferStagehandSchema<Stagehand.StagehandZodSchema>;\n JsonSchemaDocument: Stagehand.JsonSchemaDocument;\n // Types from utils.ts\n JsonSchema: Stagehand.JsonSchema;\n JsonSchemaProperty: Stagehand.JsonSchemaProperty;\n // Types from cookies.ts\n Cookie: Stagehand.Cookie;\n CookieParam: Stagehand.CookieParam;\n ClearCookieOptions: Stagehand.ClearCookieOptions;\n};\n\ndescribe(\"Stagehand public API types\", () => {\n describe(\"AnyPage\", () => {\n type ExpectedAnyPage =\n | Stagehand.PlaywrightPage\n | Stagehand.PuppeteerPage\n | Stagehand.PatchrightPage\n | Stagehand.Page;\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AnyPage>().toEqualTypeOf<ExpectedAnyPage>();\n });\n });\n\n describe(\"ActOptions\", () => {\n type ExpectedActOptions = {\n model?: Stagehand.ModelConfiguration;\n variables?: Stagehand.Variables;\n timeout?: number;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActOptions>().toEqualTypeOf<ExpectedActOptions>();\n });\n });\n\n describe(\"ActResult\", () => {\n type ExpectedActResult = {\n success: boolean;\n message: string;\n actionDescription: string;\n actions: Stagehand.Action[];\n cacheStatus?: \"HIT\" | \"MISS\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ActResult>().toEqualTypeOf<ExpectedActResult>();\n });\n });\n\n describe(\"ExtractOptions\", () => {\n type ExpectedExtractOptions = {\n model?: Stagehand.ModelConfiguration;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ExtractOptions>().toEqualTypeOf<ExpectedExtractOptions>();\n });\n });\n\n describe(\"ObserveOptions\", () => {\n type ExpectedObserveOptions = {\n model?: Stagehand.ModelConfiguration;\n variables?: Stagehand.Variables;\n timeout?: number;\n selector?: string;\n page?: Stagehand.AnyPage;\n serverCache?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ObserveOptions>().toEqualTypeOf<ExpectedObserveOptions>();\n });\n });\n\n describe(\"ObserveResult\", () => {\n it(\"is an Action array with optional cacheStatus\", () => {\n expectTypeOf<Stagehand.ObserveResult>().toExtend<Stagehand.Action[]>();\n expectTypeOf<Stagehand.ObserveResult[\"cacheStatus\"]>().toEqualTypeOf<\n \"HIT\" | \"MISS\" | undefined\n >();\n });\n });\n\n describe(\"Action\", () => {\n type ExpectedAction = {\n selector: string;\n description: string;\n method?: string;\n arguments?: string[];\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Action>().toEqualTypeOf<ExpectedAction>();\n });\n });\n\n describe(\"AgentAction\", () => {\n // AgentAction is a separate type from Action, not an extension\n // It has additional fields like type, reasoning, taskCompleted, etc.\n it(\"has type field\", () => {\n type TestAction = { type: string } & Stagehand.AgentAction;\n expectTypeOf<TestAction[\"type\"]>().toEqualTypeOf<string>();\n });\n });\n\n describe(\"AgentExecuteOptions\", () => {\n type ExpectedAgentExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentExecuteCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentExecuteOptions>().toEqualTypeOf<ExpectedAgentExecuteOptions>();\n });\n });\n\n describe(\"AgentStreamExecuteOptions\", () => {\n type ExpectedAgentStreamExecuteOptions = {\n instruction: string;\n maxSteps?: number;\n page?: Stagehand.AnyPage;\n highlightCursor?: boolean;\n messages?: Stagehand.ModelMessage[];\n signal?: AbortSignal;\n excludeTools?: string[];\n output?: Stagehand.StagehandZodObject;\n callbacks?: Stagehand.AgentStreamCallbacks;\n variables?: Stagehand.Variables;\n toolTimeout?: number;\n useSearch?: boolean;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentStreamExecuteOptions>().toEqualTypeOf<ExpectedAgentStreamExecuteOptions>();\n });\n });\n\n describe(\"AgentExecutionOptions\", () => {\n type ExpectedAgentExecutionOptions<T = Stagehand.AgentExecuteOptions> = {\n options: T;\n logger: (message: Stagehand.LogLine) => void;\n retries?: number;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<\n Stagehand.AgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >().toEqualTypeOf<\n ExpectedAgentExecutionOptions<Stagehand.AgentExecuteOptions>\n >();\n });\n });\n\n describe(\"AgentResult\", () => {\n type ExpectedAgentResult = {\n success: boolean;\n message: string;\n actions: Stagehand.AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n messages?: Stagehand.ModelMessage[];\n output?: Record<string, unknown>;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentResult>().toEqualTypeOf<ExpectedAgentResult>();\n });\n });\n\n describe(\"AgentConfig\", () => {\n type ExpectedAgentConfig = {\n systemPrompt?: string;\n integrations?: (unknown | string)[];\n tools?: unknown;\n cua?: boolean;\n model?: string | Stagehand.AgentModelConfig<string>;\n executionModel?: string | Stagehand.AgentModelConfig<string>;\n stream?: boolean;\n mode?: Stagehand.AgentToolMode;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentConfig>().toExtend<ExpectedAgentConfig>();\n });\n });\n\n describe(\"AgentToolMode\", () => {\n type ExpectedAgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.AgentToolMode>().toEqualTypeOf<ExpectedAgentToolMode>();\n });\n });\n\n describe(\"HistoryEntry\", () => {\n type ExpectedHistoryEntry = {\n method: \"act\" | \"extract\" | \"observe\" | \"navigate\" | \"agent\";\n parameters: unknown;\n result: unknown;\n timestamp: string;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.HistoryEntry>().toEqualTypeOf<ExpectedHistoryEntry>();\n });\n });\n\n describe(\"Cookie\", () => {\n type ExpectedCookie = {\n name: string;\n value: string;\n domain: string;\n path: string;\n expires: number;\n httpOnly: boolean;\n secure: boolean;\n sameSite: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.Cookie>().toEqualTypeOf<ExpectedCookie>();\n });\n });\n\n describe(\"CookieParam\", () => {\n type ExpectedCookieParam = {\n name: string;\n value: string;\n url?: string;\n domain?: string;\n path?: string;\n expires?: number;\n httpOnly?: boolean;\n secure?: boolean;\n sameSite?: \"Strict\" | \"Lax\" | \"None\";\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.CookieParam>().toEqualTypeOf<ExpectedCookieParam>();\n });\n });\n\n describe(\"ClearCookieOptions\", () => {\n type ExpectedClearCookieOptions = {\n name?: string | RegExp;\n domain?: string | RegExp;\n path?: string | RegExp;\n };\n\n it(\"matches expected type shape\", () => {\n expectTypeOf<Stagehand.ClearCookieOptions>().toEqualTypeOf<ExpectedClearCookieOptions>();\n });\n });\n});\n"]}
@@ -720,6 +720,56 @@ vitest_1.vi.mock("../../lib/inference", () => ({
720
720
  (0, vitest_1.expect)(result[0]).toHaveProperty("description", "Submit button");
721
721
  (0, vitest_1.expect)(metricsCallback).toHaveBeenCalledWith(methods_js_1.V3FunctionName.OBSERVE, 150, 75, 15, 8, 600);
722
722
  });
723
+ (0, vitest_1.it)("observe() forwards variables to inference and preserves placeholders", async () => {
724
+ const captureHybridSnapshotMock = vitest_1.vi.mocked(index_js_1.captureHybridSnapshot);
725
+ captureHybridSnapshotMock.mockResolvedValue({
726
+ combinedTree: "tree content",
727
+ combinedXpathMap: { "1-0": "/html/body/input" },
728
+ combinedUrlMap: {},
729
+ });
730
+ const observeInferenceMock = vitest_1.vi.mocked(inference_js_1.observe);
731
+ observeInferenceMock.mockResolvedValue({
732
+ elements: [
733
+ {
734
+ elementId: "1-0",
735
+ description: "Email field",
736
+ method: "fill",
737
+ arguments: ["%username%"],
738
+ },
739
+ ],
740
+ prompt_tokens: 150,
741
+ completion_tokens: 75,
742
+ reasoning_tokens: 15,
743
+ cached_input_tokens: 8,
744
+ inference_time_ms: 600,
745
+ });
746
+ vitest_1.vi.mocked(timeoutGuard_js_1.createTimeoutGuard).mockImplementation(() => {
747
+ return vitest_1.vi.fn(() => {
748
+ // No-op - never throws
749
+ });
750
+ });
751
+ const handler = buildObserveHandler();
752
+ const fakePage = {
753
+ mainFrame: vitest_1.vi.fn().mockReturnValue({}),
754
+ };
755
+ const variables = {
756
+ username: {
757
+ value: "john@example.com",
758
+ description: "The login email",
759
+ },
760
+ };
761
+ const result = await handler.observe({
762
+ instruction: "find the field where %username% should be entered",
763
+ variables,
764
+ page: fakePage,
765
+ });
766
+ (0, vitest_1.expect)(observeInferenceMock).toHaveBeenCalledWith(vitest_1.expect.objectContaining({
767
+ variables,
768
+ }));
769
+ (0, vitest_1.expect)(result).toHaveLength(1);
770
+ (0, vitest_1.expect)(result[0]).toHaveProperty("arguments");
771
+ (0, vitest_1.expect)(result[0]?.arguments).toEqual(["%username%"]);
772
+ });
723
773
  (0, vitest_1.it)("act() with zero timeout behaves as no timeout", async () => {
724
774
  const waitForDomNetworkQuietMock = vitest_1.vi.mocked(actHandlerUtils_js_1.waitForDomNetworkQuiet);
725
775
  waitForDomNetworkQuietMock.mockResolvedValue(undefined);
@@ -1 +1 @@
1
- {"version":3,"file":"timeout-handlers.test.js","sourceRoot":"","sources":["../../../../tests/unit/timeout-handlers.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { ActHandler } from \"../../lib/v3/handlers/actHandler.js\";\nimport { ExtractHandler } from \"../../lib/v3/handlers/extractHandler.js\";\nimport { ObserveHandler } from \"../../lib/v3/handlers/observeHandler.js\";\nimport type { Page } from \"../../lib/v3/understudy/page.js\";\nimport type { ClientOptions } from \"../../lib/v3/types/public/model.js\";\nimport type { LLMClient } from \"../../lib/v3/llm/LLMClient.js\";\nimport { createTimeoutGuard } from \"../../lib/v3/handlers/handlerUtils/timeoutGuard.js\";\nimport { waitForDomNetworkQuiet } from \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\";\nimport { captureHybridSnapshot } from \"../../lib/v3/understudy/a11y/snapshot/index.js\";\nimport {\n ActTimeoutError,\n ExtractTimeoutError,\n ObserveTimeoutError,\n} from \"../../lib/v3/types/public/sdkErrors.js\";\nimport {\n act as actInference,\n extract as extractInference,\n observe as observeInference,\n} from \"../../lib/inference.js\";\nimport { V3FunctionName } from \"../../lib/v3/types/public/methods.js\";\n\nvi.mock(\"../../lib/v3/handlers/handlerUtils/timeoutGuard\", () => ({\n createTimeoutGuard: vi.fn(),\n}));\n\nvi.mock(\"../../lib/v3/handlers/handlerUtils/actHandlerUtils\", () => ({\n waitForDomNetworkQuiet: vi.fn(),\n performUnderstudyMethod: vi.fn(),\n}));\n\nvi.mock(\"../../lib/v3/understudy/a11y/snapshot\", () => ({\n captureHybridSnapshot: vi.fn(),\n diffCombinedTrees: vi.fn(),\n}));\n\nvi.mock(\"../../lib/inference\", () => ({\n act: vi.fn(),\n extract: vi.fn(),\n observe: vi.fn(),\n}));\n\ndescribe(\"ActHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError when timeout expires before snapshot\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n // Make createTimeoutGuard return a guard that throws on call #2\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Verify pre-timeout helper ran\n expect(waitForDomNetworkQuietMock).toHaveBeenCalledTimes(1);\n // Verify snapshot was NOT called (timeout fired before it)\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError when timeout expires before LLM call\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const actInferenceMock = vi.mocked(actInference);\n\n // Throw on call #3 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 3) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(actInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError with correct message format\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const timeoutMs = 100;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ActTimeoutError(ms!);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ActTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ActTimeoutError);\n expect((error as ActTimeoutError).message).toContain(\"act()\");\n expect((error as ActTimeoutError).message).toContain(`${timeoutMs}ms`);\n expect((error as ActTimeoutError).name).toBe(\"ActTimeoutError\");\n }\n });\n});\n\ndescribe(\"ActHandler two-step timeout\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError during step 2; step 2 action does not run\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n // First call returns a two-step action\n actInferenceMock.mockResolvedValueOnce({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: true,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n const diffCombinedTreesMock = vi.mocked(\n (await import(\"../../lib/v3/understudy/a11y/snapshot/index.js\"))\n .diffCombinedTrees,\n );\n diffCombinedTreesMock.mockReturnValue(\"diff tree\");\n\n // Timeout fires after step 1 completes, during step 2 snapshot\n // ensureTimeRemaining calls: 1=before wait, 2=after wait/before snap1, 3=before LLM1,\n // 4=before action1, 5=inside takeDeterministicAction, 6=performUnderstudy,\n // 7=before snap2 (this one should throw)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n if (callCount >= 7) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click then type\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Step 1 action should have been executed\n expect(performUnderstudyMethodMock).toHaveBeenCalledTimes(1);\n // Step 2 LLM call should NOT have happened\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe(\"ActHandler self-heal timeout\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError during self-heal snapshot; no retry action executes\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n // First call fails, triggering self-heal\n performUnderstudyMethodMock.mockRejectedValueOnce(\n new Error(\"Element not found\"),\n );\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // Timeout during self-heal snapshot (call 7 or later)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n // Timeout during self-heal snapshot call\n if (callCount >= 7) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler({ selfHeal: true });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // First action attempt should have been tried\n expect(performUnderstudyMethodMock).toHaveBeenCalledTimes(1);\n // First LLM call should have happened\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n // Self-heal snapshot should have been started (call happened)\n expect(captureHybridSnapshotMock).toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError during self-heal LLM inference; no retry action executes\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n // First call fails, triggering self-heal\n performUnderstudyMethodMock.mockRejectedValueOnce(\n new Error(\"Element not found\"),\n );\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValueOnce({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // Timeout during self-heal LLM inference (call 8)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n // Timeout during self-heal LLM call\n if (callCount >= 8) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler({ selfHeal: true });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Self-heal snapshot was captured\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(2);\n // Only one LLM inference (the retry inference was aborted by timeout)\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe(\"ExtractHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ExtractTimeoutError when timeout expires before snapshot\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Throw immediately on first call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Snapshot should NOT have been called\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n // LLM inference should NOT have been called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ExtractTimeoutError when timeout expires before LLM call\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Throw on call #2 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ExtractTimeoutError with correct message format\", async () => {\n const timeoutMs = 200;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ExtractTimeoutError(ms!);\n });\n });\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ExtractTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ExtractTimeoutError);\n expect((error as ExtractTimeoutError).message).toContain(\"extract()\");\n expect((error as ExtractTimeoutError).message).toContain(\n `${timeoutMs}ms`,\n );\n expect((error as ExtractTimeoutError).name).toBe(\"ExtractTimeoutError\");\n }\n });\n\n it(\"stops LLM and post-processing when timeout expires\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: { \"1-0\": \"https://example.com\" },\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Allow snapshot but timeout before LLM\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract links\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Post-processing (URL injection) never runs because LLM was never called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"ObserveHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ObserveTimeoutError when timeout expires before snapshot\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Throw immediately on first call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Snapshot should NOT have been called\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n // LLM inference should NOT have been called\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ObserveTimeoutError when timeout expires before LLM call\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Throw on call #2 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ObserveTimeoutError with correct message format\", async () => {\n const timeoutMs = 150;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ObserveTimeoutError(ms!);\n });\n });\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ObserveTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ObserveTimeoutError);\n expect((error as ObserveTimeoutError).message).toContain(\"observe()\");\n expect((error as ObserveTimeoutError).message).toContain(\n `${timeoutMs}ms`,\n );\n expect((error as ObserveTimeoutError).name).toBe(\"ObserveTimeoutError\");\n }\n });\n\n it(\"aborts result processing when timeout expires\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Timeout before LLM call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find all interactive elements\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Result mapping/processing never happens\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"No-timeout success paths\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"act() completes successfully without timeout and records metrics\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n reasoning_tokens: 10,\n cached_input_tokens: 5,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildActHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result.success).toBe(true);\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.ACT,\n 100,\n 50,\n 10,\n 5,\n 500,\n );\n });\n\n it(\"extract() completes successfully without timeout and records metrics\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n extractInferenceMock.mockResolvedValue({\n title: \"Test Title\",\n metadata: { completed: true, progress: \"100%\" },\n prompt_tokens: 200,\n completion_tokens: 100,\n reasoning_tokens: 20,\n cached_input_tokens: 10,\n inference_time_ms: 800,\n } as ReturnType<typeof extractInference> extends Promise<infer T>\n ? T\n : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildExtractHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result).toHaveProperty(\"title\", \"Test Title\");\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.EXTRACT,\n 200,\n 100,\n 20,\n 10,\n 800,\n );\n });\n\n it(\"observe() completes successfully without timeout and records metrics\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n observeInferenceMock.mockResolvedValue({\n elements: [\n {\n elementId: \"1-0\",\n description: \"Submit button\",\n },\n ],\n prompt_tokens: 150,\n completion_tokens: 75,\n reasoning_tokens: 15,\n cached_input_tokens: 8,\n inference_time_ms: 600,\n } as ReturnType<typeof observeInference> extends Promise<infer T>\n ? T\n : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildObserveHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result).toHaveLength(1);\n expect(result[0]).toHaveProperty(\"description\", \"Submit button\");\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.OBSERVE,\n 150,\n 75,\n 15,\n 8,\n 600,\n );\n });\n\n it(\"act() with zero timeout behaves as no timeout\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // When timeout is 0 or negative, createTimeoutGuard returns a no-op\n vi.mocked(createTimeoutGuard).mockImplementation((timeoutMs) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return vi.fn(() => {\n // No-op\n });\n }\n return vi.fn(() => {\n throw new ActTimeoutError(timeoutMs);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 0, // Zero timeout should be treated as \"no timeout\"\n });\n\n expect(result.success).toBe(true);\n });\n\n it(\"act() with negative timeout behaves as no timeout\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n vi.mocked(createTimeoutGuard).mockImplementation((timeoutMs) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return vi.fn(() => {\n // No-op\n });\n }\n return vi.fn(() => {\n throw new ActTimeoutError(timeoutMs);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: -100, // Negative timeout should be treated as \"no timeout\"\n });\n\n expect(result.success).toBe(true);\n });\n});\n\ninterface BuildActHandlerOptions {\n selfHeal?: boolean;\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildActHandler(options: BuildActHandlerOptions = {}): ActHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ActHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n options.selfHeal ?? false,\n options.onMetrics,\n undefined,\n );\n}\n\ninterface BuildExtractHandlerOptions {\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildExtractHandler(\n options: BuildExtractHandlerOptions = {},\n): ExtractHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ExtractHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n false,\n options.onMetrics,\n );\n}\n\ninterface BuildObserveHandlerOptions {\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildObserveHandler(\n options: BuildObserveHandlerOptions = {},\n): ObserveHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ObserveHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n false,\n options.onMetrics,\n );\n}\n"]}
1
+ {"version":3,"file":"timeout-handlers.test.js","sourceRoot":"","sources":["../../../../tests/unit/timeout-handlers.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { ActHandler } from \"../../lib/v3/handlers/actHandler.js\";\nimport { ExtractHandler } from \"../../lib/v3/handlers/extractHandler.js\";\nimport { ObserveHandler } from \"../../lib/v3/handlers/observeHandler.js\";\nimport type { Page } from \"../../lib/v3/understudy/page.js\";\nimport type { ClientOptions } from \"../../lib/v3/types/public/model.js\";\nimport type { LLMClient } from \"../../lib/v3/llm/LLMClient.js\";\nimport { createTimeoutGuard } from \"../../lib/v3/handlers/handlerUtils/timeoutGuard.js\";\nimport { waitForDomNetworkQuiet } from \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\";\nimport { captureHybridSnapshot } from \"../../lib/v3/understudy/a11y/snapshot/index.js\";\nimport {\n ActTimeoutError,\n ExtractTimeoutError,\n ObserveTimeoutError,\n} from \"../../lib/v3/types/public/sdkErrors.js\";\nimport {\n act as actInference,\n extract as extractInference,\n observe as observeInference,\n} from \"../../lib/inference.js\";\nimport { V3FunctionName } from \"../../lib/v3/types/public/methods.js\";\n\nvi.mock(\"../../lib/v3/handlers/handlerUtils/timeoutGuard\", () => ({\n createTimeoutGuard: vi.fn(),\n}));\n\nvi.mock(\"../../lib/v3/handlers/handlerUtils/actHandlerUtils\", () => ({\n waitForDomNetworkQuiet: vi.fn(),\n performUnderstudyMethod: vi.fn(),\n}));\n\nvi.mock(\"../../lib/v3/understudy/a11y/snapshot\", () => ({\n captureHybridSnapshot: vi.fn(),\n diffCombinedTrees: vi.fn(),\n}));\n\nvi.mock(\"../../lib/inference\", () => ({\n act: vi.fn(),\n extract: vi.fn(),\n observe: vi.fn(),\n}));\n\ndescribe(\"ActHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError when timeout expires before snapshot\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n // Make createTimeoutGuard return a guard that throws on call #2\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Verify pre-timeout helper ran\n expect(waitForDomNetworkQuietMock).toHaveBeenCalledTimes(1);\n // Verify snapshot was NOT called (timeout fired before it)\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError when timeout expires before LLM call\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const actInferenceMock = vi.mocked(actInference);\n\n // Throw on call #3 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 3) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(actInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError with correct message format\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const timeoutMs = 100;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ActTimeoutError(ms!);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.act({\n instruction: \"do something\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ActTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ActTimeoutError);\n expect((error as ActTimeoutError).message).toContain(\"act()\");\n expect((error as ActTimeoutError).message).toContain(`${timeoutMs}ms`);\n expect((error as ActTimeoutError).name).toBe(\"ActTimeoutError\");\n }\n });\n});\n\ndescribe(\"ActHandler two-step timeout\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError during step 2; step 2 action does not run\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n // First call returns a two-step action\n actInferenceMock.mockResolvedValueOnce({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: true,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n const diffCombinedTreesMock = vi.mocked(\n (await import(\"../../lib/v3/understudy/a11y/snapshot/index.js\"))\n .diffCombinedTrees,\n );\n diffCombinedTreesMock.mockReturnValue(\"diff tree\");\n\n // Timeout fires after step 1 completes, during step 2 snapshot\n // ensureTimeRemaining calls: 1=before wait, 2=after wait/before snap1, 3=before LLM1,\n // 4=before action1, 5=inside takeDeterministicAction, 6=performUnderstudy,\n // 7=before snap2 (this one should throw)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n if (callCount >= 7) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click then type\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Step 1 action should have been executed\n expect(performUnderstudyMethodMock).toHaveBeenCalledTimes(1);\n // Step 2 LLM call should NOT have happened\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe(\"ActHandler self-heal timeout\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ActTimeoutError during self-heal snapshot; no retry action executes\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n // First call fails, triggering self-heal\n performUnderstudyMethodMock.mockRejectedValueOnce(\n new Error(\"Element not found\"),\n );\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // Timeout during self-heal snapshot (call 7 or later)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n // Timeout during self-heal snapshot call\n if (callCount >= 7) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler({ selfHeal: true });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // First action attempt should have been tried\n expect(performUnderstudyMethodMock).toHaveBeenCalledTimes(1);\n // First LLM call should have happened\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n // Self-heal snapshot should have been started (call happened)\n expect(captureHybridSnapshotMock).toHaveBeenCalled();\n });\n\n it(\"throws ActTimeoutError during self-heal LLM inference; no retry action executes\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n // First call fails, triggering self-heal\n performUnderstudyMethodMock.mockRejectedValueOnce(\n new Error(\"Element not found\"),\n );\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValueOnce({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // Timeout during self-heal LLM inference (call 8)\n let callCount = 0;\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n callCount += 1;\n // Timeout during self-heal LLM call\n if (callCount >= 8) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ActTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildActHandler({ selfHeal: true });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 50,\n }),\n ).rejects.toThrow(ActTimeoutError);\n\n // Self-heal snapshot was captured\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(2);\n // Only one LLM inference (the retry inference was aborted by timeout)\n expect(actInferenceMock).toHaveBeenCalledTimes(1);\n });\n});\n\ndescribe(\"ExtractHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ExtractTimeoutError when timeout expires before snapshot\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Throw immediately on first call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Snapshot should NOT have been called\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n // LLM inference should NOT have been called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ExtractTimeoutError when timeout expires before LLM call\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Throw on call #2 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ExtractTimeoutError with correct message format\", async () => {\n const timeoutMs = 200;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ExtractTimeoutError(ms!);\n });\n });\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ExtractTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ExtractTimeoutError);\n expect((error as ExtractTimeoutError).message).toContain(\"extract()\");\n expect((error as ExtractTimeoutError).message).toContain(\n `${timeoutMs}ms`,\n );\n expect((error as ExtractTimeoutError).name).toBe(\"ExtractTimeoutError\");\n }\n });\n\n it(\"stops LLM and post-processing when timeout expires\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: { \"1-0\": \"https://example.com\" },\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n\n // Allow snapshot but timeout before LLM\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ExtractTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildExtractHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.extract({\n instruction: \"extract links\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ExtractTimeoutError);\n\n // Post-processing (URL injection) never runs because LLM was never called\n expect(extractInferenceMock).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"ObserveHandler timeout guard\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"throws ObserveTimeoutError when timeout expires before snapshot\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Throw immediately on first call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Snapshot should NOT have been called\n expect(captureHybridSnapshotMock).not.toHaveBeenCalled();\n // LLM inference should NOT have been called\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ObserveTimeoutError when timeout expires before LLM call\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Throw on call #2 (after snapshot but before LLM)\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Snapshot should have been called\n expect(captureHybridSnapshotMock).toHaveBeenCalledTimes(1);\n // LLM inference should NOT have been called\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n\n it(\"throws ObserveTimeoutError with correct message format\", async () => {\n const timeoutMs = 150;\n\n vi.mocked(createTimeoutGuard).mockImplementation((ms, errorFactory) => {\n return vi.fn(() => {\n throw errorFactory ? errorFactory(ms!) : new ObserveTimeoutError(ms!);\n });\n });\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n try {\n await handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n timeout: timeoutMs,\n });\n throw new Error(\"Expected ObserveTimeoutError to be thrown\");\n } catch (error) {\n expect(error).toBeInstanceOf(ObserveTimeoutError);\n expect((error as ObserveTimeoutError).message).toContain(\"observe()\");\n expect((error as ObserveTimeoutError).message).toContain(\n `${timeoutMs}ms`,\n );\n expect((error as ObserveTimeoutError).name).toBe(\"ObserveTimeoutError\");\n }\n });\n\n it(\"aborts result processing when timeout expires\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n\n // Timeout before LLM call\n vi.mocked(createTimeoutGuard).mockImplementation(\n (timeoutMs, errorFactory) => {\n let calls = 0;\n return vi.fn(() => {\n calls += 1;\n if (calls >= 2) {\n throw errorFactory\n ? errorFactory(timeoutMs!)\n : new ObserveTimeoutError(timeoutMs!);\n }\n });\n },\n );\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n await expect(\n handler.observe({\n instruction: \"find all interactive elements\",\n page: fakePage,\n timeout: 5,\n }),\n ).rejects.toThrow(ObserveTimeoutError);\n\n // Result mapping/processing never happens\n expect(observeInferenceMock).not.toHaveBeenCalled();\n });\n});\n\ndescribe(\"No-timeout success paths\", () => {\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"act() completes successfully without timeout and records metrics\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n reasoning_tokens: 10,\n cached_input_tokens: 5,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildActHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result.success).toBe(true);\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.ACT,\n 100,\n 50,\n 10,\n 5,\n 500,\n );\n });\n\n it(\"extract() completes successfully without timeout and records metrics\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: {},\n combinedUrlMap: {},\n });\n\n const extractInferenceMock = vi.mocked(extractInference);\n extractInferenceMock.mockResolvedValue({\n title: \"Test Title\",\n metadata: { completed: true, progress: \"100%\" },\n prompt_tokens: 200,\n completion_tokens: 100,\n reasoning_tokens: 20,\n cached_input_tokens: 10,\n inference_time_ms: 800,\n } as ReturnType<typeof extractInference> extends Promise<infer T>\n ? T\n : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildExtractHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.extract({\n instruction: \"extract title\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result).toHaveProperty(\"title\", \"Test Title\");\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.EXTRACT,\n 200,\n 100,\n 20,\n 10,\n 800,\n );\n });\n\n it(\"observe() completes successfully without timeout and records metrics\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n observeInferenceMock.mockResolvedValue({\n elements: [\n {\n elementId: \"1-0\",\n description: \"Submit button\",\n },\n ],\n prompt_tokens: 150,\n completion_tokens: 75,\n reasoning_tokens: 15,\n cached_input_tokens: 8,\n inference_time_ms: 600,\n } as ReturnType<typeof observeInference> extends Promise<infer T>\n ? T\n : never);\n\n // No timeout - guard never throws\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const metricsCallback = vi.fn();\n const handler = buildObserveHandler({ onMetrics: metricsCallback });\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.observe({\n instruction: \"find buttons\",\n page: fakePage,\n // No timeout specified\n });\n\n expect(result).toHaveLength(1);\n expect(result[0]).toHaveProperty(\"description\", \"Submit button\");\n expect(metricsCallback).toHaveBeenCalledWith(\n V3FunctionName.OBSERVE,\n 150,\n 75,\n 15,\n 8,\n 600,\n );\n });\n\n it(\"observe() forwards variables to inference and preserves placeholders\", async () => {\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/input\" },\n combinedUrlMap: {},\n });\n\n const observeInferenceMock = vi.mocked(observeInference);\n observeInferenceMock.mockResolvedValue({\n elements: [\n {\n elementId: \"1-0\",\n description: \"Email field\",\n method: \"fill\",\n arguments: [\"%username%\"],\n },\n ],\n prompt_tokens: 150,\n completion_tokens: 75,\n reasoning_tokens: 15,\n cached_input_tokens: 8,\n inference_time_ms: 600,\n } as ReturnType<typeof observeInference> extends Promise<infer T>\n ? T\n : never);\n\n vi.mocked(createTimeoutGuard).mockImplementation(() => {\n return vi.fn(() => {\n // No-op - never throws\n });\n });\n\n const handler = buildObserveHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n const variables = {\n username: {\n value: \"john@example.com\",\n description: \"The login email\",\n },\n };\n\n const result = await handler.observe({\n instruction: \"find the field where %username% should be entered\",\n variables,\n page: fakePage,\n });\n\n expect(observeInferenceMock).toHaveBeenCalledWith(\n expect.objectContaining({\n variables,\n }),\n );\n expect(result).toHaveLength(1);\n expect(result[0]).toHaveProperty(\"arguments\");\n expect(result[0]?.arguments).toEqual([\"%username%\"]);\n });\n\n it(\"act() with zero timeout behaves as no timeout\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n // When timeout is 0 or negative, createTimeoutGuard returns a no-op\n vi.mocked(createTimeoutGuard).mockImplementation((timeoutMs) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return vi.fn(() => {\n // No-op\n });\n }\n return vi.fn(() => {\n throw new ActTimeoutError(timeoutMs);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: 0, // Zero timeout should be treated as \"no timeout\"\n });\n\n expect(result.success).toBe(true);\n });\n\n it(\"act() with negative timeout behaves as no timeout\", async () => {\n const waitForDomNetworkQuietMock = vi.mocked(waitForDomNetworkQuiet);\n waitForDomNetworkQuietMock.mockResolvedValue(undefined);\n\n const captureHybridSnapshotMock = vi.mocked(captureHybridSnapshot);\n captureHybridSnapshotMock.mockResolvedValue({\n combinedTree: \"tree content\",\n combinedXpathMap: { \"1-0\": \"/html/body/button\" },\n combinedUrlMap: {},\n });\n\n const { performUnderstudyMethod } = await import(\n \"../../lib/v3/handlers/handlerUtils/actHandlerUtils.js\"\n );\n const performUnderstudyMethodMock = vi.mocked(performUnderstudyMethod);\n performUnderstudyMethodMock.mockResolvedValue(undefined);\n\n const actInferenceMock = vi.mocked(actInference);\n actInferenceMock.mockResolvedValue({\n element: {\n elementId: \"1-0\",\n description: \"click button\",\n method: \"click\",\n arguments: [],\n },\n twoStep: false,\n prompt_tokens: 100,\n completion_tokens: 50,\n inference_time_ms: 500,\n } as ReturnType<typeof actInference> extends Promise<infer T> ? T : never);\n\n vi.mocked(createTimeoutGuard).mockImplementation((timeoutMs) => {\n if (!timeoutMs || timeoutMs <= 0) {\n return vi.fn(() => {\n // No-op\n });\n }\n return vi.fn(() => {\n throw new ActTimeoutError(timeoutMs);\n });\n });\n\n const handler = buildActHandler();\n const fakePage = {\n mainFrame: vi.fn().mockReturnValue({}),\n } as unknown as Page;\n\n const result = await handler.act({\n instruction: \"click button\",\n page: fakePage,\n timeout: -100, // Negative timeout should be treated as \"no timeout\"\n });\n\n expect(result.success).toBe(true);\n });\n});\n\ninterface BuildActHandlerOptions {\n selfHeal?: boolean;\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildActHandler(options: BuildActHandlerOptions = {}): ActHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ActHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n options.selfHeal ?? false,\n options.onMetrics,\n undefined,\n );\n}\n\ninterface BuildExtractHandlerOptions {\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildExtractHandler(\n options: BuildExtractHandlerOptions = {},\n): ExtractHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ExtractHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n false,\n options.onMetrics,\n );\n}\n\ninterface BuildObserveHandlerOptions {\n onMetrics?: (\n functionName: V3FunctionName,\n promptTokens: number,\n completionTokens: number,\n reasoningTokens: number,\n cachedInputTokens: number,\n inferenceTimeMs: number,\n ) => void;\n}\n\nfunction buildObserveHandler(\n options: BuildObserveHandlerOptions = {},\n): ObserveHandler {\n const defaultClientOptions = {} as ClientOptions;\n const fakeClient = {\n type: \"openai\",\n modelName: \"gpt-4o\",\n clientOptions: defaultClientOptions,\n } as LLMClient;\n const resolveLlmClient = vi.fn().mockReturnValue(fakeClient);\n\n return new ObserveHandler(\n fakeClient,\n \"gpt-4o\",\n defaultClientOptions,\n resolveLlmClient,\n undefined,\n false,\n false,\n options.onMetrics,\n );\n}\n"]}
@@ -1,6 +1,7 @@
1
1
  import { LogLine } from "./v3/types/public/logs.js";
2
2
  import { LLMClient } from "./v3/llm/LLMClient.js";
3
3
  import type { InferStagehandSchema, StagehandZodObject } from "./v3/zodCompat.js";
4
+ import type { Variables } from "./v3/types/public/agent.js";
4
5
  export type { LLMParsedResponse, LLMUsage } from "./v3/llm/LLMClient.js";
5
6
  export declare function extract<T extends StagehandZodObject>({ instruction, domElements, schema, llmClient, logger, userProvidedInstructions, logInferenceToFile, }: {
6
7
  instruction: string;
@@ -21,7 +22,7 @@ export declare function extract<T extends StagehandZodObject>({ instruction, dom
21
22
  cached_input_tokens: number;
22
23
  inference_time_ms: number;
23
24
  }>;
24
- export declare function observe({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile, supportedActions, }: {
25
+ export declare function observe({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile, supportedActions, variables, }: {
25
26
  instruction: string;
26
27
  domElements: string;
27
28
  llmClient: LLMClient;
@@ -29,6 +30,7 @@ export declare function observe({ instruction, domElements, llmClient, userProvi
29
30
  logger: (message: LogLine) => void;
30
31
  logInferenceToFile?: boolean;
31
32
  supportedActions?: string[];
33
+ variables?: Variables;
32
34
  }): Promise<{
33
35
  elements: {
34
36
  elementId: string;
@@ -140,7 +140,7 @@ export async function extract({ instruction, domElements, schema, llmClient, log
140
140
  inference_time_ms: totalInferenceTimeMs,
141
141
  };
142
142
  }
143
- export async function observe({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile = false, supportedActions, }) {
143
+ export async function observe({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile = false, supportedActions, variables, }) {
144
144
  const isGPT5 = llmClient.modelName.includes("gpt-5"); // TODO: remove this as we update support for gpt-5 configuration options
145
145
  const observeSchema = z.object({
146
146
  elements: z
@@ -164,7 +164,7 @@ export async function observe({ instruction, domElements, llmClient, userProvide
164
164
  .describe("an array of accessible elements that match the instruction"),
165
165
  });
166
166
  const messages = [
167
- buildObserveSystemPrompt(userProvidedInstructions, supportedActions),
167
+ buildObserveSystemPrompt(userProvidedInstructions, supportedActions, variables),
168
168
  buildObserveUserMessage(instruction, domElements),
169
169
  ];
170
170
  let callTimestamp = "";
@@ -242,7 +242,7 @@ export async function act({ instruction, domElements, llmClient, userProvidedIns
242
242
  elementId: z
243
243
  .string()
244
244
  .regex(/^\d+-\d+$/)
245
- .describe("the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'."),
245
+ .describe("the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'. for example, '0-76' or '16-21'"),
246
246
  description: z
247
247
  .string()
248
248
  .describe("a description of the accessible element and its purpose"),