@browserbasehq/orca 3.7.0-preview.1 → 3.7.1-preview.0

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 (81) hide show
  1. package/dist/cjs/lib/modelUtils.d.ts +10 -0
  2. package/dist/cjs/lib/modelUtils.js +11 -0
  3. package/dist/cjs/lib/modelUtils.js.map +1 -1
  4. package/dist/cjs/lib/v3/agent/AgentProvider.js +3 -0
  5. package/dist/cjs/lib/v3/agent/AgentProvider.js.map +1 -1
  6. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js +3 -1
  7. package/dist/cjs/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  8. package/dist/cjs/lib/v3/api.js +9 -0
  9. package/dist/cjs/lib/v3/api.js.map +1 -1
  10. package/dist/cjs/lib/v3/cache/AgentCache.js +6 -1
  11. package/dist/cjs/lib/v3/cache/AgentCache.js.map +1 -1
  12. package/dist/cjs/lib/v3/external_clients/aisdk.js +2 -0
  13. package/dist/cjs/lib/v3/external_clients/aisdk.js.map +1 -1
  14. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js +5 -4
  15. package/dist/cjs/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  16. package/dist/cjs/lib/v3/index.d.ts +1 -1
  17. package/dist/cjs/lib/v3/llm/LLMProvider.js +9 -2
  18. package/dist/cjs/lib/v3/llm/LLMProvider.js.map +1 -1
  19. package/dist/cjs/lib/v3/llm/aisdk.js +2 -0
  20. package/dist/cjs/lib/v3/llm/aisdk.js.map +1 -1
  21. package/dist/cjs/lib/v3/llm/providerOptions.d.ts +7 -0
  22. package/dist/cjs/lib/v3/llm/providerOptions.js +9 -0
  23. package/dist/cjs/lib/v3/llm/providerOptions.js.map +1 -0
  24. package/dist/cjs/lib/v3/types/private/agent.d.ts +1 -1
  25. package/dist/cjs/lib/v3/types/private/agent.js +1 -0
  26. package/dist/cjs/lib/v3/types/private/agent.js.map +1 -1
  27. package/dist/cjs/lib/v3/types/public/agent.d.ts +1 -1
  28. package/dist/cjs/lib/v3/types/public/agent.js +3 -0
  29. package/dist/cjs/lib/v3/types/public/agent.js.map +1 -1
  30. package/dist/cjs/lib/v3/types/public/model.d.ts +7 -0
  31. package/dist/cjs/lib/v3/types/public/model.js.map +1 -1
  32. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
  33. package/dist/cjs/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  34. package/dist/cjs/lib/v3/v3.js +39 -3
  35. package/dist/cjs/lib/v3/v3.js.map +1 -1
  36. package/dist/cjs/lib/v3/verifier/types.d.ts +3 -2
  37. package/dist/cjs/lib/v3/verifier/types.js.map +1 -1
  38. package/dist/cjs/lib/version.d.ts +1 -1
  39. package/dist/cjs/lib/version.js +1 -1
  40. package/dist/cjs/lib/version.js.map +1 -1
  41. package/dist/esm/lib/modelUtils.d.ts +10 -0
  42. package/dist/esm/lib/modelUtils.js +9 -0
  43. package/dist/esm/lib/modelUtils.js.map +1 -1
  44. package/dist/esm/lib/v3/agent/AgentProvider.js +3 -0
  45. package/dist/esm/lib/v3/agent/AgentProvider.js.map +1 -1
  46. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js +3 -1
  47. package/dist/esm/lib/v3/agent/utils/handleDoneToolCall.js.map +1 -1
  48. package/dist/esm/lib/v3/api.js +9 -0
  49. package/dist/esm/lib/v3/api.js.map +1 -1
  50. package/dist/esm/lib/v3/cache/AgentCache.js +6 -1
  51. package/dist/esm/lib/v3/cache/AgentCache.js.map +1 -1
  52. package/dist/esm/lib/v3/external_clients/aisdk.js +2 -0
  53. package/dist/esm/lib/v3/external_clients/aisdk.js.map +1 -1
  54. package/dist/esm/lib/v3/handlers/v3AgentHandler.js +5 -4
  55. package/dist/esm/lib/v3/handlers/v3AgentHandler.js.map +1 -1
  56. package/dist/esm/lib/v3/index.d.ts +1 -1
  57. package/dist/esm/lib/v3/llm/LLMProvider.js +9 -2
  58. package/dist/esm/lib/v3/llm/LLMProvider.js.map +1 -1
  59. package/dist/esm/lib/v3/llm/aisdk.js +2 -0
  60. package/dist/esm/lib/v3/llm/aisdk.js.map +1 -1
  61. package/dist/esm/lib/v3/llm/providerOptions.d.ts +7 -0
  62. package/dist/esm/lib/v3/llm/providerOptions.js +6 -0
  63. package/dist/esm/lib/v3/llm/providerOptions.js.map +1 -0
  64. package/dist/esm/lib/v3/types/private/agent.d.ts +1 -1
  65. package/dist/esm/lib/v3/types/private/agent.js +1 -0
  66. package/dist/esm/lib/v3/types/private/agent.js.map +1 -1
  67. package/dist/esm/lib/v3/types/public/agent.d.ts +1 -1
  68. package/dist/esm/lib/v3/types/public/agent.js +3 -0
  69. package/dist/esm/lib/v3/types/public/agent.js.map +1 -1
  70. package/dist/esm/lib/v3/types/public/model.d.ts +7 -0
  71. package/dist/esm/lib/v3/types/public/model.js.map +1 -1
  72. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js +4 -3
  73. package/dist/esm/lib/v3/understudy/a11y/snapshot/capture.js.map +1 -1
  74. package/dist/esm/lib/v3/v3.js +40 -4
  75. package/dist/esm/lib/v3/v3.js.map +1 -1
  76. package/dist/esm/lib/v3/verifier/types.d.ts +3 -2
  77. package/dist/esm/lib/v3/verifier/types.js.map +1 -1
  78. package/dist/esm/lib/version.d.ts +1 -1
  79. package/dist/esm/lib/version.js +1 -1
  80. package/dist/esm/lib/version.js.map +1 -1
  81. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"AgentCache.js","sourceRoot":"","sources":["../../../../../lib/v3/cache/AgentCache.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport type { ActHandler } from \"../handlers/actHandler.js\";\nimport type { LLMClient } from \"../llm/LLMClient.js\";\nimport type {\n AgentReplayActStep,\n AgentReplayFillFormStep,\n AgentReplayGotoStep,\n AgentReplayKeysStep,\n AgentReplayNavBackStep,\n AgentReplayScrollStep,\n AgentReplayStep,\n AgentReplayWaitStep,\n CachedAgentEntry,\n SanitizedAgentExecuteOptions,\n ActFn,\n AgentCacheContext,\n AgentCacheDeps,\n AgentCacheTransferPayload,\n} from \"../types/private/index.js\";\nimport type {\n Action,\n AgentResult,\n AgentStreamResult,\n AgentConfig,\n AgentExecuteOptionsBase,\n AvailableModel,\n Logger,\n} from \"../types/public/index.js\";\nimport type { Page } from \"../understudy/page.js\";\nimport type { V3Context } from \"../understudy/context.js\";\nimport { CacheStorage } from \"./CacheStorage.js\";\nimport {\n cloneForCache,\n safeGetPageUrl,\n waitForCachedSelector,\n} from \"./utils.js\";\nimport { substituteVariables } from \"../agent/utils/variables.js\";\n\nconst SENSITIVE_CONFIG_KEYS = new Set([\"apikey\", \"api_key\", \"api-key\"]);\n\nexport class AgentCache {\n private readonly storage: CacheStorage;\n private readonly logger: Logger;\n private readonly getActHandler: () => ActHandler | null;\n private readonly getContext: () => V3Context | null;\n private readonly getDefaultLlmClient: () => LLMClient;\n private readonly getBaseModelName: () => AvailableModel;\n private readonly getSystemPrompt: () => string | undefined;\n private readonly domSettleTimeoutMs?: number;\n private readonly act: ActFn;\n private readonly bufferLatestEntry: boolean;\n\n private recording: AgentReplayStep[] | null = null;\n private latestEntry: AgentCacheTransferPayload | null = null;\n\n constructor({\n storage,\n logger,\n getActHandler,\n getContext,\n getDefaultLlmClient,\n getBaseModelName,\n getSystemPrompt,\n domSettleTimeoutMs,\n act,\n bufferLatestEntry,\n }: AgentCacheDeps) {\n this.storage = storage;\n this.logger = logger;\n this.getActHandler = getActHandler;\n this.getContext = getContext;\n this.getDefaultLlmClient = getDefaultLlmClient;\n this.getBaseModelName = getBaseModelName;\n this.getSystemPrompt = getSystemPrompt;\n this.domSettleTimeoutMs = domSettleTimeoutMs;\n this.act = act;\n this.bufferLatestEntry = bufferLatestEntry ?? false;\n }\n\n get enabled(): boolean {\n return this.storage.enabled;\n }\n\n shouldAttemptCache(instruction: string): boolean {\n return this.enabled && instruction.trim().length > 0;\n }\n\n sanitizeExecuteOptions(\n options?: AgentExecuteOptionsBase,\n ): SanitizedAgentExecuteOptions {\n if (!options) return {};\n const sanitized: SanitizedAgentExecuteOptions = {};\n if (typeof options.maxSteps === \"number\") {\n sanitized.maxSteps = options.maxSteps;\n }\n if (\n \"highlightCursor\" in options &&\n typeof (options as { highlightCursor?: unknown }).highlightCursor ===\n \"boolean\"\n ) {\n sanitized.highlightCursor = (\n options as { highlightCursor?: boolean }\n ).highlightCursor;\n }\n return sanitized;\n }\n\n buildConfigSignature(agentOptions?: AgentConfig): string {\n const toolKeys = agentOptions?.tools\n ? Object.keys(agentOptions.tools).sort()\n : undefined;\n const integrationSignatures = agentOptions?.integrations\n ? agentOptions.integrations.map((integration) =>\n typeof integration === \"string\" ? integration : \"client\",\n )\n : undefined;\n const serializedModel = this.serializeAgentModelForCache(\n agentOptions?.model,\n );\n const serializedExecutionModel = this.serializeAgentModelForCache(\n agentOptions?.executionModel,\n );\n\n const isCuaMode =\n agentOptions?.mode !== undefined\n ? agentOptions.mode === \"cua\"\n : agentOptions?.cua === true;\n\n return JSON.stringify({\n v3Model: this.getBaseModelName(),\n systemPrompt: this.getSystemPrompt() ?? \"\",\n agent: {\n cua: isCuaMode,\n model: serializedModel ?? null,\n executionModel: isCuaMode ? null : serializedExecutionModel,\n systemPrompt: agentOptions?.systemPrompt ?? null,\n toolKeys,\n integrations: integrationSignatures,\n },\n });\n }\n\n async prepareContext(params: {\n instruction: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n page: Page;\n variables?: Record<string, string>;\n }): Promise<AgentCacheContext | null> {\n if (!this.shouldAttemptCache(params.instruction)) {\n return null;\n }\n const instruction = params.instruction.trim();\n const startUrl = await safeGetPageUrl(params.page);\n const variableKeys = params.variables\n ? Object.keys(params.variables).sort()\n : [];\n const cacheKey = this.buildAgentCacheKey(\n instruction,\n startUrl,\n params.options,\n params.configSignature,\n variableKeys,\n );\n return {\n instruction,\n startUrl,\n options: params.options,\n configSignature: params.configSignature,\n cacheKey,\n variableKeys,\n variables: params.variables,\n };\n }\n\n async tryReplay(\n context: AgentCacheContext,\n llmClientOverride?: LLMClient,\n ): Promise<AgentResult | null> {\n if (!this.enabled) return null;\n\n const {\n value: entry,\n error,\n path,\n } = await this.storage.readJson<CachedAgentEntry>(\n `agent-${context.cacheKey}.json`,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: `failed to read agent cache entry: ${path}`,\n level: 1,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return null;\n }\n if (!entry || entry.version !== 1) {\n return null;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache hit\",\n level: 1,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n url: { value: context.startUrl, type: \"string\" },\n },\n });\n\n return await this.replayAgentCacheEntry(context, entry, llmClientOverride);\n }\n\n /**\n * Attempts to replay a cached agent execution and returns it as a stream result.\n *\n * This method exists because the agent API exposes two execution modes:\n * - `execute()` - Returns a Promise<AgentResult> directly\n * - `stream()` - Returns an AgentStreamResult with async iterables for real-time output\n *\n * When a cache hit occurs, we need to return the appropriate type for each mode:\n * - For `execute()`, we use `tryReplay()` which returns AgentResult\n * - For `stream()`, we use `tryReplayAsStream()` which wraps the result in a\n * stream-compatible interface\n *\n * This ensures consumers using `stream()` can still iterate over `textStream`\n * and await `result` even when the response comes from cache, maintaining\n * API consistency regardless of whether the result was cached or live.\n */\n async tryReplayAsStream(\n context: AgentCacheContext,\n llmClientOverride?: LLMClient,\n ): Promise<AgentStreamResult | null> {\n const result = await this.tryReplay(context, llmClientOverride);\n if (!result) return null;\n return this.createCachedStreamResult(result);\n }\n\n /**\n * Creates a mock AgentStreamResult that wraps a cached AgentResult.\n *\n * AgentStreamResult (from the AI SDK) is a complex type with multiple async\n * iterables and promises. When serving from cache, we don't have an actual\n * LLM stream to consume - we just have the final result. This method creates\n * a \"fake\" stream\n\n * This approach lets cached responses be transparent to the consumer -\n * they can use the same iteration patterns whether the result is live or cached.\n */\n private createCachedStreamResult(\n cachedResult: AgentResult,\n ): AgentStreamResult {\n const message = cachedResult.message ?? \"\";\n\n async function* textStreamGenerator(): AsyncGenerator<string> {\n yield message;\n }\n\n async function* fullStreamGenerator(): AsyncGenerator<{\n type: string;\n textDelta?: string;\n }> {\n yield { type: \"text-delta\", textDelta: message };\n yield { type: \"finish\" };\n }\n\n const mockStreamResult = {\n textStream: textStreamGenerator(),\n fullStream: fullStreamGenerator(),\n result: Promise.resolve(cachedResult),\n text: Promise.resolve(message),\n usage: Promise.resolve({\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n }),\n finishReason: Promise.resolve(\"stop\" as const),\n experimental_providerMetadata: Promise.resolve(undefined),\n response: Promise.resolve({\n id: \"cached\",\n timestamp: new Date(),\n modelId: \"cached\",\n }),\n rawResponse: Promise.resolve({ headers: {} }),\n warnings: Promise.resolve([]),\n steps: Promise.resolve([]),\n toolCalls: Promise.resolve([]),\n toolResults: Promise.resolve([]),\n [Symbol.asyncIterator]: () => textStreamGenerator(),\n } as unknown as AgentStreamResult;\n\n return mockStreamResult;\n }\n\n /**\n * Wraps an AgentStreamResult with caching logic.\n *\n * This method handles the complexity of caching for streaming responses:\n * 1. Begins recording agent replay steps\n * 2. Wraps the stream's result promise to capture completion\n * 3. On success: ends recording and stores the cache entry\n * 4. On error: discards the recording\n *\n * This keeps the caching orchestration in AgentCache rather than\n * spreading it across the V3 class.\n *\n * @param context - The cache context for this execution\n * @param streamResult - The stream result from the agent handler\n * @param beginRecording - Callback to start recording (from V3)\n * @param endRecording - Callback to end recording and get steps (from V3)\n * @param discardRecording - Callback to discard recording on error (from V3)\n * @returns The wrapped stream result with caching enabled\n */\n wrapStreamForCaching(\n context: AgentCacheContext,\n streamResult: AgentStreamResult,\n beginRecording: () => void,\n endRecording: () => AgentReplayStep[],\n discardRecording: () => void,\n ): AgentStreamResult {\n beginRecording();\n\n const originalResultPromise = streamResult.result;\n const wrappedResultPromise = originalResultPromise.then(\n async (result) => {\n const agentSteps = endRecording();\n\n if (result.success && agentSteps.length > 0) {\n await this.store(context, agentSteps, result);\n }\n\n return result;\n },\n (error) => {\n discardRecording();\n throw error;\n },\n );\n\n streamResult.result = wrappedResultPromise;\n return streamResult;\n }\n\n async store(\n context: AgentCacheContext,\n steps: AgentReplayStep[],\n result: AgentResult,\n ): Promise<void> {\n if (!this.enabled) return;\n\n const entry: CachedAgentEntry = {\n version: 1,\n instruction: context.instruction,\n startUrl: context.startUrl,\n options: context.options,\n configSignature: context.configSignature,\n steps: cloneForCache(steps),\n result: this.pruneAgentResult(result),\n timestamp: new Date().toISOString(),\n };\n\n const { error, path } = await this.storage.writeJson(\n `agent-${context.cacheKey}.json`,\n entry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to write agent cache entry\",\n level: 1,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache stored\",\n level: 2,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n steps: { value: String(steps.length), type: \"string\" },\n },\n });\n\n if (this.bufferLatestEntry) {\n this.latestEntry = {\n cacheKey: context.cacheKey,\n entry: cloneForCache(entry),\n };\n }\n }\n\n consumeBufferedEntry(): AgentCacheTransferPayload | null {\n if (!this.bufferLatestEntry || !this.latestEntry) {\n return null;\n }\n\n const payload = this.latestEntry;\n this.latestEntry = null;\n return payload;\n }\n\n async storeTransferredEntry(\n payload: AgentCacheTransferPayload | null,\n ): Promise<void> {\n if (!this.enabled || !payload) return;\n\n const entry = cloneForCache(payload.entry);\n const { error, path } = await this.storage.writeJson(\n `agent-${payload.cacheKey}.json`,\n entry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to import remote agent cache entry\",\n level: 0,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache imported from server\",\n level: 2,\n auxiliary: {\n instruction: { value: entry.instruction, type: \"string\" },\n steps: { value: String(entry.steps?.length ?? 0), type: \"string\" },\n },\n });\n }\n\n /**\n * Clone the agent result and prune bulky fields (e.g. screenshot base64 blobs)\n * before persisting it to disk. This keeps cache entries compact without\n * mutating the live AgentResult returned to callers.\n */\n private pruneAgentResult(result: AgentResult): AgentResult {\n const cloned = cloneForCache(result);\n if (!Array.isArray(cloned.actions)) {\n return cloned;\n }\n\n for (const action of cloned.actions) {\n if (action?.type === \"screenshot\") {\n delete action.base64;\n }\n }\n\n return cloned;\n }\n\n beginRecording(): void {\n this.recording = [];\n }\n\n endRecording(): AgentReplayStep[] {\n if (!this.recording) return [];\n const steps = cloneForCache(this.recording);\n this.recording = null;\n return steps;\n }\n\n discardRecording(): void {\n this.recording = null;\n }\n\n isRecording(): boolean {\n return Array.isArray(this.recording);\n }\n\n recordStep(step: AgentReplayStep): void {\n if (!this.isRecording()) return;\n try {\n this.recording!.push(cloneForCache(step));\n } catch (err) {\n this.logger({\n category: \"cache\",\n message: \"failed to record agent replay step\",\n level: 2,\n auxiliary: {\n error: { value: String(err), type: \"string\" },\n },\n });\n }\n }\n\n isReplayActive(): boolean {\n return this.isRecording();\n }\n\n private serializeAgentModelForCache(\n model?: AgentConfig[\"model\"],\n ): null | string | { modelName: string; options?: Record<string, unknown> } {\n if (!model) return null;\n if (typeof model === \"string\") return model;\n\n const { modelName, ...modelOptions } = model;\n const sanitizedOptions =\n Object.keys(modelOptions).length > 0\n ? this.sanitizeModelOptionsForCache(\n modelOptions as Record<string, unknown>,\n )\n : undefined;\n return sanitizedOptions\n ? { modelName, options: sanitizedOptions }\n : modelName;\n }\n\n private buildAgentCacheKey(\n instruction: string,\n startUrl: string,\n options: SanitizedAgentExecuteOptions,\n configSignature: string,\n variableKeys?: string[],\n ): string {\n const payload = {\n instruction,\n startUrl,\n options,\n configSignature,\n variableKeys: variableKeys ?? [],\n };\n return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n }\n\n private sanitizeModelOptionsForCache(\n value: Record<string, unknown>,\n ): Record<string, unknown> | undefined {\n const sanitizedEntries: Record<string, unknown> = {};\n for (const [key, rawValue] of Object.entries(value)) {\n if (SENSITIVE_CONFIG_KEYS.has(key.toLowerCase())) {\n continue;\n }\n\n const sanitizedValue = this.sanitizeModelValueForCache(rawValue);\n if (sanitizedValue !== undefined) {\n sanitizedEntries[key] = sanitizedValue;\n }\n }\n\n return Object.keys(sanitizedEntries).length > 0\n ? sanitizedEntries\n : undefined;\n }\n\n private sanitizeModelValueForCache(value: unknown): unknown {\n if (Array.isArray(value)) {\n const sanitizedArray = value\n .map((item) => this.sanitizeModelValueForCache(item))\n .filter((item) => item !== undefined);\n return sanitizedArray;\n }\n\n if (value && typeof value === \"object\") {\n return this.sanitizeModelOptionsForCache(\n value as Record<string, unknown>,\n );\n }\n\n return value;\n }\n\n private async replayAgentCacheEntry(\n context: AgentCacheContext,\n entry: CachedAgentEntry,\n llmClientOverride?: LLMClient,\n ): Promise<AgentResult | null> {\n const ctx = this.getContext();\n const handler = this.getActHandler();\n if (!ctx || !handler) return null;\n const effectiveClient = llmClientOverride ?? this.getDefaultLlmClient();\n try {\n const updatedSteps: AgentReplayStep[] = [];\n let stepsChanged = false;\n for (const step of entry.steps ?? []) {\n const replayedStep =\n (await this.executeAgentReplayStep(\n step,\n ctx,\n handler,\n effectiveClient,\n context.variables,\n )) ?? step;\n stepsChanged ||= replayedStep !== step;\n updatedSteps.push(replayedStep);\n }\n const result = cloneForCache(entry.result);\n result.usage = {\n input_tokens: 0,\n output_tokens: 0,\n reasoning_tokens: 0,\n cached_input_tokens: 0,\n inference_time_ms: 0,\n };\n result.metadata = {\n ...(result.metadata ?? {}),\n cacheHit: true,\n cacheTimestamp: entry.timestamp,\n };\n if (stepsChanged) {\n await this.refreshAgentCacheEntry(context, entry, updatedSteps);\n }\n return result;\n } catch (err) {\n this.logger({\n category: \"cache\",\n message: \"agent cache replay failed\",\n level: 1,\n auxiliary: {\n error: { value: String(err), type: \"string\" },\n },\n });\n return null;\n }\n }\n\n private async executeAgentReplayStep(\n step: AgentReplayStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayStep> {\n switch (step.type) {\n case \"act\":\n return await this.replayAgentActStep(\n step as AgentReplayActStep,\n ctx,\n handler,\n llmClient,\n variables,\n );\n case \"fillForm\":\n return await this.replayAgentFillFormStep(\n step as AgentReplayFillFormStep,\n ctx,\n handler,\n llmClient,\n variables,\n );\n case \"goto\":\n await this.replayAgentGotoStep(step as AgentReplayGotoStep, ctx);\n return step;\n case \"scroll\":\n await this.replayAgentScrollStep(step as AgentReplayScrollStep, ctx);\n return step;\n case \"wait\":\n await this.replayAgentWaitStep(step as AgentReplayWaitStep);\n return step;\n case \"navback\":\n await this.replayAgentNavBackStep(step as AgentReplayNavBackStep, ctx);\n return step;\n case \"keys\":\n await this.replayAgentKeysStep(\n step as AgentReplayKeysStep,\n ctx,\n variables,\n );\n return step;\n case \"done\":\n case \"extract\":\n case \"screenshot\":\n case \"ariaTree\":\n return step;\n default:\n this.logger({\n category: \"cache\",\n message: `agent cache skipping step type: ${step.type}`,\n level: 2,\n });\n return step;\n }\n }\n\n private async replayAgentActStep(\n step: AgentReplayActStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayActStep> {\n const actions = Array.isArray(step.actions) ? step.actions : [];\n if (actions.length > 0) {\n const page = await ctx.awaitActivePage();\n const updatedActions: Action[] = [];\n for (const action of actions) {\n await waitForCachedSelector({\n page,\n selector: action.selector,\n timeout: this.domSettleTimeoutMs,\n logger: this.logger,\n context: \"agent act\",\n });\n const result = await handler.takeDeterministicAction(\n action,\n page,\n this.domSettleTimeoutMs,\n llmClient,\n undefined,\n variables,\n );\n if (result.success && Array.isArray(result.actions)) {\n updatedActions.push(...cloneForCache(result.actions));\n } else {\n updatedActions.push(cloneForCache(action));\n }\n }\n if (this.haveActionsChanged(actions, updatedActions)) {\n return { ...step, actions: updatedActions };\n }\n return step;\n }\n await this.act(step.instruction, { timeout: step.timeout, variables });\n return step;\n }\n\n private async replayAgentFillFormStep(\n step: AgentReplayFillFormStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayFillFormStep> {\n const actions =\n Array.isArray(step.actions) && step.actions.length > 0\n ? step.actions\n : (step.observeResults ?? []);\n if (!Array.isArray(actions) || actions.length === 0) {\n return step;\n }\n const page = await ctx.awaitActivePage();\n const updatedActions: Action[] = [];\n for (const action of actions) {\n await waitForCachedSelector({\n page,\n selector: action.selector,\n timeout: this.domSettleTimeoutMs,\n logger: this.logger,\n context: \"fillForm\",\n });\n const result = await handler.takeDeterministicAction(\n action,\n page,\n this.domSettleTimeoutMs,\n llmClient,\n undefined, // ensureTimeRemaining is not used in this context\n variables,\n );\n if (result.success && Array.isArray(result.actions)) {\n updatedActions.push(...cloneForCache(result.actions));\n } else {\n updatedActions.push(cloneForCache(action));\n }\n }\n if (this.haveActionsChanged(actions, updatedActions)) {\n return { ...step, actions: updatedActions };\n }\n return step;\n }\n\n private async replayAgentGotoStep(\n step: AgentReplayGotoStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n await page.goto(step.url, { waitUntil: step.waitUntil ?? \"load\" });\n }\n\n private async replayAgentScrollStep(\n step: AgentReplayScrollStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n let anchor = step.anchor;\n if (!anchor) {\n anchor = await page\n .mainFrame()\n .evaluate<{ x: number; y: number }>(() => ({\n x: Math.max(0, Math.floor(window.innerWidth / 2)),\n y: Math.max(0, Math.floor(window.innerHeight / 2)),\n }));\n }\n const deltaX = step.deltaX ?? 0;\n const deltaY = step.deltaY ?? 0;\n await page.scroll(\n Math.round(anchor.x ?? 0),\n Math.round(anchor.y ?? 0),\n deltaX,\n deltaY,\n );\n }\n\n private async replayAgentWaitStep(step: AgentReplayWaitStep): Promise<void> {\n if (!step.timeMs || step.timeMs <= 0) return;\n await new Promise((resolve) => setTimeout(resolve, step.timeMs));\n }\n\n private async replayAgentNavBackStep(\n step: AgentReplayNavBackStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n await page.goBack({ waitUntil: step.waitUntil ?? \"domcontentloaded\" });\n }\n\n private async replayAgentKeysStep(\n step: AgentReplayKeysStep,\n ctx: V3Context,\n variables?: Record<string, string>,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n const { method, text, keys, times } = step.playwrightArguments;\n const repeatCount = Math.max(1, times ?? 1);\n\n if (method === \"type\" && text) {\n const resolvedText = substituteVariables(text, variables);\n for (let i = 0; i < repeatCount; i++) {\n await page.type(resolvedText, { delay: 100 });\n }\n } else if (method === \"press\" && keys) {\n for (let i = 0; i < repeatCount; i++) {\n await page.keyPress(keys, { delay: 100 });\n }\n }\n }\n\n private haveActionsChanged(original: Action[], updated: Action[]): boolean {\n if (original.length !== updated.length) {\n return true;\n }\n for (let i = 0; i < original.length; i += 1) {\n const orig = original[i];\n const next = updated[i];\n if (!orig || !next) {\n return true;\n }\n if (orig.selector !== next.selector) {\n return true;\n }\n if ((orig.description ?? \"\") !== (next.description ?? \"\")) {\n return true;\n }\n if ((orig.method ?? \"\") !== (next.method ?? \"\")) {\n return true;\n }\n const origArgs = Array.isArray(orig.arguments) ? orig.arguments : [];\n const nextArgs = Array.isArray(next.arguments) ? next.arguments : [];\n if (origArgs.length !== nextArgs.length) {\n return true;\n }\n for (let j = 0; j < origArgs.length; j += 1) {\n if (origArgs[j] !== nextArgs[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n private async refreshAgentCacheEntry(\n context: AgentCacheContext,\n entry: CachedAgentEntry,\n updatedSteps: AgentReplayStep[],\n ): Promise<void> {\n const updatedEntry: CachedAgentEntry = {\n ...entry,\n steps: cloneForCache(updatedSteps),\n timestamp: new Date().toISOString(),\n };\n const { error, path } = await this.storage.writeJson(\n `agent-${context.cacheKey}.json`,\n updatedEntry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to update agent cache entry after self-heal\",\n level: 0,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n this.logger({\n category: \"cache\",\n message: \"agent cache entry updated after self-heal\",\n level: 2,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n steps: { value: String(updatedSteps.length), type: \"string\" },\n },\n });\n }\n}\n"]}
