@browserbasehq/orca 3.2.1-preview.3 → 3.4.0-preview-1

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 (223) hide show
  1. package/dist/cjs/lib/inference.js +1 -8
  2. package/dist/cjs/lib/inference.js.map +1 -1
  3. package/dist/cjs/lib/prompt.js +3 -1
  4. package/dist/cjs/lib/prompt.js.map +1 -1
  5. package/dist/cjs/lib/v3/agent/AgentProvider.js +3 -0
  6. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  7. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js +16 -12
  8. package/dist/cjs/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  9. package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.js +0 -4
  10. package/dist/cjs/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -1
  11. package/dist/cjs/lib/v3/api.d.ts +1 -0
  12. package/dist/cjs/lib/v3/api.js +15 -3
  13. package/dist/cjs/lib/v3/api.js.map +1 -1
  14. package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.js +12 -12
  15. package/dist/cjs/lib/v3/dom/build/a11yScripts.generated.js.map +1 -1
  16. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js +48 -48
  17. package/dist/cjs/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
  18. package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -1
  19. package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.js +1 -1
  20. package/dist/cjs/lib/v3/dom/build/reRenderScriptContent.js.map +1 -1
  21. package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.js +2 -2
  22. package/dist/cjs/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -1
  23. package/dist/cjs/lib/v3/dom/build/scriptV3Content.d.ts +1 -1
  24. package/dist/cjs/lib/v3/dom/build/scriptV3Content.js +1 -1
  25. package/dist/cjs/lib/v3/dom/build/scriptV3Content.js.map +1 -1
  26. package/dist/cjs/lib/v3/dom/build/selectorRuntime.generated.d.ts +24 -0
  27. package/dist/cjs/lib/v3/dom/build/selectorRuntime.generated.js +31 -0
  28. package/dist/cjs/lib/v3/dom/build/selectorRuntime.generated.js.map +1 -0
  29. package/dist/cjs/lib/v3/handlers/extractHandler.js +3 -1
  30. package/dist/cjs/lib/v3/handlers/extractHandler.js.map +1 -1
  31. package/dist/cjs/lib/v3/handlers/observeHandler.js +2 -1
  32. package/dist/cjs/lib/v3/handlers/observeHandler.js.map +1 -1
  33. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +3 -5
  34. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  35. package/dist/cjs/lib/v3/index.d.ts +1 -1
  36. package/dist/cjs/lib/v3/llm/CerebrasClient.js +1 -1
  37. package/dist/cjs/lib/v3/llm/CerebrasClient.js.map +1 -1
  38. package/dist/cjs/lib/v3/llm/GroqClient.js +1 -1
  39. package/dist/cjs/lib/v3/llm/GroqClient.js.map +1 -1
  40. package/dist/cjs/lib/v3/types/private/agent.d.ts +5 -0
  41. package/dist/cjs/lib/v3/types/private/agent.js +11 -0
  42. package/dist/cjs/lib/v3/types/private/agent.js.map +1 -1
  43. package/dist/cjs/lib/v3/types/private/handlers.d.ts +2 -0
  44. package/dist/cjs/lib/v3/types/private/handlers.js.map +1 -1
  45. package/dist/cjs/lib/v3/types/private/snapshot.d.ts +8 -0
  46. package/dist/cjs/lib/v3/types/private/snapshot.js.map +1 -1
  47. package/dist/cjs/lib/v3/types/public/agent.d.ts +2 -3
  48. package/dist/cjs/lib/v3/types/public/agent.js +3 -0
  49. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  50. package/dist/cjs/lib/v3/types/public/api.d.ts +7 -1
  51. package/dist/cjs/lib/v3/types/public/api.js +22 -2
  52. package/dist/cjs/lib/v3/types/public/api.js.map +1 -1
  53. package/dist/cjs/lib/v3/types/public/methods.d.ts +2 -0
  54. package/dist/cjs/lib/v3/types/public/methods.js.map +1 -1
  55. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js +21 -12
  56. package/dist/cjs/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  57. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.d.ts +11 -2
  58. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js +268 -21
  59. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  60. package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.js +60 -7
  61. package/dist/cjs/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -1
  62. package/dist/cjs/lib/v3/understudy/frameRegistry.js +16 -5
  63. package/dist/cjs/lib/v3/understudy/frameRegistry.js.map +1 -1
  64. package/dist/cjs/lib/v3/v3.d.ts +1 -0
  65. package/dist/cjs/lib/v3/v3.js +18 -14
  66. package/dist/cjs/lib/v3/v3.js.map +1 -1
  67. package/dist/cjs/lib/version.d.ts +1 -1
  68. package/dist/cjs/lib/version.js +1 -1
  69. package/dist/cjs/lib/version.js.map +1 -1
  70. package/dist/cjs/tests/integration/observe-element-id-format.spec.js +130 -0
  71. package/dist/cjs/tests/integration/observe-element-id-format.spec.js.map +1 -0
  72. package/dist/cjs/tests/unit/agent-mode-routing.test.js +88 -0
  73. package/dist/cjs/tests/unit/agent-mode-routing.test.js.map +1 -0
  74. package/dist/cjs/tests/unit/agent-temperature.test.d.ts +1 -0
  75. package/dist/cjs/tests/unit/agent-temperature.test.js +191 -0
  76. package/dist/cjs/tests/unit/agent-temperature.test.js.map +1 -0
  77. package/dist/cjs/tests/unit/agent-variables-validation.test.d.ts +1 -0
  78. package/dist/cjs/tests/unit/agent-variables-validation.test.js +43 -0
  79. package/dist/cjs/tests/unit/agent-variables-validation.test.js.map +1 -0
  80. package/dist/cjs/tests/unit/api-client-observe-variables.test.js +49 -0
  81. package/dist/cjs/tests/unit/api-client-observe-variables.test.js.map +1 -1
  82. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js +60 -0
  83. package/dist/cjs/tests/unit/api-optional-model-api-key.test.js.map +1 -1
  84. package/dist/cjs/tests/unit/api-variables-schema.test.js +32 -0
  85. package/dist/cjs/tests/unit/api-variables-schema.test.js.map +1 -1
  86. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.d.ts +1 -0
  87. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js +60 -0
  88. package/dist/cjs/tests/unit/frame-registry-oopif-adoption.test.js.map +1 -0
  89. package/dist/cjs/tests/unit/inference-temperature.test.d.ts +1 -0
  90. package/dist/cjs/tests/unit/inference-temperature.test.js +65 -0
  91. package/dist/cjs/tests/unit/inference-temperature.test.js.map +1 -0
  92. package/dist/cjs/tests/unit/openai-compatible-temperature.test.d.ts +1 -0
  93. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js +84 -0
  94. package/dist/cjs/tests/unit/openai-compatible-temperature.test.js.map +1 -0
  95. package/dist/cjs/tests/unit/prompt-observe-variables.test.js +6 -0
  96. package/dist/cjs/tests/unit/prompt-observe-variables.test.js.map +1 -1
  97. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js +3 -0
  98. package/dist/cjs/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  99. package/dist/cjs/tests/unit/public-api/public-types.test.js.map +1 -1
  100. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js +106 -5
  101. package/dist/cjs/tests/unit/snapshot-a11y-resolvers.test.js.map +1 -1
  102. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js +20 -0
  103. package/dist/cjs/tests/unit/snapshot-a11y-tree-utils.test.js.map +1 -1
  104. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js +119 -9
  105. package/dist/cjs/tests/unit/snapshot-capture-orchestration.test.js.map +1 -1
  106. package/dist/cjs/tests/unit/timeout-handlers.test.js +36 -0
  107. package/dist/cjs/tests/unit/timeout-handlers.test.js.map +1 -1
  108. package/dist/esm/lib/inference.js +1 -8
  109. package/dist/esm/lib/inference.js.map +1 -1
  110. package/dist/esm/lib/prompt.js +3 -1
  111. package/dist/esm/lib/prompt.js.map +1 -1
  112. package/dist/esm/lib/v3/agent/AgentProvider.js +3 -0
  113. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  114. package/dist/esm/lib/v3/agent/tools/fillFormVision.js +16 -12
  115. package/dist/esm/lib/v3/agent/tools/fillFormVision.js.map +1 -1
  116. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js +0 -4
  117. package/dist/esm/lib/v3/agent/utils/validateExperimentalFeatures.js.map +1 -1
  118. package/dist/esm/lib/v3/api.d.ts +1 -0
  119. package/dist/esm/lib/v3/api.js +15 -3
  120. package/dist/esm/lib/v3/api.js.map +1 -1
  121. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js +12 -12
  122. package/dist/esm/lib/v3/dom/build/a11yScripts.generated.js.map +1 -1
  123. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js +48 -48
  124. package/dist/esm/lib/v3/dom/build/locatorScripts.generated.js.map +1 -1
  125. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.d.ts +1 -1
  126. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js +1 -1
  127. package/dist/esm/lib/v3/dom/build/reRenderScriptContent.js.map +1 -1
  128. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js +2 -2
  129. package/dist/esm/lib/v3/dom/build/screenshotScripts.generated.js.map +1 -1
  130. package/dist/esm/lib/v3/dom/build/scriptV3Content.d.ts +1 -1
  131. package/dist/esm/lib/v3/dom/build/scriptV3Content.js +1 -1
  132. package/dist/esm/lib/v3/dom/build/scriptV3Content.js.map +1 -1
  133. package/dist/esm/lib/v3/dom/build/selectorRuntime.generated.d.ts +24 -0
  134. package/dist/esm/lib/v3/dom/build/selectorRuntime.generated.js +28 -0
  135. package/dist/esm/lib/v3/dom/build/selectorRuntime.generated.js.map +1 -0
  136. package/dist/esm/lib/v3/handlers/extractHandler.js +3 -1
  137. package/dist/esm/lib/v3/handlers/extractHandler.js.map +1 -1
  138. package/dist/esm/lib/v3/handlers/observeHandler.js +2 -1
  139. package/dist/esm/lib/v3/handlers/observeHandler.js.map +1 -1
  140. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +3 -5
  141. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  142. package/dist/esm/lib/v3/index.d.ts +1 -1
  143. package/dist/esm/lib/v3/llm/CerebrasClient.js +1 -1
  144. package/dist/esm/lib/v3/llm/CerebrasClient.js.map +1 -1
  145. package/dist/esm/lib/v3/llm/GroqClient.js +1 -1
  146. package/dist/esm/lib/v3/llm/GroqClient.js.map +1 -1
  147. package/dist/esm/lib/v3/types/private/agent.d.ts +5 -0
  148. package/dist/esm/lib/v3/types/private/agent.js +10 -1
  149. package/dist/esm/lib/v3/types/private/agent.js.map +1 -1
  150. package/dist/esm/lib/v3/types/private/handlers.d.ts +2 -0
  151. package/dist/esm/lib/v3/types/private/handlers.js.map +1 -1
  152. package/dist/esm/lib/v3/types/private/snapshot.d.ts +8 -0
  153. package/dist/esm/lib/v3/types/private/snapshot.js.map +1 -1
  154. package/dist/esm/lib/v3/types/public/agent.d.ts +2 -3
  155. package/dist/esm/lib/v3/types/public/agent.js +3 -0
  156. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  157. package/dist/esm/lib/v3/types/public/api.d.ts +7 -1
  158. package/dist/esm/lib/v3/types/public/api.js +22 -2
  159. package/dist/esm/lib/v3/types/public/api.js.map +1 -1
  160. package/dist/esm/lib/v3/types/public/methods.d.ts +2 -0
  161. package/dist/esm/lib/v3/types/public/methods.js.map +1 -1
  162. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js +21 -12
  163. package/dist/esm/lib/v3/understudy/a11y/snapshot/a11yTree.js.map +1 -1
  164. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.d.ts +11 -2
  165. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +267 -22
  166. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  167. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js +60 -7
  168. package/dist/esm/lib/v3/understudy/a11y/snapshot/domTree.js.map +1 -1
  169. package/dist/esm/lib/v3/understudy/frameRegistry.js +16 -5
  170. package/dist/esm/lib/v3/understudy/frameRegistry.js.map +1 -1
  171. package/dist/esm/lib/v3/v3.d.ts +1 -0
  172. package/dist/esm/lib/v3/v3.js +18 -14
  173. package/dist/esm/lib/v3/v3.js.map +1 -1
  174. package/dist/esm/lib/version.d.ts +1 -1
  175. package/dist/esm/lib/version.js +1 -1
  176. package/dist/esm/lib/version.js.map +1 -1
  177. package/dist/esm/tests/integration/observe-element-id-format.spec.d.ts +1 -0
  178. package/dist/esm/tests/integration/observe-element-id-format.spec.js +128 -0
  179. package/dist/esm/tests/integration/observe-element-id-format.spec.js.map +1 -0
  180. package/dist/esm/tests/unit/agent-mode-routing.test.d.ts +1 -0
  181. package/dist/esm/tests/unit/agent-mode-routing.test.js +86 -0
  182. package/dist/esm/tests/unit/agent-mode-routing.test.js.map +1 -0
  183. package/dist/esm/tests/unit/agent-temperature.test.d.ts +1 -0
  184. package/dist/esm/tests/unit/agent-temperature.test.js +189 -0
  185. package/dist/esm/tests/unit/agent-temperature.test.js.map +1 -0
  186. package/dist/esm/tests/unit/agent-variables-validation.test.d.ts +1 -0
  187. package/dist/esm/tests/unit/agent-variables-validation.test.js +41 -0
  188. package/dist/esm/tests/unit/agent-variables-validation.test.js.map +1 -0
  189. package/dist/esm/tests/unit/api-client-observe-variables.test.js +49 -0
  190. package/dist/esm/tests/unit/api-client-observe-variables.test.js.map +1 -1
  191. package/dist/esm/tests/unit/api-optional-model-api-key.test.js +60 -0
  192. package/dist/esm/tests/unit/api-optional-model-api-key.test.js.map +1 -1
  193. package/dist/esm/tests/unit/api-variables-schema.test.js +32 -0
  194. package/dist/esm/tests/unit/api-variables-schema.test.js.map +1 -1
  195. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.d.ts +1 -0
  196. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js +58 -0
  197. package/dist/esm/tests/unit/frame-registry-oopif-adoption.test.js.map +1 -0
  198. package/dist/esm/tests/unit/inference-temperature.test.d.ts +1 -0
  199. package/dist/esm/tests/unit/inference-temperature.test.js +63 -0
  200. package/dist/esm/tests/unit/inference-temperature.test.js.map +1 -0
  201. package/dist/esm/tests/unit/openai-compatible-temperature.test.d.ts +1 -0
  202. package/dist/esm/tests/unit/openai-compatible-temperature.test.js +82 -0
  203. package/dist/esm/tests/unit/openai-compatible-temperature.test.js.map +1 -0
  204. package/dist/esm/tests/unit/prompt-observe-variables.test.js +6 -0
  205. package/dist/esm/tests/unit/prompt-observe-variables.test.js.map +1 -1
  206. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js +3 -0
  207. package/dist/esm/tests/unit/public-api/llm-and-agents.test.js.map +1 -1
  208. package/dist/esm/tests/unit/public-api/public-types.test.js.map +1 -1
  209. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js +106 -5
  210. package/dist/esm/tests/unit/snapshot-a11y-resolvers.test.js.map +1 -1
  211. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js +20 -0
  212. package/dist/esm/tests/unit/snapshot-a11y-tree-utils.test.js.map +1 -1
  213. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js +119 -9
  214. package/dist/esm/tests/unit/snapshot-capture-orchestration.test.js.map +1 -1
  215. package/dist/esm/tests/unit/timeout-handlers.test.js +36 -0
  216. package/dist/esm/tests/unit/timeout-handlers.test.js.map +1 -1
  217. package/package.json +3 -3
  218. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js +0 -56
  219. package/dist/cjs/tests/integration/agent-captcha-autosolve.spec.js.map +0 -1
  220. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js +0 -54
  221. package/dist/esm/tests/integration/agent-captcha-autosolve.spec.js.map +0 -1
  222. /package/dist/cjs/tests/integration/{agent-captcha-autosolve.spec.d.ts → observe-element-id-format.spec.d.ts} +0 -0
  223. /package/dist/{esm/tests/integration/agent-captcha-autosolve.spec.d.ts → cjs/tests/unit/agent-mode-routing.test.d.ts} +0 -0
