@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":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n LanguageModelV2,\n LanguageModelV2Middleware,\n} from \"@ai-sdk/provider\";\nimport {\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway, wrapLanguageModel } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\ntype AISDKProviderClientOptions = ClientOptions & Record<string, unknown>;\n\nexport function toAISDKClientOptions(\n subProvider: string,\n clientOptions?: ClientOptions,\n): AISDKProviderClientOptions | undefined {\n if (!clientOptions) {\n return clientOptions as AISDKProviderClientOptions | undefined;\n }\n\n const { auth, providerOptions, apiKey, ...rest } = clientOptions;\n const apiKeyOption = !auth && apiKey ? { apiKey } : {};\n\n if (subProvider === \"azure\") {\n const azureOptions = providerOptions?.azure;\n\n return {\n ...rest,\n ...apiKeyOption,\n ...(azureOptions ?? {}),\n ...(auth?.type === \"azureEntraId\"\n ? { tokenProvider: async () => auth.token }\n : {}),\n };\n }\n\n if (subProvider !== \"vertex\") {\n return clientOptions as AISDKProviderClientOptions | undefined;\n }\n\n const vertexOptions = providerOptions?.vertex;\n\n return {\n ...rest,\n ...apiKeyOption,\n ...(vertexOptions ?? {}),\n ...(auth?.type === \"googleServiceAccount\"\n ? {\n googleAuthOptions: {\n credentials: auth.credentials,\n ...(auth.scopes ? { scopes: auth.scopes } : {}),\n ...(auth.projectId ? { projectId: auth.projectId } : {}),\n ...(auth.universeDomain\n ? { universeDomain: auth.universeDomain }\n : {}),\n },\n }\n : {}),\n };\n}\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n \"gemini-3.5-flash\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n middleware?: LanguageModelV2Middleware,\n): LanguageModelV2 {\n const aiSdkClientOptions = toAISDKClientOptions(subProvider, clientOptions);\n const hasValidOptions =\n aiSdkClientOptions &&\n Object.values(aiSdkClientOptions).some(\n (v) => v !== undefined && v !== null,\n );\n\n let model;\n if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(aiSdkClientOptions as ClientOptions);\n model = provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n model = provider(subModelName);\n }\n\n if (middleware) {\n return wrapLanguageModel({ model, middleware });\n }\n return model;\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n private middleware?: LanguageModelV2Middleware;\n\n constructor(\n logger: (message: LogLine) => void,\n middleware?: LanguageModelV2Middleware,\n ) {\n this.logger = logger;\n this.middleware = middleware;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: {\n experimental?: boolean;\n disableAPI?: boolean;\n middleware?: LanguageModelV2Middleware;\n },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n\n const effectiveMiddleware = options?.middleware ?? this.middleware;\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n effectiveMiddleware,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n clientOptions,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
1
+ {"version":3,"file":"LLMProvider.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/LLMProvider.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n LanguageModelV2,\n LanguageModelV2Middleware,\n} from \"@ai-sdk/provider\";\nimport {\n UnsupportedAISDKModelProviderError,\n UnsupportedModelError,\n UnsupportedModelProviderError,\n} from \"../types/public/sdkErrors.js\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport {\n AvailableModel,\n ClientOptions,\n ModelProvider,\n} from \"../types/public/model.js\";\nimport { AISdkClient } from \"./aisdk.js\";\nimport { AnthropicClient } from \"./AnthropicClient.js\";\nimport { CerebrasClient } from \"./CerebrasClient.js\";\nimport { GoogleClient } from \"./GoogleClient.js\";\nimport { GroqClient } from \"./GroqClient.js\";\nimport { LLMClient } from \"./LLMClient.js\";\nimport { OpenAIClient } from \"./OpenAIClient.js\";\nimport { openai, createOpenAI } from \"@ai-sdk/openai\";\nimport { bedrock, createAmazonBedrock } from \"@ai-sdk/amazon-bedrock\";\nimport { vertex, createVertex } from \"@ai-sdk/google-vertex\";\nimport { anthropic, createAnthropic } from \"@ai-sdk/anthropic\";\nimport { google, createGoogleGenerativeAI } from \"@ai-sdk/google\";\nimport { xai, createXai } from \"@ai-sdk/xai\";\nimport { azure, createAzure } from \"@ai-sdk/azure\";\nimport { groq, createGroq } from \"@ai-sdk/groq\";\nimport { cerebras, createCerebras } from \"@ai-sdk/cerebras\";\nimport { togetherai, createTogetherAI } from \"@ai-sdk/togetherai\";\nimport { mistral, createMistral } from \"@ai-sdk/mistral\";\nimport { deepseek, createDeepSeek } from \"@ai-sdk/deepseek\";\nimport { perplexity, createPerplexity } from \"@ai-sdk/perplexity\";\nimport { ollama, createOllama } from \"ollama-ai-provider-v2\";\nimport { gateway, createGateway, wrapLanguageModel } from \"ai\";\nimport { AISDKProvider, AISDKCustomProvider } from \"../types/public/model.js\";\n\nconst AISDKProviders: Record<string, AISDKProvider> = {\n openai,\n bedrock,\n anthropic,\n google,\n xai,\n azure,\n groq,\n cerebras,\n togetherai,\n mistral,\n deepseek,\n perplexity,\n ollama,\n vertex,\n gateway,\n};\nconst AISDKProvidersWithAPIKey: Record<string, AISDKCustomProvider> = {\n openai: createOpenAI,\n bedrock: createAmazonBedrock,\n anthropic: createAnthropic,\n google: createGoogleGenerativeAI,\n vertex: createVertex,\n xai: createXai,\n azure: createAzure,\n groq: createGroq,\n cerebras: createCerebras,\n togetherai: createTogetherAI,\n mistral: createMistral,\n deepseek: createDeepSeek,\n perplexity: createPerplexity,\n ollama: createOllama,\n gateway: createGateway,\n};\n\ntype AISDKProviderClientOptions = ClientOptions & Record<string, unknown>;\n\nexport function toAISDKClientOptions(\n subProvider: string,\n clientOptions?: ClientOptions,\n): AISDKProviderClientOptions | undefined {\n if (!clientOptions) {\n return clientOptions as AISDKProviderClientOptions | undefined;\n }\n\n const { auth, providerOptions, apiKey, ...rest } = clientOptions;\n const apiKeyOption = !auth && apiKey ? { apiKey } : {};\n\n if (subProvider === \"azure\") {\n const azureOptions = providerOptions?.azure;\n\n return {\n ...rest,\n ...apiKeyOption,\n ...(azureOptions ?? {}),\n ...(auth?.type === \"azureEntraId\"\n ? { tokenProvider: async () => auth.token }\n : {}),\n };\n }\n\n if (subProvider !== \"vertex\") {\n return clientOptions as AISDKProviderClientOptions | undefined;\n }\n\n const vertexOptions = providerOptions?.vertex;\n\n return {\n ...rest,\n ...apiKeyOption,\n ...(vertexOptions ?? {}),\n ...(auth?.type === \"googleServiceAccount\"\n ? {\n googleAuthOptions: {\n credentials: auth.credentials,\n ...(auth.scopes ? { scopes: auth.scopes } : {}),\n ...(auth.projectId ? { projectId: auth.projectId } : {}),\n ...(auth.universeDomain\n ? { universeDomain: auth.universeDomain }\n : {}),\n },\n }\n : {}),\n };\n}\n\nconst modelToProviderMap: { [key in AvailableModel]: ModelProvider } = {\n \"gpt-4.1\": \"openai\",\n \"gpt-4.1-mini\": \"openai\",\n \"gpt-4.1-nano\": \"openai\",\n \"o4-mini\": \"openai\",\n //prettier-ignore\n \"o3\": \"openai\",\n \"o3-mini\": \"openai\",\n //prettier-ignore\n \"o1\": \"openai\",\n \"o1-mini\": \"openai\",\n \"gpt-4o\": \"openai\",\n \"gpt-4o-mini\": \"openai\",\n \"gpt-4o-2024-08-06\": \"openai\",\n \"gpt-4.5-preview\": \"openai\",\n \"o1-preview\": \"openai\",\n \"cerebras-llama-3.3-70b\": \"cerebras\",\n \"cerebras-llama-3.1-8b\": \"cerebras\",\n \"groq-llama-3.3-70b-versatile\": \"groq\",\n \"groq-llama-3.3-70b-specdec\": \"groq\",\n \"moonshotai/kimi-k2-instruct\": \"groq\",\n \"gemini-1.5-flash\": \"google\",\n \"gemini-1.5-pro\": \"google\",\n \"gemini-1.5-flash-8b\": \"google\",\n \"gemini-2.0-flash-lite\": \"google\",\n \"gemini-2.0-flash\": \"google\",\n \"gemini-2.5-flash-preview-04-17\": \"google\",\n \"gemini-2.5-pro-preview-03-25\": \"google\",\n \"gemini-3.5-flash\": \"google\",\n};\n\nexport function getAISDKLanguageModel(\n subProvider: string,\n subModelName: string,\n clientOptions?: ClientOptions,\n middleware?: LanguageModelV2Middleware,\n): LanguageModelV2 {\n const { openaiEndpointFormat, ...providerClientOptions } =\n clientOptions ?? {};\n const aiSdkClientOptions = toAISDKClientOptions(\n subProvider,\n providerClientOptions,\n );\n const hasValidOptions =\n aiSdkClientOptions &&\n Object.values(aiSdkClientOptions).some(\n (v) => v !== undefined && v !== null,\n );\n\n let model: LanguageModelV2;\n if (subProvider === \"openai\" && openaiEndpointFormat === \"chat\") {\n const provider = hasValidOptions\n ? createOpenAI(aiSdkClientOptions)\n : openai;\n model = provider.chat(subModelName);\n } else if (hasValidOptions) {\n const creator = AISDKProvidersWithAPIKey[subProvider];\n if (!creator) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProvidersWithAPIKey),\n );\n }\n const provider = creator(aiSdkClientOptions as ClientOptions);\n model = provider(subModelName);\n } else {\n const provider = AISDKProviders[subProvider];\n if (!provider) {\n throw new UnsupportedAISDKModelProviderError(\n subProvider,\n Object.keys(AISDKProviders),\n );\n }\n model = provider(subModelName);\n }\n\n if (middleware) {\n return wrapLanguageModel({ model, middleware });\n }\n return model;\n}\n\nexport class LLMProvider {\n private logger: (message: LogLine) => void;\n private middleware?: LanguageModelV2Middleware;\n\n constructor(\n logger: (message: LogLine) => void,\n middleware?: LanguageModelV2Middleware,\n ) {\n this.logger = logger;\n this.middleware = middleware;\n }\n\n getClient(\n modelName: AvailableModel,\n clientOptions?: ClientOptions,\n options?: {\n experimental?: boolean;\n disableAPI?: boolean;\n middleware?: LanguageModelV2Middleware;\n },\n ): LLMClient {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n const subModelName = modelName.substring(firstSlashIndex + 1);\n\n const effectiveMiddleware = options?.middleware ?? this.middleware;\n const languageModel = getAISDKLanguageModel(\n subProvider,\n subModelName,\n clientOptions,\n effectiveMiddleware,\n );\n\n return new AISdkClient({\n model: languageModel,\n logger: this.logger,\n clientOptions,\n });\n }\n\n // Model name doesn't include \"/\" - this format is deprecated\n const provider = modelToProviderMap[modelName];\n if (!provider) {\n throw new UnsupportedModelError(Object.keys(modelToProviderMap));\n }\n\n this.logger({\n category: \"llm\",\n message: `Deprecation warning: Model format \"${modelName}\" is deprecated. Please use the provider/model format (e.g., \"openai/gpt-5\" or \"anthropic/claude-sonnet-4\").`,\n level: 0,\n });\n\n const availableModel = modelName as AvailableModel;\n switch (provider) {\n case \"openai\":\n return new OpenAIClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"anthropic\":\n return new AnthropicClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"cerebras\":\n return new CerebrasClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"groq\":\n return new GroqClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n case \"google\":\n return new GoogleClient({\n logger: this.logger,\n modelName: availableModel,\n clientOptions,\n });\n default:\n // This default case handles unknown providers that exist in modelToProviderMap\n // but aren't implemented in the switch. This is an internal consistency issue.\n throw new UnsupportedModelProviderError([\n ...new Set(Object.values(modelToProviderMap)),\n ]);\n }\n }\n\n static getModelProvider(modelName: AvailableModel): ModelProvider {\n if (modelName.includes(\"/\")) {\n const firstSlashIndex = modelName.indexOf(\"/\");\n const subProvider = modelName.substring(0, firstSlashIndex);\n if (AISDKProviders[subProvider]) {\n return \"aisdk\";\n }\n }\n const provider = modelToProviderMap[modelName];\n return provider;\n }\n}\n"]}
@@ -198,6 +198,7 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
198
198
  messages: formattedMessages,