1
+ {"version":3,"file":"AgentCache.js","sourceRoot":"","sources":["../../../../../lib/v3/cache/AgentCache.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"crypto\";\nimport type { ActHandler } from \"../handlers/actHandler.js\";\nimport type { LLMClient } from \"../llm/LLMClient.js\";\nimport type {\n AgentReplayActStep,\n AgentReplayFillFormStep,\n AgentReplayGotoStep,\n AgentReplayKeysStep,\n AgentReplayNavBackStep,\n AgentReplayScrollStep,\n AgentReplayStep,\n AgentReplayWaitStep,\n CachedAgentEntry,\n SanitizedAgentExecuteOptions,\n ActFn,\n AgentCacheContext,\n AgentCacheDeps,\n AgentCacheTransferPayload,\n} from \"../types/private/index.js\";\nimport type {\n Action,\n AgentResult,\n AgentStreamResult,\n AgentConfig,\n AgentExecuteOptionsBase,\n AvailableModel,\n Logger,\n} from \"../types/public/index.js\";\nimport type { Page } from \"../understudy/page.js\";\nimport type { V3Context } from \"../understudy/context.js\";\nimport { CacheStorage } from \"./CacheStorage.js\";\nimport {\n cloneForCache,\n safeGetPageUrl,\n waitForCachedSelector,\n} from \"./utils.js\";\nimport { substituteVariables } from \"../agent/utils/variables.js\";\nimport { isAutoModel } from \"../../modelUtils.js\";\n\nconst SENSITIVE_CONFIG_KEYS = new Set([\"apikey\", \"api_key\", \"api-key\"]);\n\nexport class AgentCache {\n private readonly storage: CacheStorage;\n private readonly logger: Logger;\n private readonly getActHandler: () => ActHandler | null;\n private readonly getContext: () => V3Context | null;\n private readonly getDefaultLlmClient: () => LLMClient;\n private readonly getBaseModelName: () => AvailableModel;\n private readonly getSystemPrompt: () => string | undefined;\n private readonly domSettleTimeoutMs?: number;\n private readonly act: ActFn;\n private readonly bufferLatestEntry: boolean;\n\n private recording: AgentReplayStep[] | null = null;\n private latestEntry: AgentCacheTransferPayload | null = null;\n\n constructor({\n storage,\n logger,\n getActHandler,\n getContext,\n getDefaultLlmClient,\n getBaseModelName,\n getSystemPrompt,\n domSettleTimeoutMs,\n act,\n bufferLatestEntry,\n }: AgentCacheDeps) {\n this.storage = storage;\n this.logger = logger;\n this.getActHandler = getActHandler;\n this.getContext = getContext;\n this.getDefaultLlmClient = getDefaultLlmClient;\n this.getBaseModelName = getBaseModelName;\n this.getSystemPrompt = getSystemPrompt;\n this.domSettleTimeoutMs = domSettleTimeoutMs;\n this.act = act;\n this.bufferLatestEntry = bufferLatestEntry ?? false;\n }\n\n get enabled(): boolean {\n return this.storage.enabled;\n }\n\n shouldAttemptCache(instruction: string): boolean {\n return (\n this.enabled &&\n instruction.trim().length > 0 &&\n // \"auto\" sessions have no local LLM client for replay self-heal;\n // rely on the API (and its server-side cache) instead.\n !isAutoModel(this.getBaseModelName())\n );\n }\n\n sanitizeExecuteOptions(\n options?: AgentExecuteOptionsBase,\n ): SanitizedAgentExecuteOptions {\n if (!options) return {};\n const sanitized: SanitizedAgentExecuteOptions = {};\n if (typeof options.maxSteps === \"number\") {\n sanitized.maxSteps = options.maxSteps;\n }\n if (\n \"highlightCursor\" in options &&\n typeof (options as { highlightCursor?: unknown }).highlightCursor ===\n \"boolean\"\n ) {\n sanitized.highlightCursor = (\n options as { highlightCursor?: boolean }\n ).highlightCursor;\n }\n return sanitized;\n }\n\n buildConfigSignature(agentOptions?: AgentConfig): string {\n const toolKeys = agentOptions?.tools\n ? Object.keys(agentOptions.tools).sort()\n : undefined;\n const integrationSignatures = agentOptions?.integrations\n ? agentOptions.integrations.map((integration) =>\n typeof integration === \"string\" ? integration : \"client\",\n )\n : undefined;\n const serializedModel = this.serializeAgentModelForCache(\n agentOptions?.model,\n );\n const serializedExecutionModel = this.serializeAgentModelForCache(\n agentOptions?.executionModel,\n );\n\n const isCuaMode =\n agentOptions?.mode !== undefined\n ? agentOptions.mode === \"cua\"\n : agentOptions?.cua === true;\n\n return JSON.stringify({\n v3Model: this.getBaseModelName(),\n systemPrompt: this.getSystemPrompt() ?? \"\",\n agent: {\n cua: isCuaMode,\n model: serializedModel ?? null,\n executionModel: isCuaMode ? null : serializedExecutionModel,\n systemPrompt: agentOptions?.systemPrompt ?? null,\n toolKeys,\n integrations: integrationSignatures,\n },\n });\n }\n\n async prepareContext(params: {\n instruction: string;\n options: SanitizedAgentExecuteOptions;\n configSignature: string;\n page: Page;\n variables?: Record<string, string>;\n }): Promise<AgentCacheContext | null> {\n if (!this.shouldAttemptCache(params.instruction)) {\n return null;\n }\n const instruction = params.instruction.trim();\n const startUrl = await safeGetPageUrl(params.page);\n const variableKeys = params.variables\n ? Object.keys(params.variables).sort()\n : [];\n const cacheKey = this.buildAgentCacheKey(\n instruction,\n startUrl,\n params.options,\n params.configSignature,\n variableKeys,\n );\n return {\n instruction,\n startUrl,\n options: params.options,\n configSignature: params.configSignature,\n cacheKey,\n variableKeys,\n variables: params.variables,\n };\n }\n\n async tryReplay(\n context: AgentCacheContext,\n llmClientOverride?: LLMClient,\n ): Promise<AgentResult | null> {\n if (!this.enabled) return null;\n\n const {\n value: entry,\n error,\n path,\n } = await this.storage.readJson<CachedAgentEntry>(\n `agent-${context.cacheKey}.json`,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: `failed to read agent cache entry: ${path}`,\n level: 1,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return null;\n }\n if (!entry || entry.version !== 1) {\n return null;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache hit\",\n level: 1,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n url: { value: context.startUrl, type: \"string\" },\n },\n });\n\n return await this.replayAgentCacheEntry(context, entry, llmClientOverride);\n }\n\n /**\n * Attempts to replay a cached agent execution and returns it as a stream result.\n *\n * This method exists because the agent API exposes two execution modes:\n * - `execute()` - Returns a Promise<AgentResult> directly\n * - `stream()` - Returns an AgentStreamResult with async iterables for real-time output\n *\n * When a cache hit occurs, we need to return the appropriate type for each mode:\n * - For `execute()`, we use `tryReplay()` which returns AgentResult\n * - For `stream()`, we use `tryReplayAsStream()` which wraps the result in a\n * stream-compatible interface\n *\n * This ensures consumers using `stream()` can still iterate over `textStream`\n * and await `result` even when the response comes from cache, maintaining\n * API consistency regardless of whether the result was cached or live.\n */\n async tryReplayAsStream(\n context: AgentCacheContext,\n llmClientOverride?: LLMClient,\n ): Promise<AgentStreamResult | null> {\n const result = await this.tryReplay(context, llmClientOverride);\n if (!result) return null;\n return this.createCachedStreamResult(result);\n }\n\n /**\n * Creates a mock AgentStreamResult that wraps a cached AgentResult.\n *\n * AgentStreamResult (from the AI SDK) is a complex type with multiple async\n * iterables and promises. When serving from cache, we don't have an actual\n * LLM stream to consume - we just have the final result. This method creates\n * a \"fake\" stream\n\n * This approach lets cached responses be transparent to the consumer -\n * they can use the same iteration patterns whether the result is live or cached.\n */\n private createCachedStreamResult(\n cachedResult: AgentResult,\n ): AgentStreamResult {\n const message = cachedResult.message ?? \"\";\n\n async function* textStreamGenerator(): AsyncGenerator<string> {\n yield message;\n }\n\n async function* fullStreamGenerator(): AsyncGenerator<{\n type: string;\n textDelta?: string;\n }> {\n yield { type: \"text-delta\", textDelta: message };\n yield { type: \"finish\" };\n }\n\n const mockStreamResult = {\n textStream: textStreamGenerator(),\n fullStream: fullStreamGenerator(),\n result: Promise.resolve(cachedResult),\n text: Promise.resolve(message),\n usage: Promise.resolve({\n promptTokens: 0,\n completionTokens: 0,\n totalTokens: 0,\n }),\n finishReason: Promise.resolve(\"stop\" as const),\n experimental_providerMetadata: Promise.resolve(undefined),\n response: Promise.resolve({\n id: \"cached\",\n timestamp: new Date(),\n modelId: \"cached\",\n }),\n rawResponse: Promise.resolve({ headers: {} }),\n warnings: Promise.resolve([]),\n steps: Promise.resolve([]),\n toolCalls: Promise.resolve([]),\n toolResults: Promise.resolve([]),\n [Symbol.asyncIterator]: () => textStreamGenerator(),\n } as unknown as AgentStreamResult;\n\n return mockStreamResult;\n }\n\n /**\n * Wraps an AgentStreamResult with caching logic.\n *\n * This method handles the complexity of caching for streaming responses:\n * 1. Begins recording agent replay steps\n * 2. Wraps the stream's result promise to capture completion\n * 3. On success: ends recording and stores the cache entry\n * 4. On error: discards the recording\n *\n * This keeps the caching orchestration in AgentCache rather than\n * spreading it across the V3 class.\n *\n * @param context - The cache context for this execution\n * @param streamResult - The stream result from the agent handler\n * @param beginRecording - Callback to start recording (from V3)\n * @param endRecording - Callback to end recording and get steps (from V3)\n * @param discardRecording - Callback to discard recording on error (from V3)\n * @returns The wrapped stream result with caching enabled\n */\n wrapStreamForCaching(\n context: AgentCacheContext,\n streamResult: AgentStreamResult,\n beginRecording: () => void,\n endRecording: () => AgentReplayStep[],\n discardRecording: () => void,\n ): AgentStreamResult {\n beginRecording();\n\n const originalResultPromise = streamResult.result;\n const wrappedResultPromise = originalResultPromise.then(\n async (result) => {\n const agentSteps = endRecording();\n\n if (result.success && agentSteps.length > 0) {\n await this.store(context, agentSteps, result);\n }\n\n return result;\n },\n (error) => {\n discardRecording();\n throw error;\n },\n );\n\n streamResult.result = wrappedResultPromise;\n return streamResult;\n }\n\n async store(\n context: AgentCacheContext,\n steps: AgentReplayStep[],\n result: AgentResult,\n ): Promise<void> {\n if (!this.enabled) return;\n\n const entry: CachedAgentEntry = {\n version: 1,\n instruction: context.instruction,\n startUrl: context.startUrl,\n options: context.options,\n configSignature: context.configSignature,\n steps: cloneForCache(steps),\n result: this.pruneAgentResult(result),\n timestamp: new Date().toISOString(),\n };\n\n const { error, path } = await this.storage.writeJson(\n `agent-${context.cacheKey}.json`,\n entry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to write agent cache entry\",\n level: 1,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache stored\",\n level: 2,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n steps: { value: String(steps.length), type: \"string\" },\n },\n });\n\n if (this.bufferLatestEntry) {\n this.latestEntry = {\n cacheKey: context.cacheKey,\n entry: cloneForCache(entry),\n };\n }\n }\n\n consumeBufferedEntry(): AgentCacheTransferPayload | null {\n if (!this.bufferLatestEntry || !this.latestEntry) {\n return null;\n }\n\n const payload = this.latestEntry;\n this.latestEntry = null;\n return payload;\n }\n\n async storeTransferredEntry(\n payload: AgentCacheTransferPayload | null,\n ): Promise<void> {\n if (!this.enabled || !payload) return;\n\n const entry = cloneForCache(payload.entry);\n const { error, path } = await this.storage.writeJson(\n `agent-${payload.cacheKey}.json`,\n entry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to import remote agent cache entry\",\n level: 0,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n\n this.logger({\n category: \"cache\",\n message: \"agent cache imported from server\",\n level: 2,\n auxiliary: {\n instruction: { value: entry.instruction, type: \"string\" },\n steps: { value: String(entry.steps?.length ?? 0), type: \"string\" },\n },\n });\n }\n\n /**\n * Clone the agent result and prune bulky fields (e.g. screenshot base64 blobs)\n * before persisting it to disk. This keeps cache entries compact without\n * mutating the live AgentResult returned to callers.\n */\n private pruneAgentResult(result: AgentResult): AgentResult {\n const cloned = cloneForCache(result);\n if (!Array.isArray(cloned.actions)) {\n return cloned;\n }\n\n for (const action of cloned.actions) {\n if (action?.type === \"screenshot\") {\n delete action.base64;\n }\n }\n\n return cloned;\n }\n\n beginRecording(): void {\n this.recording = [];\n }\n\n endRecording(): AgentReplayStep[] {\n if (!this.recording) return [];\n const steps = cloneForCache(this.recording);\n this.recording = null;\n return steps;\n }\n\n discardRecording(): void {\n this.recording = null;\n }\n\n isRecording(): boolean {\n return Array.isArray(this.recording);\n }\n\n recordStep(step: AgentReplayStep): void {\n if (!this.isRecording()) return;\n try {\n this.recording!.push(cloneForCache(step));\n } catch (err) {\n this.logger({\n category: \"cache\",\n message: \"failed to record agent replay step\",\n level: 2,\n auxiliary: {\n error: { value: String(err), type: \"string\" },\n },\n });\n }\n }\n\n isReplayActive(): boolean {\n return this.isRecording();\n }\n\n private serializeAgentModelForCache(\n model?: AgentConfig[\"model\"],\n ): null | string | { modelName: string; options?: Record<string, unknown> } {\n if (!model) return null;\n if (typeof model === \"string\") return model;\n\n const { modelName, ...modelOptions } = model;\n const sanitizedOptions =\n Object.keys(modelOptions).length > 0\n ? this.sanitizeModelOptionsForCache(\n modelOptions as Record<string, unknown>,\n )\n : undefined;\n return sanitizedOptions\n ? { modelName, options: sanitizedOptions }\n : modelName;\n }\n\n private buildAgentCacheKey(\n instruction: string,\n startUrl: string,\n options: SanitizedAgentExecuteOptions,\n configSignature: string,\n variableKeys?: string[],\n ): string {\n const payload = {\n instruction,\n startUrl,\n options,\n configSignature,\n variableKeys: variableKeys ?? [],\n };\n return createHash(\"sha256\").update(JSON.stringify(payload)).digest(\"hex\");\n }\n\n private sanitizeModelOptionsForCache(\n value: Record<string, unknown>,\n ): Record<string, unknown> | undefined {\n const sanitizedEntries: Record<string, unknown> = {};\n for (const [key, rawValue] of Object.entries(value)) {\n if (SENSITIVE_CONFIG_KEYS.has(key.toLowerCase())) {\n continue;\n }\n\n const sanitizedValue = this.sanitizeModelValueForCache(rawValue);\n if (sanitizedValue !== undefined) {\n sanitizedEntries[key] = sanitizedValue;\n }\n }\n\n return Object.keys(sanitizedEntries).length > 0\n ? sanitizedEntries\n : undefined;\n }\n\n private sanitizeModelValueForCache(value: unknown): unknown {\n if (Array.isArray(value)) {\n const sanitizedArray = value\n .map((item) => this.sanitizeModelValueForCache(item))\n .filter((item) => item !== undefined);\n return sanitizedArray;\n }\n\n if (value && typeof value === \"object\") {\n return this.sanitizeModelOptionsForCache(\n value as Record<string, unknown>,\n );\n }\n\n return value;\n }\n\n private async replayAgentCacheEntry(\n context: AgentCacheContext,\n entry: CachedAgentEntry,\n llmClientOverride?: LLMClient,\n ): Promise<AgentResult | null> {\n const ctx = this.getContext();\n const handler = this.getActHandler();\n if (!ctx || !handler) return null;\n const effectiveClient = llmClientOverride ?? this.getDefaultLlmClient();\n try {\n const updatedSteps: AgentReplayStep[] = [];\n let stepsChanged = false;\n for (const step of entry.steps ?? []) {\n const replayedStep =\n (await this.executeAgentReplayStep(\n step,\n ctx,\n handler,\n effectiveClient,\n context.variables,\n )) ?? step;\n stepsChanged ||= replayedStep !== step;\n updatedSteps.push(replayedStep);\n }\n const result = cloneForCache(entry.result);\n result.usage = {\n input_tokens: 0,\n output_tokens: 0,\n reasoning_tokens: 0,\n cached_input_tokens: 0,\n inference_time_ms: 0,\n };\n result.metadata = {\n ...(result.metadata ?? {}),\n cacheHit: true,\n cacheTimestamp: entry.timestamp,\n };\n if (stepsChanged) {\n await this.refreshAgentCacheEntry(context, entry, updatedSteps);\n }\n return result;\n } catch (err) {\n this.logger({\n category: \"cache\",\n message: \"agent cache replay failed\",\n level: 1,\n auxiliary: {\n error: { value: String(err), type: \"string\" },\n },\n });\n return null;\n }\n }\n\n private async executeAgentReplayStep(\n step: AgentReplayStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayStep> {\n switch (step.type) {\n case \"act\":\n return await this.replayAgentActStep(\n step as AgentReplayActStep,\n ctx,\n handler,\n llmClient,\n variables,\n );\n case \"fillForm\":\n return await this.replayAgentFillFormStep(\n step as AgentReplayFillFormStep,\n ctx,\n handler,\n llmClient,\n variables,\n );\n case \"goto\":\n await this.replayAgentGotoStep(step as AgentReplayGotoStep, ctx);\n return step;\n case \"scroll\":\n await this.replayAgentScrollStep(step as AgentReplayScrollStep, ctx);\n return step;\n case \"wait\":\n await this.replayAgentWaitStep(step as AgentReplayWaitStep);\n return step;\n case \"navback\":\n await this.replayAgentNavBackStep(step as AgentReplayNavBackStep, ctx);\n return step;\n case \"keys\":\n await this.replayAgentKeysStep(\n step as AgentReplayKeysStep,\n ctx,\n variables,\n );\n return step;\n case \"done\":\n case \"extract\":\n case \"screenshot\":\n case \"ariaTree\":\n return step;\n default:\n this.logger({\n category: \"cache\",\n message: `agent cache skipping step type: ${step.type}`,\n level: 2,\n });\n return step;\n }\n }\n\n private async replayAgentActStep(\n step: AgentReplayActStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayActStep> {\n const actions = Array.isArray(step.actions) ? step.actions : [];\n if (actions.length > 0) {\n const page = await ctx.awaitActivePage();\n const updatedActions: Action[] = [];\n for (const action of actions) {\n await waitForCachedSelector({\n page,\n selector: action.selector,\n timeout: this.domSettleTimeoutMs,\n logger: this.logger,\n context: \"agent act\",\n });\n const result = await handler.takeDeterministicAction(\n action,\n page,\n this.domSettleTimeoutMs,\n llmClient,\n undefined,\n variables,\n );\n if (result.success && Array.isArray(result.actions)) {\n updatedActions.push(...cloneForCache(result.actions));\n } else {\n updatedActions.push(cloneForCache(action));\n }\n }\n if (this.haveActionsChanged(actions, updatedActions)) {\n return { ...step, actions: updatedActions };\n }\n return step;\n }\n await this.act(step.instruction, { timeout: step.timeout, variables });\n return step;\n }\n\n private async replayAgentFillFormStep(\n step: AgentReplayFillFormStep,\n ctx: V3Context,\n handler: ActHandler,\n llmClient: LLMClient,\n variables?: Record<string, string>,\n ): Promise<AgentReplayFillFormStep> {\n const actions =\n Array.isArray(step.actions) && step.actions.length > 0\n ? step.actions\n : (step.observeResults ?? []);\n if (!Array.isArray(actions) || actions.length === 0) {\n return step;\n }\n const page = await ctx.awaitActivePage();\n const updatedActions: Action[] = [];\n for (const action of actions) {\n await waitForCachedSelector({\n page,\n selector: action.selector,\n timeout: this.domSettleTimeoutMs,\n logger: this.logger,\n context: \"fillForm\",\n });\n const result = await handler.takeDeterministicAction(\n action,\n page,\n this.domSettleTimeoutMs,\n llmClient,\n undefined, // ensureTimeRemaining is not used in this context\n variables,\n );\n if (result.success && Array.isArray(result.actions)) {\n updatedActions.push(...cloneForCache(result.actions));\n } else {\n updatedActions.push(cloneForCache(action));\n }\n }\n if (this.haveActionsChanged(actions, updatedActions)) {\n return { ...step, actions: updatedActions };\n }\n return step;\n }\n\n private async replayAgentGotoStep(\n step: AgentReplayGotoStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n await page.goto(step.url, { waitUntil: step.waitUntil ?? \"load\" });\n }\n\n private async replayAgentScrollStep(\n step: AgentReplayScrollStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n let anchor = step.anchor;\n if (!anchor) {\n anchor = await page\n .mainFrame()\n .evaluate<{ x: number; y: number }>(() => ({\n x: Math.max(0, Math.floor(window.innerWidth / 2)),\n y: Math.max(0, Math.floor(window.innerHeight / 2)),\n }));\n }\n const deltaX = step.deltaX ?? 0;\n const deltaY = step.deltaY ?? 0;\n await page.scroll(\n Math.round(anchor.x ?? 0),\n Math.round(anchor.y ?? 0),\n deltaX,\n deltaY,\n );\n }\n\n private async replayAgentWaitStep(step: AgentReplayWaitStep): Promise<void> {\n if (!step.timeMs || step.timeMs <= 0) return;\n await new Promise((resolve) => setTimeout(resolve, step.timeMs));\n }\n\n private async replayAgentNavBackStep(\n step: AgentReplayNavBackStep,\n ctx: V3Context,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n await page.goBack({ waitUntil: step.waitUntil ?? \"domcontentloaded\" });\n }\n\n private async replayAgentKeysStep(\n step: AgentReplayKeysStep,\n ctx: V3Context,\n variables?: Record<string, string>,\n ): Promise<void> {\n const page = await ctx.awaitActivePage();\n const { method, text, keys, times } = step.playwrightArguments;\n const repeatCount = Math.max(1, times ?? 1);\n\n if (method === \"type\" && text) {\n const resolvedText = substituteVariables(text, variables);\n for (let i = 0; i < repeatCount; i++) {\n await page.type(resolvedText, { delay: 100 });\n }\n } else if (method === \"press\" && keys) {\n for (let i = 0; i < repeatCount; i++) {\n await page.keyPress(keys, { delay: 100 });\n }\n }\n }\n\n private haveActionsChanged(original: Action[], updated: Action[]): boolean {\n if (original.length !== updated.length) {\n return true;\n }\n for (let i = 0; i < original.length; i += 1) {\n const orig = original[i];\n const next = updated[i];\n if (!orig || !next) {\n return true;\n }\n if (orig.selector !== next.selector) {\n return true;\n }\n if ((orig.description ?? \"\") !== (next.description ?? \"\")) {\n return true;\n }\n if ((orig.method ?? \"\") !== (next.method ?? \"\")) {\n return true;\n }\n const origArgs = Array.isArray(orig.arguments) ? orig.arguments : [];\n const nextArgs = Array.isArray(next.arguments) ? next.arguments : [];\n if (origArgs.length !== nextArgs.length) {\n return true;\n }\n for (let j = 0; j < origArgs.length; j += 1) {\n if (origArgs[j] !== nextArgs[j]) {\n return true;\n }\n }\n }\n return false;\n }\n\n private async refreshAgentCacheEntry(\n context: AgentCacheContext,\n entry: CachedAgentEntry,\n updatedSteps: AgentReplayStep[],\n ): Promise<void> {\n const updatedEntry: CachedAgentEntry = {\n ...entry,\n steps: cloneForCache(updatedSteps),\n timestamp: new Date().toISOString(),\n };\n const { error, path } = await this.storage.writeJson(\n `agent-${context.cacheKey}.json`,\n updatedEntry,\n );\n if (error && path) {\n this.logger({\n category: \"cache\",\n message: \"failed to update agent cache entry after self-heal\",\n level: 0,\n auxiliary: {\n error: { value: String(error), type: \"string\" },\n },\n });\n return;\n }\n this.logger({\n category: \"cache\",\n message: \"agent cache entry updated after self-heal\",\n level: 2,\n auxiliary: {\n instruction: { value: context.instruction, type: \"string\" },\n steps: { value: String(updatedSteps.length), type: \"string\" },\n },\n });\n }\n}\n"]}
@@ -67,6 +67,7 @@ class AISdkClient extends LLMClient_js_1.LLMClient {
67
67
  model: this.model,
68
68
  messages: formattedMessages,
69
69
  schema: options.response_model.schema,
70
+ allowSystemInMessages: true,
70
71
  });