@@ -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(\"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
+ {"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(\"observe() forwards ignoreSelectors to snapshot capture\", 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 } 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\n await handler.observe({\n instruction: \"find buttons\",\n ignoreSelectors: [\".cookie-banner\", \"#sidebar-ads\"],\n page: fakePage,\n });\n\n expect(captureHybridSnapshotMock).toHaveBeenCalledWith(fakePage, {\n experimental: false,\n focusSelector: undefined,\n ignoreSelectors: [\".cookie-banner\", \"#sidebar-ads\"],\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"]}
@@ -16,7 +16,6 @@ export async function extract({ instruction, domElements, schema, llmClient, log
16
16
  .describe("true if the goal is now accomplished. Use this conservatively, only when sure that the goal has been completed."),
17
17
  });
18
18
  const isUsingAnthropic = llmClient.type === "anthropic";
19
- const isGPT5 = llmClient.modelName.includes("gpt-5"); // TODO: remove this as we update support for gpt-5 configuration options
20
19
  const extractCallMessages = [
21
20
  buildExtractSystemPrompt(isUsingAnthropic, userProvidedInstructions),
22
21
  buildExtractUserPrompt(instruction, domElements, isUsingAnthropic),
@@ -39,7 +38,6 @@ export async function extract({ instruction, domElements, schema, llmClient, log
39
38
  schema,
40
39
  name: "Extraction",
41
40
  },
42
- temperature: isGPT5 ? 1 : 0.1,
43
41
  top_p: 1,
44
42
  frequency_penalty: 0,
45
43
  presence_penalty: 0,
@@ -89,7 +87,6 @@ export async function extract({ instruction, domElements, schema, llmClient, log
89
87
  name: "Metadata",
90
88
  schema: metadataSchema,
91
89
  },
92
- temperature: isGPT5 ? 1 : 0.1,
93
90
  top_p: 1,
94
91
  frequency_penalty: 0,
95
92
  presence_penalty: 0,
@@ -141,14 +138,13 @@ export async function extract({ instruction, domElements, schema, llmClient, log
141
138
  };
142
139
  }
143
140
  export async function observe({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile = false, supportedActions, variables, }) {
144
- const isGPT5 = llmClient.modelName.includes("gpt-5"); // TODO: remove this as we update support for gpt-5 configuration options
145
141
  const observeSchema = z.object({
146
142
  elements: z
147
143
  .array(z.object({
148
144
  elementId: z
149
145
  .string()
150
146
  .regex(/^\d+-\d+$/)
151
- .describe("the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'."),
147
+ .describe("the exact ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'. For example, if the accessibility tree shows [0-18372], return '0-18372', not '18372'."),
152
148
  description: z
153
149
  .string()
154
150
  .describe("a description of the accessible element and its purpose"),
@@ -185,7 +181,6 @@ export async function observe({ instruction, domElements, llmClient, userProvide
185
181
  schema: observeSchema,
186
182
  name: "Observation",
187
183
  },
188
- temperature: isGPT5 ? 1 : 0.1,
189
184
  top_p: 1,
190
185
  frequency_penalty: 0,
191
186
  presence_penalty: 0,
@@ -237,7 +232,6 @@ export async function observe({ instruction, domElements, llmClient, userProvide
237
232
  };
238
233
  }
239
234
  export async function act({ instruction, domElements, llmClient, userProvidedInstructions, logger, logInferenceToFile = false, }) {
240
- const isGPT5 = llmClient.modelName.includes("gpt-5"); // TODO: remove this as we update support for gpt-5 configuration options
241
235
  const actSchema = z.object({
242
236
  action: z
243
237
  .object({
@@ -283,7 +277,6 @@ export async function act({ instruction, domElements, llmClient, userProvidedIns
283
277
  schema: actSchema,
284
278
  name: "act",
285
279
  },
286
- temperature: isGPT5 ? 1 : 0.1,
287
280
  top_p: 1,
288
281
  frequency_penalty: 0,
289
282
  presence_penalty: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../lib/inference.ts"],"names":[],"mappings":"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","sourcesContent":["import { z } from \"zod\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ChatMessage, LLMClient } from \"./v3/llm/LLMClient.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"./v3/timeoutConfig.js\";\nimport {\n buildActSystemPrompt,\n buildExtractSystemPrompt,\n buildExtractUserPrompt,\n buildMetadataPrompt,\n buildMetadataSystemPrompt,\n buildObserveSystemPrompt,\n buildObserveUserMessage,\n} from \"./prompt.js\";\nimport { appendSummary, writeTimestampedTxtFile } from \"./inferenceLogUtils.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n} from \"./v3/zodCompat.js\";\nimport { SupportedUnderstudyAction } from \"./v3/types/private/handlers.js\";\nimport type { Variables } from \"./v3/types/public/agent.js\";\n\n// Re-export for backward compatibility\nexport type { LLMParsedResponse, LLMUsage } from \"./v3/llm/LLMClient.js\";\n\nfunction withLlmTimeout<T>(promise: Promise<T>, operation: string): Promise<T> {\n return withTimeout(\n promise,\n getEnvTimeoutMs(\"LLM_MAX_MS\"),\n `LLM ${operation}`,\n );\n}\n\nexport async function extract<T extends StagehandZodObject>({\n instruction,\n domElements,\n schema,\n llmClient,\n logger,\n userProvidedInstructions,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n schema: T;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const metadataSchema = z.object({\n progress: z\n .string()\n .describe(\n \"progress of what has been extracted so far, as concise as possible\",\n ),\n completed: z\n .boolean()\n .describe(\n \"true if the goal is now accomplished. Use this conservatively, only when sure that the goal has been completed.\",\n ),\n });\n\n type ExtractionResponse = InferStagehandSchema<T>;\n type MetadataResponse = z.infer<typeof metadataSchema>;\n\n const isUsingAnthropic = llmClient.type === \"anthropic\";\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const extractCallMessages: ChatMessage[] = [\n buildExtractSystemPrompt(isUsingAnthropic, userProvidedInstructions),\n buildExtractUserPrompt(instruction, domElements, isUsingAnthropic),\n ];\n\n let extractCallFile = \"\";\n let extractCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_call\",\n {\n modelCall: \"extract\",\n messages: extractCallMessages,\n },\n );\n extractCallFile = fileName;\n extractCallTimestamp = timestamp;\n }\n\n const extractStartTime = Date.now();\n const extractionResponse = await withLlmTimeout(\n llmClient.createChatCompletion<ExtractionResponse>({\n options: {\n messages: extractCallMessages,\n response_model: {\n schema,\n name: \"Extraction\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract\",\n );\n const extractEndTime = Date.now();\n\n const { data: extractedData, usage: extractUsage } = extractionResponse;\n\n let extractResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_response\",\n {\n modelResponse: \"extract\",\n rawResponse: extractedData,\n },\n );\n extractResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"extract\",\n timestamp: extractCallTimestamp,\n LLM_input_file: extractCallFile,\n LLM_output_file: extractResponseFile,\n prompt_tokens: extractUsage?.prompt_tokens ?? 0,\n completion_tokens: extractUsage?.completion_tokens ?? 0,\n reasoning_tokens: extractUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: extractUsage?.cached_input_tokens ?? 0,\n inference_time_ms: extractEndTime - extractStartTime,\n });\n }\n\n const metadataCallMessages: ChatMessage[] = [\n buildMetadataSystemPrompt(),\n buildMetadataPrompt(instruction, extractedData),\n ];\n\n let metadataCallFile = \"\";\n let metadataCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_call\",\n {\n modelCall: \"metadata\",\n messages: metadataCallMessages,\n },\n );\n metadataCallFile = fileName;\n metadataCallTimestamp = timestamp;\n }\n\n const metadataStartTime = Date.now();\n const metadataResponse = await withLlmTimeout(\n llmClient.createChatCompletion<MetadataResponse>({\n options: {\n messages: metadataCallMessages,\n response_model: {\n name: \"Metadata\",\n schema: metadataSchema,\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract metadata\",\n );\n const metadataEndTime = Date.now();\n\n const {\n data: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n usage: metadataResponseUsage,\n } = metadataResponse;\n\n let metadataResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_response\",\n {\n modelResponse: \"metadata\",\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n );\n metadataResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"metadata\",\n timestamp: metadataCallTimestamp,\n LLM_input_file: metadataCallFile,\n LLM_output_file: metadataResponseFile,\n prompt_tokens: metadataResponseUsage?.prompt_tokens ?? 0,\n completion_tokens: metadataResponseUsage?.completion_tokens ?? 0,\n reasoning_tokens: metadataResponseUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: metadataResponseUsage?.cached_input_tokens ?? 0,\n inference_time_ms: metadataEndTime - metadataStartTime,\n });\n }\n\n const totalPromptTokens =\n (extractUsage?.prompt_tokens ?? 0) +\n (metadataResponseUsage?.prompt_tokens ?? 0);\n\n const totalCompletionTokens =\n (extractUsage?.completion_tokens ?? 0) +\n (metadataResponseUsage?.completion_tokens ?? 0);\n\n const totalInferenceTimeMs =\n extractEndTime - extractStartTime + (metadataEndTime - metadataStartTime);\n const totalReasoningTokens =\n (extractUsage?.reasoning_tokens ?? 0) +\n (metadataResponseUsage?.reasoning_tokens ?? 0);\n const totalCachedInputTokens =\n (extractUsage?.cached_input_tokens ?? 0) +\n (metadataResponseUsage?.cached_input_tokens ?? 0);\n\n return {\n ...extractedData,\n metadata: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n prompt_tokens: totalPromptTokens,\n completion_tokens: totalCompletionTokens,\n reasoning_tokens: totalReasoningTokens,\n cached_input_tokens: totalCachedInputTokens,\n inference_time_ms: totalInferenceTimeMs,\n };\n}\n\nexport async function observe({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n supportedActions,\n variables,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n supportedActions?: string[];\n variables?: Variables;\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const observeSchema = z.object({\n elements: z\n .array(\n z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'.\",\n ),\n description: z\n .string()\n .describe(\n \"a description of the accessible element and its purpose\",\n ),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n `the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.`,\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n }),\n )\n .describe(\"an array of accessible elements that match the instruction\"),\n });\n\n type ObserveResponse = z.infer<typeof observeSchema>;\n\n const messages: ChatMessage[] = [\n buildObserveSystemPrompt(\n userProvidedInstructions,\n supportedActions,\n variables,\n ),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_call`,\n {\n modelCall: \"observe\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ObserveResponse>({\n options: {\n messages,\n response_model: {\n schema: observeSchema,\n name: \"Observation\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: observeData, usage: observeUsage } = rawResponse;\n const promptTokens = observeUsage?.prompt_tokens ?? 0;\n const completionTokens = observeUsage?.completion_tokens ?? 0;\n const reasoningTokens = observeUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = observeUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_response`,\n {\n modelResponse: \"observe\",\n rawResponse: observeData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"observe\", {\n [`observe_inference_type`]: \"observe\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElements =\n observeData.elements?.map((el) => {\n const base = {\n elementId: el.elementId,\n description: String(el.description),\n method: String(el.method),\n arguments: el.arguments,\n };\n return base;\n }) ?? [];\n\n return {\n elements: parsedElements,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n };\n}\n\nexport async function act({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const isGPT5 = llmClient.modelName.includes(\"gpt-5\"); // TODO: remove this as we update support for gpt-5 configuration options\n\n const actSchema = z.object({\n action: z\n .object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"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'\",\n ),\n description: z\n .string()\n .describe(\"a description of the accessible element and its purpose\"),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n \"the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.\",\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n })\n .nullable()\n .describe(\n \"The element to act on. Return null if no element on the page matches the instruction — do NOT fabricate or guess an element, and never emit empty strings or placeholder values.\",\n ),\n twoStep: z.boolean(),\n });\n\n type ActResponse = z.infer<typeof actSchema>;\n\n const messages: ChatMessage[] = [\n buildActSystemPrompt(userProvidedInstructions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `act_summary`,\n `act_call`,\n {\n modelCall: \"act\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ActResponse>({\n options: {\n messages,\n response_model: {\n schema: actSchema,\n name: \"act\",\n },\n temperature: isGPT5 ? 1 : 0.1,\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: actData, usage: actUsage } = rawResponse;\n const promptTokens = actUsage?.prompt_tokens ?? 0;\n const completionTokens = actUsage?.completion_tokens ?? 0;\n const reasoningTokens = actUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = actUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `act_summary`,\n `act_response`,\n {\n modelResponse: \"act\",\n rawResponse: actData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"act\", {\n [`act_inference_type`]: \"act\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElement = actData.action\n ? {\n elementId: actData.action.elementId,\n description: String(actData.action.description),\n method: String(actData.action.method),\n arguments: actData.action.arguments,\n }\n : undefined;\n\n return {\n element: parsedElement,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n twoStep: actData.twoStep,\n };\n}\n"]}
1
+ {"version":3,"file":"inference.js","sourceRoot":"","sources":["../../../lib/inference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAKhF,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAM3E,SAAS,cAAc,CAAI,OAAmB,EAAE,SAAiB;IAC/D,OAAO,WAAW,CAChB,OAAO,EACP,eAAe,CAAC,YAAY,CAAC,EAC7B,OAAO,SAAS,EAAE,CACnB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAA+B,EAC1D,WAAW,EACX,WAAW,EACX,MAAM,EACN,SAAS,EACT,MAAM,EACN,wBAAwB,EACxB,kBAAkB,GAAG,KAAK,GAS3B;IACC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CACP,oEAAoE,CACrE;QACH,SAAS,EAAE,CAAC;aACT,OAAO,EAAE;aACT,QAAQ,CACP,iHAAiH,CAClH;KACJ,CAAC,CAAC;IAKH,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,KAAK,WAAW,CAAC;IAExD,MAAM,mBAAmB,GAAkB;QACzC,wBAAwB,CAAC,gBAAgB,EAAE,wBAAwB,CAAC;QACpE,sBAAsB,CAAC,WAAW,EAAE,WAAW,EAAE,gBAAgB,CAAC;KACnE,CAAC;IAEF,IAAI,eAAe,GAAG,EAAE,CAAC;IACzB,IAAI,oBAAoB,GAAG,EAAE,CAAC;IAC9B,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,uBAAuB,CACrD,iBAAiB,EACjB,cAAc,EACd;YACE,SAAS,EAAE,SAAS;YACpB,QAAQ,EAAE,mBAAmB;SAC9B,CACF,CAAC;QACF,eAAe,GAAG,QAAQ,CAAC;QAC3B,oBAAoB,GAAG,SAAS,CAAC;IACnC,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAC7C,SAAS,CAAC,oBAAoB,CAAqB;QACjD,OAAO,EAAE;YACP,QAAQ,EAAE,mBAAmB;YAC7B,cAAc,EAAE;gBACd,MAAM;gBACN,IAAI,EAAE,YAAY;aACnB;YACD,KAAK,EAAE,CAAC;YACR,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;SACpB;QACD,MAAM;KACP,CAAC,EACF,SAAS,CACV,CAAC;IACF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAElC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,kBAAkB,CAAC;IAExE,IAAI,mBAA2B,CAAC;IAChC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,uBAAuB,CAC1C,iBAAiB,EACjB,kBAAkB,EAClB;YACE,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,aAAa;SAC3B,CACF,CAAC;QACF,mBAAmB,GAAG,QAAQ,CAAC;QAE/B,aAAa,CAAC,SAAS,EAAE;YACvB,sBAAsB,EAAE,SAAS;YACjC,SAAS,EAAE,oBAAoB;YAC/B,cAAc,EAAE,eAAe;YAC/B,eAAe,EAAE,mBAAmB;YACpC,aAAa,EAAE,YAAY,EAAE,aAAa,IAAI,CAAC;YAC/C,iBAAiB,EAAE,YAAY,EAAE,iBAAiB,IAAI,CAAC;YACvD,gBAAgB,EAAE,YAAY,EAAE,gBAAgB,IAAI,CAAC;YACrD,mBAAmB,EAAE,YAAY,EAAE,mBAAmB,IAAI,CAAC;YAC3D,iBAAiB,EAAE,cAAc,GAAG,gBAAgB;SACrD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,oBAAoB,GAAkB;QAC1C,yBAAyB,EAAE;QAC3B,mBAAmB,CAAC,WAAW,EAAE,aAAa,CAAC;KAChD,CAAC;IAEF,IAAI,gBAAgB,GAAG,EAAE,CAAC;IAC1B,IAAI,qBAAqB,GAAG,EAAE,CAAC;IAC/B,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,uBAAuB,CACrD,iBAAiB,EACjB,eAAe,EACf;YACE,SAAS,EAAE,UAAU;YACrB,QAAQ,EAAE,oBAAoB;SAC/B,CACF,CAAC;QACF,gBAAgB,GAAG,QAAQ,CAAC;QAC5B,qBAAqB,GAAG,SAAS,CAAC;IACpC,CAAC;IAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,gBAAgB,GAAG,MAAM,cAAc,CAC3C,SAAS,CAAC,oBAAoB,CAAmB;QAC/C,OAAO,EAAE;YACP,QAAQ,EAAE,oBAAoB;YAC9B,cAAc,EAAE;gBACd,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,cAAc;aACvB;YACD,KAAK,EAAE,CAAC;YACR,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;SACpB;QACD,MAAM;KACP,CAAC,EACF,kBAAkB,CACnB,CAAC;IACF,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEnC,MAAM,EACJ,IAAI,EAAE,EACJ,SAAS,EAAE,yBAAyB,EACpC,QAAQ,EAAE,wBAAwB,GACnC,EACD,KAAK,EAAE,qBAAqB,GAC7B,GAAG,gBAAgB,CAAC;IAErB,IAAI,oBAA4B,CAAC;IACjC,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,GAAG,uBAAuB,CAC1C,iBAAiB,EACjB,mBAAmB,EACnB;YACE,aAAa,EAAE,UAAU;YACzB,SAAS,EAAE,yBAAyB;YACpC,QAAQ,EAAE,wBAAwB;SACnC,CACF,CAAC;QACF,oBAAoB,GAAG,QAAQ,CAAC;QAEhC,aAAa,CAAC,SAAS,EAAE;YACvB,sBAAsB,EAAE,UAAU;YAClC,SAAS,EAAE,qBAAqB;YAChC,cAAc,EAAE,gBAAgB;YAChC,eAAe,EAAE,oBAAoB;YACrC,aAAa,EAAE,qBAAqB,EAAE,aAAa,IAAI,CAAC;YACxD,iBAAiB,EAAE,qBAAqB,EAAE,iBAAiB,IAAI,CAAC;YAChE,gBAAgB,EAAE,qBAAqB,EAAE,gBAAgB,IAAI,CAAC;YAC9D,mBAAmB,EAAE,qBAAqB,EAAE,mBAAmB,IAAI,CAAC;YACpE,iBAAiB,EAAE,eAAe,GAAG,iBAAiB;SACvD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,iBAAiB,GACrB,CAAC,YAAY,EAAE,aAAa,IAAI,CAAC,CAAC;QAClC,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC,CAAC,CAAC;IAE9C,MAAM,qBAAqB,GACzB,CAAC,YAAY,EAAE,iBAAiB,IAAI,CAAC,CAAC;QACtC,CAAC,qBAAqB,EAAE,iBAAiB,IAAI,CAAC,CAAC,CAAC;IAElD,MAAM,oBAAoB,GACxB,cAAc,GAAG,gBAAgB,GAAG,CAAC,eAAe,GAAG,iBAAiB,CAAC,CAAC;IAC5E,MAAM,oBAAoB,GACxB,CAAC,YAAY,EAAE,gBAAgB,IAAI,CAAC,CAAC;QACrC,CAAC,qBAAqB,EAAE,gBAAgB,IAAI,CAAC,CAAC,CAAC;IACjD,MAAM,sBAAsB,GAC1B,CAAC,YAAY,EAAE,mBAAmB,IAAI,CAAC,CAAC;QACxC,CAAC,qBAAqB,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,GAAG,aAAa;QAChB,QAAQ,EAAE;YACR,SAAS,EAAE,yBAAyB;YACpC,QAAQ,EAAE,wBAAwB;SACnC;QACD,aAAa,EAAE,iBAAiB;QAChC,iBAAiB,EAAE,qBAAqB;QACxC,gBAAgB,EAAE,oBAAoB;QACtC,mBAAmB,EAAE,sBAAsB;QAC3C,iBAAiB,EAAE,oBAAoB;KACxC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAC5B,WAAW,EACX,WAAW,EACX,SAAS,EACT,wBAAwB,EACxB,MAAM,EACN,kBAAkB,GAAG,KAAK,EAC1B,gBAAgB,EAChB,SAAS,GAUV;IACC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;QAC7B,QAAQ,EAAE,CAAC;aACR,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,KAAK,CAAC,WAAW,CAAC;iBAClB,QAAQ,CACP,0OAA0O,CAC3O;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CACP,yDAAyD,CAC1D;YACH,MAAM,EAAE,CAAC;iBACN,IAAI;YACH,yGAAyG;YACzG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAGtC,CACF;iBACA,QAAQ,CACP,uHAAuH,CACxH;YACH,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC;iBACE,MAAM,EAAE;iBACR,QAAQ,CACP,iJAAiJ,CAClJ,CACJ;SACF,CAAC,CACH;aACA,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC,CAAC;IAIH,MAAM,QAAQ,GAAkB;QAC9B,wBAAwB,CACtB,wBAAwB,EACxB,gBAAgB,EAChB,SAAS,CACV;QACD,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC;KAClD,CAAC;IAEF,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,uBAAuB,CACrD,iBAAiB,EACjB,cAAc,EACd;YACE,SAAS,EAAE,SAAS;YACpB,QAAQ;SACT,CACF,CAAC;QACF,QAAQ,GAAG,QAAQ,CAAC;QACpB,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAkB;QACxE,OAAO,EAAE;YACP,QAAQ;YACR,cAAc,EAAE;gBACd,MAAM,EAAE,aAAa;gBACrB,IAAI,EAAE,aAAa;aACpB;YACD,KAAK,EAAE,CAAC;YACR,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;SACpB;QACD,MAAM;KACP,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC;IAEhC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;IAC/D,MAAM,YAAY,GAAG,YAAY,EAAE,aAAa,IAAI,CAAC,CAAC;IACtD,MAAM,gBAAgB,GAAG,YAAY,EAAE,iBAAiB,IAAI,CAAC,CAAC;IAC9D,MAAM,eAAe,GAAG,YAAY,EAAE,gBAAgB,IAAI,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,YAAY,EAAE,mBAAmB,IAAI,CAAC,CAAC;IAEjE,IAAI,YAAoB,CAAC;IACzB,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,uBAAuB,CAC5D,iBAAiB,EACjB,kBAAkB,EAClB;YACE,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,WAAW;SACzB,CACF,CAAC;QACF,YAAY,GAAG,gBAAgB,CAAC;QAEhC,aAAa,CAAC,SAAS,EAAE;YACvB,CAAC,wBAAwB,CAAC,EAAE,SAAS;YACrC,SAAS,EAAE,aAAa;YACxB,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,YAAY;YAC7B,aAAa,EAAE,YAAY;YAC3B,iBAAiB,EAAE,gBAAgB;YACnC,gBAAgB,EAAE,eAAe;YACjC,mBAAmB,EAAE,iBAAiB;YACtC,iBAAiB,EAAE,WAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,cAAc,GAClB,WAAW,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG;YACX,SAAS,EAAE,EAAE,CAAC,SAAS;YACvB,WAAW,EAAE,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC;YACnC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC;YACzB,SAAS,EAAE,EAAE,CAAC,SAAS;SACxB,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,IAAI,EAAE,CAAC;IAEX,OAAO;QACL,QAAQ,EAAE,cAAc;QACxB,aAAa,EAAE,YAAY;QAC3B,iBAAiB,EAAE,gBAAgB;QACnC,gBAAgB,EAAE,eAAe;QACjC,mBAAmB,EAAE,iBAAiB;QACtC,iBAAiB,EAAE,WAAW;KAC/B,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,EACxB,WAAW,EACX,WAAW,EACX,SAAS,EACT,wBAAwB,EACxB,MAAM,EACN,kBAAkB,GAAG,KAAK,GAQ3B;IACC,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC;QACzB,MAAM,EAAE,CAAC;aACN,MAAM,CAAC;YACN,SAAS,EAAE,CAAC;iBACT,MAAM,EAAE;iBACR,KAAK,CAAC,WAAW,CAAC;iBAClB,QAAQ,CACP,4KAA4K,CAC7K;YACH,WAAW,EAAE,CAAC;iBACX,MAAM,EAAE;iBACR,QAAQ,CAAC,yDAAyD,CAAC;YACtE,MAAM,EAAE,CAAC;iBACN,IAAI;YACH,yGAAyG;YACzG,MAAM,CAAC,MAAM,CAAC,yBAAyB,CAGtC,CACF;iBACA,QAAQ,CACP,uHAAuH,CACxH;YACH,SAAS,EAAE,CAAC,CAAC,KAAK,CAChB,CAAC;iBACE,MAAM,EAAE;iBACR,QAAQ,CACP,iJAAiJ,CAClJ,CACJ;SACF,CAAC;aACD,QAAQ,EAAE;aACV,QAAQ,CACP,kLAAkL,CACnL;QACH,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC,CAAC;IAIH,MAAM,QAAQ,GAAkB;QAC9B,oBAAoB,CAAC,wBAAwB,CAAC;QAC9C,uBAAuB,CAAC,WAAW,EAAE,WAAW,CAAC;KAClD,CAAC;IAEF,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,uBAAuB,CACrD,aAAa,EACb,UAAU,EACV;YACE,SAAS,EAAE,KAAK;YAChB,QAAQ;SACT,CACF,CAAC;QACF,QAAQ,GAAG,QAAQ,CAAC;QACpB,aAAa,GAAG,SAAS,CAAC;IAC5B,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAAc;QACpE,OAAO,EAAE;YACP,QAAQ;YACR,cAAc,EAAE;gBACd,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,KAAK;aACZ;YACD,KAAK,EAAE,CAAC;YACR,iBAAiB,EAAE,CAAC;YACpB,gBAAgB,EAAE,CAAC;SACpB;QACD,MAAM;KACP,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,GAAG,GAAG,KAAK,CAAC;IAEhC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,WAAW,CAAC;IACvD,MAAM,YAAY,GAAG,QAAQ,EAAE,aAAa,IAAI,CAAC,CAAC;IAClD,MAAM,gBAAgB,GAAG,QAAQ,EAAE,iBAAiB,IAAI,CAAC,CAAC;IAC1D,MAAM,eAAe,GAAG,QAAQ,EAAE,gBAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,iBAAiB,GAAG,QAAQ,EAAE,mBAAmB,IAAI,CAAC,CAAC;IAE7D,IAAI,YAAoB,CAAC;IACzB,IAAI,kBAAkB,EAAE,CAAC;QACvB,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,uBAAuB,CAC5D,aAAa,EACb,cAAc,EACd;YACE,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,OAAO;SACrB,CACF,CAAC;QACF,YAAY,GAAG,gBAAgB,CAAC;QAEhC,aAAa,CAAC,KAAK,EAAE;YACnB,CAAC,oBAAoB,CAAC,EAAE,KAAK;YAC7B,SAAS,EAAE,aAAa;YACxB,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,YAAY;YAC7B,aAAa,EAAE,YAAY;YAC3B,iBAAiB,EAAE,gBAAgB;YACnC,gBAAgB,EAAE,eAAe;YACjC,mBAAmB,EAAE,iBAAiB;YACtC,iBAAiB,EAAE,WAAW;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM;QAClC,CAAC,CAAC;YACE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;YACnC,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;YAC/C,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;YACrC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS;SACpC;QACH,CAAC,CAAC,SAAS,CAAC;IAEd,OAAO;QACL,OAAO,EAAE,aAAa;QACtB,aAAa,EAAE,YAAY;QAC3B,iBAAiB,EAAE,gBAAgB;QACnC,gBAAgB,EAAE,eAAe;QACjC,mBAAmB,EAAE,iBAAiB;QACtC,iBAAiB,EAAE,WAAW;QAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;AACJ,CAAC","sourcesContent":["import { z } from \"zod\";\nimport { LogLine } from \"./v3/types/public/logs.js\";\nimport { ChatMessage, LLMClient } from \"./v3/llm/LLMClient.js\";\nimport { getEnvTimeoutMs, withTimeout } from \"./v3/timeoutConfig.js\";\nimport {\n buildActSystemPrompt,\n buildExtractSystemPrompt,\n buildExtractUserPrompt,\n buildMetadataPrompt,\n buildMetadataSystemPrompt,\n buildObserveSystemPrompt,\n buildObserveUserMessage,\n} from \"./prompt.js\";\nimport { appendSummary, writeTimestampedTxtFile } from \"./inferenceLogUtils.js\";\nimport type {\n InferStagehandSchema,\n StagehandZodObject,\n} from \"./v3/zodCompat.js\";\nimport { SupportedUnderstudyAction } from \"./v3/types/private/handlers.js\";\nimport type { Variables } from \"./v3/types/public/agent.js\";\n\n// Re-export for backward compatibility\nexport type { LLMParsedResponse, LLMUsage } from \"./v3/llm/LLMClient.js\";\n\nfunction withLlmTimeout<T>(promise: Promise<T>, operation: string): Promise<T> {\n return withTimeout(\n promise,\n getEnvTimeoutMs(\"LLM_MAX_MS\"),\n `LLM ${operation}`,\n );\n}\n\nexport async function extract<T extends StagehandZodObject>({\n instruction,\n domElements,\n schema,\n llmClient,\n logger,\n userProvidedInstructions,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n schema: T;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const metadataSchema = z.object({\n progress: z\n .string()\n .describe(\n \"progress of what has been extracted so far, as concise as possible\",\n ),\n completed: z\n .boolean()\n .describe(\n \"true if the goal is now accomplished. Use this conservatively, only when sure that the goal has been completed.\",\n ),\n });\n\n type ExtractionResponse = InferStagehandSchema<T>;\n type MetadataResponse = z.infer<typeof metadataSchema>;\n\n const isUsingAnthropic = llmClient.type === \"anthropic\";\n\n const extractCallMessages: ChatMessage[] = [\n buildExtractSystemPrompt(isUsingAnthropic, userProvidedInstructions),\n buildExtractUserPrompt(instruction, domElements, isUsingAnthropic),\n ];\n\n let extractCallFile = \"\";\n let extractCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_call\",\n {\n modelCall: \"extract\",\n messages: extractCallMessages,\n },\n );\n extractCallFile = fileName;\n extractCallTimestamp = timestamp;\n }\n\n const extractStartTime = Date.now();\n const extractionResponse = await withLlmTimeout(\n llmClient.createChatCompletion<ExtractionResponse>({\n options: {\n messages: extractCallMessages,\n response_model: {\n schema,\n name: \"Extraction\",\n },\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract\",\n );\n const extractEndTime = Date.now();\n\n const { data: extractedData, usage: extractUsage } = extractionResponse;\n\n let extractResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"extract_response\",\n {\n modelResponse: \"extract\",\n rawResponse: extractedData,\n },\n );\n extractResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"extract\",\n timestamp: extractCallTimestamp,\n LLM_input_file: extractCallFile,\n LLM_output_file: extractResponseFile,\n prompt_tokens: extractUsage?.prompt_tokens ?? 0,\n completion_tokens: extractUsage?.completion_tokens ?? 0,\n reasoning_tokens: extractUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: extractUsage?.cached_input_tokens ?? 0,\n inference_time_ms: extractEndTime - extractStartTime,\n });\n }\n\n const metadataCallMessages: ChatMessage[] = [\n buildMetadataSystemPrompt(),\n buildMetadataPrompt(instruction, extractedData),\n ];\n\n let metadataCallFile = \"\";\n let metadataCallTimestamp = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_call\",\n {\n modelCall: \"metadata\",\n messages: metadataCallMessages,\n },\n );\n metadataCallFile = fileName;\n metadataCallTimestamp = timestamp;\n }\n\n const metadataStartTime = Date.now();\n const metadataResponse = await withLlmTimeout(\n llmClient.createChatCompletion<MetadataResponse>({\n options: {\n messages: metadataCallMessages,\n response_model: {\n name: \"Metadata\",\n schema: metadataSchema,\n },\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n }),\n \"extract metadata\",\n );\n const metadataEndTime = Date.now();\n\n const {\n data: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n usage: metadataResponseUsage,\n } = metadataResponse;\n\n let metadataResponseFile: string;\n if (logInferenceToFile) {\n const { fileName } = writeTimestampedTxtFile(\n \"extract_summary\",\n \"metadata_response\",\n {\n modelResponse: \"metadata\",\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n );\n metadataResponseFile = fileName;\n\n appendSummary(\"extract\", {\n extract_inference_type: \"metadata\",\n timestamp: metadataCallTimestamp,\n LLM_input_file: metadataCallFile,\n LLM_output_file: metadataResponseFile,\n prompt_tokens: metadataResponseUsage?.prompt_tokens ?? 0,\n completion_tokens: metadataResponseUsage?.completion_tokens ?? 0,\n reasoning_tokens: metadataResponseUsage?.reasoning_tokens ?? 0,\n cached_input_tokens: metadataResponseUsage?.cached_input_tokens ?? 0,\n inference_time_ms: metadataEndTime - metadataStartTime,\n });\n }\n\n const totalPromptTokens =\n (extractUsage?.prompt_tokens ?? 0) +\n (metadataResponseUsage?.prompt_tokens ?? 0);\n\n const totalCompletionTokens =\n (extractUsage?.completion_tokens ?? 0) +\n (metadataResponseUsage?.completion_tokens ?? 0);\n\n const totalInferenceTimeMs =\n extractEndTime - extractStartTime + (metadataEndTime - metadataStartTime);\n const totalReasoningTokens =\n (extractUsage?.reasoning_tokens ?? 0) +\n (metadataResponseUsage?.reasoning_tokens ?? 0);\n const totalCachedInputTokens =\n (extractUsage?.cached_input_tokens ?? 0) +\n (metadataResponseUsage?.cached_input_tokens ?? 0);\n\n return {\n ...extractedData,\n metadata: {\n completed: metadataResponseCompleted,\n progress: metadataResponseProgress,\n },\n prompt_tokens: totalPromptTokens,\n completion_tokens: totalCompletionTokens,\n reasoning_tokens: totalReasoningTokens,\n cached_input_tokens: totalCachedInputTokens,\n inference_time_ms: totalInferenceTimeMs,\n };\n}\n\nexport async function observe({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n supportedActions,\n variables,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n supportedActions?: string[];\n variables?: Variables;\n}) {\n const observeSchema = z.object({\n elements: z\n .array(\n z.object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"the exact ID string associated with the element. Never include surrounding square brackets. This field must follow the format of 'number-number'. For example, if the accessibility tree shows [0-18372], return '0-18372', not '18372'.\",\n ),\n description: z\n .string()\n .describe(\n \"a description of the accessible element and its purpose\",\n ),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n `the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.`,\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n }),\n )\n .describe(\"an array of accessible elements that match the instruction\"),\n });\n\n type ObserveResponse = z.infer<typeof observeSchema>;\n\n const messages: ChatMessage[] = [\n buildObserveSystemPrompt(\n userProvidedInstructions,\n supportedActions,\n variables,\n ),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_call`,\n {\n modelCall: \"observe\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ObserveResponse>({\n options: {\n messages,\n response_model: {\n schema: observeSchema,\n name: \"Observation\",\n },\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: observeData, usage: observeUsage } = rawResponse;\n const promptTokens = observeUsage?.prompt_tokens ?? 0;\n const completionTokens = observeUsage?.completion_tokens ?? 0;\n const reasoningTokens = observeUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = observeUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `observe_summary`,\n `observe_response`,\n {\n modelResponse: \"observe\",\n rawResponse: observeData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"observe\", {\n [`observe_inference_type`]: \"observe\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElements =\n observeData.elements?.map((el) => {\n const base = {\n elementId: el.elementId,\n description: String(el.description),\n method: String(el.method),\n arguments: el.arguments,\n };\n return base;\n }) ?? [];\n\n return {\n elements: parsedElements,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n };\n}\n\nexport async function act({\n instruction,\n domElements,\n llmClient,\n userProvidedInstructions,\n logger,\n logInferenceToFile = false,\n}: {\n instruction: string;\n domElements: string;\n llmClient: LLMClient;\n userProvidedInstructions?: string;\n logger: (message: LogLine) => void;\n logInferenceToFile?: boolean;\n}) {\n const actSchema = z.object({\n action: z\n .object({\n elementId: z\n .string()\n .regex(/^\\d+-\\d+$/)\n .describe(\n \"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'\",\n ),\n description: z\n .string()\n .describe(\"a description of the accessible element and its purpose\"),\n method: z\n .enum(\n // Use Object.values() for Zod v3 compatibility - z.enum() in v3 doesn't accept TypeScript enums directly\n Object.values(SupportedUnderstudyAction) as unknown as readonly [\n string,\n ...string[],\n ],\n )\n .describe(\n \"the candidate method/action to interact with the element. Select one of the available Understudy interaction methods.\",\n ),\n arguments: z.array(\n z\n .string()\n .describe(\n \"the arguments to pass to the method. For example, for a click, the arguments are empty, but for a fill, the arguments are the value to fill in.\",\n ),\n ),\n })\n .nullable()\n .describe(\n \"The element to act on. Return null if no element on the page matches the instruction — do NOT fabricate or guess an element, and never emit empty strings or placeholder values.\",\n ),\n twoStep: z.boolean(),\n });\n\n type ActResponse = z.infer<typeof actSchema>;\n\n const messages: ChatMessage[] = [\n buildActSystemPrompt(userProvidedInstructions),\n buildObserveUserMessage(instruction, domElements),\n ];\n\n let callTimestamp = \"\";\n let callFile = \"\";\n if (logInferenceToFile) {\n const { fileName, timestamp } = writeTimestampedTxtFile(\n `act_summary`,\n `act_call`,\n {\n modelCall: \"act\",\n messages,\n },\n );\n callFile = fileName;\n callTimestamp = timestamp;\n }\n\n const start = Date.now();\n const rawResponse = await llmClient.createChatCompletion<ActResponse>({\n options: {\n messages,\n response_model: {\n schema: actSchema,\n name: \"act\",\n },\n top_p: 1,\n frequency_penalty: 0,\n presence_penalty: 0,\n },\n logger,\n });\n const end = Date.now();\n const usageTimeMs = end - start;\n\n const { data: actData, usage: actUsage } = rawResponse;\n const promptTokens = actUsage?.prompt_tokens ?? 0;\n const completionTokens = actUsage?.completion_tokens ?? 0;\n const reasoningTokens = actUsage?.reasoning_tokens ?? 0;\n const cachedInputTokens = actUsage?.cached_input_tokens ?? 0;\n\n let responseFile: string;\n if (logInferenceToFile) {\n const { fileName: responseFileName } = writeTimestampedTxtFile(\n `act_summary`,\n `act_response`,\n {\n modelResponse: \"act\",\n rawResponse: actData,\n },\n );\n responseFile = responseFileName;\n\n appendSummary(\"act\", {\n [`act_inference_type`]: \"act\",\n timestamp: callTimestamp,\n LLM_input_file: callFile,\n LLM_output_file: responseFile,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n });\n }\n\n const parsedElement = actData.action\n ? {\n elementId: actData.action.elementId,\n description: String(actData.action.description),\n method: String(actData.action.method),\n arguments: actData.action.arguments,\n }\n : undefined;\n\n return {\n element: parsedElement,\n prompt_tokens: promptTokens,\n completion_tokens: completionTokens,\n reasoning_tokens: reasoningTokens,\n cached_input_tokens: cachedInputTokens,\n inference_time_ms: usageTimeMs,\n twoStep: actData.twoStep,\n };\n}\n"]}
@@ -93,7 +93,9 @@ You will be given:
93
93
  2. a hierarchical accessibility tree showing the semantic structure of the page. The tree is a hybrid of the DOM and the accessibility tree.
94
94
 
95
95
  Return an array of elements that match the instruction if they exist, otherwise return an empty array.
96
- When returning elements, include the appropriate method from the supported actions list.${actionsString}${variablesString}. When choosing non-left click actions, provide right or middle as the argument.`;
96
+ When returning elements, include the appropriate method from the supported actions list.${actionsString}${variablesString}. When choosing non-left click actions, provide right or middle as the argument.
97
+
98
+ Each element in the accessibility tree has an ID in square brackets, like [0-18372]. The ID has two parts: frame ordinal and backend node ID. Always copy the complete ID exactly as shown inside the brackets into elementId, including the frame ordinal and hyphen. For example, if the tree shows [0-18372], return elementId "0-18372"; never return only "18372".`;
97
99
  const content = observeSystemPrompt.replace(/\s+/g, " ");
98
100
  return {
99
101
  role: "system",