199
199
  schema: options.response_model.schema,
200
200
  temperature,
201
+ allowSystemInMessages: true,
201
202
  ...(Object.keys(providerOptions).length > 0
202
203
  ? { providerOptions }
203
204
  : {}),
@@ -320,6 +321,7 @@ You must respond in JSON format. respond WITH JSON. Do not include any other tex
320
321
  : "auto"
321
322
  : undefined,
322
323
  temperature,
324
+ allowSystemInMessages: true,
323
325
  });
324
326
  }
325
327
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n NoObjectGeneratedError,\n TextPart,\n ToolSet,\n Tool,\n} from \"ai\";\nimport type { JSONValue, LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { ChatCompletion } from \"openai/resources\";\nimport { v7 as uuidv7 } from \"uuid\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { AvailableModel, ClientOptions } from \"../types/public/model.js\";\nimport { CreateChatCompletionOptions, LLMClient } from \"./LLMClient.js\";\nimport { anthropicFallbacksOptions } from \"./anthropicOptions.js\";\nimport {\n FlowLogger,\n extractLlmPromptSummary,\n} from \"../flowlogger/FlowLogger.js\";\nimport { toJsonSchema } from \"../zodCompat.js\";\n\ntype ProviderOptionValue = JSONValue;\ntype ProviderOptionMap = Record<string, ProviderOptionValue>;\n\nfunction inferProviderName(modelId: string): string | undefined {\n const [providerName] = modelId.split(\"/\");\n return providerName || undefined;\n}\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n private logger?: (message: LogLine) => void;\n\n constructor({\n model,\n logger,\n clientOptions,\n }: {\n model: LanguageModelV2;\n logger?: (message: LogLine) => void;\n clientOptions?: ClientOptions;\n }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n this.logger = logger;\n if (clientOptions) {\n this.clientOptions = clientOptions;\n }\n }\n\n public getLanguageModel(): LanguageModelV2 {\n return this.model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n this.logger?.({\n category: \"aisdk\",\n message: \"creating chat completion\",\n level: 2,\n auxiliary: {\n options: {\n value: JSON.stringify({\n ...options,\n image: undefined,\n messages: options.messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content)\n ? msg.content.map((c) =>\n \"image_url\" in c\n ? { ...c, image_url: { url: \"[IMAGE_REDACTED]\" } }\n : c,\n )\n : msg.content,\n })),\n }),\n type: \"object\",\n },\n modelName: {\n value: this.model.modelId,\n type: \"string\",\n },\n },\n });\n\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 let objectResponse: Awaited<ReturnType<typeof generateObject>>;\n const isGPT5 = this.model.modelId.includes(\"gpt-5\");\n const isCodex = this.model.modelId.includes(\"codex\");\n const isOpus47 =\n this.model.modelId === \"anthropic/claude-opus-4-7\" ||\n this.model.modelId === \"claude-opus-4-7\";\n // Kimi models only support temperature=1\n const isKimi = this.model.modelId.includes(\"kimi\");\n const temperature = isKimi ? 1 : isOpus47 ? undefined : options.temperature;\n\n // Resolve reasoning effort: user-configured > default \"none\" for GPT-5.x sub-models\n const isGPT5SubModel = this.model.modelId.includes(\"gpt-5.\") && !isCodex;\n const userReasoningEffort = this.clientOptions?.reasoningEffort;\n const resolvedReasoningEffort =\n userReasoningEffort ?? (isGPT5SubModel ? \"none\" : undefined);\n const providerName = inferProviderName(this.model.modelId);\n\n // Models that lack native structured-output support need a prompt-based\n // JSON fallback instead of response_format: { type: \"json_schema\" }.\n const PROMPT_JSON_FALLBACK_PATTERNS = [\"deepseek\", \"kimi\", \"glm\"];\n const needsPromptJsonFallback = PROMPT_JSON_FALLBACK_PATTERNS.some((p) =>\n this.model.modelId.includes(p),\n );\n\n const providerOptions: Record<string, ProviderOptionMap> = {};\n switch (providerName) {\n case \"openai\":\n providerOptions.openai = {\n strictJsonSchema: true,\n ...(isGPT5 ? { textVerbosity: isCodex ? \"medium\" : \"low\" } : {}),\n ...(resolvedReasoningEffort\n ? { reasoningEffort: resolvedReasoningEffort }\n : {}),\n };\n break;\n case \"anthropic\":\n providerOptions.anthropic = {\n structuredOutputMode: \"auto\",\n // Fable 5 opts into the API's server-side refusal fallback; the\n // provider adds the required beta header automatically.\n ...(anthropicFallbacksOptions(this.model.modelId) ?? {}),\n };\n break;\n case \"azure\":\n providerOptions.azure = {\n strictJsonSchema: true,\n };\n break;\n case \"google\":\n providerOptions.google = {\n structuredOutputs: true,\n };\n break;\n case \"vertex\":\n providerOptions.vertex = {\n structuredOutputs: true,\n };\n break;\n case \"groq\":\n providerOptions.groq = {\n structuredOutputs: true,\n };\n break;\n case \"cerebras\":\n providerOptions.cerebras = {\n strictJsonSchema: true,\n };\n break;\n case \"mistral\":\n providerOptions.mistral = {\n structuredOutputs: true,\n strictJsonSchema: true,\n };\n break;\n }\n\n if (options.response_model) {\n // Log LLM request for generateObject (extract)\n const llmRequestId = uuidv7();\n const promptSummary = extractLlmPromptSummary(options.messages, {\n hasSchema: true,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n // For models that don't support native structured outputs, add a prompt instruction\n if (needsPromptJsonFallback) {\n const parsedSchema = JSON.stringify(\n toJsonSchema(options.response_model.schema),\n );\n\n formattedMessages.push({\n role: \"user\",\n content: `Respond in this zod schema format:\\n${parsedSchema}\\n\nYou must respond in JSON format. respond WITH JSON. Do not include any other text, formatting or markdown in your output. Do not include \\`\\`\\` or \\`\\`\\`json in your response. Only the JSON object itself.`,\n });\n }\n\n try {\n objectResponse = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n temperature,\n ...(Object.keys(providerOptions).length > 0\n ? { providerOptions }\n : {}),\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n\n if (NoObjectGeneratedError.isInstance(err)) {\n this.logger?.({\n category: \"AISDK error\",\n message: err.message,\n level: 0,\n auxiliary: {\n cause: {\n value: JSON.stringify(err.cause ?? {}),\n type: \"object\",\n },\n text: {\n value: err.text ?? \"\",\n type: \"string\",\n },\n response: {\n value: JSON.stringify(err.response ?? {}),\n type: \"object\",\n },\n usage: {\n value: JSON.stringify(err.usage ?? {}),\n type: \"object\",\n },\n finishReason: {\n value: err.finishReason ?? \"unknown\",\n type: \"string\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n throw err;\n }\n throw err;\n }\n\n const result = {\n data: objectResponse.object,\n usage: {\n prompt_tokens: objectResponse.usage.inputTokens ?? 0,\n completion_tokens: objectResponse.usage.outputTokens ?? 0,\n reasoning_tokens: objectResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: objectResponse.usage.cachedInputTokens ?? 0,\n total_tokens: objectResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateObject\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: JSON.stringify(objectResponse.object),\n inputTokens: objectResponse.usage.inputTokens,\n outputTokens: objectResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 1,\n auxiliary: {\n response: {\n value: JSON.stringify({\n object: objectResponse.object,\n usage: objectResponse.usage,\n finishReason: objectResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n\n const tools: ToolSet = {};\n if (options.tools && options.tools.length > 0) {\n for (const tool of options.tools) {\n tools[tool.name] = {\n description: tool.description,\n inputSchema: tool.parameters,\n } as Tool;\n }\n }\n\n // Log LLM request for generateText (act/observe)\n const llmRequestId = uuidv7();\n const toolCount = Object.keys(tools).length;\n const promptSummary = extractLlmPromptSummary(options.messages, {\n toolCount,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n let textResponse: Awaited<ReturnType<typeof generateText>>;\n try {\n textResponse = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools: Object.keys(tools).length > 0 ? tools : undefined,\n toolChoice:\n Object.keys(tools).length > 0\n ? options.tool_choice === \"required\"\n ? \"required\"\n : options.tool_choice === \"none\"\n ? \"none\"\n : \"auto\"\n : undefined,\n temperature,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n throw err;\n }\n\n // Transform AI SDK response to match LLMResponse format expected by operator handler\n const transformedToolCalls = (textResponse.toolCalls || []).map(\n (toolCall) => ({\n id:\n toolCall.toolCallId ||\n `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n type: \"function\",\n function: {\n name: toolCall.toolName,\n arguments: JSON.stringify(toolCall.input),\n },\n }),\n );\n\n const result = {\n id: `chatcmpl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: this.model.modelId,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: textResponse.text || null,\n tool_calls: transformedToolCalls,\n },\n finish_reason: textResponse.finishReason || \"stop\",\n },\n ],\n usage: {\n prompt_tokens: textResponse.usage.inputTokens ?? 0,\n completion_tokens: textResponse.usage.outputTokens ?? 0,\n reasoning_tokens: textResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: textResponse.usage.cachedInputTokens ?? 0,\n total_tokens: textResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateText\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output:\n textResponse.text ||\n (transformedToolCalls.length > 0\n ? `[${transformedToolCalls.length} tool calls]`\n : \"\"),\n inputTokens: textResponse.usage.inputTokens,\n outputTokens: textResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 2,\n auxiliary: {\n response: {\n value: JSON.stringify({\n text: textResponse.text,\n usage: textResponse.usage,\n finishReason: textResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n}\n"]}
1
+ {"version":3,"file":"aisdk.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/aisdk.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n CoreAssistantMessage,\n ModelMessage,\n CoreSystemMessage,\n CoreUserMessage,\n generateObject,\n generateText,\n ImagePart,\n NoObjectGeneratedError,\n TextPart,\n ToolSet,\n Tool,\n} from \"ai\";\nimport type { JSONValue, LanguageModelV2 } from \"@ai-sdk/provider\";\nimport { ChatCompletion } from \"openai/resources\";\nimport { v7 as uuidv7 } from \"uuid\";\nimport { LogLine } from \"../types/public/logs.js\";\nimport { AvailableModel, ClientOptions } from \"../types/public/model.js\";\nimport { CreateChatCompletionOptions, LLMClient } from \"./LLMClient.js\";\nimport { anthropicFallbacksOptions } from \"./anthropicOptions.js\";\nimport {\n FlowLogger,\n extractLlmPromptSummary,\n} from \"../flowlogger/FlowLogger.js\";\nimport { toJsonSchema } from \"../zodCompat.js\";\n\ntype ProviderOptionValue = JSONValue;\ntype ProviderOptionMap = Record<string, ProviderOptionValue>;\n\nfunction inferProviderName(modelId: string): string | undefined {\n const [providerName] = modelId.split(\"/\");\n return providerName || undefined;\n}\n\nexport class AISdkClient extends LLMClient {\n public type = \"aisdk\" as const;\n private model: LanguageModelV2;\n private logger?: (message: LogLine) => void;\n\n constructor({\n model,\n logger,\n clientOptions,\n }: {\n model: LanguageModelV2;\n logger?: (message: LogLine) => void;\n clientOptions?: ClientOptions;\n }) {\n super(model.modelId as AvailableModel);\n this.model = model;\n this.logger = logger;\n if (clientOptions) {\n this.clientOptions = clientOptions;\n }\n }\n\n public getLanguageModel(): LanguageModelV2 {\n return this.model;\n }\n\n async createChatCompletion<T = ChatCompletion>({\n options,\n }: CreateChatCompletionOptions): Promise<T> {\n this.logger?.({\n category: \"aisdk\",\n message: \"creating chat completion\",\n level: 2,\n auxiliary: {\n options: {\n value: JSON.stringify({\n ...options,\n image: undefined,\n messages: options.messages.map((msg) => ({\n ...msg,\n content: Array.isArray(msg.content)\n ? msg.content.map((c) =>\n \"image_url\" in c\n ? { ...c, image_url: { url: \"[IMAGE_REDACTED]\" } }\n : c,\n )\n : msg.content,\n })),\n }),\n type: \"object\",\n },\n modelName: {\n value: this.model.modelId,\n type: \"string\",\n },\n },\n });\n\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 let objectResponse: Awaited<ReturnType<typeof generateObject>>;\n const isGPT5 = this.model.modelId.includes(\"gpt-5\");\n const isCodex = this.model.modelId.includes(\"codex\");\n const isOpus47 =\n this.model.modelId === \"anthropic/claude-opus-4-7\" ||\n this.model.modelId === \"claude-opus-4-7\";\n // Kimi models only support temperature=1\n const isKimi = this.model.modelId.includes(\"kimi\");\n const temperature = isKimi ? 1 : isOpus47 ? undefined : options.temperature;\n\n // Resolve reasoning effort: user-configured > default \"none\" for GPT-5.x sub-models\n const isGPT5SubModel = this.model.modelId.includes(\"gpt-5.\") && !isCodex;\n const userReasoningEffort = this.clientOptions?.reasoningEffort;\n const resolvedReasoningEffort =\n userReasoningEffort ?? (isGPT5SubModel ? \"none\" : undefined);\n const providerName = inferProviderName(this.model.modelId);\n\n // Models that lack native structured-output support need a prompt-based\n // JSON fallback instead of response_format: { type: \"json_schema\" }.\n const PROMPT_JSON_FALLBACK_PATTERNS = [\"deepseek\", \"kimi\", \"glm\"];\n const needsPromptJsonFallback = PROMPT_JSON_FALLBACK_PATTERNS.some((p) =>\n this.model.modelId.includes(p),\n );\n\n const providerOptions: Record<string, ProviderOptionMap> = {};\n switch (providerName) {\n case \"openai\":\n providerOptions.openai = {\n strictJsonSchema: true,\n ...(isGPT5 ? { textVerbosity: isCodex ? \"medium\" : \"low\" } : {}),\n ...(resolvedReasoningEffort\n ? { reasoningEffort: resolvedReasoningEffort }\n : {}),\n };\n break;\n case \"anthropic\":\n providerOptions.anthropic = {\n structuredOutputMode: \"auto\",\n // Fable 5 opts into the API's server-side refusal fallback; the\n // provider adds the required beta header automatically.\n ...(anthropicFallbacksOptions(this.model.modelId) ?? {}),\n };\n break;\n case \"azure\":\n providerOptions.azure = {\n strictJsonSchema: true,\n };\n break;\n case \"google\":\n providerOptions.google = {\n structuredOutputs: true,\n };\n break;\n case \"vertex\":\n providerOptions.vertex = {\n structuredOutputs: true,\n };\n break;\n case \"groq\":\n providerOptions.groq = {\n structuredOutputs: true,\n };\n break;\n case \"cerebras\":\n providerOptions.cerebras = {\n strictJsonSchema: true,\n };\n break;\n case \"mistral\":\n providerOptions.mistral = {\n structuredOutputs: true,\n strictJsonSchema: true,\n };\n break;\n }\n\n if (options.response_model) {\n // Log LLM request for generateObject (extract)\n const llmRequestId = uuidv7();\n const promptSummary = extractLlmPromptSummary(options.messages, {\n hasSchema: true,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n // For models that don't support native structured outputs, add a prompt instruction\n if (needsPromptJsonFallback) {\n const parsedSchema = JSON.stringify(\n toJsonSchema(options.response_model.schema),\n );\n\n formattedMessages.push({\n role: \"user\",\n content: `Respond in this zod schema format:\\n${parsedSchema}\\n\nYou must respond in JSON format. respond WITH JSON. Do not include any other text, formatting or markdown in your output. Do not include \\`\\`\\` or \\`\\`\\`json in your response. Only the JSON object itself.`,\n });\n }\n\n try {\n objectResponse = await generateObject({\n model: this.model,\n messages: formattedMessages,\n schema: options.response_model.schema,\n temperature,\n allowSystemInMessages: true,\n ...(Object.keys(providerOptions).length > 0\n ? { providerOptions }\n : {}),\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n\n if (NoObjectGeneratedError.isInstance(err)) {\n this.logger?.({\n category: \"AISDK error\",\n message: err.message,\n level: 0,\n auxiliary: {\n cause: {\n value: JSON.stringify(err.cause ?? {}),\n type: \"object\",\n },\n text: {\n value: err.text ?? \"\",\n type: \"string\",\n },\n response: {\n value: JSON.stringify(err.response ?? {}),\n type: \"object\",\n },\n usage: {\n value: JSON.stringify(err.usage ?? {}),\n type: \"object\",\n },\n finishReason: {\n value: err.finishReason ?? \"unknown\",\n type: \"string\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n throw err;\n }\n throw err;\n }\n\n const result = {\n data: objectResponse.object,\n usage: {\n prompt_tokens: objectResponse.usage.inputTokens ?? 0,\n completion_tokens: objectResponse.usage.outputTokens ?? 0,\n reasoning_tokens: objectResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: objectResponse.usage.cachedInputTokens ?? 0,\n total_tokens: objectResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateObject\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: JSON.stringify(objectResponse.object),\n inputTokens: objectResponse.usage.inputTokens,\n outputTokens: objectResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 1,\n auxiliary: {\n response: {\n value: JSON.stringify({\n object: objectResponse.object,\n usage: objectResponse.usage,\n finishReason: objectResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n\n const tools: ToolSet = {};\n if (options.tools && options.tools.length > 0) {\n for (const tool of options.tools) {\n tools[tool.name] = {\n description: tool.description,\n inputSchema: tool.parameters,\n } as Tool;\n }\n }\n\n // Log LLM request for generateText (act/observe)\n const llmRequestId = uuidv7();\n const toolCount = Object.keys(tools).length;\n const promptSummary = extractLlmPromptSummary(options.messages, {\n toolCount,\n });\n FlowLogger.logLlmRequest({\n requestId: llmRequestId,\n model: this.model.modelId,\n prompt: promptSummary,\n });\n\n let textResponse: Awaited<ReturnType<typeof generateText>>;\n try {\n textResponse = await generateText({\n model: this.model,\n messages: formattedMessages,\n tools: Object.keys(tools).length > 0 ? tools : undefined,\n toolChoice:\n Object.keys(tools).length > 0\n ? options.tool_choice === \"required\"\n ? \"required\"\n : options.tool_choice === \"none\"\n ? \"none\"\n : \"auto\"\n : undefined,\n temperature,\n allowSystemInMessages: true,\n });\n } catch (err) {\n // Log error response to maintain request/response pairing\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output: `[error: ${err instanceof Error ? err.message : \"unknown\"}]`,\n });\n throw err;\n }\n\n // Transform AI SDK response to match LLMResponse format expected by operator handler\n const transformedToolCalls = (textResponse.toolCalls || []).map(\n (toolCall) => ({\n id:\n toolCall.toolCallId ||\n `call_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n type: \"function\",\n function: {\n name: toolCall.toolName,\n arguments: JSON.stringify(toolCall.input),\n },\n }),\n );\n\n const result = {\n id: `chatcmpl_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`,\n object: \"chat.completion\",\n created: Math.floor(Date.now() / 1000),\n model: this.model.modelId,\n choices: [\n {\n index: 0,\n message: {\n role: \"assistant\",\n content: textResponse.text || null,\n tool_calls: transformedToolCalls,\n },\n finish_reason: textResponse.finishReason || \"stop\",\n },\n ],\n usage: {\n prompt_tokens: textResponse.usage.inputTokens ?? 0,\n completion_tokens: textResponse.usage.outputTokens ?? 0,\n reasoning_tokens: textResponse.usage.reasoningTokens ?? 0,\n cached_input_tokens: textResponse.usage.cachedInputTokens ?? 0,\n total_tokens: textResponse.usage.totalTokens ?? 0,\n },\n } as T;\n\n // Log LLM response for generateText\n FlowLogger.logLlmResponse({\n requestId: llmRequestId,\n model: this.model.modelId,\n output:\n textResponse.text ||\n (transformedToolCalls.length > 0\n ? `[${transformedToolCalls.length} tool calls]`\n : \"\"),\n inputTokens: textResponse.usage.inputTokens,\n outputTokens: textResponse.usage.outputTokens,\n });\n\n this.logger?.({\n category: \"aisdk\",\n message: \"response\",\n level: 2,\n auxiliary: {\n response: {\n value: JSON.stringify({\n text: textResponse.text,\n usage: textResponse.usage,\n finishReason: textResponse.finishReason,\n // Omit request and response properties that might contain images\n }),\n type: \"object\",\n },\n requestId: {\n value: options.requestId,\n type: \"string\",\n },\n },\n });\n\n return result;\n }\n}\n"]}
@@ -0,0 +1,7 @@
1
+ export declare function openAIStoreProviderOptions(provider: string | undefined): {
2
+ openai: {
3
+ store: false;
4
+ };
5
+ } | {
6
+ openai?: undefined;
7
+ };
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.openAIStoreProviderOptions = openAIStoreProviderOptions;
4
+ function openAIStoreProviderOptions(provider) {
5
+ return provider === "openai.responses"
6
+ ? { openai: { store: false } }
7
+ : {};
8
+ }
9
+ //# sourceMappingURL=providerOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providerOptions.js","sourceRoot":"","sources":["../../../../../lib/v3/llm/providerOptions.ts"],"names":[],"mappings":";;AAAA,gEAIC;AAJD,SAAgB,0BAA0B,CAAC,QAA4B;IACrE,OAAO,QAAQ,KAAK,kBAAkB;QACpC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,KAAc,EAAE,EAAE;QACvC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC","sourcesContent":["export function openAIStoreProviderOptions(provider: string | undefined) {\n return provider === \"openai.responses\"\n ? { openai: { store: false as const } }\n : {};\n}\n"]}
@@ -8,4 +8,4 @@ export interface ActionMappingOptions {
8
8
  * Model name substrings that indicate hybrid mode compatibility.
9
9
  * Used for auto-routing when the user doesn't specify a mode.
10
10
  */
11
- export declare const HYBRID_CAPABLE_MODEL_PATTERNS: readonly ["gemini-3", "claude", "gpt-5.4", "gpt-5.5"];
11
+ export declare const HYBRID_CAPABLE_MODEL_PATTERNS: readonly ["gemini-3", "claude", "gpt-5.4", "gpt-5.5", "gpt-5.6"];
@@ -10,5 +10,6 @@ exports.HYBRID_CAPABLE_MODEL_PATTERNS = [
10
10
  "claude",
11
11
  "gpt-5.4",
12
12
  "gpt-5.5",
13
+ "gpt-5.6",
13
14
  ];
14
15
  //# sourceMappingURL=agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/agent.ts"],"names":[],"mappings":";;;AAOA;;;GAGG;AACU,QAAA,6BAA6B,GAAG;IAC3C,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;CACD,CAAC","sourcesContent":["export interface ActionMappingOptions {\n toolCallName: string;\n toolResult: unknown;\n args: Record<string, unknown>;\n reasoning?: string;\n}\n\n/**\n * Model name substrings that indicate hybrid mode compatibility.\n * Used for auto-routing when the user doesn't specify a mode.\n */\nexport const HYBRID_CAPABLE_MODEL_PATTERNS = [\n \"gemini-3\",\n \"claude\",\n \"gpt-5.4\",\n \"gpt-5.5\",\n] as const;\n"]}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/private/agent.ts"],"names":[],"mappings":";;;AAOA;;;GAGG;AACU,QAAA,6BAA6B,GAAG;IAC3C,UAAU;IACV,QAAQ;IACR,SAAS;IACT,SAAS;IACT,SAAS;CACD,CAAC","sourcesContent":["export interface ActionMappingOptions {\n toolCallName: string;\n toolResult: unknown;\n args: Record<string, unknown>;\n reasoning?: string;\n}\n\n/**\n * Model name substrings that indicate hybrid mode compatibility.\n * Used for auto-routing when the user doesn't specify a mode.\n */\nexport const HYBRID_CAPABLE_MODEL_PATTERNS = [\n \"gemini-3\",\n \"claude\",\n \"gpt-5.4\",\n \"gpt-5.5\",\n \"gpt-5.6\",\n] as const;\n"]}
@@ -411,7 +411,7 @@ export interface AgentStreamExecuteOptions extends AgentExecuteOptionsBase {
411
411
  callbacks?: AgentStreamCallbacks;
412
412
  }
413
413
  export type AgentType = "openai" | "anthropic" | "google" | "microsoft" | "bedrock" | "vertex" | "azure";
414
- export declare const 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"];
414
+ export declare const 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"];
415
415
  export type AvailableCuaModel = (typeof AVAILABLE_CUA_MODELS)[number];
416
416
  export interface AgentExecutionOptions<TOptions extends AgentExecuteOptions = AgentExecuteOptions> {
417
417
  options: TOptions;
@@ -5,6 +5,9 @@ exports.AVAILABLE_CUA_MODELS = [
5
5
  "openai/gpt-5.4",
6
6
  "openai/gpt-5.4-mini",
7
7
  "openai/gpt-5.5",
8
+ "openai/gpt-5.6-terra",
9
+ "openai/gpt-5.6-luna",
10
+ "openai/gpt-5.6-sol",
8
11
  "openai/computer-use-preview",
9
12
  "openai/computer-use-preview-2025-03-11",
10
13
  "anthropic/claude-opus-4-5-20251101",
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/agent.ts"],"names":[],"mappings":";;;AAmda,QAAA,oBAAoB,GAAG;IAClC,gBAAgB;IAChB,qBAAqB;IACrB,gBAAgB;IAChB,6BAA6B;IAC7B,wCAAwC;IACxC,oCAAoC;IACpC,2BAA2B;IAC3B,2BAA2B;IAC3B,6BAA6B;IAC7B,4BAA4B;IAC5B,qCAAqC;IACrC,oCAAoC;IACpC,sCAAsC;IACtC,0BAA0B;IAC1B,gDAAgD;IAChD,+BAA+B;IAC/B,yBAAyB;IACzB,6BAA6B;IAC7B,mBAAmB;CACX,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ToolSet,\n ModelMessage,\n wrapLanguageModel,\n StreamTextResult,\n StepResult,\n PrepareStepFunction,\n GenerateTextOnStepFinishCallback,\n StreamTextOnStepFinishCallback,\n StreamTextOnErrorCallback,\n StreamTextOnChunkCallback,\n StreamTextOnFinishCallback,\n} from \"ai\";\nimport { LogLine } from \"./logs.js\";\nimport { ClientOptions } from \"./model.js\";\nimport { StagehandZodObject } from \"../../zodCompat.js\";\nimport type { AgentEvidenceCallback } from \"./agentEvidenceEvents.js\";\n\n// Re-export ModelMessage for consumers who want to use it for conversation continuation\nexport type { ModelMessage } from \"ai\";\n\n// Re-export Tool type for consumers who want to define custom tools\nexport type { Tool } from \"ai\";\nimport { Page as PlaywrightPage } from \"playwright-core\";\nimport { Page as PuppeteerPage } from \"puppeteer-core\";\nimport { Page as PatchrightPage } from \"patchright-core\";\nimport { Page } from \"../../understudy/page.js\";\n\n/**\n * Result of a screenshot provider: the base64-encoded image bytes plus an\n * explicit media type. Declaring the media type at the capture boundary lets\n * every CUA client pass it through instead of hardcoding or inferring it.\n */\nexport interface ScreenshotProviderResult {\n base64: string;\n mediaType: \"image/png\" | \"image/jpeg\";\n}\n\n// =============================================================================\n// Variable Types\n// =============================================================================\n\n/**\n * A variable value can be a simple primitive or a rich object with an optional description.\n * This unified type is shared across `act`, `agent.execute`, and other methods.\n *\n * @example Simple (backward-compatible):\n * ```typescript\n * variables: { username: \"john@example.com\" }\n * ```\n *\n * @example Rich with description (useful for agents):\n * ```typescript\n * variables: {\n * username: { value: \"john@example.com\", description: \"The login email\" }\n * }\n * ```\n */\nexport type VariableValue =\n | string\n | number\n | boolean\n | { value: string | number | boolean; description?: string };\n\n/**\n * A collection of named variables for use in act, agent, and other methods.\n */\nexport type Variables = Record<string, VariableValue>;\n\nexport interface AgentContext {\n options: AgentExecuteOptionsBase;\n maxSteps: number;\n systemPrompt: string;\n allTools: ToolSet;\n messages: ModelMessage[];\n wrappedModel: ReturnType<typeof wrapLanguageModel>;\n initialPageUrl: string;\n}\n\nexport interface AgentState {\n collectedReasoning: string[];\n actions: AgentAction[];\n finalMessage: string;\n completed: boolean;\n currentPageUrl: string;\n}\n\nexport interface AgentAction {\n type: string;\n reasoning?: string;\n taskCompleted?: boolean;\n action?: string;\n // Tool-specific fields\n timeMs?: number; // wait tool\n pageText?: string; // ariaTree tool\n pageUrl?: string; // ariaTree tool\n instruction?: string; // various tools\n [key: string]: unknown;\n}\n\nexport interface AgentResult {\n success: boolean;\n message: string;\n actions: AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n /**\n * The conversation messages from this execution.\n * Pass these to a subsequent execute() call via the `messages` option to continue the conversation.\n * @experimental\n */\n messages?: ModelMessage[];\n /**\n * Custom output data extracted based on the `output` schema provided in execute options.\n * Only populated if an `output` schema was provided.\n * @experimental\n */\n output?: Record<string, unknown>;\n}\n\nexport type AgentStreamResult = StreamTextResult<ToolSet, never> & {\n result: Promise<AgentResult>;\n};\n\n/**\n * Base callbacks shared between execute (non-streaming) and streaming modes.\n */\nexport interface AgentCallbacks {\n /**\n * Optional function called before each step to modify settings.\n * You can change the model, tool choices, active tools, system prompt,\n * and input messages for each step.\n */\n prepareStep?: PrepareStepFunction<ToolSet>;\n /**\n * Callback called when each step (LLM call) is finished.\n * This is called for intermediate steps as well as the final step.\n */\n onStepFinish?:\n | GenerateTextOnStepFinishCallback<ToolSet>\n | StreamTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback called when Stagehand captures agent-run evidence such as\n * screenshots, completed tool/action steps, or post-action observations.\n */\n onEvidence?: AgentEvidenceCallback;\n}\n\n/**\n * Error message type for streaming-only callbacks used in non-streaming mode.\n * This provides a clear error message when users try to use streaming callbacks without stream: true.\n */\ntype StreamingCallbackNotAvailable =\n \"This callback requires 'stream: true' in AgentConfig. Set stream: true to use streaming callbacks like onChunk, onFinish, onError, and onAbort.\";\n\n/**\n * Error message for safety confirmation callback misuse.\n * Safety confirmations are only available for non-streaming CUA agent executions.\n */\ntype SafetyConfirmationCallbackNotAvailable =\n \"Safety confirmation callbacks are only available via non-streaming AgentExecuteOptions.callbacks when using mode: 'cua'.\";\n\n/**\n * Callbacks specific to the non-streaming execute method.\n */\nexport interface AgentExecuteCallbacks extends AgentCallbacks {\n /**\n * Callback called when each step (LLM call) is finished.\n */\n onStepFinish?: GenerateTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback for handling safety confirmation requests from CUA providers.\n * Only available when running an agent configured with mode: \"cua\".\n */\n onSafetyConfirmation?: SafetyConfirmationHandler;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onChunk:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onChunk: async (chunk) => console.log(chunk) }\n * });\n * ```\n */\n onChunk?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onFinish:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onFinish: (event) => console.log(\"Done!\", event) }\n * });\n * ```\n */\n onFinish?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onError:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onError: ({ error }) => console.error(error) }\n * });\n * ```\n */\n onError?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onAbort:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onAbort: (event) => console.log(\"Aborted\", event.steps) }\n * });\n * ```\n */\n onAbort?: StreamingCallbackNotAvailable;\n}\n\n/**\n * Callbacks specific to the streaming mode.\n */\nexport interface AgentStreamCallbacks extends AgentCallbacks {\n /**\n * Callback called when each step (LLM call) is finished during streaming.\n */\n onStepFinish?: StreamTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback called when an error occurs during streaming.\n * Use this to log errors or handle error states.\n */\n onError?: StreamTextOnErrorCallback;\n /**\n * Callback called for each chunk of the stream.\n * Stream processing will pause until the callback promise resolves.\n */\n onChunk?: StreamTextOnChunkCallback<ToolSet>;\n /**\n * Callback called when the stream finishes.\n */\n onFinish?: StreamTextOnFinishCallback<ToolSet>;\n /**\n * Callback called when the stream is aborted.\n */\n onAbort?: (event: {\n steps: Array<StepResult<ToolSet>>;\n }) => PromiseLike<void> | void;\n /**\n * NOT AVAILABLE in streaming mode.\n * Safety confirmations currently require non-streaming execute() on CUA agents.\n */\n onSafetyConfirmation?: SafetyConfirmationCallbackNotAvailable;\n}\n\n/**\n * Base options for agent execution (without callbacks).\n */\nexport interface AgentExecuteOptionsBase {\n instruction: string;\n maxSteps?: number;\n page?: PlaywrightPage | PuppeteerPage | PatchrightPage | Page;\n highlightCursor?: boolean;\n /**\n * Previous conversation messages to continue from.\n * Pass the `messages` from a previous AgentResult to continue that conversation.\n * @experimental\n */\n messages?: ModelMessage[];\n /**\n * An AbortSignal that can be used to cancel the agent execution.\n * When aborted, the agent will stop and return a partial result.\n * @experimental\n *\n * @example\n * ```typescript\n * const controller = new AbortController();\n * setTimeout(() => controller.abort(), 30000); // 30 second timeout\n *\n * const result = await agent.execute({\n * instruction: \"...\",\n * signal: controller.signal\n * });\n * ```\n */\n signal?: AbortSignal;\n /**\n * Tools to exclude from this execution.\n * Pass an array of tool names to prevent the agent from using those tools.\n *\n * **Note:** Not supported in CUA mode (`mode: \"cua\"`).\n *\n * **Available tools by mode:**\n *\n * **DOM mode (default):**\n * - `act` - Perform semantic actions (click, type, etc.)\n * - `fillForm` - Fill form fields using DOM selectors\n * - `ariaTree` - Get accessibility tree of the page\n * - `extract` - Extract structured data from page\n * - `goto` - Navigate to a URL\n * - `scroll` - Scroll using semantic directions (up/down/left/right)\n * - `keys` - Press keyboard keys\n * - `navback` - Navigate back in history\n * - `screenshot` - Take a screenshot\n * - `think` - Agent reasoning/planning step\n * - `wait` - Wait for time or condition\n * - `done` - Mark task as complete\n * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)\n *\n * **Hybrid mode:**\n * - `click` - Click at specific coordinates\n * - `type` - Type text at coordinates\n * - `dragAndDrop` - Drag from one point to another\n * - `clickAndHold` - Click and hold at coordinates\n * - `fillFormVision` - Fill forms using vision/coordinates\n * - `act` - Perform semantic actions\n * - `ariaTree` - Get accessibility tree\n * - `extract` - Extract data from page\n * - `goto` - Navigate to URL\n * - `scroll` - Scroll using coordinates\n * - `keys` - Press keyboard keys\n * - `navback` - Navigate back\n * - `screenshot` - Take screenshot\n * - `think` - Agent reasoning step\n * - `wait` - Wait for time/condition\n * - `done` - Mark task complete\n * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)\n *\n * @experimental\n * @example\n * ```typescript\n * // Exclude screenshot and extract tools\n * const result = await agent.execute({\n * instruction: \"Click the submit button\",\n * excludeTools: [\"screenshot\", \"extract\"]\n * });\n * ```\n */\n excludeTools?: string[];\n /**\n * A Zod schema defining custom output data to return when the task completes.\n * The agent will populate this data in the final done tool call.\n *\n * @experimental\n * @example\n * ```typescript\n * const result = await agent.execute({\n * instruction: \"Find the cheapest flight from NYC to LA\",\n * output: z.object({\n * price: z.string().describe(\"The price of the flight\"),\n * airline: z.string().describe(\"The airline name\"),\n * departureTime: z.string().describe(\"Departure time\"),\n * }),\n * });\n *\n * console.log(result.output); // { price: \"$199\", airline: \"Delta\", departureTime: \"8:00 AM\" }\n * ```\n */\n output?: StagehandZodObject;\n /**\n * Variables that the agent can use when filling forms or typing text.\n * The agent will see variable names and descriptions in the system prompt,\n * and can use them via `%variableName%` syntax in act/type/fillForm tool calls.\n *\n * Accepts both simple values and rich objects with descriptions (same type as `act`).\n *\n * **Note:** Not supported in CUA mode (`mode: \"cua\"`).\n *\n * @example\n * ```typescript\n * // Simple values\n * variables: { username: \"john@example.com\", password: \"secret123\" }\n *\n * // Rich values with descriptions (helps the agent understand context)\n * variables: {\n * username: { value: \"john@example.com\", description: \"The login email\" },\n * password: { value: \"secret123\", description: \"The login password\" },\n * }\n * ```\n */\n variables?: Variables;\n /**\n * Timeout in milliseconds for each agent tool call.\n * If a tool call exceeds this duration, it will be aborted and\n * reported back to the LLM as a timeout error so it can retry or adjust.\n * For tools that call v3 methods (act, extract, fillForm, ariaTree), the\n * timeout is also forwarded to the underlying v3 call for true cancellation.\n * @default 45000 (45 seconds)\n */\n toolTimeout?: number;\n /**\n * Enable the web search tool powered by Browserbase Search API.\n * Requires a valid Browserbase API key (BROWSERBASE_API_KEY).\n * When set to true, the agent gains access to a `search` tool for web searches.\n *\n * @example\n * ```typescript\n * const result = await agent.execute({\n * instruction: \"Find the latest news about AI\",\n * useSearch: true,\n * });\n * ```\n */\n useSearch?: boolean;\n}\n\n/**\n * Options for non-streaming agent execution.\n * Only accepts AgentExecuteCallbacks (no streaming-specific callbacks like onChunk, onFinish).\n */\nexport interface AgentExecuteOptions extends AgentExecuteOptionsBase {\n /**\n * Callbacks for non-streaming agent execution.\n * For streaming callbacks (onChunk, onFinish, onError, onAbort), use stream: true in AgentConfig.\n */\n callbacks?: AgentExecuteCallbacks;\n}\n\n/**\n * Options for streaming agent execution.\n * Accepts AgentStreamCallbacks including onChunk, onFinish, onError, and onAbort.\n */\nexport interface AgentStreamExecuteOptions extends AgentExecuteOptionsBase {\n /**\n * Callbacks for streaming agent execution.\n * Includes streaming-specific callbacks: onChunk, onFinish, onError, onAbort.\n */\n callbacks?: AgentStreamCallbacks;\n}\nexport type AgentType =\n | \"openai\"\n | \"anthropic\"\n | \"google\"\n | \"microsoft\"\n | \"bedrock\"\n | \"vertex\"\n | \"azure\";\n\nexport const AVAILABLE_CUA_MODELS = [\n \"openai/gpt-5.4\",\n \"openai/gpt-5.4-mini\",\n \"openai/gpt-5.5\",\n \"openai/computer-use-preview\",\n \"openai/computer-use-preview-2025-03-11\",\n \"anthropic/claude-opus-4-5-20251101\",\n \"anthropic/claude-opus-4-6\",\n \"anthropic/claude-opus-4-8\",\n \"anthropic/claude-sonnet-4-6\",\n \"anthropic/claude-haiku-4-5\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"anthropic/claude-fable-5\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"google/gemini-3-flash-preview\",\n \"google/gemini-3.5-flash\",\n \"google/gemini-3-pro-preview\",\n \"microsoft/fara-7b\",\n] as const;\nexport type AvailableCuaModel = (typeof AVAILABLE_CUA_MODELS)[number];\n\nexport interface AgentExecutionOptions<\n TOptions extends AgentExecuteOptions = AgentExecuteOptions,\n> {\n options: TOptions;\n logger: (message: LogLine) => void;\n retries?: number;\n}\n\nexport interface AgentHandlerOptions {\n modelName: string;\n clientOptions?: ClientOptions;\n userProvidedInstructions?: string;\n experimental?: boolean;\n}\n\nexport interface ActionExecutionResult {\n success: boolean;\n error?: string;\n data?: unknown;\n}\n\n/**\n * Represents a safety check that requires user confirmation before proceeding.\n * These are issued by CUA providers (OpenAI, Google) when the agent attempts\n * potentially risky actions.\n */\nexport interface SafetyCheck {\n /** Unique identifier for this safety check */\n id: string;\n /** Code identifying the type of safety concern */\n code: string;\n /** Human-readable description of the safety concern */\n message: string;\n}\n\n/**\n * Response from the user for a safety confirmation request.\n */\nexport interface SafetyConfirmationResponse {\n /** Whether the user acknowledged/approved the safety checks */\n acknowledged: boolean;\n}\n\n/**\n * Callback for handling safety confirmation requests.\n * Called when the CUA provider issues safety checks that require user confirmation.\n * The callback should return a promise that resolves when the user has made a decision.\n *\n * @param safetyChecks - Array of safety checks requiring confirmation\n * @returns Promise resolving to the user's response\n *\n * @example\n * ```typescript\n * const agent = stagehand.agent({\n * mode: \"cua\",\n * });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: {\n * onSafetyConfirmation: async (checks) => {\n * console.log(\"Safety checks:\", checks);\n * const userApproved = await showConfirmationDialog(checks);\n * return { acknowledged: userApproved };\n * },\n * },\n * });\n * ```\n */\nexport type SafetyConfirmationHandler = (\n safetyChecks: SafetyCheck[],\n) => Promise<SafetyConfirmationResponse>;\n\n// Anthropic types:\n\nexport interface ToolUseItem extends ResponseItem {\n type: \"tool_use\";\n id: string; // This is the correct property name from Anthropic's API\n name: string; // Name of the tool being used\n input: Record<string, unknown>;\n}\n\nexport interface AnthropicMessage {\n role: string;\n content: string | Array<AnthropicContentBlock>;\n}\n\nexport interface AnthropicContentBlock {\n type: string;\n [key: string]: unknown;\n}\n\nexport interface AnthropicTextBlock extends AnthropicContentBlock {\n type: \"text\";\n text: string;\n}\n\nexport interface AnthropicToolResult {\n type: \"tool_result\";\n tool_use_id: string;\n content: string | Array<AnthropicContentBlock>;\n}\n\n// OpenAI types:\n\nexport interface ResponseItem {\n type: string;\n id: string;\n [key: string]: unknown;\n}\n\nexport interface ComputerCallItem extends ResponseItem {\n type: \"computer_call\";\n call_id: string;\n action?: {\n type: string;\n [key: string]: unknown;\n };\n actions?: Array<{\n type: string;\n [key: string]: unknown;\n }>;\n pending_safety_checks?: Array<{\n id: string;\n code: string;\n message: string;\n }>;\n}\n\nexport interface FunctionCallItem extends ResponseItem {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\n\nexport type ResponseInputItem =\n | { role: string; content: string }\n | {\n type: \"computer_call_output\";\n call_id: string;\n output:\n | {\n type: \"input_image\" | \"computer_screenshot\";\n image_url: string;\n detail?: \"original\" | \"high\" | \"low\";\n current_url?: string;\n error?: string;\n [key: string]: unknown;\n }\n | string;\n acknowledged_safety_checks?: Array<{\n id: string;\n code: string;\n message: string;\n }>;\n }\n | {\n type: \"function_call_output\";\n call_id: string;\n output: string;\n };\n\nexport interface AgentInstance {\n execute: (\n instructionOrOptions: string | AgentExecuteOptions,\n ) => Promise<AgentResult>;\n}\n\nexport type AgentProviderType = AgentType;\n\nexport type AgentModelConfig<TModelName extends string = string> = {\n modelName: TModelName;\n} & Record<string, unknown>;\n\n/**\n * Agent tool mode determines which set of tools are available to the agent.\n * - 'dom': Uses DOM-based tools (act, fillForm) - better for structured page interactions\n * - 'hybrid': Uses coordinate-based tools (click, type, dragAndDrop, etc.) - better for visual/screenshot-based interactions\n * - 'cua': Uses Computer Use Agent (CUA) providers like Anthropic Claude or Google Gemini for screenshot-based automation\n */\nexport type AgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\nexport type AgentConfig = {\n /**\n * Custom system prompt to provide to the agent. Overrides the default system prompt.\n */\n systemPrompt?: string;\n /**\n * MCP integrations - Array of Client objects\n */\n integrations?: (Client | string)[];\n /**\n * Tools passed to the agent client\n */\n tools?: ToolSet;\n /**\n * @deprecated Use `mode: \"cua\"` instead. This option will be removed in a future version.\n * Enables Computer Use Agent (CUA) mode.\n */\n cua?: boolean;\n /**\n * The model to use for agent functionality\n */\n model?: string | AgentModelConfig<string>;\n /**\n * The model to use for tool execution (observe/act calls within agent tools).\n * If not specified, inherits from the main model configuration.\n * Format: \"provider/model\" (e.g., \"openai/gpt-4o-mini\", \"google/gemini-2.0-flash-exp\")\n */\n executionModel?: string | AgentModelConfig<string>;\n /**\n * Enable streaming mode for the agent.\n * When true, execute() returns AgentStreamResult with textStream for incremental output.\n * When false (default), execute() returns AgentResult after completion.\n */\n stream?: boolean;\n /**\n * Tool mode for the agent. Determines which set of tools are available.\n * - 'dom' (default): Uses DOM-based tools (act, fillForm) for structured interactions\n * - 'hybrid': Uses coordinate-based tools (click, type, dragAndDrop, clickAndHold, fillFormVision)\n * for visual/screenshot-based interactions\n * - 'cua': Uses Computer Use Agent (CUA) providers for screenshot-based automation\n */\n mode?: AgentToolMode;\n};\n\n/**\n * Agent instance returned when stream: true is set in AgentConfig.\n * execute() returns a streaming result that can be consumed incrementally.\n * Accepts AgentStreamExecuteOptions with streaming-specific callbacks.\n */\nexport interface StreamingAgentInstance {\n execute: (\n instructionOrOptions: string | AgentStreamExecuteOptions,\n ) => Promise<AgentStreamResult>;\n}\n\n/**\n * Agent instance returned when stream is false or not set in AgentConfig.\n * execute() returns a result after the agent completes.\n * Accepts AgentExecuteOptions with non-streaming callbacks only.\n */\nexport interface NonStreamingAgentInstance {\n execute: (\n instructionOrOptions: string | AgentExecuteOptions,\n ) => Promise<AgentResult>;\n}\n\n// =============================================================================\n// Vision Action Tool Result Types\n// =============================================================================\n\n/**\n * Content item type for toModelOutput return values.\n * Used in tool definitions to return text and/or media to the model.\n */\nexport type ModelOutputContentItem =\n | { type: \"text\"; text: string }\n | { type: \"media\"; mediaType: string; data: string };\n\nexport interface ClickToolResult {\n success: boolean;\n describe?: string;\n coordinates?: number[];\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface TypeToolResult {\n success: boolean;\n describe?: string;\n text?: string;\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface DragAndDropToolResult {\n success: boolean;\n describe?: string;\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface FillFormField {\n action: string;\n value: string;\n coordinates: { x: number; y: number };\n}\n\nexport interface FillFormVisionToolResult {\n success: boolean;\n playwrightArguments?: FillFormField[];\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface ScrollToolResult {\n success: boolean;\n message: string;\n scrolledPixels: number;\n error?: string;\n}\n\nexport interface ScrollVisionToolResult extends ScrollToolResult {\n screenshotBase64?: string;\n}\n\nexport interface WaitToolResult {\n success: boolean;\n waited: number;\n screenshotBase64?: string;\n error?: string;\n}\n"]}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/agent.ts"],"names":[],"mappings":";;;AAmda,QAAA,oBAAoB,GAAG;IAClC,gBAAgB;IAChB,qBAAqB;IACrB,gBAAgB;IAChB,sBAAsB;IACtB,qBAAqB;IACrB,oBAAoB;IACpB,6BAA6B;IAC7B,wCAAwC;IACxC,oCAAoC;IACpC,2BAA2B;IAC3B,2BAA2B;IAC3B,6BAA6B;IAC7B,4BAA4B;IAC5B,qCAAqC;IACrC,oCAAoC;IACpC,sCAAsC;IACtC,0BAA0B;IAC1B,gDAAgD;IAChD,+BAA+B;IAC/B,yBAAyB;IACzB,6BAA6B;IAC7B,mBAAmB;CACX,CAAC","sourcesContent":["import type { Client } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport {\n ToolSet,\n ModelMessage,\n wrapLanguageModel,\n StreamTextResult,\n StepResult,\n PrepareStepFunction,\n GenerateTextOnStepFinishCallback,\n StreamTextOnStepFinishCallback,\n StreamTextOnErrorCallback,\n StreamTextOnChunkCallback,\n StreamTextOnFinishCallback,\n} from \"ai\";\nimport { LogLine } from \"./logs.js\";\nimport { ClientOptions } from \"./model.js\";\nimport { StagehandZodObject } from \"../../zodCompat.js\";\nimport type { AgentEvidenceCallback } from \"./agentEvidenceEvents.js\";\n\n// Re-export ModelMessage for consumers who want to use it for conversation continuation\nexport type { ModelMessage } from \"ai\";\n\n// Re-export Tool type for consumers who want to define custom tools\nexport type { Tool } from \"ai\";\nimport { Page as PlaywrightPage } from \"playwright-core\";\nimport { Page as PuppeteerPage } from \"puppeteer-core\";\nimport { Page as PatchrightPage } from \"patchright-core\";\nimport { Page } from \"../../understudy/page.js\";\n\n/**\n * Result of a screenshot provider: the base64-encoded image bytes plus an\n * explicit media type. Declaring the media type at the capture boundary lets\n * every CUA client pass it through instead of hardcoding or inferring it.\n */\nexport interface ScreenshotProviderResult {\n base64: string;\n mediaType: \"image/png\" | \"image/jpeg\";\n}\n\n// =============================================================================\n// Variable Types\n// =============================================================================\n\n/**\n * A variable value can be a simple primitive or a rich object with an optional description.\n * This unified type is shared across `act`, `agent.execute`, and other methods.\n *\n * @example Simple (backward-compatible):\n * ```typescript\n * variables: { username: \"john@example.com\" }\n * ```\n *\n * @example Rich with description (useful for agents):\n * ```typescript\n * variables: {\n * username: { value: \"john@example.com\", description: \"The login email\" }\n * }\n * ```\n */\nexport type VariableValue =\n | string\n | number\n | boolean\n | { value: string | number | boolean; description?: string };\n\n/**\n * A collection of named variables for use in act, agent, and other methods.\n */\nexport type Variables = Record<string, VariableValue>;\n\nexport interface AgentContext {\n options: AgentExecuteOptionsBase;\n maxSteps: number;\n systemPrompt: string;\n allTools: ToolSet;\n messages: ModelMessage[];\n wrappedModel: ReturnType<typeof wrapLanguageModel>;\n initialPageUrl: string;\n}\n\nexport interface AgentState {\n collectedReasoning: string[];\n actions: AgentAction[];\n finalMessage: string;\n completed: boolean;\n currentPageUrl: string;\n}\n\nexport interface AgentAction {\n type: string;\n reasoning?: string;\n taskCompleted?: boolean;\n action?: string;\n // Tool-specific fields\n timeMs?: number; // wait tool\n pageText?: string; // ariaTree tool\n pageUrl?: string; // ariaTree tool\n instruction?: string; // various tools\n [key: string]: unknown;\n}\n\nexport interface AgentResult {\n success: boolean;\n message: string;\n actions: AgentAction[];\n completed: boolean;\n metadata?: Record<string, unknown>;\n usage?: {\n input_tokens: number;\n output_tokens: number;\n reasoning_tokens?: number;\n cached_input_tokens?: number;\n inference_time_ms: number;\n };\n /**\n * The conversation messages from this execution.\n * Pass these to a subsequent execute() call via the `messages` option to continue the conversation.\n * @experimental\n */\n messages?: ModelMessage[];\n /**\n * Custom output data extracted based on the `output` schema provided in execute options.\n * Only populated if an `output` schema was provided.\n * @experimental\n */\n output?: Record<string, unknown>;\n}\n\nexport type AgentStreamResult = StreamTextResult<ToolSet, never> & {\n result: Promise<AgentResult>;\n};\n\n/**\n * Base callbacks shared between execute (non-streaming) and streaming modes.\n */\nexport interface AgentCallbacks {\n /**\n * Optional function called before each step to modify settings.\n * You can change the model, tool choices, active tools, system prompt,\n * and input messages for each step.\n */\n prepareStep?: PrepareStepFunction<ToolSet>;\n /**\n * Callback called when each step (LLM call) is finished.\n * This is called for intermediate steps as well as the final step.\n */\n onStepFinish?:\n | GenerateTextOnStepFinishCallback<ToolSet>\n | StreamTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback called when Stagehand captures agent-run evidence such as\n * screenshots, completed tool/action steps, or post-action observations.\n */\n onEvidence?: AgentEvidenceCallback;\n}\n\n/**\n * Error message type for streaming-only callbacks used in non-streaming mode.\n * This provides a clear error message when users try to use streaming callbacks without stream: true.\n */\ntype StreamingCallbackNotAvailable =\n \"This callback requires 'stream: true' in AgentConfig. Set stream: true to use streaming callbacks like onChunk, onFinish, onError, and onAbort.\";\n\n/**\n * Error message for safety confirmation callback misuse.\n * Safety confirmations are only available for non-streaming CUA agent executions.\n */\ntype SafetyConfirmationCallbackNotAvailable =\n \"Safety confirmation callbacks are only available via non-streaming AgentExecuteOptions.callbacks when using mode: 'cua'.\";\n\n/**\n * Callbacks specific to the non-streaming execute method.\n */\nexport interface AgentExecuteCallbacks extends AgentCallbacks {\n /**\n * Callback called when each step (LLM call) is finished.\n */\n onStepFinish?: GenerateTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback for handling safety confirmation requests from CUA providers.\n * Only available when running an agent configured with mode: \"cua\".\n */\n onSafetyConfirmation?: SafetyConfirmationHandler;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onChunk:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onChunk: async (chunk) => console.log(chunk) }\n * });\n * ```\n */\n onChunk?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onFinish:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onFinish: (event) => console.log(\"Done!\", event) }\n * });\n * ```\n */\n onFinish?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onError:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onError: ({ error }) => console.error(error) }\n * });\n * ```\n */\n onError?: StreamingCallbackNotAvailable;\n\n /**\n * NOT AVAILABLE in non-streaming mode.\n * This callback requires `stream: true` in AgentConfig.\n *\n * @example\n * ```typescript\n * // Enable streaming to use onAbort:\n * const agent = stagehand.agent({ stream: true });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: { onAbort: (event) => console.log(\"Aborted\", event.steps) }\n * });\n * ```\n */\n onAbort?: StreamingCallbackNotAvailable;\n}\n\n/**\n * Callbacks specific to the streaming mode.\n */\nexport interface AgentStreamCallbacks extends AgentCallbacks {\n /**\n * Callback called when each step (LLM call) is finished during streaming.\n */\n onStepFinish?: StreamTextOnStepFinishCallback<ToolSet>;\n /**\n * Callback called when an error occurs during streaming.\n * Use this to log errors or handle error states.\n */\n onError?: StreamTextOnErrorCallback;\n /**\n * Callback called for each chunk of the stream.\n * Stream processing will pause until the callback promise resolves.\n */\n onChunk?: StreamTextOnChunkCallback<ToolSet>;\n /**\n * Callback called when the stream finishes.\n */\n onFinish?: StreamTextOnFinishCallback<ToolSet>;\n /**\n * Callback called when the stream is aborted.\n */\n onAbort?: (event: {\n steps: Array<StepResult<ToolSet>>;\n }) => PromiseLike<void> | void;\n /**\n * NOT AVAILABLE in streaming mode.\n * Safety confirmations currently require non-streaming execute() on CUA agents.\n */\n onSafetyConfirmation?: SafetyConfirmationCallbackNotAvailable;\n}\n\n/**\n * Base options for agent execution (without callbacks).\n */\nexport interface AgentExecuteOptionsBase {\n instruction: string;\n maxSteps?: number;\n page?: PlaywrightPage | PuppeteerPage | PatchrightPage | Page;\n highlightCursor?: boolean;\n /**\n * Previous conversation messages to continue from.\n * Pass the `messages` from a previous AgentResult to continue that conversation.\n * @experimental\n */\n messages?: ModelMessage[];\n /**\n * An AbortSignal that can be used to cancel the agent execution.\n * When aborted, the agent will stop and return a partial result.\n * @experimental\n *\n * @example\n * ```typescript\n * const controller = new AbortController();\n * setTimeout(() => controller.abort(), 30000); // 30 second timeout\n *\n * const result = await agent.execute({\n * instruction: \"...\",\n * signal: controller.signal\n * });\n * ```\n */\n signal?: AbortSignal;\n /**\n * Tools to exclude from this execution.\n * Pass an array of tool names to prevent the agent from using those tools.\n *\n * **Note:** Not supported in CUA mode (`mode: \"cua\"`).\n *\n * **Available tools by mode:**\n *\n * **DOM mode (default):**\n * - `act` - Perform semantic actions (click, type, etc.)\n * - `fillForm` - Fill form fields using DOM selectors\n * - `ariaTree` - Get accessibility tree of the page\n * - `extract` - Extract structured data from page\n * - `goto` - Navigate to a URL\n * - `scroll` - Scroll using semantic directions (up/down/left/right)\n * - `keys` - Press keyboard keys\n * - `navback` - Navigate back in history\n * - `screenshot` - Take a screenshot\n * - `think` - Agent reasoning/planning step\n * - `wait` - Wait for time or condition\n * - `done` - Mark task as complete\n * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)\n *\n * **Hybrid mode:**\n * - `click` - Click at specific coordinates\n * - `type` - Type text at coordinates\n * - `dragAndDrop` - Drag from one point to another\n * - `clickAndHold` - Click and hold at coordinates\n * - `fillFormVision` - Fill forms using vision/coordinates\n * - `act` - Perform semantic actions\n * - `ariaTree` - Get accessibility tree\n * - `extract` - Extract data from page\n * - `goto` - Navigate to URL\n * - `scroll` - Scroll using coordinates\n * - `keys` - Press keyboard keys\n * - `navback` - Navigate back\n * - `screenshot` - Take screenshot\n * - `think` - Agent reasoning step\n * - `wait` - Wait for time/condition\n * - `done` - Mark task complete\n * - `search` - Web search (requires useSearch: true and BROWSERBASE_API_KEY)\n *\n * @experimental\n * @example\n * ```typescript\n * // Exclude screenshot and extract tools\n * const result = await agent.execute({\n * instruction: \"Click the submit button\",\n * excludeTools: [\"screenshot\", \"extract\"]\n * });\n * ```\n */\n excludeTools?: string[];\n /**\n * A Zod schema defining custom output data to return when the task completes.\n * The agent will populate this data in the final done tool call.\n *\n * @experimental\n * @example\n * ```typescript\n * const result = await agent.execute({\n * instruction: \"Find the cheapest flight from NYC to LA\",\n * output: z.object({\n * price: z.string().describe(\"The price of the flight\"),\n * airline: z.string().describe(\"The airline name\"),\n * departureTime: z.string().describe(\"Departure time\"),\n * }),\n * });\n *\n * console.log(result.output); // { price: \"$199\", airline: \"Delta\", departureTime: \"8:00 AM\" }\n * ```\n */\n output?: StagehandZodObject;\n /**\n * Variables that the agent can use when filling forms or typing text.\n * The agent will see variable names and descriptions in the system prompt,\n * and can use them via `%variableName%` syntax in act/type/fillForm tool calls.\n *\n * Accepts both simple values and rich objects with descriptions (same type as `act`).\n *\n * **Note:** Not supported in CUA mode (`mode: \"cua\"`).\n *\n * @example\n * ```typescript\n * // Simple values\n * variables: { username: \"john@example.com\", password: \"secret123\" }\n *\n * // Rich values with descriptions (helps the agent understand context)\n * variables: {\n * username: { value: \"john@example.com\", description: \"The login email\" },\n * password: { value: \"secret123\", description: \"The login password\" },\n * }\n * ```\n */\n variables?: Variables;\n /**\n * Timeout in milliseconds for each agent tool call.\n * If a tool call exceeds this duration, it will be aborted and\n * reported back to the LLM as a timeout error so it can retry or adjust.\n * For tools that call v3 methods (act, extract, fillForm, ariaTree), the\n * timeout is also forwarded to the underlying v3 call for true cancellation.\n * @default 45000 (45 seconds)\n */\n toolTimeout?: number;\n /**\n * Enable the web search tool powered by Browserbase Search API.\n * Requires a valid Browserbase API key (BROWSERBASE_API_KEY).\n * When set to true, the agent gains access to a `search` tool for web searches.\n *\n * @example\n * ```typescript\n * const result = await agent.execute({\n * instruction: \"Find the latest news about AI\",\n * useSearch: true,\n * });\n * ```\n */\n useSearch?: boolean;\n}\n\n/**\n * Options for non-streaming agent execution.\n * Only accepts AgentExecuteCallbacks (no streaming-specific callbacks like onChunk, onFinish).\n */\nexport interface AgentExecuteOptions extends AgentExecuteOptionsBase {\n /**\n * Callbacks for non-streaming agent execution.\n * For streaming callbacks (onChunk, onFinish, onError, onAbort), use stream: true in AgentConfig.\n */\n callbacks?: AgentExecuteCallbacks;\n}\n\n/**\n * Options for streaming agent execution.\n * Accepts AgentStreamCallbacks including onChunk, onFinish, onError, and onAbort.\n */\nexport interface AgentStreamExecuteOptions extends AgentExecuteOptionsBase {\n /**\n * Callbacks for streaming agent execution.\n * Includes streaming-specific callbacks: onChunk, onFinish, onError, onAbort.\n */\n callbacks?: AgentStreamCallbacks;\n}\nexport type AgentType =\n | \"openai\"\n | \"anthropic\"\n | \"google\"\n | \"microsoft\"\n | \"bedrock\"\n | \"vertex\"\n | \"azure\";\n\nexport const AVAILABLE_CUA_MODELS = [\n \"openai/gpt-5.4\",\n \"openai/gpt-5.4-mini\",\n \"openai/gpt-5.5\",\n \"openai/gpt-5.6-terra\",\n \"openai/gpt-5.6-luna\",\n \"openai/gpt-5.6-sol\",\n \"openai/computer-use-preview\",\n \"openai/computer-use-preview-2025-03-11\",\n \"anthropic/claude-opus-4-5-20251101\",\n \"anthropic/claude-opus-4-6\",\n \"anthropic/claude-opus-4-8\",\n \"anthropic/claude-sonnet-4-6\",\n \"anthropic/claude-haiku-4-5\",\n \"anthropic/claude-haiku-4-5-20251001\",\n \"anthropic/claude-sonnet-4-20250514\",\n \"anthropic/claude-sonnet-4-5-20250929\",\n \"anthropic/claude-fable-5\",\n \"google/gemini-2.5-computer-use-preview-10-2025\",\n \"google/gemini-3-flash-preview\",\n \"google/gemini-3.5-flash\",\n \"google/gemini-3-pro-preview\",\n \"microsoft/fara-7b\",\n] as const;\nexport type AvailableCuaModel = (typeof AVAILABLE_CUA_MODELS)[number];\n\nexport interface AgentExecutionOptions<\n TOptions extends AgentExecuteOptions = AgentExecuteOptions,\n> {\n options: TOptions;\n logger: (message: LogLine) => void;\n retries?: number;\n}\n\nexport interface AgentHandlerOptions {\n modelName: string;\n clientOptions?: ClientOptions;\n userProvidedInstructions?: string;\n experimental?: boolean;\n}\n\nexport interface ActionExecutionResult {\n success: boolean;\n error?: string;\n data?: unknown;\n}\n\n/**\n * Represents a safety check that requires user confirmation before proceeding.\n * These are issued by CUA providers (OpenAI, Google) when the agent attempts\n * potentially risky actions.\n */\nexport interface SafetyCheck {\n /** Unique identifier for this safety check */\n id: string;\n /** Code identifying the type of safety concern */\n code: string;\n /** Human-readable description of the safety concern */\n message: string;\n}\n\n/**\n * Response from the user for a safety confirmation request.\n */\nexport interface SafetyConfirmationResponse {\n /** Whether the user acknowledged/approved the safety checks */\n acknowledged: boolean;\n}\n\n/**\n * Callback for handling safety confirmation requests.\n * Called when the CUA provider issues safety checks that require user confirmation.\n * The callback should return a promise that resolves when the user has made a decision.\n *\n * @param safetyChecks - Array of safety checks requiring confirmation\n * @returns Promise resolving to the user's response\n *\n * @example\n * ```typescript\n * const agent = stagehand.agent({\n * mode: \"cua\",\n * });\n * await agent.execute({\n * instruction: \"...\",\n * callbacks: {\n * onSafetyConfirmation: async (checks) => {\n * console.log(\"Safety checks:\", checks);\n * const userApproved = await showConfirmationDialog(checks);\n * return { acknowledged: userApproved };\n * },\n * },\n * });\n * ```\n */\nexport type SafetyConfirmationHandler = (\n safetyChecks: SafetyCheck[],\n) => Promise<SafetyConfirmationResponse>;\n\n// Anthropic types:\n\nexport interface ToolUseItem extends ResponseItem {\n type: \"tool_use\";\n id: string; // This is the correct property name from Anthropic's API\n name: string; // Name of the tool being used\n input: Record<string, unknown>;\n}\n\nexport interface AnthropicMessage {\n role: string;\n content: string | Array<AnthropicContentBlock>;\n}\n\nexport interface AnthropicContentBlock {\n type: string;\n [key: string]: unknown;\n}\n\nexport interface AnthropicTextBlock extends AnthropicContentBlock {\n type: \"text\";\n text: string;\n}\n\nexport interface AnthropicToolResult {\n type: \"tool_result\";\n tool_use_id: string;\n content: string | Array<AnthropicContentBlock>;\n}\n\n// OpenAI types:\n\nexport interface ResponseItem {\n type: string;\n id: string;\n [key: string]: unknown;\n}\n\nexport interface ComputerCallItem extends ResponseItem {\n type: \"computer_call\";\n call_id: string;\n action?: {\n type: string;\n [key: string]: unknown;\n };\n actions?: Array<{\n type: string;\n [key: string]: unknown;\n }>;\n pending_safety_checks?: Array<{\n id: string;\n code: string;\n message: string;\n }>;\n}\n\nexport interface FunctionCallItem extends ResponseItem {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\n\nexport type ResponseInputItem =\n | { role: string; content: string }\n | {\n type: \"computer_call_output\";\n call_id: string;\n output:\n | {\n type: \"input_image\" | \"computer_screenshot\";\n image_url: string;\n detail?: \"original\" | \"high\" | \"low\";\n current_url?: string;\n error?: string;\n [key: string]: unknown;\n }\n | string;\n acknowledged_safety_checks?: Array<{\n id: string;\n code: string;\n message: string;\n }>;\n }\n | {\n type: \"function_call_output\";\n call_id: string;\n output: string;\n };\n\nexport interface AgentInstance {\n execute: (\n instructionOrOptions: string | AgentExecuteOptions,\n ) => Promise<AgentResult>;\n}\n\nexport type AgentProviderType = AgentType;\n\nexport type AgentModelConfig<TModelName extends string = string> = {\n modelName: TModelName;\n} & Record<string, unknown>;\n\n/**\n * Agent tool mode determines which set of tools are available to the agent.\n * - 'dom': Uses DOM-based tools (act, fillForm) - better for structured page interactions\n * - 'hybrid': Uses coordinate-based tools (click, type, dragAndDrop, etc.) - better for visual/screenshot-based interactions\n * - 'cua': Uses Computer Use Agent (CUA) providers like Anthropic Claude or Google Gemini for screenshot-based automation\n */\nexport type AgentToolMode = \"dom\" | \"hybrid\" | \"cua\";\n\nexport type AgentConfig = {\n /**\n * Custom system prompt to provide to the agent. Overrides the default system prompt.\n */\n systemPrompt?: string;\n /**\n * MCP integrations - Array of Client objects\n */\n integrations?: (Client | string)[];\n /**\n * Tools passed to the agent client\n */\n tools?: ToolSet;\n /**\n * @deprecated Use `mode: \"cua\"` instead. This option will be removed in a future version.\n * Enables Computer Use Agent (CUA) mode.\n */\n cua?: boolean;\n /**\n * The model to use for agent functionality\n */\n model?: string | AgentModelConfig<string>;\n /**\n * The model to use for tool execution (observe/act calls within agent tools).\n * If not specified, inherits from the main model configuration.\n * Format: \"provider/model\" (e.g., \"openai/gpt-4o-mini\", \"google/gemini-2.0-flash-exp\")\n */\n executionModel?: string | AgentModelConfig<string>;\n /**\n * Enable streaming mode for the agent.\n * When true, execute() returns AgentStreamResult with textStream for incremental output.\n * When false (default), execute() returns AgentResult after completion.\n */\n stream?: boolean;\n /**\n * Tool mode for the agent. Determines which set of tools are available.\n * - 'dom' (default): Uses DOM-based tools (act, fillForm) for structured interactions\n * - 'hybrid': Uses coordinate-based tools (click, type, dragAndDrop, clickAndHold, fillFormVision)\n * for visual/screenshot-based interactions\n * - 'cua': Uses Computer Use Agent (CUA) providers for screenshot-based automation\n */\n mode?: AgentToolMode;\n};\n\n/**\n * Agent instance returned when stream: true is set in AgentConfig.\n * execute() returns a streaming result that can be consumed incrementally.\n * Accepts AgentStreamExecuteOptions with streaming-specific callbacks.\n */\nexport interface StreamingAgentInstance {\n execute: (\n instructionOrOptions: string | AgentStreamExecuteOptions,\n ) => Promise<AgentStreamResult>;\n}\n\n/**\n * Agent instance returned when stream is false or not set in AgentConfig.\n * execute() returns a result after the agent completes.\n * Accepts AgentExecuteOptions with non-streaming callbacks only.\n */\nexport interface NonStreamingAgentInstance {\n execute: (\n instructionOrOptions: string | AgentExecuteOptions,\n ) => Promise<AgentResult>;\n}\n\n// =============================================================================\n// Vision Action Tool Result Types\n// =============================================================================\n\n/**\n * Content item type for toModelOutput return values.\n * Used in tool definitions to return text and/or media to the model.\n */\nexport type ModelOutputContentItem =\n | { type: \"text\"; text: string }\n | { type: \"media\"; mediaType: string; data: string };\n\nexport interface ClickToolResult {\n success: boolean;\n describe?: string;\n coordinates?: number[];\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface TypeToolResult {\n success: boolean;\n describe?: string;\n text?: string;\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface DragAndDropToolResult {\n success: boolean;\n describe?: string;\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface FillFormField {\n action: string;\n value: string;\n coordinates: { x: number; y: number };\n}\n\nexport interface FillFormVisionToolResult {\n success: boolean;\n playwrightArguments?: FillFormField[];\n error?: string;\n screenshotBase64?: string;\n}\n\nexport interface ScrollToolResult {\n success: boolean;\n message: string;\n scrolledPixels: number;\n error?: string;\n}\n\nexport interface ScrollVisionToolResult extends ScrollToolResult {\n screenshotBase64?: string;\n}\n\nexport interface WaitToolResult {\n success: boolean;\n waited: number;\n screenshotBase64?: string;\n error?: string;\n}\n"]}
@@ -80,6 +80,7 @@ export type ModelProvider = "openai" | "anthropic" | "cerebras" | "groq" | "goog
80
80
  * - "max": Claude always thinks with no constraints