71
72
  return {
72
73
  data: response.object,
@@ -90,6 +91,7 @@ class AISdkClient extends LLMClient_js_1.LLMClient {
90
91
  model: this.model,
91
92
  messages: formattedMessages,
92
93
  tools,
94
+ allowSystemInMessages: true,
93
95
  });
94
96
  return {
95
97
  data: response.text,
@@ -1 +1 @@
1
- {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/external_clients/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n Tool,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n TextPart,\n} from \"ai\";\nimport type { LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { CreateChatCompletionOptions, LLMClient } from \"../llm/LLMClient.js\";\nimport { AvailableModel } from \"../types/public/index.js\";\nimport { ChatCompletion } from \"openai/resources\";\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n\n constructor({ model }: { model: LanguageModelV2 }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n const formattedMessages: ModelMessage[] = options.messages.map(\n (message) => {\n if (Array.isArray(message.content)) {\n if (message.role === \"system\") {\n const systemMessage: CoreSystemMessage = {\n role: \"system\",\n content: message.content\n .map((c) => (\"text\" in c ? c.text : \"\"))\n .join(\"\\n\"),\n };\n return systemMessage;\n }\n\n const contentParts = message.content.map((content) => {\n if (\"image_url\" in content) {\n const imageContent: ImagePart = {\n type: \"image\",\n image: content.image_url.url,\n };\n return imageContent;\n } else {\n const textContent: TextPart = {\n type: \"text\",\n text: content.text,\n };\n return textContent;\n }\n });\n\n if (message.role === \"user\") {\n const userMessage: CoreUserMessage = {\n role: \"user\",\n content: contentParts,\n };\n return userMessage;\n } else {\n const textOnlyParts = contentParts.map((part) => ({\n type: \"text\" as const,\n text: part.type === \"image\" ? \"[Image]\" : part.text,\n }));\n const assistantMessage: CoreAssistantMessage = {\n role: \"assistant\",\n content: textOnlyParts,\n };\n return assistantMessage;\n }\n }\n\n return {\n role: message.role,\n content: message.content,\n };\n },\n );\n\n if (options.response_model) {\n const response = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n });\n\n return {\n data: response.object,\n usage: {\n prompt_tokens: response.usage.inputTokens ?? 0,\n completion_tokens: response.usage.outputTokens ?? 0,\n reasoning_tokens: response.usage.reasoningTokens ?? 0,\n cached_input_tokens: response.usage.cachedInputTokens ?? 0,\n total_tokens: response.usage.totalTokens ?? 0,\n },\n } as T;\n }\n\n const tools: Record<string, Tool> = {};\n\n for (const rawTool of options.tools) {\n tools[rawTool.name] = {\n description: rawTool.description,\n inputSchema: rawTool.parameters,\n } as Tool;\n }\n\n const response = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools,\n });\n\n return {\n data: response.text,\n usage: {\n prompt_tokens: response.usage.inputTokens ?? 0,\n completion_tokens: response.usage.outputTokens ?? 0,\n reasoning_tokens: response.usage.reasoningTokens ?? 0,\n cached_input_tokens: response.usage.cachedInputTokens ?? 0,\n total_tokens: response.usage.totalTokens ?? 0,\n },\n } as T;\n }\n}\n"]}
1
+ {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/external_clients/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n Tool,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n TextPart,\n} from \"ai\";\nimport type { LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { CreateChatCompletionOptions, LLMClient } from \"../llm/LLMClient.js\";\nimport { AvailableModel } from \"../types/public/index.js\";\nimport { ChatCompletion } from \"openai/resources\";\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n\n constructor({ model }: { model: LanguageModelV2 }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n const formattedMessages: ModelMessage[] = options.messages.map(\n (message) => {\n if (Array.isArray(message.content)) {\n if (message.role === \"system\") {\n const systemMessage: CoreSystemMessage = {\n role: \"system\",\n content: message.content\n .map((c) => (\"text\" in c ? c.text : \"\"))\n .join(\"\\n\"),\n };\n return systemMessage;\n }\n\n const contentParts = message.content.map((content) => {\n if (\"image_url\" in content) {\n const imageContent: ImagePart = {\n type: \"image\",\n image: content.image_url.url,\n };\n return imageContent;\n } else {\n const textContent: TextPart = {\n type: \"text\",\n text: content.text,\n };\n return textContent;\n }\n });\n\n if (message.role === \"user\") {\n const userMessage: CoreUserMessage = {\n role: \"user\",\n content: contentParts,\n };\n return userMessage;\n } else {\n const textOnlyParts = contentParts.map((part) => ({\n type: \"text\" as const,\n text: part.type === \"image\" ? \"[Image]\" : part.text,\n }));\n const assistantMessage: CoreAssistantMessage = {\n role: \"assistant\",\n content: textOnlyParts,\n };\n return assistantMessage;\n }\n }\n\n return {\n role: message.role,\n content: message.content,\n };\n },\n );\n\n if (options.response_model) {\n const response = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n allowSystemInMessages: true,\n });\n\n return {\n data: response.object,\n usage: {\n prompt_tokens: response.usage.inputTokens ?? 0,\n completion_tokens: response.usage.outputTokens ?? 0,\n reasoning_tokens: response.usage.reasoningTokens ?? 0,\n cached_input_tokens: response.usage.cachedInputTokens ?? 0,\n total_tokens: response.usage.totalTokens ?? 0,\n },\n } as T;\n }\n\n const tools: Record<string, Tool> = {};\n\n for (const rawTool of options.tools) {\n tools[rawTool.name] = {\n description: rawTool.description,\n inputSchema: rawTool.parameters,\n } as Tool;\n }\n\n const response = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools,\n allowSystemInMessages: true,\n });\n\n return {\n data: response.text,\n usage: {\n prompt_tokens: response.usage.inputTokens ?? 0,\n completion_tokens: response.usage.outputTokens ?? 0,\n reasoning_tokens: response.usage.reasoningTokens ?? 0,\n cached_input_tokens: response.usage.cachedInputTokens ?? 0,\n total_tokens: response.usage.totalTokens ?? 0,\n },\n } as T;\n }\n}\n"]}
@@ -7,6 +7,7 @@ const ai_1 = require("ai");
7
7
  const messageProcessing_js_1 = require("../agent/utils/messageProcessing.js");
8
8
  const FlowLogger_js_1 = require("../flowlogger/FlowLogger.js");
9
9
  const anthropicOptions_js_1 = require("../llm/anthropicOptions.js");
10
+ const providerOptions_js_1 = require("../llm/providerOptions.js");
10
11
  const agent_js_1 = require("../types/private/agent.js");
11
12
  const methods_js_1 = require("../types/public/methods.js");
12
13
  const actionMapping_js_1 = require("../agent/utils/actionMapping.js");
@@ -45,14 +46,14 @@ function prependSystemMessage(systemPrompt, messages) {
45
46
  * Anthropic at all. Fable 5 additionally opts into the API's server-side
46
47
  * refusal fallback.
47
48
  */
48
- function buildAgentProviderOptions(modelId, thinkingEffort) {
49
+ function buildAgentProviderOptions(modelId, provider, thinkingEffort) {
49
50
  const anthropic = {
50
51
  ...((0, anthropicOptions_js_1.anthropicAdaptiveThinkingOptions)(modelId, thinkingEffort) ?? {}),
51
52
  ...((0, anthropicOptions_js_1.anthropicFallbacksOptions)(modelId) ?? {}),
52
53
  };
53
54
  return {
54
55
  google: { mediaResolution: "MEDIA_RESOLUTION_HIGH" },
55
- openai: { store: false },
56
+ ...(0, providerOptions_js_1.openAIStoreProviderOptions)(provider),
56
57
  ...(Object.keys(anthropic).length > 0 ? { anthropic } : {}),
57
58
  };
58
59
  }
@@ -327,7 +328,7 @@ class V3AgentHandler {
327
328
  },
328
329
  }),