81
81
  */
82
82
  export type ThinkingEffort = "none" | "low" | "medium" | "high" | "xhigh" | "max";
83
+ export type OpenAIEndpointFormat = "responses" | "chat";
83
84
  export type ClientOptions = (OpenAIClientOptions | AnthropicClientOptions) & {
84
85
  apiKey?: string;
85
86
  provider?: AgentProviderType;
@@ -113,6 +114,12 @@ export type ClientOptions = (OpenAIClientOptions | AnthropicClientOptions) & {
113
114
  headers?: Record<string, string>;
114
115
  /** Reasoning effort for reasoning-capable models (e.g., "none", "low", "medium", "high") */
115
116
  reasoningEffort?: string;
117
+ /**
118
+ * Wire format used against the OpenAI-compatible endpoint at `baseURL`.
119
+ * Defaults to the Responses API. Use `chat` for providers that expose only
120
+ * an OpenAI-compatible Chat Completions endpoint (e.g. Databricks).
121
+ */
122
+ openaiEndpointFormat?: OpenAIEndpointFormat;
116
123
  };
117
124
  export type ModelConfiguration = AvailableModel | (ClientOptions & {
118
125
  modelName: AvailableModel;
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/model.ts"],"names":[],"mappings":"","sourcesContent":["import type { ClientOptions as AnthropicClientOptionsBase } from \"@anthropic-ai/sdk\";\nimport type {\n LanguageModelV2,\n LanguageModelV2Middleware,\n} from \"@ai-sdk/provider\";\nimport type { ClientOptions as OpenAIClientOptionsBase } from \"openai\";\nimport type { AgentProviderType } from \"./agent.js\";\n\nexport type OpenAIClientOptions = Pick<\n OpenAIClientOptionsBase,\n \"baseURL\" | \"apiKey\"\n>;\n\nexport type AnthropicClientOptions = Pick<\n AnthropicClientOptionsBase,\n \"baseURL\" | \"apiKey\"\n>;\n\nexport interface GoogleServiceAccountCredentials {\n type?: \"service_account\";\n project_id?: string;\n private_key_id?: string;\n private_key: string;\n client_email: string;\n client_id?: string;\n auth_uri?: string;\n token_uri?: string;\n auth_provider_x509_cert_url?: string;\n client_x509_cert_url?: string;\n universe_domain?: string;\n}\n\nexport interface GoogleServiceAccountAuth {\n type: \"googleServiceAccount\";\n credentials: GoogleServiceAccountCredentials;\n scopes?: string | string[];\n projectId?: string;\n universeDomain?: string;\n}\n\nexport interface AzureEntraIdAuth {\n type: \"azureEntraId\";\n token: string;\n}\n\nexport type ModelAuth = GoogleServiceAccountAuth | AzureEntraIdAuth;\n\nexport interface VertexProviderOptions {\n project: string;\n location: string;\n baseURL?: string;\n headers?: Record<string, string>;\n}\n\nexport interface AzureProviderOptions {\n resourceName?: string;\n baseURL?: string;\n apiVersion?: string;\n useDeploymentBasedUrls?: boolean;\n headers?: Record<string, string>;\n}\n\nexport type ModelProviderOptions =\n | { vertex: VertexProviderOptions; azure?: never }\n | { azure: AzureProviderOptions; vertex?: never };\n\nexport type AnthropicJsonSchemaObject = {\n definitions?: {\n MySchema?: {\n properties?: Record<string, unknown>;\n required?: string[];\n };\n };\n properties?: Record<string, unknown>;\n required?: string[];\n} & Record<string, unknown>;\n\nexport interface LLMTool {\n type: \"function\";\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\nexport type AISDKProvider = (modelName: string) => LanguageModelV2;\n// Represents a function that takes options (like apiKey) and returns an AISDKProvider\nexport type AISDKCustomProvider = (options: ClientOptions) => AISDKProvider;\n\nexport type AvailableModel =\n | \"gpt-4.1\"\n | \"gpt-4.1-mini\"\n | \"gpt-4.1-nano\"\n | \"o4-mini\"\n | \"o3\"\n | \"o3-mini\"\n | \"o1\"\n | \"o1-mini\"\n | \"gpt-4o\"\n | \"gpt-4o-mini\"\n | \"gpt-4o-2024-08-06\"\n | \"gpt-4.5-preview\"\n | \"o1-preview\"\n | \"cerebras-llama-3.3-70b\"\n | \"cerebras-llama-3.1-8b\"\n | \"groq-llama-3.3-70b-versatile\"\n | \"groq-llama-3.3-70b-specdec\"\n | \"gemini-1.5-flash\"\n | \"gemini-1.5-pro\"\n | \"gemini-1.5-flash-8b\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.0-flash\"\n | \"gemini-2.5-flash-preview-04-17\"\n | \"gemini-2.5-pro-preview-03-25\"\n | string;\n\nexport type ModelProvider =\n | \"openai\"\n | \"anthropic\"\n | \"cerebras\"\n | \"groq\"\n | \"google\"\n | \"aisdk\";\n\n/**\n * Effort levels for Claude adaptive thinking.\n * Used with Claude 4.6+ models (claude-opus-4-6, claude-sonnet-4-6).\n * - \"none\": Disable adaptive thinking entirely\n * - \"low\": Claude minimizes thinking, skips for simple tasks\n * - \"medium\": Claude uses moderate thinking, may skip for simple queries (default)\n * - \"high\": Claude always thinks with deep reasoning\n * - \"xhigh\": Deeper reasoning than \"high\" (Opus 4.7/4.8 and Fable 5 only)\n * - \"max\": Claude always thinks with no constraints\n */\nexport type ThinkingEffort =\n | \"none\"\n | \"low\"\n | \"medium\"\n | \"high\"\n | \"xhigh\"\n | \"max\";\n\nexport type ClientOptions = (OpenAIClientOptions | AnthropicClientOptions) & {\n apiKey?: string;\n provider?: AgentProviderType;\n auth?: ModelAuth;\n providerOptions?: ModelProviderOptions;\n baseURL?: string;\n /** OpenAI organization ID */\n organization?: string;\n /** Delay between agent actions in ms */\n waitBetweenActions?: number;\n /**\n * @deprecated For Claude 4.6+ models, use `thinkingEffort` instead.\n * Anthropic thinking budget for extended thinking (used with older Claude models like 4.5).\n * Sets `thinking.type: \"enabled\"` with the specified `budget_tokens`.\n */\n thinkingBudget?: number;\n /**\n * Effort level for Claude adaptive thinking (Claude 4.6+ models only).\n * Uses `thinking.type: \"adaptive\"` with `output_config.effort`.\n * This is the recommended approach for Claude Opus 4.6 and Sonnet 4.6.\n * @see https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking\n */\n thinkingEffort?: ThinkingEffort;\n /** Environment type for CUA agents (browser, mac, windows, ubuntu) */\n environment?: string;\n /** Max images for Microsoft FARA agent */\n maxImages?: number;\n /** Temperature for model inference */\n temperature?: number;\n /** Custom headers sent with every request to the provider */\n headers?: Record<string, string>;\n /** Reasoning effort for reasoning-capable models (e.g., \"none\", \"low\", \"medium\", \"high\") */\n reasoningEffort?: string;\n};\n\nexport type ModelConfiguration =\n | AvailableModel\n | (ClientOptions & {\n modelName: AvailableModel;\n /**\n * Optional AI SDK middleware applied to every LanguageModelV2 created for this model.\n * Use this to intercept LLM calls for usage tracking, logging, request transforms, etc.\n *\n * Only effective when running locally (direct mode). Cannot be serialized over HTTP,\n */\n middleware?: LanguageModelV2Middleware;\n });\n"]}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../../lib/v3/types/public/model.ts"],"names":[],"mappings":"","sourcesContent":["import type { ClientOptions as AnthropicClientOptionsBase } from \"@anthropic-ai/sdk\";\nimport type {\n LanguageModelV2,\n LanguageModelV2Middleware,\n} from \"@ai-sdk/provider\";\nimport type { ClientOptions as OpenAIClientOptionsBase } from \"openai\";\nimport type { AgentProviderType } from \"./agent.js\";\n\nexport type OpenAIClientOptions = Pick<\n OpenAIClientOptionsBase,\n \"baseURL\" | \"apiKey\"\n>;\n\nexport type AnthropicClientOptions = Pick<\n AnthropicClientOptionsBase,\n \"baseURL\" | \"apiKey\"\n>;\n\nexport interface GoogleServiceAccountCredentials {\n type?: \"service_account\";\n project_id?: string;\n private_key_id?: string;\n private_key: string;\n client_email: string;\n client_id?: string;\n auth_uri?: string;\n token_uri?: string;\n auth_provider_x509_cert_url?: string;\n client_x509_cert_url?: string;\n universe_domain?: string;\n}\n\nexport interface GoogleServiceAccountAuth {\n type: \"googleServiceAccount\";\n credentials: GoogleServiceAccountCredentials;\n scopes?: string | string[];\n projectId?: string;\n universeDomain?: string;\n}\n\nexport interface AzureEntraIdAuth {\n type: \"azureEntraId\";\n token: string;\n}\n\nexport type ModelAuth = GoogleServiceAccountAuth | AzureEntraIdAuth;\n\nexport interface VertexProviderOptions {\n project: string;\n location: string;\n baseURL?: string;\n headers?: Record<string, string>;\n}\n\nexport interface AzureProviderOptions {\n resourceName?: string;\n baseURL?: string;\n apiVersion?: string;\n useDeploymentBasedUrls?: boolean;\n headers?: Record<string, string>;\n}\n\nexport type ModelProviderOptions =\n | { vertex: VertexProviderOptions; azure?: never }\n | { azure: AzureProviderOptions; vertex?: never };\n\nexport type AnthropicJsonSchemaObject = {\n definitions?: {\n MySchema?: {\n properties?: Record<string, unknown>;\n required?: string[];\n };\n };\n properties?: Record<string, unknown>;\n required?: string[];\n} & Record<string, unknown>;\n\nexport interface LLMTool {\n type: \"function\";\n name: string;\n description: string;\n parameters: Record<string, unknown>;\n}\n\nexport type AISDKProvider = (modelName: string) => LanguageModelV2;\n// Represents a function that takes options (like apiKey) and returns an AISDKProvider\nexport type AISDKCustomProvider = (options: ClientOptions) => AISDKProvider;\n\nexport type AvailableModel =\n | \"gpt-4.1\"\n | \"gpt-4.1-mini\"\n | \"gpt-4.1-nano\"\n | \"o4-mini\"\n | \"o3\"\n | \"o3-mini\"\n | \"o1\"\n | \"o1-mini\"\n | \"gpt-4o\"\n | \"gpt-4o-mini\"\n | \"gpt-4o-2024-08-06\"\n | \"gpt-4.5-preview\"\n | \"o1-preview\"\n | \"cerebras-llama-3.3-70b\"\n | \"cerebras-llama-3.1-8b\"\n | \"groq-llama-3.3-70b-versatile\"\n | \"groq-llama-3.3-70b-specdec\"\n | \"gemini-1.5-flash\"\n | \"gemini-1.5-pro\"\n | \"gemini-1.5-flash-8b\"\n | \"gemini-2.0-flash-lite\"\n | \"gemini-2.0-flash\"\n | \"gemini-2.5-flash-preview-04-17\"\n | \"gemini-2.5-pro-preview-03-25\"\n | string;\n\nexport type ModelProvider =\n | \"openai\"\n | \"anthropic\"\n | \"cerebras\"\n | \"groq\"\n | \"google\"\n | \"aisdk\";\n\n/**\n * Effort levels for Claude adaptive thinking.\n * Used with Claude 4.6+ models (claude-opus-4-6, claude-sonnet-4-6).\n * - \"none\": Disable adaptive thinking entirely\n * - \"low\": Claude minimizes thinking, skips for simple tasks\n * - \"medium\": Claude uses moderate thinking, may skip for simple queries (default)\n * - \"high\": Claude always thinks with deep reasoning\n * - \"xhigh\": Deeper reasoning than \"high\" (Opus 4.7/4.8 and Fable 5 only)\n * - \"max\": Claude always thinks with no constraints\n */\nexport type ThinkingEffort =\n | \"none\"\n | \"low\"\n | \"medium\"\n | \"high\"\n | \"xhigh\"\n | \"max\";\n\nexport type OpenAIEndpointFormat = \"responses\" | \"chat\";\n\nexport type ClientOptions = (OpenAIClientOptions | AnthropicClientOptions) & {\n apiKey?: string;\n provider?: AgentProviderType;\n auth?: ModelAuth;\n providerOptions?: ModelProviderOptions;\n baseURL?: string;\n /** OpenAI organization ID */\n organization?: string;\n /** Delay between agent actions in ms */\n waitBetweenActions?: number;\n /**\n * @deprecated For Claude 4.6+ models, use `thinkingEffort` instead.\n * Anthropic thinking budget for extended thinking (used with older Claude models like 4.5).\n * Sets `thinking.type: \"enabled\"` with the specified `budget_tokens`.\n */\n thinkingBudget?: number;\n /**\n * Effort level for Claude adaptive thinking (Claude 4.6+ models only).\n * Uses `thinking.type: \"adaptive\"` with `output_config.effort`.\n * This is the recommended approach for Claude Opus 4.6 and Sonnet 4.6.\n * @see https://platform.claude.com/docs/en/build-with-claude/adaptive-thinking\n */\n thinkingEffort?: ThinkingEffort;\n /** Environment type for CUA agents (browser, mac, windows, ubuntu) */\n environment?: string;\n /** Max images for Microsoft FARA agent */\n maxImages?: number;\n /** Temperature for model inference */\n temperature?: number;\n /** Custom headers sent with every request to the provider */\n headers?: Record<string, string>;\n /** Reasoning effort for reasoning-capable models (e.g., \"none\", \"low\", \"medium\", \"high\") */\n reasoningEffort?: string;\n /**\n * Wire format used against the OpenAI-compatible endpoint at `baseURL`.\n * Defaults to the Responses API. Use `chat` for providers that expose only\n * an OpenAI-compatible Chat Completions endpoint (e.g. Databricks).\n */\n openaiEndpointFormat?: OpenAIEndpointFormat;\n};\n\nexport type ModelConfiguration =\n | AvailableModel\n | (ClientOptions & {\n modelName: AvailableModel;\n /**\n * Optional AI SDK middleware applied to every LanguageModelV2 created for this model.\n * Use this to intercept LLM calls for usage tracking, logging, request transforms, etc.\n *\n * Only effective when running locally (direct mode). Cannot be serialized over HTTP,\n */\n middleware?: LanguageModelV2Middleware;\n });\n"]}
@@ -161,14 +161,15 @@ async function tryScopedSnapshot(page, options, context, pierce, sessionToIndex,
161
161
  }
162
162
  }
163
163
  const scopedUrlMap = { ...urlMap };
164
+ const wellFormedOutline = outline.toWellFormed();
164
165
  const snapshot = {
165
- combinedTree: outline,
166
+ combinedTree: wellFormedOutline,
166
167
  combinedXpathMap: scopedXpathMap,
167
168
  combinedUrlMap: scopedUrlMap,
168
169
  perFrame: [
169
170
  {
170
171
  frameId: targetFrameId,
171
- outline,
172
+ outline: wellFormedOutline,
172
173
  xpathMap,
173
174
  urlMap,
174
175
  },
@@ -573,7 +574,7 @@ function mergeFramesIntoSnapshot(context, perFrameMaps, perFrameOutlines, absPre
573
574
  const rootOutline = perFrameOutlines.find((o) => o.frameId === context.rootId)?.outline ??
574
575
  perFrameOutlines[0]?.outline ??
575
576
  "";
576
- const combinedTree = (0, treeFormatUtils_js_1.injectSubtrees)(rootOutline, idToTree);
577
+ const combinedTree = (0, treeFormatUtils_js_1.injectSubtrees)(rootOutline, idToTree).toWellFormed();
577
578
  return {
578
579
  combinedTree,
579
580
  combinedXpathMap,