329
330
  abortSignal: preparedOptions.signal,
330
- providerOptions: buildAgentProviderOptions(wrappedModel.modelId, this.thinkingEffort),
331
+ providerOptions: buildAgentProviderOptions(wrappedModel.modelId, wrappedModel.provider, this.thinkingEffort),
331
332
  });
332
333
  const allMessages = [...messages, ...(result.response?.messages || [])];
333
334
  const doneResult = await this.ensureDone(state, wrappedModel, allMessages, preparedOptions.instruction, preparedOptions.output, this.logger);
@@ -469,7 +470,7 @@ class V3AgentHandler {
469
470
  rejectResult(new sdkErrors_js_1.AgentAbortError(reason));
470
471
  },
471
472
  abortSignal: options.signal,
472
- providerOptions: buildAgentProviderOptions(wrappedModel.modelId, this.thinkingEffort),
473
+ providerOptions: buildAgentProviderOptions(wrappedModel.modelId, wrappedModel.provider, this.thinkingEffort),
473
474
  });
474
475
  }
475
476
  catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"v3AgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3AgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { createAgentTools } from \"../agent/tools/index.js\";\nimport { buildAgentSystemPrompt } from \"../agent/prompts/agentSystemPrompt.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { V3 } from \"../v3.js\";\nimport {\n ModelMessage,\n ToolSet,\n wrapLanguageModel,\n stepCountIs,\n LanguageModel,\n type LanguageModelUsage,\n type StepResult,\n type GenerateTextOnStepFinishCallback,\n type StreamTextOnStepFinishCallback,\n type PrepareStepFunction,\n} from \"ai\";\nimport { StagehandZodObject } from \"../zodCompat.js\";\nimport { processMessages } from \"../agent/utils/messageProcessing.js\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport {\n anthropicAdaptiveThinkingOptions,\n anthropicFallbacksOptions,\n} from \"../llm/anthropicOptions.js\";\nimport {\n AgentExecuteOptions,\n AgentStreamExecuteOptions,\n AgentExecuteOptionsBase,\n AgentResult,\n AgentContext,\n AgentState,\n AgentStreamResult,\n AgentStreamCallbacks,\n AgentToolMode,\n AgentModelConfig,\n Variables,\n} from \"../types/public/agent.js\";\nimport type { AgentEvidenceCallback } from \"../types/public/agentEvidenceEvents.js\";\nimport { HYBRID_CAPABLE_MODEL_PATTERNS } from \"../types/private/agent.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { mapToolResultToActions } from \"../agent/utils/actionMapping.js\";\nimport {\n MissingLLMConfigurationError,\n MissingEnvironmentVariableError,\n StreamingCallbacksInNonStreamingModeError,\n AgentAbortError,\n} from \"../types/public/sdkErrors.js\";\nimport { handleDoneToolCall } from \"../agent/utils/handleDoneToolCall.js\";\nimport {\n captureProbeEvidence,\n emitPostStepProbeEvidence,\n} from \"../agent/utils/postStepProbeEvidence.js\";\nimport { wrapEvidenceCallback } from \"../agent/utils/wrapEvidenceCallback.js\";\nimport { inferToolOutput } from \"../agent/utils/toolOutputEvidence.js\";\nimport {\n CaptchaSolver,\n CAPTCHA_SOLVED_MSG,\n CAPTCHA_ERRORED_MSG,\n} from \"../agent/utils/captchaSolver.js\";\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\ntype FinalAnswerDraft = {\n message: string;\n output?: Record<string, unknown>;\n};\n\ninterface StepHandlerOptions {\n userCallback?:\n | GenerateTextOnStepFinishCallback<ToolSet>\n | StreamTextOnStepFinishCallback<ToolSet>;\n evidenceCallback?: AgentEvidenceCallback;\n onFinalAnswer?: (answer: FinalAnswerDraft) => void;\n}\n\n/**\n * Prepends a system message with cache control to the messages array.\n * The cache control providerOptions are used by Anthropic and ignored by other providers.\n */\nfunction prependSystemMessage(\n systemPrompt: string,\n messages: ModelMessage[],\n): ModelMessage[] {\n return [\n {\n role: \"system\",\n content: systemPrompt,\n providerOptions: {\n anthropic: {\n cacheControl: { type: \"ephemeral\" },\n },\n },\n },\n ...messages,\n ];\n}\n\n/**\n * Request-level providerOptions for the hybrid/DOM agent loop.\n *\n * Anthropic models that support adaptive thinking (Claude 4.6+) get it\n * enabled here — previously the hybrid path sent no thinking config for\n * Anthropic at all. Fable 5 additionally opts into the API's server-side\n * refusal fallback.\n */\nfunction buildAgentProviderOptions(modelId: string, thinkingEffort?: string) {\n const anthropic = {\n ...(anthropicAdaptiveThinkingOptions(modelId, thinkingEffort) ?? {}),\n ...(anthropicFallbacksOptions(modelId) ?? {}),\n };\n return {\n google: { mediaResolution: \"MEDIA_RESOLUTION_HIGH\" },\n openai: { store: false },\n ...(Object.keys(anthropic).length > 0 ? { anthropic } : {}),\n };\n}\n\nexport class V3AgentHandler {\n private v3: V3;\n private logger: (message: LogLine) => void;\n private llmClient: LLMClient;\n private executionModel?: string | AgentModelConfig;\n private systemInstructions?: string;\n private mcpTools?: ToolSet;\n private mode: AgentToolMode;\n private captchaAutoSolveEnabled: boolean;\n private thinkingEffort?: string;\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n llmClient: LLMClient,\n executionModel?: string | AgentModelConfig,\n systemInstructions?: string,\n mcpTools?: ToolSet,\n mode?: AgentToolMode,\n captchaAutoSolveEnabled?: boolean,\n thinkingEffort?: string,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.llmClient = llmClient;\n this.executionModel = executionModel;\n this.systemInstructions = systemInstructions;\n this.mcpTools = mcpTools;\n this.mode = mode ?? \"dom\";\n this.captchaAutoSolveEnabled = captchaAutoSolveEnabled ?? false;\n this.thinkingEffort = thinkingEffort;\n }\n\n private async prepareAgent(\n instructionOrOptions: string | AgentExecuteOptionsBase,\n ): Promise<AgentContext> {\n try {\n const options =\n typeof instructionOrOptions === \"string\"\n ? { instruction: instructionOrOptions }\n : instructionOrOptions;\n\n const maxSteps = options.maxSteps || 20;\n\n // Get the initial page URL first (needed for the system prompt)\n const initialPageUrl = (await this.v3.context.awaitActivePage()).url();\n\n // Build the system prompt with mode-aware tool guidance\n const systemPrompt = buildAgentSystemPrompt({\n url: initialPageUrl,\n executionInstruction: options.instruction,\n mode: this.mode,\n systemInstructions: this.systemInstructions,\n captchasAutoSolve: this.v3.isCaptchaAutoSolveEnabled,\n excludeTools: options.excludeTools,\n variables: options.variables,\n useSearch: options.useSearch,\n });\n\n if (options.useSearch) {\n const bbApiKey = this.v3.browserbaseApiKey;\n if (!bbApiKey) {\n throw new MissingEnvironmentVariableError(\n \"BROWSERBASE_API_KEY\",\n \"agent search (useSearch: true)\",\n );\n }\n }\n\n const tools = this.createTools(\n options.excludeTools,\n options.variables,\n options.toolTimeout,\n options.useSearch,\n );\n const allTools: ToolSet = { ...tools, ...this.mcpTools };\n\n // Use provided messages for continuation, or start fresh with the instruction\n const messages: ModelMessage[] = options.messages?.length\n ? [...options.messages, { role: \"user\", content: options.instruction }]\n : [{ role: \"user\", content: options.instruction }];\n\n if (!this.llmClient?.getLanguageModel) {\n throw new MissingLLMConfigurationError();\n }\n const baseModel = this.llmClient.getLanguageModel();\n //to do - we likely do not need middleware anymore\n const wrappedModel = wrapLanguageModel({\n model: baseModel,\n middleware: {\n ...FlowLogger.createLlmLoggingMiddleware(baseModel.modelId),\n },\n });\n\n const isHybridCapable = HYBRID_CAPABLE_MODEL_PATTERNS.some((pattern) =>\n baseModel.modelId.includes(pattern),\n );\n if (this.mode === \"hybrid\" && !isHybridCapable) {\n this.logger({\n category: \"agent\",\n message: `Warning: \"${baseModel.modelId}\" may not perform well in hybrid mode. See recommended models: https://docs.stagehand.dev/v3/basics/agent#hybrid-mode`,\n level: 0,\n });\n }\n\n return {\n options,\n maxSteps,\n systemPrompt,\n allTools,\n messages,\n wrappedModel,\n initialPageUrl,\n };\n } catch (error) {\n this.logger({\n category: \"agent\",\n message: `failed to prepare agent: ${error}`,\n level: 0,\n });\n throw error;\n }\n }\n private createPrepareStep(\n userCallback?: PrepareStepFunction<ToolSet>,\n captchaSolver?: CaptchaSolver,\n ): PrepareStepFunction<ToolSet> {\n return async (options) => {\n processMessages(options.messages);\n if (captchaSolver) {\n if (captchaSolver.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await captchaSolver.waitIfSolving();\n const { solved, errored } = captchaSolver.consumeSolveResult();\n if (solved) {\n options.messages.push({\n role: \"user\",\n content: CAPTCHA_SOLVED_MSG,\n });\n this.logger({\n category: \"agent\",\n message:\n \"Captcha solved — injected notification into agent message stream\",\n level: 1,\n });\n }\n if (errored) {\n options.messages.push({\n role: \"user\",\n content: CAPTCHA_ERRORED_MSG,\n });\n this.logger({\n category: \"agent\",\n message:\n \"Captcha solver failed — injected error notification into agent message stream\",\n level: 1,\n });\n }\n }\n if (userCallback) {\n return userCallback(options);\n }\n return options;\n };\n }\n\n private createStepHandler(\n state: AgentState,\n { userCallback, evidenceCallback, onFinalAnswer }: StepHandlerOptions,\n ) {\n return async (event: StepResult<ToolSet>) => {\n this.logger({\n category: \"agent\",\n message: `Step finished: ${event.finishReason}`,\n level: 2,\n });\n\n let lastFinalAnswer: FinalAnswerDraft | undefined;\n\n if (event.toolCalls && event.toolCalls.length > 0) {\n for (let i = 0; i < event.toolCalls.length; i++) {\n const toolCall = event.toolCalls[i];\n const args = toolCall.input;\n const toolResult = event.toolResults?.[i];\n\n if (event.text && event.text.length > 0) {\n state.collectedReasoning.push(event.text);\n this.logger({\n category: \"agent\",\n message: `reasoning: ${event.text}`,\n level: 1,\n });\n }\n\n if (toolCall.toolName === \"done\") {\n state.completed = true;\n if (args?.taskComplete) {\n const doneReasoning = args.reasoning;\n const allReasoning = state.collectedReasoning.join(\" \");\n state.finalMessage = doneReasoning\n ? `${allReasoning} ${doneReasoning}`.trim()\n : allReasoning || \"Task completed successfully\";\n }\n lastFinalAnswer = {\n message: state.finalMessage,\n output:\n typeof args?.output === \"object\" && args?.output !== null\n ? (args.output as Record<string, unknown>)\n : undefined,\n };\n }\n const mappedActions = mapToolResultToActions({\n toolCallName: toolCall.toolName,\n toolResult,\n args,\n reasoning: event.text || undefined,\n });\n\n for (const action of mappedActions) {\n action.pageUrl = state.currentPageUrl;\n action.timestamp = Date.now();\n state.actions.push(action);\n }\n\n await evidenceCallback?.({\n type: \"step_finished\",\n actionName: toolCall.toolName,\n actionArgs:\n typeof args === \"object\" && args !== null\n ? (args as Record<string, unknown>)\n : {},\n reasoning: event.text ?? \"\",\n toolOutput: inferToolOutput(toolResult),\n });\n }\n state.currentPageUrl = (await this.v3.context.awaitActivePage()).url();\n\n // Harness probe — one screenshot / a11y snapshot per AI SDK step.\n // The recorder applies the probe to every step_finished received\n // since the previous probe, so a multi-tool turn shares the same\n // post-turn observation.\n await emitPostStepProbeEvidence({\n v3: this.v3,\n url: state.currentPageUrl,\n evidenceCallback,\n logger: this.logger,\n warningMessage: \"Warning: harness probe failed\",\n });\n }\n\n if (lastFinalAnswer) {\n onFinalAnswer?.(lastFinalAnswer);\n }\n\n if (userCallback) {\n await userCallback(event);\n }\n };\n }\n\n public async execute(\n instructionOrOptions: string | AgentExecuteOptions,\n ): Promise<AgentResult> {\n const startTime = Date.now();\n const options =\n typeof instructionOrOptions === \"object\" ? instructionOrOptions : null;\n const signal = options?.signal;\n\n // Highlight cursor defaults to true for hybrid mode, can be overridden\n const shouldHighlightCursor =\n options?.highlightCursor ?? this.mode === \"hybrid\";\n\n const state: AgentState = {\n collectedReasoning: [],\n actions: [],\n finalMessage: \"\",\n completed: false,\n currentPageUrl: \"\",\n };\n let finalAnswerFromDoneTool: FinalAnswerDraft | undefined;\n\n let messages: ModelMessage[] = [];\n let captchaSolver: CaptchaSolver | undefined;\n\n try {\n const {\n options: preparedOptions,\n maxSteps,\n systemPrompt,\n allTools,\n messages: preparedMessages,\n wrappedModel,\n initialPageUrl,\n } = await this.prepareAgent(instructionOrOptions);\n\n // Enable cursor overlay for hybrid mode (coordinate-based interactions)\n if (shouldHighlightCursor && this.mode === \"hybrid\") {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay().catch(() => {});\n }\n\n // Set up captcha solver for Browserbase environments\n if (this.captchaAutoSolveEnabled) {\n captchaSolver = new CaptchaSolver();\n captchaSolver.init(() => this.v3.context.awaitActivePage());\n }\n\n messages = preparedMessages;\n state.currentPageUrl = initialPageUrl;\n\n const callbacks = (instructionOrOptions as AgentExecuteOptions).callbacks;\n\n if (callbacks) {\n const streamingOnlyCallbacks = [\n \"onChunk\",\n \"onFinish\",\n \"onError\",\n \"onAbort\",\n ];\n const invalidCallbacks = streamingOnlyCallbacks.filter(\n (name) => callbacks[name as keyof typeof callbacks] != null,\n );\n if (invalidCallbacks.length > 0) {\n throw new StreamingCallbacksInNonStreamingModeError(invalidCallbacks);\n }\n }\n\n const evidenceCallback = wrapEvidenceCallback(\n callbacks?.onEvidence,\n this.logger,\n );\n\n const result = await this.llmClient.generateText({\n model: wrappedModel,\n messages: prependSystemMessage(systemPrompt, messages),\n allowSystemInMessages: true,\n tools: allTools,\n stopWhen: (result) => this.handleStop(result, maxSteps),\n toolChoice: \"auto\",\n\n prepareStep: this.createPrepareStep(\n callbacks?.prepareStep,\n captchaSolver,\n ),\n onStepFinish: this.createStepHandler(state, {\n userCallback: callbacks?.onStepFinish,\n evidenceCallback,\n onFinalAnswer: (answer) => {\n finalAnswerFromDoneTool = answer;\n },\n }),\n abortSignal: preparedOptions.signal,\n providerOptions: buildAgentProviderOptions(\n wrappedModel.modelId,\n this.thinkingEffort,\n ),\n });\n\n const allMessages = [...messages, ...(result.response?.messages || [])];\n const doneResult = await this.ensureDone(\n state,\n wrappedModel,\n allMessages,\n preparedOptions.instruction,\n preparedOptions.output,\n this.logger,\n );\n const output = doneResult.output ?? finalAnswerFromDoneTool?.output;\n await this.emitFinalEvidence(\n state,\n {\n message: state.finalMessage,\n output,\n },\n evidenceCallback,\n );\n\n return this.consolidateMetricsAndResult(\n startTime,\n state,\n doneResult.messages,\n result,\n maxSteps,\n output,\n );\n } catch (error) {\n // Re-throw validation errors that should propagate to the caller\n if (\n error instanceof StreamingCallbacksInNonStreamingModeError ||\n error instanceof MissingEnvironmentVariableError\n ) {\n throw error;\n }\n\n // Re-throw abort errors wrapped in AgentAbortError for consistent error typing\n if (signal?.aborted) {\n const reason = signal.reason ? String(signal.reason) : \"aborted\";\n throw new AgentAbortError(reason);\n }\n\n const errorMessage = getErrorMessage(error);\n this.logger({\n category: \"agent\",\n message: `Error executing agent task: ${errorMessage}`,\n level: 0,\n });\n\n // For non-abort errors, return a failure result instead of throwing\n return {\n success: false,\n actions: state.actions,\n message: `Failed to execute task: ${errorMessage}`,\n completed: false,\n messages,\n };\n } finally {\n captchaSolver?.dispose();\n }\n }\n\n public async stream(\n instructionOrOptions: string | AgentStreamExecuteOptions,\n ): Promise<AgentStreamResult> {\n const streamOptions =\n typeof instructionOrOptions === \"object\" ? instructionOrOptions : null;\n\n // Highlight cursor defaults to true for hybrid mode, can be overridden\n const shouldHighlightCursor =\n streamOptions?.highlightCursor ?? this.mode === \"hybrid\";\n let finalAnswerFromDoneTool: FinalAnswerDraft | undefined;\n\n const {\n options,\n maxSteps,\n systemPrompt,\n allTools,\n messages,\n wrappedModel,\n initialPageUrl,\n } = await this.prepareAgent(instructionOrOptions);\n\n // Enable cursor overlay for hybrid mode (coordinate-based interactions)\n if (shouldHighlightCursor && this.mode === \"hybrid\") {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay().catch(() => {});\n }\n\n // Set up captcha solver for Browserbase environments\n let captchaSolver: CaptchaSolver | undefined;\n if (this.captchaAutoSolveEnabled) {\n captchaSolver = new CaptchaSolver();\n captchaSolver.init(() => this.v3.context.awaitActivePage());\n }\n\n const callbacks = (instructionOrOptions as AgentStreamExecuteOptions)\n .callbacks as AgentStreamCallbacks | undefined;\n\n const state: AgentState = {\n collectedReasoning: [],\n actions: [],\n finalMessage: \"\",\n completed: false,\n currentPageUrl: initialPageUrl,\n };\n const startTime = Date.now();\n\n let resolveResult: (value: AgentResult | PromiseLike<AgentResult>) => void;\n let rejectResult: (reason: unknown) => void;\n const resultPromise = new Promise<AgentResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const handleError = (error: unknown) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Error during streaming: ${errorMessage}`,\n level: 0,\n });\n rejectResult(error);\n };\n\n const evidenceCallback = wrapEvidenceCallback(\n callbacks?.onEvidence,\n this.logger,\n );\n\n let streamResult: ReturnType<typeof this.llmClient.streamText>;\n try {\n streamResult = this.llmClient.streamText({\n model: wrappedModel,\n messages: prependSystemMessage(systemPrompt, messages),\n allowSystemInMessages: true,\n tools: allTools,\n stopWhen: (result) => this.handleStop(result, maxSteps),\n toolChoice: \"auto\",\n prepareStep: this.createPrepareStep(\n callbacks?.prepareStep,\n captchaSolver,\n ),\n onStepFinish: this.createStepHandler(state, {\n userCallback: callbacks?.onStepFinish,\n evidenceCallback,\n onFinalAnswer: (answer) => {\n finalAnswerFromDoneTool = answer;\n },\n }),\n onError: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onError) {\n callbacks.onError(event);\n }\n handleError(event.error);\n },\n onChunk: callbacks?.onChunk,\n onFinish: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onFinish) {\n callbacks.onFinish(event);\n }\n\n const allMessages = [\n ...messages,\n ...(event.response?.messages || []),\n ];\n this.ensureDone(\n state,\n wrappedModel,\n allMessages,\n options.instruction,\n options.output,\n this.logger,\n )\n .then(async (doneResult) => {\n const output =\n doneResult.output ?? finalAnswerFromDoneTool?.output;\n await this.emitFinalEvidence(\n state,\n {\n message: state.finalMessage,\n output,\n },\n evidenceCallback,\n );\n const result = this.consolidateMetricsAndResult(\n startTime,\n state,\n doneResult.messages,\n event,\n maxSteps,\n output,\n );\n resolveResult(result);\n })\n .catch(handleError);\n },\n onAbort: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onAbort) {\n callbacks.onAbort(event);\n }\n // Reject the result promise with AgentAbortError when stream is aborted\n const reason = options.signal?.reason\n ? String(options.signal.reason)\n : \"Stream was aborted\";\n rejectResult(new AgentAbortError(reason));\n },\n abortSignal: options.signal,\n providerOptions: buildAgentProviderOptions(\n wrappedModel.modelId,\n this.thinkingEffort,\n ),\n });\n } catch (error) {\n captchaSolver?.dispose();\n throw error;\n }\n\n const agentStreamResult = streamResult as AgentStreamResult;\n agentStreamResult.result = resultPromise;\n return agentStreamResult;\n }\n\n private async emitFinalEvidence(\n state: AgentState,\n finalAnswer: { message: string; output?: Record<string, unknown> },\n evidenceCallback?: AgentEvidenceCallback,\n ): Promise<void> {\n if (!evidenceCallback) return;\n\n const observation = await captureProbeEvidence({\n v3: this.v3,\n url: state.currentPageUrl,\n logger: this.logger,\n warningMessage: \"Warning: final harness probe failed\",\n });\n await evidenceCallback({\n type: \"final_answer\",\n ...finalAnswer,\n observation,\n });\n }\n\n private consolidateMetricsAndResult(\n startTime: number,\n state: AgentState,\n inputMessages: ModelMessage[],\n result: {\n text?: string;\n totalUsage?: LanguageModelUsage;\n response?: { messages?: ModelMessage[] };\n steps?: StepResult<ToolSet>[];\n },\n maxSteps?: number,\n output?: Record<string, unknown>,\n ): AgentResult {\n if (!state.finalMessage) {\n const allReasoning = state.collectedReasoning.join(\" \").trim();\n\n if (!state.completed && maxSteps && result.steps?.length >= maxSteps) {\n this.logger({\n category: \"agent\",\n message: `Agent stopped: reached maximum steps (${maxSteps})`,\n level: 1,\n });\n state.finalMessage = `Agent stopped: reached maximum steps (${maxSteps})`;\n } else {\n state.finalMessage = allReasoning || result.text || \"\";\n }\n }\n\n const endTime = Date.now();\n const inferenceTimeMs = endTime - startTime;\n if (result.totalUsage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.totalUsage.inputTokens || 0,\n result.totalUsage.outputTokens || 0,\n result.totalUsage.reasoningTokens || 0,\n result.totalUsage.cachedInputTokens || 0,\n inferenceTimeMs,\n );\n }\n\n return {\n success: state.completed,\n message: state.finalMessage || \"Task execution completed\",\n actions: state.actions,\n completed: state.completed,\n output,\n usage: result.totalUsage\n ? {\n input_tokens: result.totalUsage.inputTokens || 0,\n output_tokens: result.totalUsage.outputTokens || 0,\n reasoning_tokens: result.totalUsage.reasoningTokens || 0,\n cached_input_tokens: result.totalUsage.cachedInputTokens || 0,\n inference_time_ms: inferenceTimeMs,\n }\n : undefined,\n messages: inputMessages,\n };\n }\n\n private createTools(\n excludeTools?: string[],\n variables?: Variables,\n toolTimeout?: number,\n useSearch?: boolean,\n ) {\n const provider = this.llmClient?.getLanguageModel?.()?.provider;\n return createAgentTools(this.v3, {\n executionModel: this.executionModel,\n logger: this.logger,\n mode: this.mode,\n provider,\n excludeTools,\n variables,\n toolTimeout,\n useSearch,\n browserbaseApiKey: useSearch ? this.v3.browserbaseApiKey : undefined,\n });\n }\n\n private handleStop(\n result: Parameters<ReturnType<typeof stepCountIs>>[0],\n maxSteps: number,\n ): boolean | PromiseLike<boolean> {\n const lastStep = result.steps[result.steps.length - 1];\n if (lastStep?.toolCalls?.some((tc) => tc.toolName === \"done\")) {\n return true;\n }\n return stepCountIs(maxSteps)(result);\n }\n\n /**\n * Ensures the done tool is called at the end of agent execution.\n * Returns the messages and any extracted output from the done call.\n */\n private async ensureDone(\n state: AgentState,\n model: LanguageModel,\n messages: ModelMessage[],\n instruction: string,\n outputSchema?: StagehandZodObject,\n logger?: (message: LogLine) => void,\n ): Promise<{ messages: ModelMessage[]; output?: Record<string, unknown> }> {\n if (state.completed) return { messages };\n\n let doneResult: Awaited<ReturnType<typeof handleDoneToolCall>>;\n try {\n doneResult = await handleDoneToolCall({\n model,\n inputMessages: messages,\n instruction,\n outputSchema,\n logger,\n });\n } catch (error) {\n // The forced \"done\" call only summarizes the run, so its failure must not\n // fail a run whose work already completed (e.g. a provider rejecting the\n // re-submitted history). Warn and synthesize a completion. We log only the\n // message, not the cause — the cause embeds the full history (base64\n // images included) and would bloat the log.\n logger?.({\n category: \"agent\",\n level: 1,\n message: `Agent \"done\" finalization call failed; using run summary instead: ${getErrorMessage(error)}`,\n });\n state.completed = true;\n state.finalMessage =\n state.finalMessage ||\n state.collectedReasoning.join(\" \").trim() ||\n \"Task execution completed\";\n return { messages };\n }\n\n state.completed = doneResult.taskComplete;\n state.finalMessage = doneResult.reasoning;\n\n const doneAction = mapToolResultToActions({\n toolCallName: \"done\",\n toolResult: {\n success: true,\n reasoning: doneResult.reasoning,\n taskComplete: doneResult.taskComplete,\n },\n args: {\n reasoning: doneResult.reasoning,\n taskComplete: doneResult.taskComplete,\n },\n reasoning: doneResult.reasoning,\n });\n\n for (const action of doneAction) {\n action.pageUrl = state.currentPageUrl;\n action.timestamp = Date.now();\n state.actions.push(action);\n }\n\n return {\n messages: [...messages, ...doneResult.messages],\n output: doneResult.output,\n };\n }\n}\n"]}
1
+ {"version":3,"file":"v3AgentHandler.js","sourceRoot":"","sources":["../../../../../lib/v3/handlers/v3AgentHandler.ts"],"names":[],"mappings":"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","sourcesContent":["import { createAgentTools } from \"../agent/tools/index.js\";\nimport { buildAgentSystemPrompt } from \"../agent/prompts/agentSystemPrompt.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { V3 } from \"../v3.js\";\nimport {\n ModelMessage,\n ToolSet,\n wrapLanguageModel,\n stepCountIs,\n LanguageModel,\n type LanguageModelUsage,\n type StepResult,\n type GenerateTextOnStepFinishCallback,\n type StreamTextOnStepFinishCallback,\n type PrepareStepFunction,\n} from \"ai\";\nimport { StagehandZodObject } from \"../zodCompat.js\";\nimport { processMessages } from \"../agent/utils/messageProcessing.js\";\nimport { LLMClient } from \"../llm/LLMClient.js\";\nimport { FlowLogger } from \"../flowlogger/FlowLogger.js\";\nimport {\n anthropicAdaptiveThinkingOptions,\n anthropicFallbacksOptions,\n} from \"../llm/anthropicOptions.js\";\nimport { openAIStoreProviderOptions } from \"../llm/providerOptions.js\";\nimport {\n AgentExecuteOptions,\n AgentStreamExecuteOptions,\n AgentExecuteOptionsBase,\n AgentResult,\n AgentContext,\n AgentState,\n AgentStreamResult,\n AgentStreamCallbacks,\n AgentToolMode,\n AgentModelConfig,\n Variables,\n} from \"../types/public/agent.js\";\nimport type { AgentEvidenceCallback } from \"../types/public/agentEvidenceEvents.js\";\nimport { HYBRID_CAPABLE_MODEL_PATTERNS } from \"../types/private/agent.js\";\nimport { V3FunctionName } from \"../types/public/methods.js\";\nimport { mapToolResultToActions } from \"../agent/utils/actionMapping.js\";\nimport {\n MissingLLMConfigurationError,\n MissingEnvironmentVariableError,\n StreamingCallbacksInNonStreamingModeError,\n AgentAbortError,\n} from \"../types/public/sdkErrors.js\";\nimport { handleDoneToolCall } from \"../agent/utils/handleDoneToolCall.js\";\nimport {\n captureProbeEvidence,\n emitPostStepProbeEvidence,\n} from \"../agent/utils/postStepProbeEvidence.js\";\nimport { wrapEvidenceCallback } from \"../agent/utils/wrapEvidenceCallback.js\";\nimport { inferToolOutput } from \"../agent/utils/toolOutputEvidence.js\";\nimport {\n CaptchaSolver,\n CAPTCHA_SOLVED_MSG,\n CAPTCHA_ERRORED_MSG,\n} from \"../agent/utils/captchaSolver.js\";\n\nfunction getErrorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n\ntype FinalAnswerDraft = {\n message: string;\n output?: Record<string, unknown>;\n};\n\ninterface StepHandlerOptions {\n userCallback?:\n | GenerateTextOnStepFinishCallback<ToolSet>\n | StreamTextOnStepFinishCallback<ToolSet>;\n evidenceCallback?: AgentEvidenceCallback;\n onFinalAnswer?: (answer: FinalAnswerDraft) => void;\n}\n\n/**\n * Prepends a system message with cache control to the messages array.\n * The cache control providerOptions are used by Anthropic and ignored by other providers.\n */\nfunction prependSystemMessage(\n systemPrompt: string,\n messages: ModelMessage[],\n): ModelMessage[] {\n return [\n {\n role: \"system\",\n content: systemPrompt,\n providerOptions: {\n anthropic: {\n cacheControl: { type: \"ephemeral\" },\n },\n },\n },\n ...messages,\n ];\n}\n\n/**\n * Request-level providerOptions for the hybrid/DOM agent loop.\n *\n * Anthropic models that support adaptive thinking (Claude 4.6+) get it\n * enabled here — previously the hybrid path sent no thinking config for\n * Anthropic at all. Fable 5 additionally opts into the API's server-side\n * refusal fallback.\n */\nfunction buildAgentProviderOptions(\n modelId: string,\n provider: string | undefined,\n thinkingEffort?: string,\n) {\n const anthropic = {\n ...(anthropicAdaptiveThinkingOptions(modelId, thinkingEffort) ?? {}),\n ...(anthropicFallbacksOptions(modelId) ?? {}),\n };\n return {\n google: { mediaResolution: \"MEDIA_RESOLUTION_HIGH\" },\n ...openAIStoreProviderOptions(provider),\n ...(Object.keys(anthropic).length > 0 ? { anthropic } : {}),\n };\n}\n\nexport class V3AgentHandler {\n private v3: V3;\n private logger: (message: LogLine) => void;\n private llmClient: LLMClient;\n private executionModel?: string | AgentModelConfig;\n private systemInstructions?: string;\n private mcpTools?: ToolSet;\n private mode: AgentToolMode;\n private captchaAutoSolveEnabled: boolean;\n private thinkingEffort?: string;\n\n constructor(\n v3: V3,\n logger: (message: LogLine) => void,\n llmClient: LLMClient,\n executionModel?: string | AgentModelConfig,\n systemInstructions?: string,\n mcpTools?: ToolSet,\n mode?: AgentToolMode,\n captchaAutoSolveEnabled?: boolean,\n thinkingEffort?: string,\n ) {\n this.v3 = v3;\n this.logger = logger;\n this.llmClient = llmClient;\n this.executionModel = executionModel;\n this.systemInstructions = systemInstructions;\n this.mcpTools = mcpTools;\n this.mode = mode ?? \"dom\";\n this.captchaAutoSolveEnabled = captchaAutoSolveEnabled ?? false;\n this.thinkingEffort = thinkingEffort;\n }\n\n private async prepareAgent(\n instructionOrOptions: string | AgentExecuteOptionsBase,\n ): Promise<AgentContext> {\n try {\n const options =\n typeof instructionOrOptions === \"string\"\n ? { instruction: instructionOrOptions }\n : instructionOrOptions;\n\n const maxSteps = options.maxSteps || 20;\n\n // Get the initial page URL first (needed for the system prompt)\n const initialPageUrl = (await this.v3.context.awaitActivePage()).url();\n\n // Build the system prompt with mode-aware tool guidance\n const systemPrompt = buildAgentSystemPrompt({\n url: initialPageUrl,\n executionInstruction: options.instruction,\n mode: this.mode,\n systemInstructions: this.systemInstructions,\n captchasAutoSolve: this.v3.isCaptchaAutoSolveEnabled,\n excludeTools: options.excludeTools,\n variables: options.variables,\n useSearch: options.useSearch,\n });\n\n if (options.useSearch) {\n const bbApiKey = this.v3.browserbaseApiKey;\n if (!bbApiKey) {\n throw new MissingEnvironmentVariableError(\n \"BROWSERBASE_API_KEY\",\n \"agent search (useSearch: true)\",\n );\n }\n }\n\n const tools = this.createTools(\n options.excludeTools,\n options.variables,\n options.toolTimeout,\n options.useSearch,\n );\n const allTools: ToolSet = { ...tools, ...this.mcpTools };\n\n // Use provided messages for continuation, or start fresh with the instruction\n const messages: ModelMessage[] = options.messages?.length\n ? [...options.messages, { role: \"user\", content: options.instruction }]\n : [{ role: \"user\", content: options.instruction }];\n\n if (!this.llmClient?.getLanguageModel) {\n throw new MissingLLMConfigurationError();\n }\n const baseModel = this.llmClient.getLanguageModel();\n //to do - we likely do not need middleware anymore\n const wrappedModel = wrapLanguageModel({\n model: baseModel,\n middleware: {\n ...FlowLogger.createLlmLoggingMiddleware(baseModel.modelId),\n },\n });\n\n const isHybridCapable = HYBRID_CAPABLE_MODEL_PATTERNS.some((pattern) =>\n baseModel.modelId.includes(pattern),\n );\n if (this.mode === \"hybrid\" && !isHybridCapable) {\n this.logger({\n category: \"agent\",\n message: `Warning: \"${baseModel.modelId}\" may not perform well in hybrid mode. See recommended models: https://docs.stagehand.dev/v3/basics/agent#hybrid-mode`,\n level: 0,\n });\n }\n\n return {\n options,\n maxSteps,\n systemPrompt,\n allTools,\n messages,\n wrappedModel,\n initialPageUrl,\n };\n } catch (error) {\n this.logger({\n category: \"agent\",\n message: `failed to prepare agent: ${error}`,\n level: 0,\n });\n throw error;\n }\n }\n private createPrepareStep(\n userCallback?: PrepareStepFunction<ToolSet>,\n captchaSolver?: CaptchaSolver,\n ): PrepareStepFunction<ToolSet> {\n return async (options) => {\n processMessages(options.messages);\n if (captchaSolver) {\n if (captchaSolver.isSolving()) {\n this.logger({\n category: \"agent\",\n message:\n \"Captcha detected — waiting for Browserbase to solve it before continuing\",\n level: 1,\n });\n }\n await captchaSolver.waitIfSolving();\n const { solved, errored } = captchaSolver.consumeSolveResult();\n if (solved) {\n options.messages.push({\n role: \"user\",\n content: CAPTCHA_SOLVED_MSG,\n });\n this.logger({\n category: \"agent\",\n message:\n \"Captcha solved — injected notification into agent message stream\",\n level: 1,\n });\n }\n if (errored) {\n options.messages.push({\n role: \"user\",\n content: CAPTCHA_ERRORED_MSG,\n });\n this.logger({\n category: \"agent\",\n message:\n \"Captcha solver failed — injected error notification into agent message stream\",\n level: 1,\n });\n }\n }\n if (userCallback) {\n return userCallback(options);\n }\n return options;\n };\n }\n\n private createStepHandler(\n state: AgentState,\n { userCallback, evidenceCallback, onFinalAnswer }: StepHandlerOptions,\n ) {\n return async (event: StepResult<ToolSet>) => {\n this.logger({\n category: \"agent\",\n message: `Step finished: ${event.finishReason}`,\n level: 2,\n });\n\n let lastFinalAnswer: FinalAnswerDraft | undefined;\n\n if (event.toolCalls && event.toolCalls.length > 0) {\n for (let i = 0; i < event.toolCalls.length; i++) {\n const toolCall = event.toolCalls[i];\n const args = toolCall.input;\n const toolResult = event.toolResults?.[i];\n\n if (event.text && event.text.length > 0) {\n state.collectedReasoning.push(event.text);\n this.logger({\n category: \"agent\",\n message: `reasoning: ${event.text}`,\n level: 1,\n });\n }\n\n if (toolCall.toolName === \"done\") {\n state.completed = true;\n if (args?.taskComplete) {\n const doneReasoning = args.reasoning;\n const allReasoning = state.collectedReasoning.join(\" \");\n state.finalMessage = doneReasoning\n ? `${allReasoning} ${doneReasoning}`.trim()\n : allReasoning || \"Task completed successfully\";\n }\n lastFinalAnswer = {\n message: state.finalMessage,\n output:\n typeof args?.output === \"object\" && args?.output !== null\n ? (args.output as Record<string, unknown>)\n : undefined,\n };\n }\n const mappedActions = mapToolResultToActions({\n toolCallName: toolCall.toolName,\n toolResult,\n args,\n reasoning: event.text || undefined,\n });\n\n for (const action of mappedActions) {\n action.pageUrl = state.currentPageUrl;\n action.timestamp = Date.now();\n state.actions.push(action);\n }\n\n await evidenceCallback?.({\n type: \"step_finished\",\n actionName: toolCall.toolName,\n actionArgs:\n typeof args === \"object\" && args !== null\n ? (args as Record<string, unknown>)\n : {},\n reasoning: event.text ?? \"\",\n toolOutput: inferToolOutput(toolResult),\n });\n }\n state.currentPageUrl = (await this.v3.context.awaitActivePage()).url();\n\n // Harness probe — one screenshot / a11y snapshot per AI SDK step.\n // The recorder applies the probe to every step_finished received\n // since the previous probe, so a multi-tool turn shares the same\n // post-turn observation.\n await emitPostStepProbeEvidence({\n v3: this.v3,\n url: state.currentPageUrl,\n evidenceCallback,\n logger: this.logger,\n warningMessage: \"Warning: harness probe failed\",\n });\n }\n\n if (lastFinalAnswer) {\n onFinalAnswer?.(lastFinalAnswer);\n }\n\n if (userCallback) {\n await userCallback(event);\n }\n };\n }\n\n public async execute(\n instructionOrOptions: string | AgentExecuteOptions,\n ): Promise<AgentResult> {\n const startTime = Date.now();\n const options =\n typeof instructionOrOptions === \"object\" ? instructionOrOptions : null;\n const signal = options?.signal;\n\n // Highlight cursor defaults to true for hybrid mode, can be overridden\n const shouldHighlightCursor =\n options?.highlightCursor ?? this.mode === \"hybrid\";\n\n const state: AgentState = {\n collectedReasoning: [],\n actions: [],\n finalMessage: \"\",\n completed: false,\n currentPageUrl: \"\",\n };\n let finalAnswerFromDoneTool: FinalAnswerDraft | undefined;\n\n let messages: ModelMessage[] = [];\n let captchaSolver: CaptchaSolver | undefined;\n\n try {\n const {\n options: preparedOptions,\n maxSteps,\n systemPrompt,\n allTools,\n messages: preparedMessages,\n wrappedModel,\n initialPageUrl,\n } = await this.prepareAgent(instructionOrOptions);\n\n // Enable cursor overlay for hybrid mode (coordinate-based interactions)\n if (shouldHighlightCursor && this.mode === \"hybrid\") {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay().catch(() => {});\n }\n\n // Set up captcha solver for Browserbase environments\n if (this.captchaAutoSolveEnabled) {\n captchaSolver = new CaptchaSolver();\n captchaSolver.init(() => this.v3.context.awaitActivePage());\n }\n\n messages = preparedMessages;\n state.currentPageUrl = initialPageUrl;\n\n const callbacks = (instructionOrOptions as AgentExecuteOptions).callbacks;\n\n if (callbacks) {\n const streamingOnlyCallbacks = [\n \"onChunk\",\n \"onFinish\",\n \"onError\",\n \"onAbort\",\n ];\n const invalidCallbacks = streamingOnlyCallbacks.filter(\n (name) => callbacks[name as keyof typeof callbacks] != null,\n );\n if (invalidCallbacks.length > 0) {\n throw new StreamingCallbacksInNonStreamingModeError(invalidCallbacks);\n }\n }\n\n const evidenceCallback = wrapEvidenceCallback(\n callbacks?.onEvidence,\n this.logger,\n );\n\n const result = await this.llmClient.generateText({\n model: wrappedModel,\n messages: prependSystemMessage(systemPrompt, messages),\n allowSystemInMessages: true,\n tools: allTools,\n stopWhen: (result) => this.handleStop(result, maxSteps),\n toolChoice: \"auto\",\n\n prepareStep: this.createPrepareStep(\n callbacks?.prepareStep,\n captchaSolver,\n ),\n onStepFinish: this.createStepHandler(state, {\n userCallback: callbacks?.onStepFinish,\n evidenceCallback,\n onFinalAnswer: (answer) => {\n finalAnswerFromDoneTool = answer;\n },\n }),\n abortSignal: preparedOptions.signal,\n providerOptions: buildAgentProviderOptions(\n wrappedModel.modelId,\n wrappedModel.provider,\n this.thinkingEffort,\n ),\n });\n\n const allMessages = [...messages, ...(result.response?.messages || [])];\n const doneResult = await this.ensureDone(\n state,\n wrappedModel,\n allMessages,\n preparedOptions.instruction,\n preparedOptions.output,\n this.logger,\n );\n const output = doneResult.output ?? finalAnswerFromDoneTool?.output;\n await this.emitFinalEvidence(\n state,\n {\n message: state.finalMessage,\n output,\n },\n evidenceCallback,\n );\n\n return this.consolidateMetricsAndResult(\n startTime,\n state,\n doneResult.messages,\n result,\n maxSteps,\n output,\n );\n } catch (error) {\n // Re-throw validation errors that should propagate to the caller\n if (\n error instanceof StreamingCallbacksInNonStreamingModeError ||\n error instanceof MissingEnvironmentVariableError\n ) {\n throw error;\n }\n\n // Re-throw abort errors wrapped in AgentAbortError for consistent error typing\n if (signal?.aborted) {\n const reason = signal.reason ? String(signal.reason) : \"aborted\";\n throw new AgentAbortError(reason);\n }\n\n const errorMessage = getErrorMessage(error);\n this.logger({\n category: \"agent\",\n message: `Error executing agent task: ${errorMessage}`,\n level: 0,\n });\n\n // For non-abort errors, return a failure result instead of throwing\n return {\n success: false,\n actions: state.actions,\n message: `Failed to execute task: ${errorMessage}`,\n completed: false,\n messages,\n };\n } finally {\n captchaSolver?.dispose();\n }\n }\n\n public async stream(\n instructionOrOptions: string | AgentStreamExecuteOptions,\n ): Promise<AgentStreamResult> {\n const streamOptions =\n typeof instructionOrOptions === \"object\" ? instructionOrOptions : null;\n\n // Highlight cursor defaults to true for hybrid mode, can be overridden\n const shouldHighlightCursor =\n streamOptions?.highlightCursor ?? this.mode === \"hybrid\";\n let finalAnswerFromDoneTool: FinalAnswerDraft | undefined;\n\n const {\n options,\n maxSteps,\n systemPrompt,\n allTools,\n messages,\n wrappedModel,\n initialPageUrl,\n } = await this.prepareAgent(instructionOrOptions);\n\n // Enable cursor overlay for hybrid mode (coordinate-based interactions)\n if (shouldHighlightCursor && this.mode === \"hybrid\") {\n const page = await this.v3.context.awaitActivePage();\n await page.enableCursorOverlay().catch(() => {});\n }\n\n // Set up captcha solver for Browserbase environments\n let captchaSolver: CaptchaSolver | undefined;\n if (this.captchaAutoSolveEnabled) {\n captchaSolver = new CaptchaSolver();\n captchaSolver.init(() => this.v3.context.awaitActivePage());\n }\n\n const callbacks = (instructionOrOptions as AgentStreamExecuteOptions)\n .callbacks as AgentStreamCallbacks | undefined;\n\n const state: AgentState = {\n collectedReasoning: [],\n actions: [],\n finalMessage: \"\",\n completed: false,\n currentPageUrl: initialPageUrl,\n };\n const startTime = Date.now();\n\n let resolveResult: (value: AgentResult | PromiseLike<AgentResult>) => void;\n let rejectResult: (reason: unknown) => void;\n const resultPromise = new Promise<AgentResult>((resolve, reject) => {\n resolveResult = resolve;\n rejectResult = reject;\n });\n\n const handleError = (error: unknown) => {\n const errorMessage =\n error instanceof Error ? error.message : String(error);\n this.logger({\n category: \"agent\",\n message: `Error during streaming: ${errorMessage}`,\n level: 0,\n });\n rejectResult(error);\n };\n\n const evidenceCallback = wrapEvidenceCallback(\n callbacks?.onEvidence,\n this.logger,\n );\n\n let streamResult: ReturnType<typeof this.llmClient.streamText>;\n try {\n streamResult = this.llmClient.streamText({\n model: wrappedModel,\n messages: prependSystemMessage(systemPrompt, messages),\n allowSystemInMessages: true,\n tools: allTools,\n stopWhen: (result) => this.handleStop(result, maxSteps),\n toolChoice: \"auto\",\n prepareStep: this.createPrepareStep(\n callbacks?.prepareStep,\n captchaSolver,\n ),\n onStepFinish: this.createStepHandler(state, {\n userCallback: callbacks?.onStepFinish,\n evidenceCallback,\n onFinalAnswer: (answer) => {\n finalAnswerFromDoneTool = answer;\n },\n }),\n onError: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onError) {\n callbacks.onError(event);\n }\n handleError(event.error);\n },\n onChunk: callbacks?.onChunk,\n onFinish: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onFinish) {\n callbacks.onFinish(event);\n }\n\n const allMessages = [\n ...messages,\n ...(event.response?.messages || []),\n ];\n this.ensureDone(\n state,\n wrappedModel,\n allMessages,\n options.instruction,\n options.output,\n this.logger,\n )\n .then(async (doneResult) => {\n const output =\n doneResult.output ?? finalAnswerFromDoneTool?.output;\n await this.emitFinalEvidence(\n state,\n {\n message: state.finalMessage,\n output,\n },\n evidenceCallback,\n );\n const result = this.consolidateMetricsAndResult(\n startTime,\n state,\n doneResult.messages,\n event,\n maxSteps,\n output,\n );\n resolveResult(result);\n })\n .catch(handleError);\n },\n onAbort: (event) => {\n captchaSolver?.dispose();\n if (callbacks?.onAbort) {\n callbacks.onAbort(event);\n }\n // Reject the result promise with AgentAbortError when stream is aborted\n const reason = options.signal?.reason\n ? String(options.signal.reason)\n : \"Stream was aborted\";\n rejectResult(new AgentAbortError(reason));\n },\n abortSignal: options.signal,\n providerOptions: buildAgentProviderOptions(\n wrappedModel.modelId,\n wrappedModel.provider,\n this.thinkingEffort,\n ),\n });\n } catch (error) {\n captchaSolver?.dispose();\n throw error;\n }\n\n const agentStreamResult = streamResult as AgentStreamResult;\n agentStreamResult.result = resultPromise;\n return agentStreamResult;\n }\n\n private async emitFinalEvidence(\n state: AgentState,\n finalAnswer: { message: string; output?: Record<string, unknown> },\n evidenceCallback?: AgentEvidenceCallback,\n ): Promise<void> {\n if (!evidenceCallback) return;\n\n const observation = await captureProbeEvidence({\n v3: this.v3,\n url: state.currentPageUrl,\n logger: this.logger,\n warningMessage: \"Warning: final harness probe failed\",\n });\n await evidenceCallback({\n type: \"final_answer\",\n ...finalAnswer,\n observation,\n });\n }\n\n private consolidateMetricsAndResult(\n startTime: number,\n state: AgentState,\n inputMessages: ModelMessage[],\n result: {\n text?: string;\n totalUsage?: LanguageModelUsage;\n response?: { messages?: ModelMessage[] };\n steps?: StepResult<ToolSet>[];\n },\n maxSteps?: number,\n output?: Record<string, unknown>,\n ): AgentResult {\n if (!state.finalMessage) {\n const allReasoning = state.collectedReasoning.join(\" \").trim();\n\n if (!state.completed && maxSteps && result.steps?.length >= maxSteps) {\n this.logger({\n category: \"agent\",\n message: `Agent stopped: reached maximum steps (${maxSteps})`,\n level: 1,\n });\n state.finalMessage = `Agent stopped: reached maximum steps (${maxSteps})`;\n } else {\n state.finalMessage = allReasoning || result.text || \"\";\n }\n }\n\n const endTime = Date.now();\n const inferenceTimeMs = endTime - startTime;\n if (result.totalUsage) {\n this.v3.updateMetrics(\n V3FunctionName.AGENT,\n result.totalUsage.inputTokens || 0,\n result.totalUsage.outputTokens || 0,\n result.totalUsage.reasoningTokens || 0,\n result.totalUsage.cachedInputTokens || 0,\n inferenceTimeMs,\n );\n }\n\n return {\n success: state.completed,\n message: state.finalMessage || \"Task execution completed\",\n actions: state.actions,\n completed: state.completed,\n output,\n usage: result.totalUsage\n ? {\n input_tokens: result.totalUsage.inputTokens || 0,\n output_tokens: result.totalUsage.outputTokens || 0,\n reasoning_tokens: result.totalUsage.reasoningTokens || 0,\n cached_input_tokens: result.totalUsage.cachedInputTokens || 0,\n inference_time_ms: inferenceTimeMs,\n }\n : undefined,\n messages: inputMessages,\n };\n }\n\n private createTools(\n excludeTools?: string[],\n variables?: Variables,\n toolTimeout?: number,\n useSearch?: boolean,\n ) {\n const provider = this.llmClient?.getLanguageModel?.()?.provider;\n return createAgentTools(this.v3, {\n executionModel: this.executionModel,\n logger: this.logger,\n mode: this.mode,\n provider,\n excludeTools,\n variables,\n toolTimeout,\n useSearch,\n browserbaseApiKey: useSearch ? this.v3.browserbaseApiKey : undefined,\n });\n }\n\n private handleStop(\n result: Parameters<ReturnType<typeof stepCountIs>>[0],\n maxSteps: number,\n ): boolean | PromiseLike<boolean> {\n const lastStep = result.steps[result.steps.length - 1];\n if (lastStep?.toolCalls?.some((tc) => tc.toolName === \"done\")) {\n return true;\n }\n return stepCountIs(maxSteps)(result);\n }\n\n /**\n * Ensures the done tool is called at the end of agent execution.\n * Returns the messages and any extracted output from the done call.\n */\n private async ensureDone(\n state: AgentState,\n model: LanguageModel,\n messages: ModelMessage[],\n instruction: string,\n outputSchema?: StagehandZodObject,\n logger?: (message: LogLine) => void,\n ): Promise<{ messages: ModelMessage[]; output?: Record<string, unknown> }> {\n if (state.completed) return { messages };\n\n let doneResult: Awaited<ReturnType<typeof handleDoneToolCall>>;\n try {\n doneResult = await handleDoneToolCall({\n model,\n inputMessages: messages,\n instruction,\n outputSchema,\n logger,\n });\n } catch (error) {\n // The forced \"done\" call only summarizes the run, so its failure must not\n // fail a run whose work already completed (e.g. a provider rejecting the\n // re-submitted history). Warn and synthesize a completion. We log only the\n // message, not the cause — the cause embeds the full history (base64\n // images included) and would bloat the log.\n logger?.({\n category: \"agent\",\n level: 1,\n message: `Agent \"done\" finalization call failed; using run summary instead: ${getErrorMessage(error)}`,\n });\n state.completed = true;\n state.finalMessage =\n state.finalMessage ||\n state.collectedReasoning.join(\" \").trim() ||\n \"Task execution completed\";\n return { messages };\n }\n\n state.completed = doneResult.taskComplete;\n state.finalMessage = doneResult.reasoning;\n\n const doneAction = mapToolResultToActions({\n toolCallName: \"done\",\n toolResult: {\n success: true,\n reasoning: doneResult.reasoning,\n taskComplete: doneResult.taskComplete,\n },\n args: {\n reasoning: doneResult.reasoning,\n taskComplete: doneResult.taskComplete,\n },\n reasoning: doneResult.reasoning,\n });\n\n for (const action of doneAction) {\n action.pageUrl = state.currentPageUrl;\n action.timestamp = Date.now();\n state.actions.push(action);\n }\n\n return {\n messages: [...messages, ...doneResult.messages],\n output: doneResult.output,\n };\n }\n}\n"]}
@@ -69,7 +69,7 @@ declare const StagehandDefault: {
69
69
  Api: typeof PublicApi.Api;
70
70
  AISdkClient: typeof PublicApi.AISdkClient;
71
71
  CustomOpenAIClient: typeof PublicApi.CustomOpenAIClient;
72
- AVAILABLE_CUA_MODELS: readonly ["openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.5", "openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-opus-4-8", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "anthropic/claude-fable-5", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3.5-flash", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
72
+ AVAILABLE_CUA_MODELS: readonly ["openai/gpt-5.4", "openai/gpt-5.4-mini", "openai/gpt-5.5", "openai/gpt-5.6-terra", "openai/gpt-5.6-luna", "openai/gpt-5.6-sol", "openai/computer-use-preview", "openai/computer-use-preview-2025-03-11", "anthropic/claude-opus-4-5-20251101", "anthropic/claude-opus-4-6", "anthropic/claude-opus-4-8", "anthropic/claude-sonnet-4-6", "anthropic/claude-haiku-4-5", "anthropic/claude-haiku-4-5-20251001", "anthropic/claude-sonnet-4-20250514", "anthropic/claude-sonnet-4-5-20250929", "anthropic/claude-fable-5", "google/gemini-2.5-computer-use-preview-10-2025", "google/gemini-3-flash-preview", "google/gemini-3.5-flash", "google/gemini-3-pro-preview", "microsoft/fara-7b"];
73
73
  StagehandAPIError: typeof PublicApi.StagehandAPIError;
74
74
  StagehandAPIUnauthorizedError: typeof PublicApi.StagehandAPIUnauthorizedError;
75
75
  StagehandHttpError: typeof PublicApi.StagehandHttpError;
@@ -129,11 +129,18 @@ const modelToProviderMap = {
129
129
  "gemini-3.5-flash": "google",
130
130
  };
131
131
  function getAISDKLanguageModel(subProvider, subModelName, clientOptions, middleware) {
132
- const aiSdkClientOptions = toAISDKClientOptions(subProvider, clientOptions);
132
+ const { openaiEndpointFormat, ...providerClientOptions } = clientOptions ?? {};
133
+ const aiSdkClientOptions = toAISDKClientOptions(subProvider, providerClientOptions);
133
134
  const hasValidOptions = aiSdkClientOptions &&
134
135
  Object.values(aiSdkClientOptions).some((v) => v !== undefined && v !== null);
135
136
  let model;
136
- if (hasValidOptions) {
137
+ if (subProvider === "openai" && openaiEndpointFormat === "chat") {
138
+ const provider = hasValidOptions
139
+ ? (0, openai_1.createOpenAI)(aiSdkClientOptions)
140
+ : openai_1.openai;
141
+ model = provider.chat(subModelName);
142
+ }
143
+ else if (hasValidOptions) {
137
144
  const creator = AISDKProvidersWithAPIKey[subProvider];
138
145
  if (!creator) {
139
146
  throw new sdkErrors_js_1.UnsupportedAISDKModelProviderError(subProvider, Object.keys(AISDKProvidersWithAPIKey));