diff --git a/.changeset/open-model-ids.md b/.changeset/open-model-ids.md new file mode 100644 index 0000000000..274e774a52 --- /dev/null +++ b/.changeset/open-model-ids.md @@ -0,0 +1,9 @@ +--- +"@browserbasehq/stagehand-protocol": minor +"@browserbasehq/stagehand-extension": patch +"@browserbasehq/stagehand-python": minor +"@browserbasehq/stagehand-go": minor +"@browserbasehq/stagehand": minor +--- + +Accept any nonempty model ID under the OpenAI, Anthropic, and Google provider prefixes without a Stagehand release. Unknown model IDs now fail on the provider request instead of during configuration validation. Public model ID types widen from literal unions to strings. Examples and generated schema samples use current provider IDs such as `openai/gpt-6-luna`, `anthropic/claude-sonnet-5-5`, and `google/gemini-3.8-flash`. diff --git a/.changeset/remove-groq-cerebras.md b/.changeset/remove-groq-cerebras.md new file mode 100644 index 0000000000..dd341535f1 --- /dev/null +++ b/.changeset/remove-groq-cerebras.md @@ -0,0 +1,9 @@ +--- +"@browserbasehq/stagehand-protocol": major +"@browserbasehq/stagehand-extension": patch +"@browserbasehq/stagehand-python": patch +"@browserbasehq/stagehand-go": patch +"@browserbasehq/stagehand": patch +--- + +Remove native Groq and Cerebras provider support. diff --git a/README.md b/README.md index 9339aa1a58..4de6ed57c2 100644 --- a/README.md +++ b/README.md @@ -58,7 +58,7 @@ import { z } from "zod/v4"; const browser = await localBrowser.launch({ userDataDir: "./browser-data" }); const stagehand = await Stagehand.create({ browser, - model: { modelName: "openai/gpt-5.4-mini", apiKey: process.env.OPENAI_API_KEY }, + model: { modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY }, }); const [page] = await browser.context.pages(); @@ -115,7 +115,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=os.environ["OPENAI_API_KEY"], ) try: @@ -195,7 +195,7 @@ func run(ctx context.Context) (err error) { client, err := stagehand.Create(ctx, stagehand.CreateOptions{ Browser: browser, Model: &stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &modelAPIKey, }, }) diff --git a/packages/docs/v2/configuration/models.mdx b/packages/docs/v2/configuration/models.mdx index 277a81b26f..4d99b8cef4 100644 --- a/packages/docs/v2/configuration/models.mdx +++ b/packages/docs/v2/configuration/models.mdx @@ -35,7 +35,6 @@ Set up your API keys before configuring Stagehand: OPENAI_API_KEY=your_openai_key_here ANTHROPIC_API_KEY=your_anthropic_key_here GOOGLE_API_KEY=your_google_key_here -GROQ_API_KEY=your_groq_key_here ``` @@ -54,10 +53,8 @@ Stagehand supports major LLM providers with structured output capabilities: ### Additional Providers -- **Groq** - `llama-3.3-70b-versatile` (Good for speed critical applications) - **xAI** - `grok-beta` (Good for complex reasoning) - **Azure** - Enterprise OpenAI deployment -- **Cerebras** - High-speed inference - **TogetherAI** - Open-source models - **Mistral** - `mixtral-8x7b-32768` (European option) - **DeepSeek** - Cost-effective alternative @@ -302,4 +299,4 @@ For each provider, use their latest models that meet these requirements. Some ex Store successful patterns using our Caching Guide - \ No newline at end of file + diff --git a/packages/docs/v3/configuration/models.mdx b/packages/docs/v3/configuration/models.mdx index 1944b7bda2..613e0bb316 100644 --- a/packages/docs/v3/configuration/models.mdx +++ b/packages/docs/v3/configuration/models.mdx @@ -340,24 +340,6 @@ For Microsoft Entra ID authentication, pass the bearer token explicitly in `auth [View all supported Azure models →](https://ai.azure.com/catalog) - - -```typescript TypeScript -import { Stagehand } from "@browserbasehq/stagehand"; - -const stagehand = new Stagehand({ - env: "BROWSERBASE", - model: "cerebras/llama-4-scout" - // API key auto-loads from CEREBRAS_API_KEY - set in your .env -}); - -await stagehand.init(); -``` - - -[View all supported Cerebras models →](https://inference-docs.cerebras.ai/models/overview) - - @@ -377,26 +359,6 @@ await stagehand.init(); [View all supported DeepSeek models →](https://api-docs.deepseek.com/quick_start/pricing) - - - - -```typescript TypeScript -import { Stagehand } from "@browserbasehq/stagehand"; - -const stagehand = new Stagehand({ - env: "BROWSERBASE", - model: "groq/llama-3.1-8b-instant" - // API key auto-loads from GROQ_API_KEY - set in your .env -}); - -await stagehand.init(); -``` - - -[View all supported Groq models →](https://console.groq.com/docs/models) - - @@ -1003,19 +965,6 @@ The following models work without the `provider/` prefix in the model parameter - `gpt-4o-2024-08-06` - `o1-preview` - - - -- `cerebras-llama-3.3-70b` -- `cerebras-llama-3.1-8b` - - - - -- `groq-llama-3.3-70b-versatile` -- `groq-llama-3.3-70b-specdec` -- `moonshotai/kimi-k2-instruct` - @@ -1042,9 +991,7 @@ The following models work without the `provider/` prefix in the model parameter | Anthropic | `ANTHROPIC_API_KEY` | | OpenAI | `OPENAI_API_KEY` | | Azure | `AZURE_API_KEY` | -| Cerebras | `CEREBRAS_API_KEY` | | DeepSeek | `DEEPSEEK_API_KEY` | -| Groq | `GROQ_API_KEY` | | Mistral | `MISTRAL_API_KEY` | | Ollama | None (local) | | Perplexity | `PERPLEXITY_API_KEY` | diff --git a/packages/docs/v4/basics/extract.mdx b/packages/docs/v4/basics/extract.mdx index 54b3b3932b..e007c0b9da 100644 --- a/packages/docs/v4/basics/extract.mdx +++ b/packages/docs/v4/basics/extract.mdx @@ -380,7 +380,7 @@ const result = await stagehand.extract( z.object({ name: z.string() }), { model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: process.env.ANTHROPIC_API_KEY, }, timeout: 30000, @@ -402,7 +402,7 @@ result = await stagehand.extract( "extract the repository name", Repository, model=ModelConfig( - model_name="anthropic/claude-sonnet-5", + model_name="anthropic/claude-sonnet-5-5", api_key=os.environ["ANTHROPIC_API_KEY"], ), timeout=30000, @@ -416,7 +416,7 @@ result = await stagehand.extract( modelAPIKey := os.Getenv("ANTHROPIC_API_KEY") model := stagehand.ModelConfig{ - ModelName: "anthropic/claude-sonnet-5", + ModelName: "anthropic/claude-sonnet-5-5", APIKey: &modelAPIKey, } timeout := 30000.0 diff --git a/packages/docs/v4/basics/observe.mdx b/packages/docs/v4/basics/observe.mdx index 7d257f65a4..be8b596ba7 100644 --- a/packages/docs/v4/basics/observe.mdx +++ b/packages/docs/v4/basics/observe.mdx @@ -264,7 +264,7 @@ const page = await stagehand.browser.context.activePage(); // Custom model configuration const { data: actions } = await stagehand.observe("find navigation links", { model: { - modelName: "openai/gpt-5.6-luna", + modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY, }, timeout: 30000, @@ -285,7 +285,7 @@ page = await stagehand.browser.context.active_page() result = await stagehand.observe( "find navigation links", model=ModelConfig( - model_name="openai/gpt-5.6-luna", + model_name="openai/gpt-6-luna", api_key=os.environ["OPENAI_API_KEY"], ), timeout=30000, @@ -299,7 +299,7 @@ result = await stagehand.observe( // Custom model configuration modelAPIKey := os.Getenv("OPENAI_API_KEY") model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.6-luna", + ModelName: "openai/gpt-6-luna", APIKey: &modelAPIKey, } timeout := 30000.0 diff --git a/packages/docs/v4/best-practices/caching.mdx b/packages/docs/v4/best-practices/caching.mdx index e1ce3786c7..c3dc3fc0ea 100644 --- a/packages/docs/v4/best-practices/caching.mdx +++ b/packages/docs/v4/best-practices/caching.mdx @@ -599,7 +599,7 @@ const browser = await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_K const stagehand = await Stagehand.create({ browser, - model: { modelName: "openai/gpt-5.6-sol" }, // Routed through Model Gateway + model: { modelName: "openai/gpt-6.1-sol" }, // Routed through Model Gateway cache: true, // Served by Browserbase Cache }); ``` @@ -611,7 +611,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-sol", # Routed through Model Gateway + model="openai/gpt-6.1-sol", # Routed through Model Gateway cache=True, # Served by Browserbase Cache ) ``` @@ -621,7 +621,7 @@ stagehand = await Stagehand.create( ```go apiKey := os.Getenv("BROWSERBASE_API_KEY") // Routed through Model Gateway: no model API key -model := stagehand.ModelConfig{ModelName: "openai/gpt-5.6-sol"} +model := stagehand.ModelConfig{ModelName: "openai/gpt-6.1-sol"} cache := stagehand.CacheEnabled(true) // Served by Browserbase Cache browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{ diff --git a/packages/docs/v4/best-practices/cost-optimization.mdx b/packages/docs/v4/best-practices/cost-optimization.mdx index 66c37674ab..173a6d6851 100644 --- a/packages/docs/v4/best-practices/cost-optimization.mdx +++ b/packages/docs/v4/best-practices/cost-optimization.mdx @@ -31,7 +31,7 @@ const termsSchema = z.object({ summary: z.string() }); // One hard extraction gets the expensive model, everything else stays cheap await stagehand.extract("summarize the contract terms", termsSchema, { model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: process.env.ANTHROPIC_API_KEY, }, }); @@ -60,7 +60,7 @@ await stagehand.extract( instruction="summarize the contract terms", schema=Terms, model=ModelConfig( - model_name="anthropic/claude-sonnet-5", + model_name="anthropic/claude-sonnet-5-5", api_key=os.environ["ANTHROPIC_API_KEY"], ), ) @@ -98,7 +98,7 @@ if err != nil { // One hard extraction gets the expensive model, everything else stays cheap anthropicKey := os.Getenv("ANTHROPIC_API_KEY") strongModel := stagehand.ModelConfig{ - ModelName: "anthropic/claude-sonnet-5", + ModelName: "anthropic/claude-sonnet-5-5", APIKey: &anthropicKey, } @@ -271,7 +271,7 @@ Automatically fall back to cheaper models for simple tasks. Escalate on `observe async function smartAct(stagehand: Stagehand, prompt: string) { const models = [ { modelName: "google/gemini-3.8-flash", apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY }, - { modelName: "openai/gpt-5.4", apiKey: process.env.OPENAI_API_KEY }, + { modelName: "openai/gpt-6.1-sol", apiKey: process.env.OPENAI_API_KEY }, ] as const; for (const model of models) { @@ -302,7 +302,7 @@ async def smart_act(stagehand: Stagehand, prompt: str): "model_name": "google/gemini-3.8-flash", "api_key": os.environ["GOOGLE_GENERATIVE_AI_API_KEY"], }, - {"model_name": "openai/gpt-5.4", "api_key": os.environ["OPENAI_API_KEY"]}, + {"model_name": "openai/gpt-6.1-sol", "api_key": os.environ["OPENAI_API_KEY"]}, ] for model in models: @@ -338,7 +338,7 @@ func smartAct(ctx context.Context, client *stagehand.Stagehand, prompt string) ( APIKey: &googleKey, }, stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4", + ModelName: "openai/gpt-6.1-sol", APIKey: &openaiKey, }, } diff --git a/packages/docs/v4/configuration/logging.mdx b/packages/docs/v4/configuration/logging.mdx index 5188c527c3..a02ea0f43e 100644 --- a/packages/docs/v4/configuration/logging.mdx +++ b/packages/docs/v4/configuration/logging.mdx @@ -1094,7 +1094,7 @@ Emitted before each LLM call, carrying the operation and prompt metadata: "data": { "category": "llm", "operation": "act", - "model": "openai/gpt-5.4-mini" + "model": "openai/gpt-6-luna" } } ``` @@ -1269,7 +1269,7 @@ Unlike v3's `LogLine`, `data` is a flat JSON object: values are already typed, s "message": "inference completed", "data": { "category": "llm", - "model": "openai/gpt-5.4-mini", + "model": "openai/gpt-6-luna", "promptTokens": 3451, "completionTokens": 45 } diff --git a/packages/docs/v4/configuration/models.mdx b/packages/docs/v4/configuration/models.mdx index 6d875666c7..c4d08d1164 100644 --- a/packages/docs/v4/configuration/models.mdx +++ b/packages/docs/v4/configuration/models.mdx @@ -95,7 +95,7 @@ With Model Gateway, switching between providers is a config change: no new accou ```typescript const stagehand = await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), - model: { modelName: "openai/gpt-5.6-sol" }, + model: { modelName: "openai/gpt-6.1-sol" }, }); ``` @@ -106,7 +106,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-sol", + model="openai/gpt-6.1-sol", ) ``` @@ -115,7 +115,7 @@ stagehand = await Stagehand.create( ```go apiKey := os.Getenv("BROWSERBASE_API_KEY") // No model API key: requests route through Model Gateway -model := stagehand.ModelConfig{ModelName: "openai/gpt-5.6-sol"} +model := stagehand.ModelConfig{ModelName: "openai/gpt-6.1-sol"} browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{ APIKey: apiKey, @@ -144,7 +144,7 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() ```typescript const stagehand = await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), - model: { modelName: "anthropic/claude-sonnet-5" }, + model: { modelName: "anthropic/claude-sonnet-5-5" }, }); ``` @@ -155,7 +155,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="anthropic/claude-sonnet-5", + model="anthropic/claude-sonnet-5-5", ) ``` @@ -164,7 +164,7 @@ stagehand = await Stagehand.create( ```go apiKey := os.Getenv("BROWSERBASE_API_KEY") // No model API key: requests route through Model Gateway -model := stagehand.ModelConfig{ModelName: "anthropic/claude-sonnet-5"} +model := stagehand.ModelConfig{ModelName: "anthropic/claude-sonnet-5-5"} browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{ APIKey: apiKey, @@ -249,8 +249,8 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() | Provider | Example Model | | ---------- | ------------------------------ | -| OpenAI | `openai/gpt-5.6-sol` | -| Anthropic | `anthropic/claude-sonnet-5` | +| OpenAI | `openai/gpt-6.1-sol` | +| Anthropic | `anthropic/claude-sonnet-5-5` | | Google | `google/gemini-3.8-flash` | @@ -328,7 +328,7 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() -Model names for the providers below carry a `provider/` prefix, and the provider must be one of the five. Stagehand ships a list of known model IDs per provider and validates the full name when you call `Stagehand.create()` or pass a per-call override, so a name it does not recognize fails before any request reaches the provider. Upgrade the SDK to pick up newly released models. The prefix is never optional: to reach an Azure OpenAI deployment, a self-hosted model, or anything else outside those five providers, use the [bring-your-own-LLM callback](#custom-models). +Built-in providers use `provider/model` names. Stagehand checks the prefix and requires a nonempty model ID. It passes the ID to the provider without checking a local model list, so newly released models do not require a Stagehand update. The provider decides whether the ID exists, your account can use it, and the requested features work. For Azure OpenAI deployments, self-hosted models, or other providers, use the [bring-your-own-LLM callback](#custom-models). @@ -399,7 +399,7 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() -Commonly used: `google/gemini-3.8-flash`, `google/gemini-3.7-flash`, `google/gemini-3.6-flash`, `google/gemini-3.5-flash`, `google/gemini-3.1-pro-preview`. +Commonly used: `google/gemini-3.8-flash`, `google/gemini-3.1-pro-preview`, `google/gemini-3.7-flash`, `google/gemini-3.1-flash-lite`, `google/gemini-3.5-flash`. [View all supported Google models →](https://ai.google.dev/gemini-api/docs/models) @@ -414,7 +414,7 @@ import { browserbase, Stagehand } from "@browserbasehq/stagehand"; const stagehand = await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", }, }); ``` @@ -430,7 +430,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="anthropic/claude-sonnet-5", + model="anthropic/claude-sonnet-5-5", model_api_key=os.environ["ANTHROPIC_API_KEY"], ) ``` @@ -441,7 +441,7 @@ stagehand = await Stagehand.create( apiKey := os.Getenv("BROWSERBASE_API_KEY") modelAPIKey := os.Getenv("ANTHROPIC_API_KEY") model := stagehand.ModelConfig{ - ModelName: "anthropic/claude-sonnet-5", + ModelName: "anthropic/claude-sonnet-5-5", APIKey: &modelAPIKey, } @@ -464,7 +464,7 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() -Commonly used: `anthropic/claude-fable-5-1`, `anthropic/claude-opus-5`, `anthropic/claude-sonnet-5`, `anthropic/claude-haiku-4-5`, `anthropic/claude-sonnet-4-6`. +Commonly used: `anthropic/claude-fable-5-1`, `anthropic/claude-opus-5-5`, `anthropic/claude-sonnet-5-5`, `anthropic/claude-haiku-4-5`. [View all supported Anthropic models →](https://docs.anthropic.com/en/docs/models-overview) @@ -479,7 +479,7 @@ import { browserbase, Stagehand } from "@browserbasehq/stagehand"; const stagehand = await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), model: { - modelName: "openai/gpt-5.6-sol", + modelName: "openai/gpt-6.1-sol", }, }); ``` @@ -495,7 +495,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-sol", + model="openai/gpt-6.1-sol", model_api_key=os.environ["OPENAI_API_KEY"], ) ``` @@ -506,7 +506,7 @@ stagehand = await Stagehand.create( apiKey := os.Getenv("BROWSERBASE_API_KEY") modelAPIKey := os.Getenv("OPENAI_API_KEY") model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.6-sol", + ModelName: "openai/gpt-6.1-sol", APIKey: &modelAPIKey, } @@ -529,144 +529,15 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() -Commonly used: `openai/gpt-6-astra`, `openai/gpt-5.6-sol`, `openai/gpt-5.6-terra`, `openai/gpt-5.6-luna`, `openai/gpt-5.5`, `openai/gpt-5.4`. +Commonly used: `openai/gpt-6-astra`, `openai/gpt-6.1-sol`, `openai/gpt-6-sol`, `openai/gpt-6-luna`. OpenAI models are called through the Responses API. -[View all supported OpenAI models →](https://platform.openai.com/docs/models) +[View all supported OpenAI models →](https://developers.openai.com/api/docs/models) - - - - -```typescript -import { browserbase, Stagehand } from "@browserbasehq/stagehand"; - -const stagehand = await Stagehand.create({ - browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), - model: { - modelName: "groq/llama-3.3-70b-versatile", - }, -}); -``` - - - -```python -import os - -from stagehand import Stagehand, browserbase - -browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) - -stagehand = await Stagehand.create( - browser=browser, - model="groq/llama-3.3-70b-versatile", - model_api_key=os.environ["GROQ_API_KEY"], -) -``` - - - -```go -apiKey := os.Getenv("BROWSERBASE_API_KEY") -modelAPIKey := os.Getenv("GROQ_API_KEY") -model := stagehand.ModelConfig{ - ModelName: "groq/llama-3.3-70b-versatile", - APIKey: &modelAPIKey, -} - -browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{ - APIKey: apiKey, -}) -if err != nil { - return err -} - -client, err := stagehand.Create(ctx, stagehand.CreateOptions{ - Browser: browser, - Model: &model, -}) -if err != nil { - return err -} -defer func() { err = errors.Join(err, client.Close(ctx)) }() -``` - - - -Commonly used: `groq/llama-3.3-70b-versatile`, `groq/openai/gpt-oss-120b`, `groq/moonshotai/kimi-k2-instruct-0905`, `groq/qwen/qwen3-32b`. - -[View all supported Groq models →](https://console.groq.com/docs/models) - - - - - - -```typescript -import { browserbase, Stagehand } from "@browserbasehq/stagehand"; - -const stagehand = await Stagehand.create({ - browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), - model: { - modelName: "cerebras/gpt-oss-120b", - }, -}); -``` - - - -```python -import os - -from stagehand import Stagehand, browserbase - -browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) - -stagehand = await Stagehand.create( - browser=browser, - model="cerebras/gpt-oss-120b", - model_api_key=os.environ["CEREBRAS_API_KEY"], -) -``` - - - -```go -apiKey := os.Getenv("BROWSERBASE_API_KEY") -modelAPIKey := os.Getenv("CEREBRAS_API_KEY") -model := stagehand.ModelConfig{ - ModelName: "cerebras/gpt-oss-120b", - APIKey: &modelAPIKey, -} - -browser, err := stagehand.LaunchBrowserbase(ctx, stagehand.BrowserbaseLaunchOptions{ - APIKey: apiKey, -}) -if err != nil { - return err -} - -client, err := stagehand.Create(ctx, stagehand.CreateOptions{ - Browser: browser, - Model: &model, -}) -if err != nil { - return err -} -defer func() { err = errors.Join(err, client.Close(ctx)) }() -``` - - - -Commonly used: `cerebras/gpt-oss-120b`, `cerebras/qwen-3-235b-a22b-instruct-2507`, `cerebras/zai-glm-4.7`, `cerebras/llama3.1-8b`. - -[View all supported Cerebras models →](https://inference-docs.cerebras.ai/models/overview) - @@ -674,7 +545,7 @@ Commonly used: `cerebras/gpt-oss-120b`, `cerebras/qwen-3-235b-a22b-instruct-2507 ### Custom models -Any provider Stagehand does not call natively is supported by bringing your own LLM. Instead of a model name, pass a function that Stagehand calls whenever it needs an inference. Your function runs in your process, on your machine, with your own SDKs and credentials: Amazon Bedrock, Cohere, Azure OpenAI, a self-hosted model, anything you can reach from code. +To use a provider Stagehand does not call natively, bring your own LLM callback. Instead of a model name, pass a function that Stagehand calls whenever it needs an inference. Your function runs in your process, on your machine, with your own SDKs and credentials: Amazon Bedrock, Cohere, Azure OpenAI, or a self-hosted model. It must handle the messages and response format Stagehand sends. Stagehand sends a provider-neutral request (messages, system prompt, temperature, and a response format) and expects a matching result back. When the response format is a JSON schema, return the parsed object in the structured content field. @@ -948,6 +819,8 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() +Use an OpenAI SDK against a compatible endpoint by setting its base URL, API key, and model ID. This example uses the Responses API with JSON schema output and image input. Check that your endpoint implements those features; compatibility with Chat Completions alone is insufficient for this example. If it does not, adapt its own API in the callback. You can also use [AI SDK's OpenAI-compatible provider](https://ai-sdk.dev/providers/openai-compatible-providers) inside a callback, translating its result into Stagehand's response shape. + Install your provider's SDK. @@ -983,7 +856,10 @@ go get github.com/openai/openai-go ```typescript import OpenAI from "openai"; -const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY }); +const openai = new OpenAI({ + apiKey: process.env.COMPATIBLE_API_KEY, + baseURL: process.env.COMPATIBLE_BASE_URL, +}); // The shape Stagehand passes to your callback. The TypeScript SDK does not // re-export `LLMGenerateParams` yet, so spell out the fields you read. @@ -1025,7 +901,7 @@ async function generateWithOpenAI(params: LLMGenerateParams) { } const response = await openai.responses.create({ - model: "gpt-5.6-sol", + model: process.env.COMPATIBLE_MODEL!, instructions: params.systemPrompt, input: params.messages.map((message) => ({ role: message.role, @@ -1061,7 +937,10 @@ from openai import AsyncOpenAI from stagehand import LLMStructuredGenerateResult -openai = AsyncOpenAI(api_key=os.environ["OPENAI_API_KEY"]) +openai = AsyncOpenAI( + api_key=os.environ["COMPATIBLE_API_KEY"], + base_url=os.environ["COMPATIBLE_BASE_URL"], +) def content_part(block): # Each block is a LLMTextContent or LLMImageContent under `.root`. The @@ -1084,7 +963,7 @@ def message_content(message): async def generate_with_openai(params): response_format = params.response_format response = await openai.responses.create( - model="gpt-5.6-sol", + model=os.environ["COMPATIBLE_MODEL"], instructions=params.system_prompt, input=[ {"role": message.role.value, "content": message_content(message)} @@ -1122,7 +1001,7 @@ func generateWithOpenAI( } text, err := callOpenAI(ctx, callOpenAIInput{ - Model: "gpt-5.6-luna", + Model: "gpt-6-luna", Instructions: request.SystemPrompt, Messages: request.Messages, Temperature: request.Temperature, @@ -1363,10 +1242,10 @@ Different models excel at different tasks. The picks below follow [Browserbase B | Use Case | Recommended Model | Why | | ----------------- | --------------------------- | ------------------------------------ | -| **Production** | `openai/gpt-5.6-sol` | Strong accuracy without a high bill | -| **Intelligence** | `openai/gpt-6-astra` | Best accuracy on hard tasks | -| **Speed** | `openai/gpt-5.6-luna` | Fastest response times | -| **Cost** | `openai/gpt-5.6-luna` | Lowest cost per task | +| **Production** | `openai/gpt-6.1-sol` | Strong accuracy without a high bill | +| **Intelligence** | `anthropic/claude-opus-5-5` | Best accuracy on hard tasks | +| **Speed** | `openai/gpt-6-sol` | Fastest response times | +| **Cost** | `openai/gpt-6-luna` | Lowest cost per task | | **Local/offline** | Bring your own LLM callback | No API costs, full control | @@ -1396,7 +1275,7 @@ await stagehand.act("click the login button"); // Uses a stronger model for one hard extraction const { data } = await stagehand.extract("summarize the pricing table", PricingSchema, { model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: process.env.ANTHROPIC_API_KEY, }, }); @@ -1432,7 +1311,7 @@ data = (await stagehand.extract( "summarize the pricing table", Pricing, model=ModelConfig( - model_name="anthropic/claude-sonnet-5", + model_name="anthropic/claude-sonnet-5-5", api_key=os.environ["ANTHROPIC_API_KEY"], ), )).data @@ -1478,7 +1357,7 @@ if _, err := client.Act(ctx, stagehand.ActInstruction("click the login button"), // Uses a stronger model for one hard extraction anthropicKey := os.Getenv("ANTHROPIC_API_KEY") strongModel := stagehand.ModelConfig{ - ModelName: "anthropic/claude-sonnet-5", + ModelName: "anthropic/claude-sonnet-5-5", APIKey: &anthropicKey, } @@ -1515,7 +1394,7 @@ Some enterprise gateways require extra headers on every model request. Attach th const stagehand = await Stagehand.create({ browser: await browserbase.launch({ apiKey: process.env.BROWSERBASE_API_KEY }), model: { - modelName: "openai/gpt-5.6-sol", + modelName: "openai/gpt-6.1-sol", headers: { "x-tenant-id": "acme" }, }, }); @@ -1532,7 +1411,7 @@ browser = await browserbase.launch(api_key=os.environ["BROWSERBASE_API_KEY"]) stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-sol", + model="openai/gpt-6.1-sol", model_api_key=os.environ["OPENAI_API_KEY"], model_headers={"x-tenant-id": "acme"}, ) @@ -1544,7 +1423,7 @@ stagehand = await Stagehand.create( apiKey := os.Getenv("BROWSERBASE_API_KEY") modelAPIKey := os.Getenv("OPENAI_API_KEY") model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.6-sol", + ModelName: "openai/gpt-6.1-sol", APIKey: &modelAPIKey, Headers: stagehand.ModelConfigHeaders{"x-tenant-id": "acme"}, } @@ -1570,7 +1449,7 @@ defer func() { err = errors.Join(err, client.Close(ctx)) }() -There is no base URL option. A model configuration always names one of the five supported providers, so Azure OpenAI deployments, self-hosted models, and any other custom endpoint go through the [bring-your-own-LLM callback](#custom-models) instead, where you own the client, the transport, and the credentials. +The built-in `model` configuration has no base URL option. For Azure OpenAI deployments, self-hosted models, and other custom endpoints, use the [bring-your-own-LLM callback](#custom-models). The SDK inside your callback can have its own base URL, transport, and credentials. --- @@ -1744,8 +1623,6 @@ You pinned a `model` but gave it no `apiKey`, and the browser is not a Browserba | Google | `GOOGLE_GENERATIVE_AI_API_KEY` or `GEMINI_API_KEY` | | Anthropic | `ANTHROPIC_API_KEY` | | OpenAI | `OPENAI_API_KEY` | -| Groq | `GROQ_API_KEY` | -| Cerebras | `CEREBRAS_API_KEY` | | Bring your own LLM | None; your callback owns its credentials | @@ -1755,13 +1632,12 @@ You pinned a `model` but gave it no `apiKey`, and the browser is not a Browserba **Solutions:** -- Use the `provider/model` format: `openai/gpt-5.6-sol`. The prefix is required; bare model names are rejected -- Use one of the five supported providers: `openai`, `anthropic`, `google`, `groq`, `cerebras` -- Check the model ID against the lists on this page. Stagehand validates the whole name, so a typo fails at `Stagehand.create()` rather than on the first inference -- Upgrade the SDK if the model shipped after your installed version +- Use the `provider/model` format: `openai/gpt-6.1-sol`. The prefix is required; bare model names are rejected +- Use one of the three built-in providers: `openai`, `anthropic`, `google` +- Check the model ID in the provider's catalog. Stagehand validates the prefix and syntax; the provider reports unknown IDs on the first inference - For a provider outside that list, use the [bring-your-own-LLM callback](#custom-models) -A model that passes validation can still fail at request time if your model API key cannot reach it. That surfaces as the provider's own error, usually a `400`. +A model that passes validation can still fail at request time if the provider does not offer it to your account or it lacks a requested feature. Stagehand returns the provider error. diff --git a/packages/docs/v4/first-steps/ai-rules.mdx b/packages/docs/v4/first-steps/ai-rules.mdx index 01ccd67e9e..b66e8e2db0 100644 --- a/packages/docs/v4/first-steps/ai-rules.mdx +++ b/packages/docs/v4/first-steps/ai-rules.mdx @@ -113,7 +113,7 @@ const browser = await localBrowser.launch({ headless: true }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "openai/gpt-5.6-luna", + modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY, }, logging: { level: "info", format: "pretty" }, @@ -135,7 +135,7 @@ const browser = await browserbase.launch({ }); const stagehand = await Stagehand.create({ browser, - model: { modelName: "openai/gpt-5.6-luna", apiKey: process.env.OPENAI_API_KEY }, + model: { modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY }, }); ``` @@ -417,7 +417,7 @@ from stagehand import Stagehand, browserbase, local_browser browser = await local_browser.launch(headless=True) stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-luna", + model="openai/gpt-6-luna", model_api_key=os.environ["OPENAI_API_KEY"], logging={"level": "info", "format": "pretty"}, ) @@ -722,7 +722,7 @@ Every method takes a `context.Context` as its first argument and returns an `err ```go apiKey := os.Getenv("OPENAI_API_KEY") model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.6-sol", + ModelName: "openai/gpt-6.1-sol", APIKey: &apiKey, } diff --git a/packages/docs/v4/first-steps/quickstart.mdx b/packages/docs/v4/first-steps/quickstart.mdx index 45338fdc34..fa72825aec 100644 --- a/packages/docs/v4/first-steps/quickstart.mdx +++ b/packages/docs/v4/first-steps/quickstart.mdx @@ -57,7 +57,7 @@ async function main() { const stagehand = await Stagehand.create({ browser, model: { - modelName: "openai/gpt-5.6-sol", + modelName: "openai/gpt-6.1-sol", apiKey: process.env.OPENAI_API_KEY, }, }); @@ -110,7 +110,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.6-sol", + model="openai/gpt-6.1-sol", model_api_key=os.environ["OPENAI_API_KEY"], ) print("Stagehand session started") @@ -166,7 +166,7 @@ func main() { func run(ctx context.Context) (err error) { modelAPIKey := os.Getenv("OPENAI_API_KEY") model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.6-sol", + ModelName: "openai/gpt-6.1-sol", APIKey: &modelAPIKey, } diff --git a/packages/docs/v4/integrations/cli-agents/claude-code.mdx b/packages/docs/v4/integrations/cli-agents/claude-code.mdx index 3ed48946ca..d87807a129 100644 --- a/packages/docs/v4/integrations/cli-agents/claude-code.mdx +++ b/packages/docs/v4/integrations/cli-agents/claude-code.mdx @@ -33,7 +33,7 @@ pnpm exec turbo run build \ export ANTHROPIC_API_KEY="your-anthropic-api-key" ``` -Set `CLAUDE_STAGEHAND_MODEL` to select another model; the example defaults to `claude-sonnet-5`. +Set `CLAUDE_STAGEHAND_MODEL` to select another model; the example defaults to `claude-sonnet-5-5`. The example defaults to Browserbase when `BROWSERBASE_API_KEY` is set, otherwise it uses local Chrome: @@ -55,7 +55,7 @@ pnpm --dir packages/integrations/claude-code start -- \ | Variable | Purpose | | --- | --- | -| `CLAUDE_STAGEHAND_MODEL` | Claude Code agent model; defaults to `claude-sonnet-5`. | +| `CLAUDE_STAGEHAND_MODEL` | Claude Code agent model; defaults to `claude-sonnet-5-5`. | | `ANTHROPIC_API_KEY` | Credential for the example agent. The Claude Agent SDK does not forward it to the MCP child. | | `STAGEHAND_BROWSER` | Select `local` or `browserbase`. Defaults to `browserbase` when `BROWSERBASE_API_KEY` is set, otherwise `local`. | | `BROWSERBASE_API_KEY` | Required for Browserbase. | diff --git a/packages/docs/v4/migrations/v3.mdx b/packages/docs/v4/migrations/v3.mdx index fc7d29d43e..9ddffe0d23 100644 --- a/packages/docs/v4/migrations/v3.mdx +++ b/packages/docs/v4/migrations/v3.mdx @@ -498,7 +498,7 @@ Calling `extract()` with no schema returns `{ extraction: string }`. - }); + const stagehand = await Stagehand.create({ + browser, -+ model: { modelName: "openai/gpt-5.4-mini", apiKey: process.env.OPENAI_API_KEY }, ++ model: { modelName: "openai/gpt-6-luna", apiKey: process.env.OPENAI_API_KEY }, + }); ``` diff --git a/packages/evals/initStagehand.ts b/packages/evals/initStagehand.ts index bbc43eaa61..b3fa2abdac 100644 --- a/packages/evals/initStagehand.ts +++ b/packages/evals/initStagehand.ts @@ -34,8 +34,6 @@ const PROVIDER_API_KEY_ENV: Record = { openai: ["OPENAI_API_KEY"], anthropic: ["ANTHROPIC_API_KEY"], google: ["GOOGLE_GENERATIVE_AI_API_KEY", "GEMINI_API_KEY"], - groq: ["GROQ_API_KEY"], - cerebras: ["CEREBRAS_API_KEY"], }; type StagehandLogEvent = Parameters>[0]; diff --git a/packages/evals/taskConfig.ts b/packages/evals/taskConfig.ts index bd7bba2a1d..0d68806a77 100644 --- a/packages/evals/taskConfig.ts +++ b/packages/evals/taskConfig.ts @@ -46,16 +46,6 @@ const ALL_EVAL_MODELS = [ // TOGETHER - DEEPSEEK "deepseek-ai/DeepSeek-V3", "Qwen/Qwen2.5-7B-Instruct-Turbo", - // GROQ - "groq/meta-llama/llama-4-scout-17b-16e-instruct", - "groq/llama-3.3-70b-versatile", - "groq/llama3-70b-8192", - "groq/qwen-qwq-32b", - "groq/qwen-2.5-32b", - "groq/deepseek-r1-distill-qwen-32b", - "groq/deepseek-r1-distill-llama-70b", - // CEREBRAS - "cerebras/llama3.3-70b", ]; // --------------------------------------------------------------------------- diff --git a/packages/examples/showcase/_harness/pricing.ts b/packages/examples/showcase/_harness/pricing.ts index 7ce579ea88..85ed2f5ef4 100644 --- a/packages/examples/showcase/_harness/pricing.ts +++ b/packages/examples/showcase/_harness/pricing.ts @@ -10,7 +10,7 @@ export type ModelPrice = { // USD per million tokens. Snapshotted into every results.json so published // costs stay tied to the prices in effect when the run happened. export const PRICES: Record = { - "anthropic/claude-sonnet-5": { + "anthropic/claude-sonnet-5-5": { inputPerMTok: 2, cachedInputPerMTok: 0.2, cacheWritePerMTok: 2.5, @@ -18,13 +18,13 @@ export const PRICES: Record = { source: "https://platform.claude.com/docs/en/about-claude/pricing", checkedOn: "2026-09-25", }, - "openai/gpt-5.4-mini": { - inputPerMTok: 0.75, - cachedInputPerMTok: 0.075, - cacheWritePerMTok: 0.75, - outputPerMTok: 4.5, - source: "https://openrouter.ai/openai/gpt-5.4-mini", - checkedOn: "2026-09-25", + "openai/gpt-6-luna": { + inputPerMTok: 0.1, + cachedInputPerMTok: 0.01, + cacheWritePerMTok: 0.1, + outputPerMTok: 0.5, + source: "https://developers.openai.com/api/docs/models/gpt-6-luna", + checkedOn: "2026-10-03", }, }; diff --git a/packages/examples/showcase/_harness/session.ts b/packages/examples/showcase/_harness/session.ts index dd50b032c4..3eb7536c8a 100644 --- a/packages/examples/showcase/_harness/session.ts +++ b/packages/examples/showcase/_harness/session.ts @@ -13,9 +13,9 @@ export function sessionSettings(task: { proxies?: boolean }) { } // Both sides always run the same model. Override with SHOWCASE_MODEL. -export const MODEL = (process.env.SHOWCASE_MODEL ?? "anthropic/claude-sonnet-5") as - | "anthropic/claude-sonnet-5" - | "openai/gpt-5.4-mini"; +export const MODEL = (process.env.SHOWCASE_MODEL ?? "anthropic/claude-sonnet-5-5") as + | "anthropic/claude-sonnet-5-5" + | "openai/gpt-6-luna"; export const PROVIDER = MODEL.split("/")[0] as "anthropic" | "openai"; export const MODEL_ID = MODEL.slice(PROVIDER.length + 1); diff --git a/packages/examples/showcase/digitalocean-quarterly-results/index.ts b/packages/examples/showcase/digitalocean-quarterly-results/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/digitalocean-quarterly-results/index.ts +++ b/packages/examples/showcase/digitalocean-quarterly-results/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/laptop-spec-comparison/index.ts b/packages/examples/showcase/laptop-spec-comparison/index.ts index c790329570..286cbe8650 100644 --- a/packages/examples/showcase/laptop-spec-comparison/index.ts +++ b/packages/examples/showcase/laptop-spec-comparison/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY, proxies: const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/qa-checkout-flow/index.ts b/packages/examples/showcase/qa-checkout-flow/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/qa-checkout-flow/index.ts +++ b/packages/examples/showcase/qa-checkout-flow/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/qa-find-ui-regressions/index.ts b/packages/examples/showcase/qa-find-ui-regressions/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/qa-find-ui-regressions/index.ts +++ b/packages/examples/showcase/qa-find-ui-regressions/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/remote-roles-across-ats/index.ts b/packages/examples/showcase/remote-roles-across-ats/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/remote-roles-across-ats/index.ts +++ b/packages/examples/showcase/remote-roles-across-ats/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/saas-pricing-monitor/index.ts b/packages/examples/showcase/saas-pricing-monitor/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/saas-pricing-monitor/index.ts +++ b/packages/examples/showcase/saas-pricing-monitor/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/stagehand-evals-leaderboard/index.ts b/packages/examples/showcase/stagehand-evals-leaderboard/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/stagehand-evals-leaderboard/index.ts +++ b/packages/examples/showcase/stagehand-evals-leaderboard/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/wordle-solver/index.ts b/packages/examples/showcase/wordle-solver/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/wordle-solver/index.ts +++ b/packages/examples/showcase/wordle-solver/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/examples/showcase/yc-companies-by-industry/index.ts b/packages/examples/showcase/yc-companies-by-industry/index.ts index bc37c4b51d..b56d567b93 100644 --- a/packages/examples/showcase/yc-companies-by-industry/index.ts +++ b/packages/examples/showcase/yc-companies-by-industry/index.ts @@ -15,7 +15,7 @@ const browser = await browserbase.launch({ apiKey: BROWSERBASE_API_KEY }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "anthropic/claude-sonnet-5", + modelName: "anthropic/claude-sonnet-5-5", apiKey: ANTHROPIC_API_KEY, // Stagehand calls the model from inside the browser extension. headers: { "anthropic-dangerous-direct-browser-access": "true" }, diff --git a/packages/extension/llm/LLMClient.ts b/packages/extension/llm/LLMClient.ts index 991db2bcff..3bee3f6947 100644 --- a/packages/extension/llm/LLMClient.ts +++ b/packages/extension/llm/LLMClient.ts @@ -101,7 +101,7 @@ export interface LLMParsedResponse { } export abstract class LLMClient { - public abstract type: "openai" | "anthropic" | "cerebras" | "groq" | (string & {}); + public abstract type: "openai" | "anthropic" | (string & {}); public modelName: ModelName; public hasVision = false; // Compile-only bridge: provider SDK option types diverge from V3's shared options. diff --git a/packages/extension/llm/LLMProvider.ts b/packages/extension/llm/LLMProvider.ts index 5f59bf171c..aae208fcea 100644 --- a/packages/extension/llm/LLMProvider.ts +++ b/packages/extension/llm/LLMProvider.ts @@ -1,4 +1,4 @@ -import type { LanguageModel, LanguageModelMiddleware } from "ai"; +import type { LanguageModelMiddleware } from "ai"; import type { ClientOptions, ModelName, @@ -7,25 +7,8 @@ import type { import { ClientOptionsSchema, ModelNameSchema } from "@browserbasehq/stagehand-protocol/schemas"; import { AISdkClient } from "./aisdk.js"; import { LLMClient } from "./LLMClient.js"; -import { createOpenAI } from "@ai-sdk/openai"; -import { createAnthropic } from "@ai-sdk/anthropic"; -import { createGoogleGenerativeAI } from "@ai-sdk/google"; -import { createGroq } from "@ai-sdk/groq"; -import { createCerebras } from "@ai-sdk/cerebras"; import { wrapLanguageModel } from "ai"; - -// Compile-only bridge: current AI SDK providers return mixed v2/v3/v4 model -// types, while copied V3 code assumed a single provider model type. -type AISDKProvider = (modelName: string) => LanguageModel; -type AISDKProviderFactory = (options: Record) => AISDKProvider; - -const AISDKProviderFactories: Record = { - openai: createOpenAI as AISDKProviderFactory, - anthropic: createAnthropic as AISDKProviderFactory, - google: createGoogleGenerativeAI as AISDKProviderFactory, - groq: createGroq as AISDKProviderFactory, - cerebras: createCerebras as AISDKProviderFactory, -}; +import { createProviderLanguageModel } from "./providerRegistry.js"; type AISDKProviderClientOptions = ClientOptions & Record; @@ -57,20 +40,10 @@ export function getAISDKLanguageModel( middleware?: LanguageModelMiddleware, ) { const aiSdkClientOptions = toAISDKClientOptions(subProvider, clientOptions); - const creator = AISDKProviderFactories[subProvider]; - if (!creator) { - throw new TypeError( - `${subProvider} is not currently supported for aiSDK. Please use one of the supported model providers: ${Object.keys(AISDKProviderFactories).join(", ")}`, - ); - } - const provider = creator(aiSdkClientOptions ?? {}); - const model = - subProvider === "openai" - ? (provider as ReturnType).responses(subModelName) - : provider(subModelName); + const model = createProviderLanguageModel(subProvider, subModelName, aiSdkClientOptions); if (middleware) { - return wrapLanguageModel({ model: model as never, middleware }); + return wrapLanguageModel({ model, middleware }); } return model; } diff --git a/packages/extension/llm/aiSdkClient.ts b/packages/extension/llm/aiSdkClient.ts index 2453349fdd..9a1c192233 100644 --- a/packages/extension/llm/aiSdkClient.ts +++ b/packages/extension/llm/aiSdkClient.ts @@ -1,28 +1,20 @@ -import { createAnthropic } from "@ai-sdk/anthropic"; -import { createCerebras } from "@ai-sdk/cerebras"; -import { createGoogleGenerativeAI } from "@ai-sdk/google"; -import { createGroq } from "@ai-sdk/groq"; -import { createOpenAI } from "@ai-sdk/openai"; import { generateText, jsonSchema, Output } from "ai"; import type { LanguageModel, ModelMessage, ToolSet } from "ai"; import { z } from "zod/v4"; import { - AnthropicModelIdSchema, - CerebrasModelIdSchema, createLLMGenerateResultSchema, - GoogleModelIdSchema, - GroqModelIdSchema, LLMGenerateParamsSchema, LLMMessageSchema, LLMGenerateResultSchema, ModelProviderSchema, - OpenAIModelIdSchema, + ModelNameSchema, } from "@browserbasehq/stagehand-protocol/schemas"; import type { LLMGenerateParams, LLMGenerateResult, ModelConfig, } from "@browserbasehq/stagehand-protocol/types"; +import { createProviderLanguageModel } from "./providerRegistry.js"; const AiSdkMessagesSchema = z.array(LLMMessageSchema).transform((messages): ModelMessage[] => { const toolNames = new Map(); @@ -132,42 +124,19 @@ export function createAiSdkLanguageModel( config: ModelConfig, params?: Pick, ): LanguageModel { - const separator = config.modelName.indexOf("/"); - const provider = ModelProviderSchema.parse(config.modelName.slice(0, separator)); - const modelId = config.modelName.slice(separator + 1); - const connection = { - apiKey: config.apiKey, - headers: config.headers, - }; - - switch (provider) { - case "openai": { - const openai = createOpenAI(connection); - const openAiModelId = OpenAIModelIdSchema.parse(modelId); - return params?.stopSequences?.length - ? openai.chat(openAiModelId) - : openai.responses(openAiModelId); - } - case "anthropic": - // The server runs inside the browser extension, so this request is - // browser-origin. Anthropic rejects CORS requests without this explicit - // opt-in header ("CORS requests must set - // 'anthropic-dangerous-direct-browser-access' header"); OpenAI and - // Google allow browser-origin calls without one. - return createAnthropic({ - ...connection, - headers: { - ...connection.headers, - "anthropic-dangerous-direct-browser-access": "true", - }, - })(AnthropicModelIdSchema.parse(modelId)); - case "google": - return createGoogleGenerativeAI(connection)(GoogleModelIdSchema.parse(modelId)); - case "groq": - return createGroq(connection)(GroqModelIdSchema.parse(modelId)); - case "cerebras": - return createCerebras(connection)(CerebrasModelIdSchema.parse(modelId)); - } + const modelName = ModelNameSchema.parse(config.modelName); + const separator = modelName.indexOf("/"); + const provider = ModelProviderSchema.parse(modelName.slice(0, separator)); + const modelId = modelName.slice(separator + 1); + return createProviderLanguageModel( + provider, + modelId, + { + apiKey: config.apiKey, + headers: config.headers, + }, + params, + ); } /** Generates a Stagehand LLM response through a configured AI SDK language model. */ diff --git a/packages/extension/llm/aisdk.ts b/packages/extension/llm/aisdk.ts index 43aa81c345..ad2710149a 100644 --- a/packages/extension/llm/aisdk.ts +++ b/packages/extension/llm/aisdk.ts @@ -181,16 +181,6 @@ export class AISdkClient extends LLMClient { structuredOutputs: true, }; break; - case "groq": - providerOptions.groq = { - structuredOutputs: true, - }; - break; - case "cerebras": - providerOptions.cerebras = { - strictJsonSchema: true, - }; - break; case "mistral": providerOptions.mistral = { structuredOutputs: true, diff --git a/packages/extension/llm/providerRegistry.ts b/packages/extension/llm/providerRegistry.ts new file mode 100644 index 0000000000..33d39fc2af --- /dev/null +++ b/packages/extension/llm/providerRegistry.ts @@ -0,0 +1,48 @@ +import { createAnthropic } from "@ai-sdk/anthropic"; +import { createGoogleGenerativeAI } from "@ai-sdk/google"; +import { createOpenAI } from "@ai-sdk/openai"; +import type { LanguageModelV4 } from "@ai-sdk/provider"; +import type { ModelProvider } from "@browserbasehq/stagehand-protocol/types"; + +type ProviderConnection = { + apiKey?: string; + headers?: Record; + [key: string]: unknown; +}; + +type ProviderFactory = ( + modelId: string, + connection: ProviderConnection, + options?: { stopSequences?: readonly string[] }, +) => LanguageModelV4; + +const providerFactories: Record = { + openai: (modelId, connection, options) => { + const provider = createOpenAI(connection); + return options?.stopSequences?.length ? provider.chat(modelId) : provider.responses(modelId); + }, + // Extension requests originate in the browser; Anthropic requires this CORS opt-in. + anthropic: (modelId, connection) => + createAnthropic({ + // The server runs inside the browser extension, so this request is + // browser-origin. Anthropic rejects CORS requests without this explicit + // opt-in header ("CORS requests must set + // 'anthropic-dangerous-direct-browser-access' header"); OpenAI and + // Google allow browser-origin calls without one. + ...connection, + headers: { + ...connection.headers, + "anthropic-dangerous-direct-browser-access": "true", + }, + })(modelId), + google: (modelId, connection) => createGoogleGenerativeAI(connection)(modelId), +}; + +export function createProviderLanguageModel( + provider: ModelProvider, + modelId: string, + connection: ProviderConnection = {}, + options?: { stopSequences?: readonly string[] }, +): LanguageModelV4 { + return providerFactories[provider](modelId, connection, options); +} diff --git a/packages/extension/package.json b/packages/extension/package.json index 9c0cbc59c4..8f4f06a04d 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -11,9 +11,7 @@ }, "dependencies": { "@ai-sdk/anthropic": "catalog:", - "@ai-sdk/cerebras": "catalog:", "@ai-sdk/google": "catalog:", - "@ai-sdk/groq": "catalog:", "@ai-sdk/openai": "catalog:", "@ai-sdk/provider": "catalog:", "@opentelemetry/api": "catalog:", diff --git a/packages/extension/tests/ai-sdk-client.test.ts b/packages/extension/tests/ai-sdk-client.test.ts index b5590d80a4..5ff8bf8f08 100644 --- a/packages/extension/tests/ai-sdk-client.test.ts +++ b/packages/extension/tests/ai-sdk-client.test.ts @@ -1,6 +1,7 @@ import { Output, generateText } from "ai"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { createAiSdkLanguageModel, generateWithAiSdk } from "../llm/aiSdkClient.js"; +import { createProviderLanguageModel } from "../llm/providerRegistry.js"; import * as llmService from "../services/llmService.js"; vi.mock("ai", () => ({ @@ -19,8 +20,8 @@ describe("AI SDK language models", () => { it.each([ { name: "OpenAI", - modelName: "openai/gpt-5.4-mini" as const, - modelId: "gpt-5.4-mini", + modelName: "openai/gpt-6-luna" as const, + modelId: "gpt-6-luna", provider: "openai.responses", }, { @@ -36,16 +37,10 @@ describe("AI SDK language models", () => { provider: "google.generative-ai", }, { - name: "Groq", - modelName: "groq/openai/gpt-oss-120b" as const, - modelId: "openai/gpt-oss-120b", - provider: "groq.chat", - }, - { - name: "Cerebras", - modelName: "cerebras/gpt-oss-120b" as const, - modelId: "gpt-oss-120b", - provider: "cerebras.chat", + name: "new OpenAI ID", + modelName: "openai/gpt-6-astra" as const, + modelId: "gpt-6-astra", + provider: "openai.responses", }, ])("creates a direct $name model from its validated configuration", (testCase) => { const model = createAiSdkLanguageModel({ @@ -63,7 +58,7 @@ describe("AI SDK language models", () => { it("uses Chat Completions for OpenAI requests with stop sequences", () => { const model = createAiSdkLanguageModel( { - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "provider-secret", }, { stopSequences: ["STOP"] }, @@ -71,10 +66,45 @@ describe("AI SDK language models", () => { expect(model).toMatchObject({ provider: "openai.chat", - modelId: "gpt-5.4-mini", + modelId: "gpt-6-luna", }); }); + it("keeps Anthropic's browser header after provider construction", async () => { + const fetch = vi.fn( + async (_input: RequestInfo | URL, _init?: RequestInit): Promise => { + throw new Error("request intercepted"); + }, + ); + const model = createProviderLanguageModel("anthropic", "claude-sonnet-5-5", { + apiKey: "provider-secret", + headers: { "x-tenant-id": "tenant-123" }, + fetch, + }); + + await expect( + model.doGenerate({ prompt: [{ role: "user", content: [{ type: "text", text: "Hi" }] }] }), + ).rejects.toThrow("request intercepted"); + + const init = fetch.mock.calls[0]?.[1] as RequestInit; + const headers = new Headers(init.headers); + expect(headers.get("anthropic-dangerous-direct-browser-access")).toBe("true"); + expect(headers.get("x-tenant-id")).toBe("tenant-123"); + }); + + it("returns an upstream unknown-model error without replacing it", async () => { + const upstreamError = new Error("OpenAI: model private-model was not found"); + vi.mocked(generateText).mockRejectedValue(upstreamError); + + await expect( + llmService.generate( + { modelName: "openai/private-model", apiKey: "provider-secret" }, + { messages: [{ role: "user", content: { type: "text", text: "Hello" } }] }, + vi.fn(), + ), + ).rejects.toBe(upstreamError); + }); + it("routes a configured provider model through the AI SDK client", async () => { vi.mocked(generateText).mockResolvedValue({ text: "Four", @@ -89,7 +119,7 @@ describe("AI SDK language models", () => { await llmService.generate( { - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "provider-secret", }, { @@ -102,7 +132,7 @@ describe("AI SDK language models", () => { expect.objectContaining({ model: expect.objectContaining({ provider: "openai.responses", - modelId: "gpt-5.4-mini", + modelId: "gpt-6-luna", }), }), ); @@ -122,7 +152,7 @@ describe("AI SDK language models", () => { await llmService.generate( { - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "provider-secret", }, { diff --git a/packages/extension/tests/gateway-client.test.ts b/packages/extension/tests/gateway-client.test.ts index 76aa1d1288..1d320cae6b 100644 --- a/packages/extension/tests/gateway-client.test.ts +++ b/packages/extension/tests/gateway-client.test.ts @@ -6,6 +6,7 @@ import { fetchWithoutModel, } from "../llm/gatewayClient.js"; import * as llmService from "../services/llmService.js"; +import { STAGEHAND_PROTOCOL_VERSION } from "@browserbasehq/stagehand-protocol/protocol-version"; import type { StagehandInitParams } from "@browserbasehq/stagehand-protocol/types"; vi.mock("ai", () => ({ @@ -25,10 +26,13 @@ afterEach(() => { }); const initParams = { + protocolVersion: STAGEHAND_PROTOCOL_VERSION, + clientInfo: { name: "test", version: "1.0.0" }, + logLevel: "off", model: { modelName: "openai/gpt-5" }, apiKey: "bb-api-key", browser: { sessionId: "session-123", region: "eu-central-1" }, -} as StagehandInitParams; +} satisfies StagehandInitParams; describe("buildGatewayContext", () => { it("builds the context from the Browserbase API key, session, and region", () => { diff --git a/packages/extension/tests/gateway-e2e.test.ts b/packages/extension/tests/gateway-e2e.test.ts index 057e857bae..34b5797aac 100644 --- a/packages/extension/tests/gateway-e2e.test.ts +++ b/packages/extension/tests/gateway-e2e.test.ts @@ -169,7 +169,21 @@ describe("gateway inference end to end", () => { }); it("forwards tools and tool choice in Responses format", async () => { - await llmService.generate( + respondWith = () => ({ + ...completion(""), + output: [ + { + type: "function_call", + id: "fc_1", + call_id: "call_1", + name: "get_weather", + arguments: JSON.stringify({ city: "Zurich" }), + status: "completed", + }, + ], + }); + + const result = await llmService.generate( { modelName: "openai/gpt-5" }, { messages: [{ role: "user", content: { type: "text", text: "Check the weather" } }], @@ -203,8 +217,15 @@ describe("gateway inference end to end", () => { properties: { city: { type: "string" } }, required: ["city"], }, + strict: false, }, ]); expect(request.body.tool_choice).toBe("required"); + expect(result.content).toContainEqual({ + type: "tool_use", + id: "call_1", + name: "get_weather", + input: { city: "Zurich" }, + }); }); }); diff --git a/packages/extension/tests/model-resolution.test.ts b/packages/extension/tests/model-resolution.test.ts index 876e411723..cc8fa88aa6 100644 --- a/packages/extension/tests/model-resolution.test.ts +++ b/packages/extension/tests/model-resolution.test.ts @@ -1,13 +1,5 @@ import { afterEach, describe, expect, it, vi } from "vitest"; -import { - AnthropicModelIdSchema, - CerebrasModelIdSchema, - GoogleModelIdSchema, - GroqModelIdSchema, - ModelConfigSchema, - ModelNameSchema, - OpenAIModelIdSchema, -} from "@browserbasehq/stagehand-protocol/schemas"; +import { ModelConfigSchema, ModelNameSchema } from "@browserbasehq/stagehand-protocol/schemas"; import type { StagehandInitParams, StagehandResultMetadata, @@ -59,48 +51,51 @@ function runtimeWith(initParams: StagehandInitParams): StagehandRuntime { } describe("model configuration", () => { - describe("supported models", () => { - it("accepts every explicitly supported model", () => { - const providers = [ - ["openai", OpenAIModelIdSchema.options], - ["anthropic", AnthropicModelIdSchema.options], - ["google", GoogleModelIdSchema.options], - ["groq", GroqModelIdSchema.options], - ["cerebras", CerebrasModelIdSchema.options], - ] as const; - - for (const [provider, modelIds] of providers) { - for (const modelId of modelIds) { - expect(ModelNameSchema.safeParse(`${provider}/${modelId}`).success).toBe(true); - } - } - }); - - it("accepts a provider model ID that contains additional slashes", () => { - expect(ModelNameSchema.safeParse("groq/openai/gpt-oss-120b").success).toBe(true); + describe("provider model names", () => { + it.each([ + "openai/gpt-6-astra", + "anthropic/claude-sonnet-5-5", + "google/gemini-3.8-flash", + "openai/team/custom/model", + ])("accepts an opaque model ID under a registered provider: %s", (modelName) => { + expect(ModelNameSchema.safeParse(modelName).success).toBe(true); }); it("rejects a model from an unsupported provider", () => { expect(ModelNameSchema.safeParse("bedrock/anthropic.claude-sonnet-v1:0").success).toBe(false); }); - it("rejects an unsupported model from a supported provider", () => { - expect(ModelNameSchema.safeParse("openai/private-model").success).toBe(false); + it.each(["groq/llama-3.3-70b-versatile", "cerebras/gpt-oss-120b"])( + "rejects removed provider model %s", + (modelName) => { + expect(ModelNameSchema.safeParse(modelName).success).toBe(false); + }, + ); + + it("accepts unknown IDs under registered providers", () => { + expect(ModelNameSchema.safeParse("openai/private-model").success).toBe(true); }); - it("rejects a model under the wrong provider prefix", () => { - expect(ModelNameSchema.safeParse("openai/claude-sonnet-4-6").success).toBe(false); + it.each(["openai/", "google/ ", "openai/a b", "/gpt-5", "gpt-5"])( + "rejects a malformed model name: %s", + (modelName) => { + expect(ModelNameSchema.safeParse(modelName).success).toBe(false); + }, + ); + + it("leaves model availability to the provider", () => { + expect(ModelNameSchema.safeParse("openai/claude-sonnet-4-6").success).toBe(true); }); it("accepts a known model with provider credentials and headers", () => { expect( ModelConfigSchema.parse({ - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "sk-test", headers: { "x-tenant-id": "tenant-123" }, }), ).toEqual({ - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "sk-test", headers: { "x-tenant-id": "tenant-123" }, }); @@ -109,7 +104,7 @@ describe("model configuration", () => { it("rejects an empty model API key", () => { expect( ModelConfigSchema.safeParse({ - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: "", }).success, ).toBe(false); @@ -118,7 +113,7 @@ describe("model configuration", () => { it("rejects the removed provider and provider options fields", () => { expect( ModelConfigSchema.safeParse({ - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", provider: "openai", providerOptions: {}, }).success, diff --git a/packages/extension/tests/rpc-router.test.ts b/packages/extension/tests/rpc-router.test.ts index 03bb5a9abc..b764f0f03e 100644 --- a/packages/extension/tests/rpc-router.test.ts +++ b/packages/extension/tests/rpc-router.test.ts @@ -310,7 +310,7 @@ describe("Stagehand RPC router", () => { clientInfo: { name: "stagehand-sdk-test", version: "1.0.0" }, browserCdpUrl: "ws://127.0.0.1:9222/devtools/browser/session", logLevel: "info", - model: { modelName: "openai/gpt-5.4-mini", apiKey: "test" }, + model: { modelName: "openai/gpt-6-luna", apiKey: "test" }, telemetry: { traces: { endpoint: "https://collector.test/v1/traces", headers: {} } }, }); vi.spyOn(runtime, "resolveUnderstudyPage").mockReturnValue({} as Page); diff --git a/packages/integrations/claude-code/README.md b/packages/integrations/claude-code/README.md index 24844712de..b0a0f93fa5 100644 --- a/packages/integrations/claude-code/README.md +++ b/packages/integrations/claude-code/README.md @@ -30,7 +30,7 @@ pnpm --filter @browserbasehq/stagehand-integrations-example-claude-code-facade s | ------------------------ | ------------------------------------------------------------------------------------------------ | | `STAGEHAND_BROWSER` | Browser backend. Defaults to `browserbase` when `BROWSERBASE_API_KEY` is set, otherwise `local`. | | `BROWSERBASE_API_KEY` | Browserbase credential for the browser session. | -| `CLAUDE_STAGEHAND_MODEL` | Agent model; defaults to `claude-sonnet-5`. | +| `CLAUDE_STAGEHAND_MODEL` | Agent model; defaults to `claude-sonnet-5-5`. | | `ANTHROPIC_API_KEY` | Claude Agent SDK credential (never forwarded to the browser). | The agent is restricted to the three `mcp__stagehand__*` tools (`allowedTools` plus a diff --git a/packages/integrations/claude-code/src/agent.ts b/packages/integrations/claude-code/src/agent.ts index ceea40c1f8..07a7441433 100644 --- a/packages/integrations/claude-code/src/agent.ts +++ b/packages/integrations/claude-code/src/agent.ts @@ -27,7 +27,7 @@ async function main(): Promise { const result = await runClaudeAgentSession({ prompt: instruction, - model: process.env.CLAUDE_STAGEHAND_MODEL ?? "claude-sonnet-5", + model: process.env.CLAUDE_STAGEHAND_MODEL ?? "claude-sonnet-5-5", logger, session: { maxTurns: 20, diff --git a/packages/integrations/codex-sdk/src/session.ts b/packages/integrations/codex-sdk/src/session.ts index 9cb5e70420..d83ec6248f 100644 --- a/packages/integrations/codex-sdk/src/session.ts +++ b/packages/integrations/codex-sdk/src/session.ts @@ -110,7 +110,7 @@ export async function loadCodexSdk( } export function normalizeCodexModel(model: string): string { - if (model === "codex/default") return "gpt-5.4-mini"; + if (model === "codex/default") return "gpt-6-luna"; return model.includes("/") ? model.slice(model.indexOf("/") + 1) : model; } diff --git a/packages/integrations/codex-sdk/tests/session.test.ts b/packages/integrations/codex-sdk/tests/session.test.ts index 7221445800..fdb1bca5f1 100644 --- a/packages/integrations/codex-sdk/tests/session.test.ts +++ b/packages/integrations/codex-sdk/tests/session.test.ts @@ -109,9 +109,9 @@ describe("Codex SDK session", () => { expect(result.status).toBe("completed"); }); it("normalizes provider-prefixed and default models", () => { - expect(normalizeCodexModel("openai/gpt-5.4-mini")).toBe("gpt-5.4-mini"); + expect(normalizeCodexModel("openai/gpt-6-luna")).toBe("gpt-6-luna"); expect(normalizeCodexModel("gpt-5.4")).toBe("gpt-5.4"); - expect(normalizeCodexModel("codex/default")).toBe("gpt-5.4-mini"); + expect(normalizeCodexModel("codex/default")).toBe("gpt-6-luna"); }); it("forwards thread options and collects messages and usage", async () => { @@ -142,7 +142,7 @@ describe("Codex SDK session", () => { const outputSchema = { type: "object" }; const result = await runCodexSession({ prompt: "task", - model: "openai/gpt-5.4-mini", + model: "openai/gpt-6-luna", logger, sdk, thread: { workingDirectory: "/tmp/work", modelReasoningEffort: "xhigh" }, @@ -150,7 +150,7 @@ describe("Codex SDK session", () => { }); expect(threadOptions).toMatchObject({ - model: "gpt-5.4-mini", + model: "gpt-6-luna", workingDirectory: "/tmp/work", modelReasoningEffort: "xhigh", sandboxMode: "read-only", @@ -175,7 +175,7 @@ describe("Codex SDK session", () => { }; const result = await runCodexSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk, thread: {}, @@ -200,7 +200,7 @@ describe("Codex SDK session", () => { }; const result = await runCodexSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk, thread: {}, @@ -363,7 +363,7 @@ describe("Codex SDK session", () => { }; const result = await runCodexSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger: { ...logger, log: (line: { message: string }) => logged.push(line.message) }, sdk, thread: {}, @@ -443,7 +443,7 @@ describe("Codex SDK session", () => { }; await runCodexSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk, thread: { sandboxMode: "yolo" as never }, @@ -463,7 +463,7 @@ describe("Codex SDK session", () => { }; const result = await runCodexSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk, thread: {}, diff --git a/packages/integrations/core/src/facade/config.ts b/packages/integrations/core/src/facade/config.ts index 4fd7a4b7f7..1879fcf2e4 100644 --- a/packages/integrations/core/src/facade/config.ts +++ b/packages/integrations/core/src/facade/config.ts @@ -157,10 +157,6 @@ function providerApiKey(provider: string | undefined, env: NodeJS.ProcessEnv): s return nonEmpty(env.OPENAI_API_KEY); case "anthropic": return nonEmpty(env.ANTHROPIC_API_KEY); - case "groq": - return nonEmpty(env.GROQ_API_KEY); - case "cerebras": - return nonEmpty(env.CEREBRAS_API_KEY); default: return undefined; } diff --git a/packages/integrations/crewai/README.md b/packages/integrations/crewai/README.md index 9474578102..7fda384a20 100644 --- a/packages/integrations/crewai/README.md +++ b/packages/integrations/crewai/README.md @@ -26,7 +26,7 @@ uv sync | `STAGEHAND_BROWSER` | Browser backend. Defaults to `browserbase` when `BROWSERBASE_API_KEY` is set, otherwise `local`. | | `BROWSERBASE_API_KEY` | Browserbase API key. | | `STAGEHAND_MODEL_NAME` / `STAGEHAND_MODEL_API_KEY` | Model used by the facade server and its key. | -| `CREWAI_MODEL` | CrewAI agent model; defaults to `openai/gpt-5.6-luna`. | +| `CREWAI_MODEL` | CrewAI agent model; defaults to `openai/gpt-6-luna`. | | `OPENAI_API_KEY` | Used by the CrewAI agent model in the host process; NOT forwarded to the facade child process (the child env is an explicit `STAGEHAND_*`/`BROWSERBASE_*` allowlist). | ## Run diff --git a/packages/integrations/crewai/agent.py b/packages/integrations/crewai/agent.py index c89c4af12f..888fc11b01 100644 --- a/packages/integrations/crewai/agent.py +++ b/packages/integrations/crewai/agent.py @@ -107,7 +107,7 @@ def main() -> None: print(f'Usage: {Path(sys.argv[0]).name} "your instruction"', file=sys.stderr) raise SystemExit(2) - model = os.environ.get("CREWAI_MODEL", "openai/gpt-5.6-luna") + model = os.environ.get("CREWAI_MODEL", "openai/gpt-6-luna") with facade_session() as tools: agent = Agent( role="Stagehand browser agent", diff --git a/packages/integrations/deepagents-sdk/tests/session.test.ts b/packages/integrations/deepagents-sdk/tests/session.test.ts index f0096dba2e..d3f0e0dfc1 100644 --- a/packages/integrations/deepagents-sdk/tests/session.test.ts +++ b/packages/integrations/deepagents-sdk/tests/session.test.ts @@ -73,7 +73,7 @@ describe("Deep Agents session", () => { const onToolResult = vi.fn(); const result = await runDeepagentsSession({ prompt: "task", - model: "openai/gpt-5.4-mini", + model: "openai/gpt-6-luna", logger, spawn: fake.spawn, session: { @@ -91,7 +91,7 @@ describe("Deep Agents session", () => { }); expect(JSON.parse(fake.getStdin())).toMatchObject({ prompt: "task", - model: "openai:gpt-5.4-mini", + model: "openai:gpt-6-luna", mcp_servers: { stagehand: { command: "node", args: ["server.js"] } }, recursion_limit: 80, max_tool_steps: 12, @@ -274,10 +274,10 @@ describe("Deep Agents session", () => { }); it("normalizes supported provider model prefixes", () => { - expect(normalizeDeepagentsModel("openai/gpt-5.4-mini")).toBe("openai:gpt-5.4-mini"); + expect(normalizeDeepagentsModel("openai/gpt-6-luna")).toBe("openai:gpt-6-luna"); expect(normalizeDeepagentsModel("anthropic/claude")).toBe("anthropic:claude"); expect(normalizeDeepagentsModel("google/gemini")).toBe("google_genai:gemini"); - expect(normalizeDeepagentsModel("openai:gpt-5.4-mini")).toBe("openai:gpt-5.4-mini"); + expect(normalizeDeepagentsModel("openai:gpt-6-luna")).toBe("openai:gpt-6-luna"); expect(normalizeDeepagentsModel("bare-model")).toBe("bare-model"); }); diff --git a/packages/integrations/deepagents/README.md b/packages/integrations/deepagents/README.md index 7788bffa23..c470d5d9c0 100644 --- a/packages/integrations/deepagents/README.md +++ b/packages/integrations/deepagents/README.md @@ -9,7 +9,7 @@ Set a model-provider key and select the Deep Agents model: ```bash export OPENAI_API_KEY=... -export DEEPAGENTS_MODEL=openai:gpt-5.6-luna +export DEEPAGENTS_MODEL=openai:gpt-6-luna ``` The MCP server launches a visible local Chrome browser by default. Then run: diff --git a/packages/integrations/deepagents/examples/local/agent.py b/packages/integrations/deepagents/examples/local/agent.py index d63b00a456..23c41cca87 100644 --- a/packages/integrations/deepagents/examples/local/agent.py +++ b/packages/integrations/deepagents/examples/local/agent.py @@ -37,7 +37,7 @@ class SportsSummary(BaseModel): async def main() -> None: - model = "openai:gpt-5.6-luna" + model = "openai:gpt-6-luna" instruction = "Go find me a summary of all main sports events today" response_format = SportsSummary diff --git a/packages/integrations/deepagents/examples/local/agents2.py b/packages/integrations/deepagents/examples/local/agents2.py index 1770ab28c3..4bce747e37 100644 --- a/packages/integrations/deepagents/examples/local/agents2.py +++ b/packages/integrations/deepagents/examples/local/agents2.py @@ -37,7 +37,7 @@ class FormFillResult(BaseModel): async def main() -> None: - model = "openai:gpt-5.6-luna" + model = "openai:gpt-6-luna" instruction = """Navigate to https://file.1040.com/estimate/ and wait for it to load. Fill the form with this mock data: - age: 26 diff --git a/packages/integrations/deepagents/examples/managed/.env.example b/packages/integrations/deepagents/examples/managed/.env.example index 341fa151c5..8af3f3381e 100644 --- a/packages/integrations/deepagents/examples/managed/.env.example +++ b/packages/integrations/deepagents/examples/managed/.env.example @@ -1,6 +1,6 @@ # Managed Deep Agent model. Add the matching provider key as a deployment secret. LANGSMITH_API_KEY= -DEEPAGENTS_MODEL=openai:gpt-5.6-luna +DEEPAGENTS_MODEL=openai:gpt-6-luna OPENAI_API_KEY= # Required for the Browserbase browser. @@ -12,7 +12,7 @@ BROWSERBASE_API_KEY= STAGEHAND_API_URL=https://api.stagehand.browserbase.com # Direct Stagehand model BYOK: unset STAGEHAND_API_URL and set both values. -# STAGEHAND_MODEL=openai/gpt-5.6-luna +# STAGEHAND_MODEL=openai/gpt-6-luna # STAGEHAND_MODEL_API_KEY= STAGEHAND_SESSION_TTL_SECONDS=1800 diff --git a/packages/integrations/deepagents/examples/managed/agent.py b/packages/integrations/deepagents/examples/managed/agent.py index 18e6fe8a33..39de7c2ef3 100644 --- a/packages/integrations/deepagents/examples/managed/agent.py +++ b/packages/integrations/deepagents/examples/managed/agent.py @@ -5,6 +5,6 @@ agent = define_deep_agent( name="stagehand-browser-agent", - model=os.environ.get("DEEPAGENTS_MODEL", "openai:gpt-5.6-luna"), + model=os.environ.get("DEEPAGENTS_MODEL", "openai:gpt-6-luna"), tools=[run, snapshot, screenshot], ) diff --git a/packages/integrations/deepagents/tests/test_server.py b/packages/integrations/deepagents/tests/test_server.py index a649bfadb6..051ab748c9 100644 --- a/packages/integrations/deepagents/tests/test_server.py +++ b/packages/integrations/deepagents/tests/test_server.py @@ -45,10 +45,10 @@ def test_sanitize_error_redacts_browserbase_credentials() -> None: def test_runtime_config_accepts_stagehand_byok(monkeypatch: pytest.MonkeyPatch) -> None: - monkeypatch.setenv("STAGEHAND_MODEL", "openai/gpt-5.4-mini") + monkeypatch.setenv("STAGEHAND_MODEL", "openai/gpt-6-luna") monkeypatch.setenv("STAGEHAND_MODEL_API_KEY", "provider-key") config = RuntimeConfig.from_env() - assert config.stagehand_model == "openai/gpt-5.4-mini" + assert config.stagehand_model == "openai/gpt-6-luna" assert config.stagehand_model_api_key == "provider-key" diff --git a/packages/integrations/eve/README.md b/packages/integrations/eve/README.md index f5e82360f8..6b9eabc043 100644 --- a/packages/integrations/eve/README.md +++ b/packages/integrations/eve/README.md @@ -18,10 +18,10 @@ Configure the environment as needed: | -------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | | `STAGEHAND_BROWSER` | Browser backend. Defaults to `browserbase` when `BROWSERBASE_API_KEY` is set, otherwise `local`. | | `BROWSERBASE_API_KEY` | Browserbase API key; required when using the Browserbase backend. | -| `STAGEHAND_MODEL_NAME` | Optional Stagehand model name, such as `openai/gpt-5.6-luna`. | +| `STAGEHAND_MODEL_NAME` | Optional Stagehand model name, such as `openai/gpt-6-luna`. | | `STAGEHAND_MODEL_API_KEY` | Optional explicit API key for `STAGEHAND_MODEL_NAME`; otherwise the matching provider key is inferred when supported. | | `STAGEHAND_EVE_SESSION_FILE` | Optional path used to persist the Browserbase session ID; defaults to a file in the system temporary directory. | -| `EVE_STAGEHAND_MODEL` | Eve agent model; defaults to `gpt-5.6-luna`. | +| `EVE_STAGEHAND_MODEL` | Eve agent model; defaults to `gpt-6-luna`. | | `OPENAI_API_KEY` | OpenAI credential used by the Eve agent model and inferred for an OpenAI Stagehand model. | | `GOOGLE_GENERATIVE_AI_API_KEY` / `GEMINI_API_KEY` / `GOOGLE_API_KEY` | Google credential inferred by Stagehand. If one is set without explicit Stagehand model configuration, the model defaults to `google/gemini-3.8-flash`. | diff --git a/packages/integrations/eve/extension/extension.ts b/packages/integrations/eve/extension/extension.ts index c64fc3dcbf..4411187b31 100644 --- a/packages/integrations/eve/extension/extension.ts +++ b/packages/integrations/eve/extension/extension.ts @@ -4,7 +4,7 @@ import { z } from "zod"; export default defineExtension({ config: z.object({ apiKey: z.string().min(1).optional(), - model: z.string().min(1).default("openai/gpt-5.4-mini"), + model: z.string().min(1).default("openai/gpt-6-luna"), sessionTimeoutSeconds: z.number().int().min(60).max(21_600).default(900), proxies: z.boolean().optional(), }), diff --git a/packages/integrations/fx-sdk/tests/session.test.ts b/packages/integrations/fx-sdk/tests/session.test.ts index dfcf1ebbb6..de5151c7f8 100644 --- a/packages/integrations/fx-sdk/tests/session.test.ts +++ b/packages/integrations/fx-sdk/tests/session.test.ts @@ -87,7 +87,7 @@ describe("fx CLI session", () => { }; const result = await runFxSession({ prompt: "do the task", - model: "openai/gpt-5.6-sol", + model: "openai/gpt-6.1-sol", cwd: "/fake/workspace", home: "/fake/home", env: { PATH: "/bin" }, @@ -109,7 +109,7 @@ describe("fx CLI session", () => { expect(captured?.stdin).toBe("do the task"); expect(captured?.env).toMatchObject({ HOME: "/fake/home", - FX_MODEL: "openai/gpt-5.6-sol", + FX_MODEL: "openai/gpt-6.1-sol", FX_MAX_AGENT_STEPS: "17", FX_PERMISSION_MODE: "auto", }); diff --git a/packages/integrations/mastra-sdk/src/session.ts b/packages/integrations/mastra-sdk/src/session.ts index 3717f3026e..fe591506b9 100644 --- a/packages/integrations/mastra-sdk/src/session.ts +++ b/packages/integrations/mastra-sdk/src/session.ts @@ -132,7 +132,7 @@ export async function loadMastraSdk(): Promise { } export function normalizeMastraModel(model: string): string { - if (model === "mastra/default") return "openai/gpt-5.4-mini"; + if (model === "mastra/default") return "openai/gpt-6-luna"; return model.includes("/") ? model : `openai/${model}`; } diff --git a/packages/integrations/mastra-sdk/tests/mastraMcpClientIds.test.ts b/packages/integrations/mastra-sdk/tests/mastraMcpClientIds.test.ts index 94e780a839..7c60faf536 100644 --- a/packages/integrations/mastra-sdk/tests/mastraMcpClientIds.test.ts +++ b/packages/integrations/mastra-sdk/tests/mastraMcpClientIds.test.ts @@ -35,7 +35,7 @@ describe("Mastra MCP client IDs", () => { for (const port of ["50001", "50002"]) { await runMastraSession({ prompt: "task", - model: "openai/gpt-5.4-mini", + model: "openai/gpt-6-luna", logger, sdk, session: { mcpServers: stdioServer(port) }, diff --git a/packages/integrations/mastra-sdk/tests/session.test.ts b/packages/integrations/mastra-sdk/tests/session.test.ts index f7a4160ec1..f5c2b10f8a 100644 --- a/packages/integrations/mastra-sdk/tests/session.test.ts +++ b/packages/integrations/mastra-sdk/tests/session.test.ts @@ -69,7 +69,7 @@ describe("Mastra SDK session", () => { it("normalizes provider-prefixed, bare, and default models", () => { expect(normalizeMastraModel("anthropic/claude-sonnet-4-6")).toBe("anthropic/claude-sonnet-4-6"); expect(normalizeMastraModel("gpt-5.4")).toBe("openai/gpt-5.4"); - expect(normalizeMastraModel("mastra/default")).toBe("openai/gpt-5.4-mini"); + expect(normalizeMastraModel("mastra/default")).toBe("openai/gpt-6-luna"); }); it("forwards agent and stream options and merges MCP tools", async () => { @@ -107,7 +107,7 @@ describe("Mastra SDK session", () => { it("collects final text after the last tool call and finish usage", async () => { const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk: fakeSdk({ events: [ @@ -155,7 +155,7 @@ describe("Mastra SDK session", () => { const observed: string[] = []; await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk: fakeSdk({ events: [ @@ -177,7 +177,7 @@ describe("Mastra SDK session", () => { const warn = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger: { ...logger, warn }, sdk: fakeSdk({ discoveryErrors: { @@ -222,7 +222,7 @@ describe("Mastra SDK session", () => { const disconnect = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk: fakeSdk({ streamError: new Error("stream failed"), disconnect }), session: { mcpServers: { stagehand: { command: "node" } } }, @@ -235,7 +235,7 @@ describe("Mastra SDK session", () => { it("maps a tool-calls finish reason to max_turns", async () => { const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk: fakeSdk({ events: [ @@ -260,7 +260,7 @@ describe("Mastra SDK session", () => { const log = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger: { ...logger, log }, sdk: fakeSdk({ events: [ @@ -296,7 +296,7 @@ describe("Mastra SDK session", () => { const log = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger: { ...logger, log }, sdk: fakeSdk({ events: [ @@ -359,7 +359,7 @@ describe("Mastra SDK session", () => { const createAgent = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, signal: caller.signal, sdk: fakeSdk({ @@ -379,7 +379,7 @@ describe("Mastra SDK session", () => { const warn = vi.fn(); const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger: { ...logger, warn }, sdk: fakeSdk({ disconnect: () => new Promise(() => {}) }), session: { @@ -396,7 +396,7 @@ describe("Mastra SDK session", () => { let streamSignal: AbortSignal | undefined; const pending = runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, signal: caller.signal, sdk: fakeSdk({ @@ -414,7 +414,7 @@ describe("Mastra SDK session", () => { it("sanitizes the returned final text", async () => { const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, sdk: fakeSdk({ events: [ @@ -453,7 +453,7 @@ describe("Mastra token usage presence", () => { async ({ finish, expectedInput, reported }) => { const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, session: {}, sdk: fakeSdk({ @@ -475,7 +475,7 @@ describe("Mastra token usage presence", () => { it("does not invent usage on an empty stream", async () => { const result = await runMastraSession({ prompt: "task", - model: "gpt-5.4-mini", + model: "gpt-6-luna", logger, session: {}, sdk: fakeSdk({ events: [] }), diff --git a/packages/integrations/mastra/README.md b/packages/integrations/mastra/README.md index 8b2e03da8f..4f01732661 100644 --- a/packages/integrations/mastra/README.md +++ b/packages/integrations/mastra/README.md @@ -27,7 +27,7 @@ Configure the environment as needed: | `BROWSERBASE_API_KEY` | Browserbase API key. | | `STAGEHAND_MODEL_NAME` | Model used by the facade server. | | `STAGEHAND_MODEL_API_KEY` | API key for the facade server model. | -| `MASTRA_STAGEHAND_MODEL` | Mastra agent model; defaults to `gpt-5.6-luna`. | +| `MASTRA_STAGEHAND_MODEL` | Mastra agent model; defaults to `gpt-6-luna`. | | `OPENAI_API_KEY` | Used by the Mastra agent model in the host process. It is not forwarded to the facade server. | ## Run diff --git a/packages/integrations/mastra/package.json b/packages/integrations/mastra/package.json index 83bbe40e0e..d61c395dc1 100644 --- a/packages/integrations/mastra/package.json +++ b/packages/integrations/mastra/package.json @@ -10,7 +10,6 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@ai-sdk/openai": "catalog:", "@browserbasehq/stagehand-integrations": "workspace:*", "@mastra/core": "catalog:", "@mastra/mcp": "catalog:" diff --git a/packages/integrations/mastra/src/agent.ts b/packages/integrations/mastra/src/agent.ts index 3788f50e5d..f5bf915ac7 100644 --- a/packages/integrations/mastra/src/agent.ts +++ b/packages/integrations/mastra/src/agent.ts @@ -1,4 +1,3 @@ -import { openai } from "@ai-sdk/openai"; import { FACADE_AGENT_INSTRUCTIONS } from "@browserbasehq/stagehand-integrations/facade"; import { Agent } from "@mastra/core/agent"; @@ -28,7 +27,10 @@ async function main() { id: "stagehand-facade-agent", name: "Stagehand Facade Agent", instructions: FACADE_AGENT_INSTRUCTIONS, - model: openai(process.env.MASTRA_STAGEHAND_MODEL ?? "gpt-5.6-luna"), + model: { + providerId: "openai", + modelId: process.env.MASTRA_STAGEHAND_MODEL ?? "gpt-6-luna", + }, tools, }); diff --git a/packages/integrations/pi-sdk/src/session.ts b/packages/integrations/pi-sdk/src/session.ts index 5b31b43a65..15adc57286 100644 --- a/packages/integrations/pi-sdk/src/session.ts +++ b/packages/integrations/pi-sdk/src/session.ts @@ -168,7 +168,7 @@ export async function loadPiSdk(options: { logger?: HarnessLogger } = {}): Promi } export function normalizePiModel(model: string): string { - return model === "pi/default" ? "openai/gpt-5.4-mini" : model; + return model === "pi/default" ? "openai/gpt-6-luna" : model; } export async function runPiSession(input: { diff --git a/packages/integrations/pi-sdk/tests/session.test.ts b/packages/integrations/pi-sdk/tests/session.test.ts index 1d650164d7..5105682c63 100644 --- a/packages/integrations/pi-sdk/tests/session.test.ts +++ b/packages/integrations/pi-sdk/tests/session.test.ts @@ -123,7 +123,7 @@ describe("pi SDK session", () => { }); const result = await runPiSession({ prompt: "task", - model: "openai/gpt-5.4-mini", + model: "openai/gpt-6-luna", sdk: fake.sdk, logger, session: { @@ -364,7 +364,7 @@ describe("pi SDK session", () => { ]); const result = await runPiSession({ prompt: "task", - model: "openai/gpt-5.4-mini", + model: "openai/gpt-6-luna", sdk: fake.sdk, logger: { ...logger, log }, session: {}, @@ -397,7 +397,7 @@ describe("pi SDK session", () => { }); it("normalizes models, MCP names/results, code tools, and statuses", async () => { - expect(normalizePiModel("pi/default")).toBe("openai/gpt-5.4-mini"); + expect(normalizePiModel("pi/default")).toBe("openai/gpt-6-luna"); expect(normalizePiModel("google/gemini-2.5-pro")).toBe("google/gemini-2.5-pro"); expect(buildPiMcpToolName("stage.hand", "take shot")).toBe("mcp__stage_hand__take_shot"); expect(isPiMcpToolName("mcp__stage_hand__run", "stage.hand")).toBe(true); diff --git a/packages/integrations/vercel-ai/README.md b/packages/integrations/vercel-ai/README.md index cddecbd05a..e930245e50 100644 --- a/packages/integrations/vercel-ai/README.md +++ b/packages/integrations/vercel-ai/README.md @@ -28,7 +28,7 @@ Configure the environment as needed: | `BROWSERBASE_API_KEY` | Browserbase API key. | | `STAGEHAND_MODEL_NAME` | Model used by the facade server. | | `STAGEHAND_MODEL_API_KEY` | API key for the facade server model. | -| `AI_SDK_STAGEHAND_MODEL` | AI SDK agent model; defaults to `gpt-5.6-luna`. | +| `AI_SDK_STAGEHAND_MODEL` | AI SDK agent model; defaults to `gpt-6-luna`. | | `OPENAI_API_KEY` | Used by the AI SDK agent model in the host process. It is not forwarded: it is neither allowlisted nor one of the host variables (`HOME`, `LOGNAME`, `PATH`, `SHELL`, `TERM`, `USER`) inherited by the transport. | ## Run diff --git a/packages/integrations/vercel-ai/src/agent.ts b/packages/integrations/vercel-ai/src/agent.ts index 55bf5acd02..575d7d06d7 100644 --- a/packages/integrations/vercel-ai/src/agent.ts +++ b/packages/integrations/vercel-ai/src/agent.ts @@ -15,7 +15,7 @@ async function main() { try { const result = await generateText({ - model: openai(process.env.AI_SDK_STAGEHAND_MODEL ?? "gpt-5.6-luna"), + model: openai(process.env.AI_SDK_STAGEHAND_MODEL ?? "gpt-6-luna"), // `ai` and `@ai-sdk/mcp` pin different exact @ai-sdk/provider-utils // versions, so their structurally identical schema types are nominally // distinct (unique-symbol brand). The cast bridges that; runtime is fine. diff --git a/packages/protocol/schemas.ts b/packages/protocol/schemas.ts index 9af87af4c6..c234711cf3 100644 --- a/packages/protocol/schemas.ts +++ b/packages/protocol/schemas.ts @@ -3,184 +3,16 @@ import { StagehandProtocolVersionSchema } from "./protocol-version.ts"; export { STAGEHAND_PROTOCOL_VERSION } from "./protocol-version.ts"; -// Seeded from the explicit model IDs in Vercel AI SDK's provider packages. -// Stagehand owns these allowlists: changes are reviewed and maintained here -// rather than inherited automatically from the SDK. -export const OpenAIModelIdSchema = z - .enum([ - "gpt-4.1", - "gpt-4.1-2025-04-14", - "gpt-4.1-mini", - "gpt-4.1-mini-2025-04-14", - "gpt-4.1-nano", - "gpt-4.1-nano-2025-04-14", - "gpt-4o", - "gpt-4o-2024-05-13", - "gpt-4o-2024-08-06", - "gpt-4o-2024-11-20", - "gpt-4o-audio-preview", - "gpt-4o-audio-preview-2024-12-17", - "gpt-4o-search-preview", - "gpt-4o-search-preview-2025-03-11", - "gpt-4o-mini-search-preview", - "gpt-4o-mini-search-preview-2025-03-11", - "gpt-4o-mini", - "gpt-4o-mini-2024-07-18", - "gpt-3.5-turbo-0125", - "gpt-3.5-turbo", - "gpt-3.5-turbo-1106", - "gpt-5-chat-latest", - "o1", - "o1-2024-12-17", - "o3", - "o3-2025-04-16", - "o3-mini", - "o3-mini-2025-01-31", - "o4-mini", - "o4-mini-2025-04-16", - "gpt-5", - "gpt-5-2025-08-07", - "gpt-5-codex", - "gpt-5-mini", - "gpt-5-mini-2025-08-07", - "gpt-5-nano", - "gpt-5-nano-2025-08-07", - "gpt-5-pro", - "gpt-5-pro-2025-10-06", - "gpt-5.1", - "gpt-5.1-chat-latest", - "gpt-5.1-codex-mini", - "gpt-5.1-codex", - "gpt-5.1-codex-max", - "gpt-5.2", - "gpt-5.2-chat-latest", - "gpt-5.2-pro", - "gpt-5.2-codex", - "gpt-5.3-chat-latest", - "gpt-5.3-codex", - "gpt-5.4", - "gpt-5.4-2026-03-05", - "gpt-5.4-mini", - "gpt-5.4-mini-2026-03-17", - "gpt-5.4-nano", - "gpt-5.4-nano-2026-03-17", - "gpt-5.4-pro", - "gpt-5.4-pro-2026-03-05", - "gpt-5.5", - "gpt-5.5-2026-04-23", - "gpt-5.6", - "gpt-5.6-luna", - "gpt-5.6-sol", - "gpt-5.6-terra", - ]) - .meta({ id: "OpenAIModelId" }); - -export const AnthropicModelIdSchema = z - .enum([ - "claude-3-haiku-20240307", - "claude-haiku-4-5-20251001", - "claude-haiku-4-5", - "claude-opus-4-0", - "claude-opus-4-20250514", - "claude-opus-4-1-20250805", - "claude-opus-4-1", - "claude-opus-4-5", - "claude-opus-4-5-20251101", - "claude-sonnet-4-0", - "claude-sonnet-4-20250514", - "claude-sonnet-4-5-20250929", - "claude-sonnet-4-5", - "claude-sonnet-4-6", - "claude-opus-4-6", - "claude-opus-4-7", - "claude-opus-4-8", - "claude-fable-5", - "claude-sonnet-5", - ]) - .meta({ id: "AnthropicModelId" }); - -export const GoogleModelIdSchema = z - .enum([ - "gemini-2.0-flash", - "gemini-2.0-flash-001", - "gemini-2.0-flash-lite", - "gemini-2.0-flash-lite-001", - "gemini-2.5-pro", - "gemini-2.5-flash", - "gemini-2.5-flash-image", - "gemini-2.5-flash-lite", - "gemini-2.5-flash-preview-tts", - "gemini-2.5-pro-preview-tts", - "gemini-2.5-flash-native-audio-latest", - "gemini-2.5-flash-native-audio-preview-09-2025", - "gemini-2.5-flash-native-audio-preview-12-2025", - "gemini-2.5-computer-use-preview-10-2025", - "gemini-3-pro-preview", - "gemini-3-pro-image-preview", - "gemini-3-flash-preview", - "gemini-3.1-pro-preview", - "gemini-3.1-pro-preview-customtools", - "gemini-3.1-flash-image-preview", - "gemini-3.1-flash-lite-preview", - "gemini-3.1-flash-tts-preview", - "gemini-3.5-flash", - "gemini-3.6-flash", - "gemini-pro-latest", - "gemini-flash-latest", - "gemini-flash-lite-latest", - "deep-research-pro-preview-12-2025", - "deep-research-max-preview-04-2026", - "deep-research-preview-04-2026", - "nano-banana-pro-preview", - "aqa", - "gemini-robotics-er-1.5-preview", - "gemma-3-1b-it", - "gemma-3-4b-it", - "gemma-3n-e4b-it", - "gemma-3n-e2b-it", - "gemma-3-12b-it", - "gemma-3-27b-it", - ]) - .meta({ id: "GoogleModelId" }); - -export const GroqModelIdSchema = z - .enum([ - "gemma2-9b-it", - "llama-3.1-8b-instant", - "llama-3.3-70b-versatile", - "meta-llama/llama-guard-4-12b", - "openai/gpt-oss-120b", - "openai/gpt-oss-20b", - "deepseek-r1-distill-llama-70b", - "meta-llama/llama-4-maverick-17b-128e-instruct", - "meta-llama/llama-4-scout-17b-16e-instruct", - "meta-llama/llama-prompt-guard-2-22m", - "meta-llama/llama-prompt-guard-2-86m", - "moonshotai/kimi-k2-instruct-0905", - "qwen/qwen3-32b", - "llama-guard-3-8b", - "llama3-70b-8192", - "llama3-8b-8192", - "mixtral-8x7b-32768", - "qwen-qwq-32b", - "qwen-2.5-32b", - "deepseek-r1-distill-qwen-32b", - ]) - .meta({ id: "GroqModelId" }); - -export const CerebrasModelIdSchema = z - .enum([ - "llama3.1-8b", - "gpt-oss-120b", - "qwen-3-235b-a22b-instruct-2507", - "qwen-3-235b-a22b-thinking-2507", - "zai-glm-4.6", - "zai-glm-4.7", - ]) - .meta({ id: "CerebrasModelId" }); +// Model IDs are opaque. Stagehand validates the provider, then lets it decide +// whether an ID exists and is available to the caller. +const ModelIdSchema = z.string().min(1).regex(/^\S+$/); + +export const OpenAIModelIdSchema = ModelIdSchema.meta({ id: "OpenAIModelId" }); +export const AnthropicModelIdSchema = ModelIdSchema.meta({ id: "AnthropicModelId" }); +export const GoogleModelIdSchema = ModelIdSchema.meta({ id: "GoogleModelId" }); export const ModelProviderSchema = z - .enum(["openai", "anthropic", "google", "groq", "cerebras"]) + .enum(["openai", "anthropic", "google"]) .meta({ id: "ModelProvider" }); export const OpenAIModelNameSchema = z @@ -192,24 +24,11 @@ export const AnthropicModelNameSchema = z export const GoogleModelNameSchema = z .templateLiteral(["google/", GoogleModelIdSchema]) .meta({ id: "GoogleModelName" }); -export const GroqModelNameSchema = z - .templateLiteral(["groq/", GroqModelIdSchema]) - .meta({ id: "GroqModelName" }); -export const CerebrasModelNameSchema = z - .templateLiteral(["cerebras/", CerebrasModelIdSchema]) - .meta({ id: "CerebrasModelName" }); - export const ModelNameSchema = z - .union([ - OpenAIModelNameSchema, - AnthropicModelNameSchema, - GoogleModelNameSchema, - GroqModelNameSchema, - CerebrasModelNameSchema, - ]) + .union([OpenAIModelNameSchema, AnthropicModelNameSchema, GoogleModelNameSchema]) .meta({ id: "ModelName", - description: "An explicitly supported model name with its provider prefix", + description: "A model name with a registered provider prefix", }); export const CookieSchema = z @@ -854,8 +673,8 @@ const ModelConnectionSchema = z export const ModelConfigSchema = ModelConnectionSchema.extend({ modelName: ModelNameSchema.meta({ - description: "An explicitly supported model name with its provider prefix", - example: "openai/gpt-5.4-mini", + description: "A model name with a registered provider prefix", + example: "openai/gpt-6-luna", }), }).meta({ id: "ModelConfig" }); diff --git a/packages/protocol/stagehand.v4.json b/packages/protocol/stagehand.v4.json index fc17c1f20f..6739f8dfc0 100644 --- a/packages/protocol/stagehand.v4.json +++ b/packages/protocol/stagehand.v4.json @@ -1280,7 +1280,7 @@ } }, "model_name": { - "example": "openai/gpt-5.4-mini", + "example": "openai/gpt-6-luna", "$ref": "#/$defs/ModelName" } }, @@ -1289,23 +1289,15 @@ }, "OpenAIModelName": { "type": "string", - "pattern": "^openai\\/(gpt-4\\.1|gpt-4\\.1-2025-04-14|gpt-4\\.1-mini|gpt-4\\.1-mini-2025-04-14|gpt-4\\.1-nano|gpt-4\\.1-nano-2025-04-14|gpt-4o|gpt-4o-2024-05-13|gpt-4o-2024-08-06|gpt-4o-2024-11-20|gpt-4o-audio-preview|gpt-4o-audio-preview-2024-12-17|gpt-4o-search-preview|gpt-4o-search-preview-2025-03-11|gpt-4o-mini-search-preview|gpt-4o-mini-search-preview-2025-03-11|gpt-4o-mini|gpt-4o-mini-2024-07-18|gpt-3\\.5-turbo-0125|gpt-3\\.5-turbo|gpt-3\\.5-turbo-1106|gpt-5-chat-latest|o1|o1-2024-12-17|o3|o3-2025-04-16|o3-mini|o3-mini-2025-01-31|o4-mini|o4-mini-2025-04-16|gpt-5|gpt-5-2025-08-07|gpt-5-codex|gpt-5-mini|gpt-5-mini-2025-08-07|gpt-5-nano|gpt-5-nano-2025-08-07|gpt-5-pro|gpt-5-pro-2025-10-06|gpt-5\\.1|gpt-5\\.1-chat-latest|gpt-5\\.1-codex-mini|gpt-5\\.1-codex|gpt-5\\.1-codex-max|gpt-5\\.2|gpt-5\\.2-chat-latest|gpt-5\\.2-pro|gpt-5\\.2-codex|gpt-5\\.3-chat-latest|gpt-5\\.3-codex|gpt-5\\.4|gpt-5\\.4-2026-03-05|gpt-5\\.4-mini|gpt-5\\.4-mini-2026-03-17|gpt-5\\.4-nano|gpt-5\\.4-nano-2026-03-17|gpt-5\\.4-pro|gpt-5\\.4-pro-2026-03-05|gpt-5\\.5|gpt-5\\.5-2026-04-23|gpt-5\\.6|gpt-5\\.6-luna|gpt-5\\.6-sol|gpt-5\\.6-terra)$" + "pattern": "^openai\\/\\S+$" }, "AnthropicModelName": { "type": "string", - "pattern": "^anthropic\\/(claude-3-haiku-20240307|claude-haiku-4-5-20251001|claude-haiku-4-5|claude-opus-4-0|claude-opus-4-20250514|claude-opus-4-1-20250805|claude-opus-4-1|claude-opus-4-5|claude-opus-4-5-20251101|claude-sonnet-4-0|claude-sonnet-4-20250514|claude-sonnet-4-5-20250929|claude-sonnet-4-5|claude-sonnet-4-6|claude-opus-4-6|claude-opus-4-7|claude-opus-4-8|claude-fable-5|claude-sonnet-5)$" + "pattern": "^anthropic\\/\\S+$" }, "GoogleModelName": { "type": "string", - "pattern": "^google\\/(gemini-2\\.0-flash|gemini-2\\.0-flash-001|gemini-2\\.0-flash-lite|gemini-2\\.0-flash-lite-001|gemini-2\\.5-pro|gemini-2\\.5-flash|gemini-2\\.5-flash-image|gemini-2\\.5-flash-lite|gemini-2\\.5-flash-preview-tts|gemini-2\\.5-pro-preview-tts|gemini-2\\.5-flash-native-audio-latest|gemini-2\\.5-flash-native-audio-preview-09-2025|gemini-2\\.5-flash-native-audio-preview-12-2025|gemini-2\\.5-computer-use-preview-10-2025|gemini-3-pro-preview|gemini-3-pro-image-preview|gemini-3-flash-preview|gemini-3\\.1-pro-preview|gemini-3\\.1-pro-preview-customtools|gemini-3\\.1-flash-image-preview|gemini-3\\.1-flash-lite-preview|gemini-3\\.1-flash-tts-preview|gemini-3\\.5-flash|gemini-3\\.6-flash|gemini-pro-latest|gemini-flash-latest|gemini-flash-lite-latest|deep-research-pro-preview-12-2025|deep-research-max-preview-04-2026|deep-research-preview-04-2026|nano-banana-pro-preview|aqa|gemini-robotics-er-1\\.5-preview|gemma-3-1b-it|gemma-3-4b-it|gemma-3n-e4b-it|gemma-3n-e2b-it|gemma-3-12b-it|gemma-3-27b-it)$" - }, - "GroqModelName": { - "type": "string", - "pattern": "^groq\\/(gemma2-9b-it|llama-3\\.1-8b-instant|llama-3\\.3-70b-versatile|meta-llama\\/llama-guard-4-12b|openai\\/gpt-oss-120b|openai\\/gpt-oss-20b|deepseek-r1-distill-llama-70b|meta-llama\\/llama-4-maverick-17b-128e-instruct|meta-llama\\/llama-4-scout-17b-16e-instruct|meta-llama\\/llama-prompt-guard-2-22m|meta-llama\\/llama-prompt-guard-2-86m|moonshotai\\/kimi-k2-instruct-0905|qwen\\/qwen3-32b|llama-guard-3-8b|llama3-70b-8192|llama3-8b-8192|mixtral-8x7b-32768|qwen-qwq-32b|qwen-2\\.5-32b|deepseek-r1-distill-qwen-32b)$" - }, - "CerebrasModelName": { - "type": "string", - "pattern": "^cerebras\\/(llama3\\.1-8b|gpt-oss-120b|qwen-3-235b-a22b-instruct-2507|qwen-3-235b-a22b-thinking-2507|zai-glm-4\\.6|zai-glm-4\\.7)$" + "pattern": "^google\\/\\S+$" }, "ModelName": { "anyOf": [ @@ -1317,15 +1309,9 @@ }, { "$ref": "#/$defs/GoogleModelName" - }, - { - "$ref": "#/$defs/GroqModelName" - }, - { - "$ref": "#/$defs/CerebrasModelName" } ], - "description": "An explicitly supported model name with its provider prefix" + "description": "A model name with a registered provider prefix" }, "ClientModelReference": { "type": "object", diff --git a/packages/protocol/types.ts b/packages/protocol/types.ts index 02c67d5ba1..37a25ef612 100644 --- a/packages/protocol/types.ts +++ b/packages/protocol/types.ts @@ -33,8 +33,6 @@ import type { CacheStatusSchema, CacheTokenSavingsSchema, CachingSchema, - CerebrasModelIdSchema, - CerebrasModelNameSchema, ClientOptionsBaseSchema, ClientOptionsSchema, ClientModelReferenceSchema, @@ -142,8 +140,6 @@ import type { ModelNameSchema, ModelProviderOptionsSchema, ModelProviderSchema, - GroqModelIdSchema, - GroqModelNameSchema, ObserveOptionsSchema, ObserveResultSchema, PageAddInitScriptParamsSchema, @@ -264,13 +260,9 @@ export type AzureModelProviderOptions = z.infer; export type AnthropicModelId = z.infer; export type GoogleModelId = z.infer; -export type GroqModelId = z.infer; -export type CerebrasModelId = z.infer; export type OpenAIModelName = z.infer; export type AnthropicModelName = z.infer; export type GoogleModelName = z.infer; -export type GroqModelName = z.infer; -export type CerebrasModelName = z.infer; export type ModelConfig = z.infer; export type ModelName = z.infer; export type ModelProvider = z.infer; diff --git a/packages/sdk-go/README.md b/packages/sdk-go/README.md index 18ccae799c..2edff6a530 100644 --- a/packages/sdk-go/README.md +++ b/packages/sdk-go/README.md @@ -89,7 +89,7 @@ func run(ctx context.Context) (err error) { client, err := stagehand.Create(ctx, stagehand.CreateOptions{ Browser: browser, Model: &stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &modelAPIKey, }, }) diff --git a/packages/sdk-go/examples/act.go b/packages/sdk-go/examples/act.go index d111ff62d0..d333fa40cb 100644 --- a/packages/sdk-go/examples/act.go +++ b/packages/sdk-go/examples/act.go @@ -77,7 +77,7 @@ func modelFromEnvironment() (stagehand.ModelConfig, error) { return stagehand.ModelConfig{}, errors.New("OPENAI_API_KEY is required") } return stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &apiKey, }, nil } diff --git a/packages/sdk-go/examples/caching.go b/packages/sdk-go/examples/caching.go index 618642e576..6244ce485c 100644 --- a/packages/sdk-go/examples/caching.go +++ b/packages/sdk-go/examples/caching.go @@ -105,7 +105,7 @@ func modelFromEnvironment() (stagehand.ModelConfig, error) { return stagehand.ModelConfig{}, errors.New("OPENAI_API_KEY is required") } return stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &apiKey, }, nil } diff --git a/packages/sdk-go/examples/custom_logging.go b/packages/sdk-go/examples/custom_logging.go index 3d35626543..23c525d7e2 100644 --- a/packages/sdk-go/examples/custom_logging.go +++ b/packages/sdk-go/examples/custom_logging.go @@ -29,7 +29,7 @@ func run(ctx context.Context) (err error) { defer func() { err = errors.Join(err, logFile.Close()) }() model := stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &apiKey, } browser, err := stagehand.LaunchLocalBrowser(ctx, &stagehand.LocalBrowserLaunchOptions{Headless: true}) diff --git a/packages/sdk-go/examples/extract.go b/packages/sdk-go/examples/extract.go index a5c3515822..20a02804f8 100644 --- a/packages/sdk-go/examples/extract.go +++ b/packages/sdk-go/examples/extract.go @@ -78,7 +78,7 @@ func modelFromEnvironment() (stagehand.ModelConfig, error) { return stagehand.ModelConfig{}, errors.New("OPENAI_API_KEY is required") } return stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &apiKey, }, nil } diff --git a/packages/sdk-go/examples/observe.go b/packages/sdk-go/examples/observe.go index f0b70ae45e..6da61c9b91 100644 --- a/packages/sdk-go/examples/observe.go +++ b/packages/sdk-go/examples/observe.go @@ -72,7 +72,7 @@ func modelFromEnvironment() (stagehand.ModelConfig, error) { return stagehand.ModelConfig{}, errors.New("OPENAI_API_KEY is required") } return stagehand.ModelConfig{ - ModelName: "openai/gpt-5.4-mini", + ModelName: "openai/gpt-6-luna", APIKey: &apiKey, }, nil } diff --git a/packages/sdk-go/examples/page_events.go b/packages/sdk-go/examples/page_events.go index c370657157..b61909e483 100644 --- a/packages/sdk-go/examples/page_events.go +++ b/packages/sdk-go/examples/page_events.go @@ -38,7 +38,7 @@ func runPageEvents(ctx context.Context) (err error) { } defer func() { err = errors.Join(err, browser.Close(ctx)) }() - model := stagehand.ModelConfig{ModelName: "openai/gpt-5.4-mini", APIKey: &modelAPIKey} + model := stagehand.ModelConfig{ModelName: "openai/gpt-6-luna", APIKey: &modelAPIKey} client, err := stagehand.Create(ctx, stagehand.CreateOptions{Browser: browser, Model: &model}) if err != nil { return err diff --git a/packages/sdk-go/internal/extensionassets/stagehand-extension.zip b/packages/sdk-go/internal/extensionassets/stagehand-extension.zip index b27651a636..79621c6666 100644 Binary files a/packages/sdk-go/internal/extensionassets/stagehand-extension.zip and b/packages/sdk-go/internal/extensionassets/stagehand-extension.zip differ diff --git a/packages/sdk-go/models.gen.go b/packages/sdk-go/models.gen.go index 4157bd69c8..22e39c1333 100644 --- a/packages/sdk-go/models.gen.go +++ b/packages/sdk-go/models.gen.go @@ -318,8 +318,6 @@ type CallbackBatchResult struct { Value json.RawMessage `json:"value,omitempty,omitzero"` } -type CerebrasModelName string - type ClearCookieOptions struct { // Domain corresponds to the JSON schema field "domain". Domain *CookieFilter `json:"domain,omitempty,omitzero"` @@ -557,8 +555,6 @@ type ExtractResult struct { type GoogleModelName string -type GroqModelName string - type ImplementationInfo struct { // Name corresponds to the JSON schema field "name". Name string `json:"name"` @@ -2358,9 +2354,6 @@ type generatedModelCatalog struct { // CallbackBatchResult corresponds to the JSON schema field "CallbackBatchResult". CallbackBatchResult *CallbackBatchResult `json:"CallbackBatchResult,omitempty,omitzero"` - // CerebrasModelName corresponds to the JSON schema field "CerebrasModelName". - CerebrasModelName *CerebrasModelName `json:"CerebrasModelName,omitempty,omitzero"` - // ClearCookieOptions corresponds to the JSON schema field "ClearCookieOptions". ClearCookieOptions *ClearCookieOptions `json:"ClearCookieOptions,omitempty,omitzero"` @@ -2468,9 +2461,6 @@ type generatedModelCatalog struct { // GoogleModelName corresponds to the JSON schema field "GoogleModelName". GoogleModelName *GoogleModelName `json:"GoogleModelName,omitempty,omitzero"` - // GroqModelName corresponds to the JSON schema field "GroqModelName". - GroqModelName *GroqModelName `json:"GroqModelName,omitempty,omitzero"` - // ImplementationInfo corresponds to the JSON schema field "ImplementationInfo". ImplementationInfo *ImplementationInfo `json:"ImplementationInfo,omitempty,omitzero"` diff --git a/packages/sdk-go/models_test.go b/packages/sdk-go/models_test.go index a746d4701c..0038c3eab0 100644 --- a/packages/sdk-go/models_test.go +++ b/packages/sdk-go/models_test.go @@ -189,10 +189,10 @@ func TestObjectUnionsRoundTrip(t *testing.T) { }, { name: "model", - value: ModelConfig{ModelName: ModelName("openai/gpt-5.6")}, + value: ModelConfig{ModelName: ModelName("openai/gpt-6.1-sol")}, new: func() any { return new(ModelConfig) }, check: func(t *testing.T, value any) { - if value.(*ModelConfig).ModelName != ModelName("openai/gpt-5.6") { + if value.(*ModelConfig).ModelName != ModelName("openai/gpt-6.1-sol") { t.Fatal("decoded the wrong model configuration") } }, diff --git a/packages/sdk-python/README.md b/packages/sdk-python/README.md index 524099f8b7..2ee29e763d 100644 --- a/packages/sdk-python/README.md +++ b/packages/sdk-python/README.md @@ -75,7 +75,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=os.environ["OPENAI_API_KEY"], ) try: diff --git a/packages/sdk-python/examples/act.py b/packages/sdk-python/examples/act.py index 39cc88b2c1..33fcc309eb 100644 --- a/packages/sdk-python/examples/act.py +++ b/packages/sdk-python/examples/act.py @@ -14,7 +14,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, ) try: diff --git a/packages/sdk-python/examples/caching.py b/packages/sdk-python/examples/caching.py index a4975241c4..d4ccaeb504 100644 --- a/packages/sdk-python/examples/caching.py +++ b/packages/sdk-python/examples/caching.py @@ -30,7 +30,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, ) try: diff --git a/packages/sdk-python/examples/custom_llm.py b/packages/sdk-python/examples/custom_llm.py index d7d423bd63..06b4791e62 100644 --- a/packages/sdk-python/examples/custom_llm.py +++ b/packages/sdk-python/examples/custom_llm.py @@ -104,7 +104,7 @@ async def generate_with_openai(params: LLMGenerateInput) -> LLMGenerateOutput: openai_format["description"] = response_format.description text = ResponseTextConfigParam(format=openai_format) response = await openai.responses.create( - model="gpt-5.4-mini", + model="gpt-6-luna", instructions=request.system_prompt, input=[ { diff --git a/packages/sdk-python/examples/custom_logging.py b/packages/sdk-python/examples/custom_logging.py index 891d4bf503..7d081694c5 100644 --- a/packages/sdk-python/examples/custom_logging.py +++ b/packages/sdk-python/examples/custom_logging.py @@ -14,7 +14,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, logging={ "level": "info", diff --git a/packages/sdk-python/examples/extract.py b/packages/sdk-python/examples/extract.py index 90360001b3..8414954721 100644 --- a/packages/sdk-python/examples/extract.py +++ b/packages/sdk-python/examples/extract.py @@ -21,7 +21,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, ) try: diff --git a/packages/sdk-python/examples/observe.py b/packages/sdk-python/examples/observe.py index 8f75aa8d65..302be02e31 100644 --- a/packages/sdk-python/examples/observe.py +++ b/packages/sdk-python/examples/observe.py @@ -14,7 +14,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, ) try: diff --git a/packages/sdk-python/examples/page_events.py b/packages/sdk-python/examples/page_events.py index db5bd40a1c..bd04ab65c2 100644 --- a/packages/sdk-python/examples/page_events.py +++ b/packages/sdk-python/examples/page_events.py @@ -24,7 +24,7 @@ async def main() -> None: try: stagehand = await Stagehand.create( browser=browser, - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key=OPENAI_API_KEY, ) subscription: CDPSubscription | None = None diff --git a/packages/sdk-python/src/stagehand/_generated/input_types.py b/packages/sdk-python/src/stagehand/_generated/input_types.py index 7e5caee82b..3b2168d393 100644 --- a/packages/sdk-python/src/stagehand/_generated/input_types.py +++ b/packages/sdk-python/src/stagehand/_generated/input_types.py @@ -112,9 +112,6 @@ class CallbackBatchOptions(TypedDict): timeout: NotRequired[int] -CerebrasModelName: TypeAlias = str - - class ClientModelReference(TypedDict): source: Literal["client"] @@ -290,9 +287,6 @@ class CallbackBatchResult(TypedDict): GoogleModelName: TypeAlias = str -GroqModelName: TypeAlias = str - - class ImplementationInfo(TypedDict): name: str version: str @@ -666,7 +660,7 @@ class NavigationServerAddr(TypedDict): OpenAIModelName: TypeAlias = str -ModelName: TypeAlias = OpenAIModelName | AnthropicModelName | GoogleModelName | GroqModelName | CerebrasModelName +ModelName: TypeAlias = OpenAIModelName | AnthropicModelName | GoogleModelName class ModelConfig(TypedDict): diff --git a/packages/sdk-python/src/stagehand/_generated/models.py b/packages/sdk-python/src/stagehand/_generated/models.py index cbc38e5b91..b934525f30 100644 --- a/packages/sdk-python/src/stagehand/_generated/models.py +++ b/packages/sdk-python/src/stagehand/_generated/models.py @@ -145,12 +145,7 @@ class Animations(StrEnum): class AnthropicModelName(RootModel[StrictStr]): - root: Annotated[ - StrictStr, - Field( - pattern="^anthropic\\/(claude-3-haiku-20240307|claude-haiku-4-5-20251001|claude-haiku-4-5|claude-opus-4-0|claude-opus-4-20250514|claude-opus-4-1-20250805|claude-opus-4-1|claude-opus-4-5|claude-opus-4-5-20251101|claude-sonnet-4-0|claude-sonnet-4-20250514|claude-sonnet-4-5-20250929|claude-sonnet-4-5|claude-sonnet-4-6|claude-opus-4-6|claude-opus-4-7|claude-opus-4-8|claude-fable-5|claude-sonnet-5)$" - ), - ] + root: Annotated[StrictStr, Field(pattern="^anthropic\\/\\S+$")] class Browser(StrEnum): @@ -349,15 +344,6 @@ class Caret(StrEnum): initial = "initial" -class CerebrasModelName(RootModel[StrictStr]): - root: Annotated[ - StrictStr, - Field( - pattern="^cerebras\\/(llama3\\.1-8b|gpt-oss-120b|qwen-3-235b-a22b-instruct-2507|qwen-3-235b-a22b-thinking-2507|zai-glm-4\\.6|zai-glm-4\\.7)$" - ), - ] - - class ClearCookieOptions(WireModel): model_config = ConfigDict( extra="forbid", @@ -709,21 +695,7 @@ class FieldSchema9( class GoogleModelName(RootModel[StrictStr]): - root: Annotated[ - StrictStr, - Field( - pattern="^google\\/(gemini-2\\.0-flash|gemini-2\\.0-flash-001|gemini-2\\.0-flash-lite|gemini-2\\.0-flash-lite-001|gemini-2\\.5-pro|gemini-2\\.5-flash|gemini-2\\.5-flash-image|gemini-2\\.5-flash-lite|gemini-2\\.5-flash-preview-tts|gemini-2\\.5-pro-preview-tts|gemini-2\\.5-flash-native-audio-latest|gemini-2\\.5-flash-native-audio-preview-09-2025|gemini-2\\.5-flash-native-audio-preview-12-2025|gemini-2\\.5-computer-use-preview-10-2025|gemini-3-pro-preview|gemini-3-pro-image-preview|gemini-3-flash-preview|gemini-3\\.1-pro-preview|gemini-3\\.1-pro-preview-customtools|gemini-3\\.1-flash-image-preview|gemini-3\\.1-flash-lite-preview|gemini-3\\.1-flash-tts-preview|gemini-3\\.5-flash|gemini-3\\.6-flash|gemini-pro-latest|gemini-flash-latest|gemini-flash-lite-latest|deep-research-pro-preview-12-2025|deep-research-max-preview-04-2026|deep-research-preview-04-2026|nano-banana-pro-preview|aqa|gemini-robotics-er-1\\.5-preview|gemma-3-1b-it|gemma-3-4b-it|gemma-3n-e4b-it|gemma-3n-e2b-it|gemma-3-12b-it|gemma-3-27b-it)$" - ), - ] - - -class GroqModelName(RootModel[StrictStr]): - root: Annotated[ - StrictStr, - Field( - pattern="^groq\\/(gemma2-9b-it|llama-3\\.1-8b-instant|llama-3\\.3-70b-versatile|meta-llama\\/llama-guard-4-12b|openai\\/gpt-oss-120b|openai\\/gpt-oss-20b|deepseek-r1-distill-llama-70b|meta-llama\\/llama-4-maverick-17b-128e-instruct|meta-llama\\/llama-4-scout-17b-16e-instruct|meta-llama\\/llama-prompt-guard-2-22m|meta-llama\\/llama-prompt-guard-2-86m|moonshotai\\/kimi-k2-instruct-0905|qwen\\/qwen3-32b|llama-guard-3-8b|llama3-70b-8192|llama3-8b-8192|mixtral-8x7b-32768|qwen-qwq-32b|qwen-2\\.5-32b|deepseek-r1-distill-qwen-32b)$" - ), - ] + root: Annotated[StrictStr, Field(pattern="^google\\/\\S+$")] class HttpVersion(StrEnum): @@ -1350,8 +1322,8 @@ class ModelConfig(WireModel): """ headers: Optional[dict[StrictStr, StrictStr]] = None """Custom headers sent with every request to the model provider""" - model_name: Annotated[ModelName, Field(examples=["openai/gpt-5.4-mini"])] - """Example: 'openai/gpt-5.4-mini'""" + model_name: Annotated[ModelName, Field(examples=["openai/gpt-6-luna"])] + """Example: 'openai/gpt-6-luna'""" class MouseButton(StrEnum): @@ -1462,19 +1434,12 @@ class ObserveResult(WireModel): class OpenAIModelName(RootModel[StrictStr]): - root: Annotated[ - StrictStr, - Field( - pattern="^openai\\/(gpt-4\\.1|gpt-4\\.1-2025-04-14|gpt-4\\.1-mini|gpt-4\\.1-mini-2025-04-14|gpt-4\\.1-nano|gpt-4\\.1-nano-2025-04-14|gpt-4o|gpt-4o-2024-05-13|gpt-4o-2024-08-06|gpt-4o-2024-11-20|gpt-4o-audio-preview|gpt-4o-audio-preview-2024-12-17|gpt-4o-search-preview|gpt-4o-search-preview-2025-03-11|gpt-4o-mini-search-preview|gpt-4o-mini-search-preview-2025-03-11|gpt-4o-mini|gpt-4o-mini-2024-07-18|gpt-3\\.5-turbo-0125|gpt-3\\.5-turbo|gpt-3\\.5-turbo-1106|gpt-5-chat-latest|o1|o1-2024-12-17|o3|o3-2025-04-16|o3-mini|o3-mini-2025-01-31|o4-mini|o4-mini-2025-04-16|gpt-5|gpt-5-2025-08-07|gpt-5-codex|gpt-5-mini|gpt-5-mini-2025-08-07|gpt-5-nano|gpt-5-nano-2025-08-07|gpt-5-pro|gpt-5-pro-2025-10-06|gpt-5\\.1|gpt-5\\.1-chat-latest|gpt-5\\.1-codex-mini|gpt-5\\.1-codex|gpt-5\\.1-codex-max|gpt-5\\.2|gpt-5\\.2-chat-latest|gpt-5\\.2-pro|gpt-5\\.2-codex|gpt-5\\.3-chat-latest|gpt-5\\.3-codex|gpt-5\\.4|gpt-5\\.4-2026-03-05|gpt-5\\.4-mini|gpt-5\\.4-mini-2026-03-17|gpt-5\\.4-nano|gpt-5\\.4-nano-2026-03-17|gpt-5\\.4-pro|gpt-5\\.4-pro-2026-03-05|gpt-5\\.5|gpt-5\\.5-2026-04-23|gpt-5\\.6|gpt-5\\.6-luna|gpt-5\\.6-sol|gpt-5\\.6-terra)$" - ), - ] + root: Annotated[StrictStr, Field(pattern="^openai\\/\\S+$")] -class ModelName( - RootModel[Union[OpenAIModelName, AnthropicModelName, GoogleModelName, GroqModelName, CerebrasModelName]] -): - root: Union[OpenAIModelName, AnthropicModelName, GoogleModelName, GroqModelName, CerebrasModelName] - """An explicitly supported model name with its provider prefix""" +class ModelName(RootModel[Union[OpenAIModelName, AnthropicModelName, GoogleModelName]]): + root: Union[OpenAIModelName, AnthropicModelName, GoogleModelName] + """A model name with a registered provider prefix""" class OperatingSystem(StrEnum): diff --git a/packages/sdk-python/tests/test_generated_models.py b/packages/sdk-python/tests/test_generated_models.py index 38aa0544ce..4cc43683f7 100644 --- a/packages/sdk-python/tests/test_generated_models.py +++ b/packages/sdk-python/tests/test_generated_models.py @@ -63,6 +63,16 @@ def test_generated_models_validate_and_serialize_wire_values() -> None: } +@pytest.mark.parametrize("model_name", ["openai/gpt-6-astra", "google/private-model"]) +def test_generated_model_names_accept_new_ids(model_name: str) -> None: + config = models.ModelConfig.model_validate({"model_name": model_name}) + assert config.model_name.root.root == model_name + + +@pytest.mark.parametrize("model_name", ["openai/", "other/model", "google/a b"]) +def test_generated_model_names_reject_invalid_names(model_name: str) -> None: + with pytest.raises(ValidationError): + models.ModelConfig.model_validate({"model_name": model_name}) @pytest.mark.parametrize( "model", [ diff --git a/packages/sdk-python/tests/test_stagehand.py b/packages/sdk-python/tests/test_stagehand.py index a4aa40f4d1..51941d1abc 100644 --- a/packages/sdk-python/tests/test_stagehand.py +++ b/packages/sdk-python/tests/test_stagehand.py @@ -391,7 +391,7 @@ async def test_local_browser_omits_metadata_and_forwards_caller_options( await Stagehand.create( browser=browser, api_key="caller-key", - model="openai/gpt-5.4-mini", + model="openai/gpt-6-luna", model_api_key="model-key", telemetry=telemetry, system_prompt="Use the test policy", diff --git a/packages/sdk-ts/examples/act.ts b/packages/sdk-ts/examples/act.ts index cd17765fb9..dcc2bf5fa0 100644 --- a/packages/sdk-ts/examples/act.ts +++ b/packages/sdk-ts/examples/act.ts @@ -8,7 +8,7 @@ const browser = await localBrowser.launch({ headless: true }); const stagehand = await Stagehand.create({ browser, model: { - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: OPENAI_API_KEY, }, }); diff --git a/packages/sdk-ts/examples/caching.ts b/packages/sdk-ts/examples/caching.ts index 9e0e610669..a82771d22d 100644 --- a/packages/sdk-ts/examples/caching.ts +++ b/packages/sdk-ts/examples/caching.ts @@ -23,7 +23,7 @@ const companiesSchema = z.object({ const stagehand = await Stagehand.create({ browser, model: { - modelName: "openai/gpt-5.4-mini", + modelName: "openai/gpt-6-luna", apiKey: OPENAI_API_KEY, }, }); diff --git a/packages/sdk-ts/examples/customLlm.ts b/packages/sdk-ts/examples/customLlm.ts index 57da4c5833..c8e88e0038 100644 --- a/packages/sdk-ts/examples/customLlm.ts +++ b/packages/sdk-ts/examples/customLlm.ts @@ -83,7 +83,7 @@ async function generateWithOpenAI(params: LLMGenerateParams): Promise { const options = serializeClientLocatorOptions("extract", "page-1", { locator: page.locator("main").nth(2), ignoreLocators: [], - model: { modelName: "openai/gpt-5.4-mini" }, + model: { modelName: "openai/gpt-6-luna" }, timeout: 30_000, variables: { accountEmail: "user@example.com" }, }); @@ -30,7 +30,7 @@ describe("client locator option serialization", () => { expect(options).toEqual({ locator: { selector: "main", nth: 2 }, ignoreLocators: [], - model: { modelName: "openai/gpt-5.4-mini" }, + model: { modelName: "openai/gpt-6-luna" }, timeout: 30_000, variables: { accountEmail: "user@example.com" }, }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 62f57a2a6e..4b146fea0b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -206,26 +206,20 @@ settings: catalogs: default: '@ai-sdk/anthropic': - specifier: ^4.0.8 - version: 4.0.8 - '@ai-sdk/cerebras': - specifier: ^3.0.5 - version: 3.0.5 + specifier: ^4.0.67 + version: 4.0.67 '@ai-sdk/google': - specifier: ^4.0.8 - version: 4.0.8 - '@ai-sdk/groq': - specifier: ^4.0.5 - version: 4.0.5 + specifier: ^4.0.84 + version: 4.0.84 '@ai-sdk/mcp': specifier: 2.0.22 version: 2.0.22 '@ai-sdk/openai': - specifier: ^4.0.8 - version: 4.0.8 + specifier: ^4.0.79 + version: 4.0.79 '@ai-sdk/provider': - specifier: ^4.0.2 - version: 4.0.4 + specifier: ^4.0.19 + version: 4.0.19 '@anthropic-ai/claude-agent-sdk': specifier: 0.3.224 version: 0.3.224 @@ -317,8 +311,8 @@ catalogs: specifier: ^24 version: 24.13.2 ai: - specifier: ^7.0.16 - version: 7.0.16 + specifier: ^7.0.120 + version: 7.0.120 camelcase-keys: specifier: ^10.0.2 version: 10.0.2 @@ -388,7 +382,7 @@ catalogs: eve: ai: specifier: ^7.0.105 - version: 7.0.122 + version: 7.0.120 eve: specifier: 0.71.2 version: 0.71.2 @@ -510,7 +504,7 @@ importers: version: 4.0.23(@types/node@20.19.43) '@oclif/core': specifier: ^4.11.0 - version: 4.13.0 + version: 4.14.0 '@vercel/detect-agent': specifier: ^1.2.3 version: 1.2.3 @@ -531,7 +525,7 @@ importers: version: 2.3.0 ignore: specifier: ^7.0.5 - version: 7.0.5 + version: 7.0.8 node-html-markdown: specifier: ^1.3.0 version: 1.3.0 @@ -592,10 +586,10 @@ importers: devDependencies: '@mdx-js/mdx': specifier: 'catalog:' - version: 3.1.1 + version: 3.1.1(supports-color@8.1.1) mint: specifier: 'catalog:' - version: 4.2.788(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) + version: 4.2.788(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) packages/evals: dependencies: @@ -604,10 +598,10 @@ importers: version: 2.0.3 '@anthropic-ai/claude-agent-sdk': specifier: 'catalog:' - version: 0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3) + version: 0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(zod@4.4.3) '@braintrust/otel': specifier: ^0.2.1 - version: 0.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3)) + version: 0.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3)) '@browserbasehq/sdk': specifier: 'catalog:' version: 2.16.0 @@ -661,7 +655,7 @@ importers: version: 0.220.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-base': specifier: ^2.9.0 - version: 2.9.0(@opentelemetry/api@1.9.1) + version: 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/sdk-trace-node': specifier: ^2.9.0 version: 2.10.0(@opentelemetry/api@1.9.1) @@ -670,7 +664,7 @@ importers: version: 5.0.220(zod@4.4.3) braintrust: specifier: ^3.21.0 - version: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3) + version: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3) browse: specifier: workspace:* version: link:../cli @@ -679,7 +673,7 @@ importers: version: 17.4.2 langsmith: specifier: ^0.6.0 - version: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3))(ws@8.21.0(bufferutil@4.1.0)) + version: 0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3))(ws@8.21.0(bufferutil@4.1.0)) openai: specifier: ^4.104.0 version: 4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) @@ -728,13 +722,13 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.67(zod@4.4.3) '@ai-sdk/mcp': specifier: 'catalog:' version: 2.0.22(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.79(zod@4.4.3) '@browserbasehq/sdk': specifier: 'catalog:' version: 2.16.0 @@ -749,7 +743,7 @@ importers: version: 0.0.82 ai: specifier: 'catalog:' - version: 7.0.16(zod@4.4.3) + version: 7.0.120(zod@4.4.3) dotenv: specifier: 'catalog:' version: 17.4.2 @@ -762,7 +756,7 @@ importers: version: 24.13.2 ffmpeg-static: specifier: 'catalog:' - version: 5.3.0 + version: 5.3.0(supports-color@8.1.1) tsx: specifier: 'catalog:' version: 4.23.1 @@ -774,22 +768,16 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) - '@ai-sdk/cerebras': - specifier: 'catalog:' - version: 3.0.5(zod@4.4.3) + version: 4.0.67(zod@4.4.3) '@ai-sdk/google': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) - '@ai-sdk/groq': - specifier: 'catalog:' - version: 4.0.5(zod@4.4.3) + version: 4.0.84(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.79(zod@4.4.3) '@ai-sdk/provider': specifier: 'catalog:' - version: 4.0.4 + version: 4.0.19 '@opentelemetry/api': specifier: 'catalog:' version: 1.9.1 @@ -810,7 +798,7 @@ importers: version: 1.43.0 ai: specifier: 'catalog:' - version: 7.0.16(zod@4.4.3) + version: 7.0.120(zod@4.4.3) devtools-protocol: specifier: 'catalog:' version: 0.0.1657692 @@ -847,7 +835,7 @@ importers: dependencies: '@anthropic-ai/claude-agent-sdk': specifier: 'catalog:' - version: 0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3) + version: 0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(zod@4.4.3) '@browserbasehq/stagehand-integrations': specifier: workspace:* version: link:../core @@ -1058,10 +1046,10 @@ importers: version: 24.13.2 ai: specifier: catalog:eve - version: 7.0.122(zod@4.4.3) + version: 7.0.120(zod@4.4.3) eve: specifier: catalog:eve - version: 0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.122(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3)) + version: 0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.120(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3)) typescript: specifier: 'catalog:' version: 5.9.3 @@ -1073,13 +1061,13 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.67(zod@4.4.3) '@ai-sdk/google': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.84(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.79(zod@4.4.3) '@browserbasehq/stagehand-integrations': specifier: workspace:* version: link:../core @@ -1088,10 +1076,10 @@ importers: version: 1.29.0(supports-color@8.1.1)(zod@4.4.3) ai: specifier: catalog:eve - version: 7.0.122(zod@4.4.3) + version: 7.0.120(zod@4.4.3) eve: specifier: 'catalog:' - version: 0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.122(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3)) + version: 0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.120(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3)) zod: specifier: 'catalog:' version: 4.4.3 @@ -1138,7 +1126,7 @@ importers: version: link:../core '@google/genai': specifier: 'catalog:' - version: 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0) + version: 1.52.0(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@8.1.1) devDependencies: '@types/node': specifier: 'catalog:' @@ -1155,18 +1143,15 @@ importers: packages/integrations/mastra: dependencies: - '@ai-sdk/openai': - specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) '@browserbasehq/stagehand-integrations': specifier: workspace:* version: link:../core '@mastra/core': specifier: 'catalog:' - version: 1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3) + version: 1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3) '@mastra/mcp': specifier: 'catalog:' - version: 1.15.1(@mastra/core@1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3))(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(zod@4.4.3) + version: 1.15.1(@mastra/core@1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(zod@4.4.3) devDependencies: '@types/node': specifier: 'catalog:' @@ -1182,13 +1167,13 @@ importers: dependencies: '@ai-sdk/anthropic': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.67(zod@4.4.3) '@ai-sdk/google': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.84(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.79(zod@4.4.3) '@ai-sdk/openai-compatible': specifier: ^3.0.5 version: 3.0.5(zod@4.4.3) @@ -1197,10 +1182,10 @@ importers: version: link:../core '@mastra/core': specifier: 'catalog:' - version: 1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3) + version: 1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3) '@mastra/mcp': specifier: 'catalog:' - version: 1.15.1(@mastra/core@1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3))(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(zod@4.4.3) + version: 1.15.1(@mastra/core@1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(zod@4.4.3) zod: specifier: 'catalog:' version: 4.4.3 @@ -1229,7 +1214,7 @@ importers: devDependencies: '@earendil-works/pi-coding-agent': specifier: 'catalog:' - version: 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) + version: 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) '@types/node': specifier: 'catalog:' version: 24.13.2 @@ -1250,7 +1235,7 @@ importers: version: link:../core '@earendil-works/pi-coding-agent': specifier: 'catalog:' - version: 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) + version: 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) '@modelcontextprotocol/sdk': specifier: 'catalog:' version: 1.29.0(supports-color@8.1.1)(zod@4.4.3) @@ -1278,13 +1263,13 @@ importers: version: 2.0.22(zod@4.4.3) '@ai-sdk/openai': specifier: 'catalog:' - version: 4.0.8(zod@4.4.3) + version: 4.0.79(zod@4.4.3) '@browserbasehq/stagehand-integrations': specifier: workspace:* version: link:../core ai: specifier: 'catalog:' - version: 7.0.16(zod@4.4.3) + version: 7.0.120(zod@4.4.3) devDependencies: '@types/node': specifier: 'catalog:' @@ -1394,8 +1379,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/anthropic@4.0.8': - resolution: {integrity: sha512-ZqT9kLxS2Cbo/4juwtEGbYyP0jNQTnUUKy2nQ8Vn28xqNu50+TukO/oCEWCpm18YbQq7N+hr6ClJs/ATTFpBTg==} + '@ai-sdk/anthropic@4.0.67': + resolution: {integrity: sha512-fEXJwsIGmpZ2KBBYY8OsQD9lvKsIct4xwPo8SSJQ9ymo9QNW1Q4boCUtmvr9kB0NZUtryKpn1VwuETgZjwE54A==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1412,12 +1397,6 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/cerebras@3.0.5': - resolution: {integrity: sha512-XXR63//DjzLuoYVzKXRIw3wSIDiP5S5XOkVAbVWqxEBc5olHfUSPY/PBffKWdKhZVD9RV99x+De+u8KHnNzOqA==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/deepseek@1.0.48': resolution: {integrity: sha512-rNp5vEG1gYSdlFeP7Ky/Pd2xUWfjuzVq1aG2RL4I1PyulGwFHGq50/xeNqWapFi/2+jE+AHHnnUPChDTa3s1Gg==} engines: {node: '>=18'} @@ -1430,14 +1409,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/gateway@4.0.100': - resolution: {integrity: sha512-diJXVW2D1/NUW2JSg99b8yTpN8eW9AK5ntXSW4B7NrsW5STqwcGJAAOFlfOrQBzYHJlWReyy11WefWetdx4Qsw==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - '@ai-sdk/gateway@4.0.12': - resolution: {integrity: sha512-Y7Fy8xJwPz7ZC0DhSQG3HIVk+drup42hrIj6yqKlib3CxwiR0F7nYyUI8+kPrEtbZEoyKoRstvT4/o0HEyFBHA==} + '@ai-sdk/gateway@4.0.98': + resolution: {integrity: sha512-p2q0rrlnCnSI86nZvF+kaAou97sUh0iI2ZcKM24u/JCfGuldyyinvBleJJLuuPuhJ3RLiBaO8R+CpKgn7jwluA==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1454,8 +1427,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/google@4.0.8': - resolution: {integrity: sha512-GELd0RkltieuODzr6tfnEOIufeooctYpGUNxujeh+zrChbHUkX2K6Li4h2EAfizctkY4k3JvC93dU9eh2QxzoQ==} + '@ai-sdk/google@4.0.84': + resolution: {integrity: sha512-GbD4PwdxMfT7HPT21arSw/ak4LsE1xS08gYc4ceqn5u89Tu926IaHrNmFEkk3WUsIxHt5x8mzQi0m2r5GAYiJg==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1466,12 +1439,6 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/groq@4.0.5': - resolution: {integrity: sha512-aiAxz/Og5Z1DZ8XR7UHmb8exxXF9qHAem0TwSFod2b6Imz0AJ22tygl2M9mbv0Q5gCTWkAq7DyOXXdJYv1hzHw==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/mcp@2.0.22': resolution: {integrity: sha512-j3jPwKFTffZCJzYGpN69yKu/y646uu2gWoEwh1jgVyYVpzfu6ErFU+YAd/+xTPxsUTx8FEIEUHTlEsDuOe+ytQ==} engines: {node: '>=22'} @@ -1502,8 +1469,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/openai@4.0.8': - resolution: {integrity: sha512-yW2UuS6jlu2LRYCd+cSpVdu/umf+QjypihYAiGvKk5HnpqQf21ffNjFbke9xo9jhT+TBt2YR30Fs5Sy0md/dfA==} + '@ai-sdk/openai@4.0.79': + resolution: {integrity: sha512-uqRlbxy04WhRuLd5dJUYFbpeKfN5Hn/d/K/fmYswbJq6RhuWdWCRoEmuLpFTpdqku9OSQGMerXMVZQi5Ou8/7Q==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -1544,8 +1511,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - '@ai-sdk/provider-utils@5.0.51': - resolution: {integrity: sha512-z0IsEsDx+dxlZqyCtDjMbBj16NGmxFVTgQcP3+n3EFm9ttNU6wjOgL/kgvaPwtmZM6F7JbtRuLyzr6WOfo5DMw==} + '@ai-sdk/provider-utils@5.0.50': + resolution: {integrity: sha512-qg2LutM5RlUT/tuuFf+VkhFGNZ2sEJHL0oDIrFN/sMoVbDBANglqtGCJUOnBqGMoFBH8IfAXMrFZvbFWx4dMOg==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -3110,10 +3077,6 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@oclif/core@4.13.0': - resolution: {integrity: sha512-j3NKgXE3qd0gvSYsCqDLb3VhW5KEg030VQhMnv5c0qNzPp6jBmF7cCDIQG4ROZIOqEfGbUoDDMAAzaC30vV99g==} - engines: {node: '>=18.0.0'} - '@oclif/core@4.14.0': resolution: {integrity: sha512-QCJIZoVJxV7jywgVAUlsQwl3dr3Sa21kfi5z9KrYolbexWJUtFSEtMoNiBWojD05mYycLnB50gp/VxlGdaOCRA==} engines: {node: '>=18.0.0'} @@ -3299,8 +3262,8 @@ packages: '@oxc-project/types@0.139.0': resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} - '@oxc-project/types@0.151.0': - resolution: {integrity: sha512-J1yXrIlNDZVzE3ada310xeAw7nH8yCAyLPuUIsjKatFPmfn5bS1oW+cM+QsGOtVWd5nhSpbwZWx/rue+r5Z+PA==} + '@oxc-project/types@0.152.0': + resolution: {integrity: sha512-oM/5rLBm2tPkg0iBgkH/FOeR3PCDpY19GTgAZjMFM8h9WI9VW7cLgzp6nwtarYKmovavIQZ+Fe/RKX/8C8O/Rw==} '@oxfmt/binding-android-arm-eabi@0.57.0': resolution: {integrity: sha512-qVBsEO+KugOsCmUHcO8iqNnqc65p7PCKpCs8M66mPZ+Ri+CWbcpoQOEJBg2OTu03+0qu++NK1jj6IzvQVs0Sig==} @@ -3652,8 +3615,8 @@ packages: '@quansync/fs@1.0.0': resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==} - '@rolldown/binding-android-arm-eabi@1.2.11': - resolution: {integrity: sha512-A5kXfGKvKWWZE0TtPrfsvT+q4Y5d1QG8gGUzpYjGydM+fARM9MuX90PrXYXe0XbsDVgyxxNzHo6giCj90bsFNw==} + '@rolldown/binding-android-arm-eabi@1.2.12': + resolution: {integrity: sha512-dB/a1214qKfHMXCpgqR4OZT+jS4kTyEXbQGJPqzobt5EwH5rX080pxE37alt3RzvR1bf1Yz/yGqRfrYAxuPw0A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [android] @@ -3664,8 +3627,8 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.2.11': - resolution: {integrity: sha512-z6cTycz+iJ4PVkuL4HHW4DfTfoeU/2nqYYuSOrTmH7yHK5Y0LCOnA03V4ZNxavyVaU1oOqUgIg2klN/s+USGOA==} + '@rolldown/binding-android-arm64@1.2.12': + resolution: {integrity: sha512-7KHFgQ5VJxIHcLlrwrc3Xbds7oTNQT7Pgi9gQCJKrd2VGab/UksIOYp6VD8MzCstGxOKMgNamPwUCfxPdP1OHg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] @@ -3676,8 +3639,8 @@ packages: cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.2.11': - resolution: {integrity: sha512-jShvqNtP6vDC6/A5JOAzbVV+DkgHqhl/ScVCJEbt+TUY6QYz7YnXcrg3sLtFBniro0f/Ld50ZwCWA6f7KYD1nQ==} + '@rolldown/binding-darwin-arm64@1.2.12': + resolution: {integrity: sha512-3YIhqHD96nA5SaYNRBR16HnGv4oavZvXfD/ayHM+oYZ0WD/8lBAtf6zQua4kEyAvpqrluKXl0lnOBoiNby7x9w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] @@ -3688,8 +3651,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.2.11': - resolution: {integrity: sha512-f2i2xiNWq1Z1l2++q2fuhZRdLAT3aqxD6vRNm1RAxpUoBcdqNB3C0s1Bt+K+PbEx2F5F4gQp6hqKkphCY/xF9w==} + '@rolldown/binding-darwin-x64@1.2.12': + resolution: {integrity: sha512-UuuJ35MFw4gmFOrE9pEqIV+K3syIKveph+Qc1/ljHZVdoDW4pz/JHR/eMVom+TZGl/5OOvGJOWaOCVt3ZfqhxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] @@ -3700,8 +3663,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.2.11': - resolution: {integrity: sha512-4Ir5FSOKIAMr4r0kExpt1s3bMgzJU3rA45AYOHtQpls0oNeqcYBKrWMlckrYH4KCfGLfkfn1tN1dmZPMVsdXow==} + '@rolldown/binding-freebsd-x64@1.2.12': + resolution: {integrity: sha512-uMvssit0a4W+/7D8CbHUvG719mH3R2jwXAlh/XcPvuHTE0g++LymF88DCGNX0HM2rBOn0xrzgXktIB6fLSJBTQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] @@ -3712,8 +3675,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.2.11': - resolution: {integrity: sha512-/gnRDM+39BROzAN/k1OZjDPnDMcZxB/0EUxKjONO5yVkNEvlsoMDrxGNKgZi/ttFriS2gwlDNzB65pvNbFOXIQ==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.12': + resolution: {integrity: sha512-XcFu0R0xWnwzSf4IQgFH1rJIckPN1pLy2R+4r9IDB7Yfu/ys9cVqfa4pBrMHj7a3gl8mIR4nRNPg0e5IvEVs6g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] @@ -3725,8 +3688,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.2.11': - resolution: {integrity: sha512-PFaK8HwvAHbaKbBcDNQihjMKYvFnA5hiENx/l5tphTDz1E0WFp32l0A7aq7lyUwGsRw/xSrNIy/gIK4thrSCrw==} + '@rolldown/binding-linux-arm64-gnu@1.2.12': + resolution: {integrity: sha512-260UrKgn8tz39ak+SMDOirKzr7V04M9dWPw5llW00SwBivCZoWcRBKV1d8cXnRkUmSZA3BdiUmBHWk7734Ulpw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -3739,8 +3702,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.2.11': - resolution: {integrity: sha512-AskzJUIKRLPxkruR1wLKewGbOw+EYfU/9lOrBFj4AFrEA8hPpKFnODWNu2WLaNs0QNkEb9QIJufmVZZIL/bJlg==} + '@rolldown/binding-linux-arm64-musl@1.2.12': + resolution: {integrity: sha512-5YK1I9SqDkbPgc1IA8BgDl34suqUS2q0KWnBrirm0E51YjOs6eo6dV6jbQfNE/argHRSvd0QUGgtpIoYx+WWpw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] @@ -3753,8 +3716,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-ppc64-gnu@1.2.11': - resolution: {integrity: sha512-qlUGAheh2yh8afH7QBgx0PrRHN85hKnNd78x8MeMhXivuevgd8vgf6/CstOzmNKY/lLTHvNTrPy98cLnAugzJw==} + '@rolldown/binding-linux-ppc64-gnu@1.2.12': + resolution: {integrity: sha512-Rkcrmp7eFRg74yL5fXEU91JEWbdEPLevWwGtXpmhbjlD1StScbWTmO94Bhly+Mo+ketKYkdmM1vNUKeWSlx8cQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] @@ -3767,8 +3730,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-s390x-gnu@1.2.11': - resolution: {integrity: sha512-secpEad+0vCbSfn8upFySkDskv+bGPk3THSDS9Y89yc4rb4kzqHp8Dmyd9BkQW4SnhNXBZCl/6CrO//hZahNJQ==} + '@rolldown/binding-linux-s390x-gnu@1.2.12': + resolution: {integrity: sha512-qvK4DuAsQc2BSjlx+Xr+IzOIvvxbGZqxFwdWfG6F518Erj0GGISyQbJ6pIappnOxlNPzNHvo/L0BwB30GZ+zVw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] @@ -3781,8 +3744,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.2.11': - resolution: {integrity: sha512-mOVBT3dPpkWm8XBWPmU4bf+U6dYDLeMo/9ojUmis4N0L5uu10qra5vOyngZ7/PSdoE4G9KvRt4bloRxNjLas7A==} + '@rolldown/binding-linux-x64-gnu@1.2.12': + resolution: {integrity: sha512-Q9uLBO53Xd4QIq1WOycVQyPP1O4HhraEV2qqb3uTrnVw6QZih9duY4vNXOivL1xoUS1/z+W8eF4NMfl2a8Sdjw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -3795,8 +3758,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.2.11': - resolution: {integrity: sha512-Is78i9A8Ui4SqcxUwFJ9uMmjDn58IbVTjFWYdQestFEgeuEmHMLGNriXnVJKkwG2YiZjw8cP0zCTyDMdDGtOOg==} + '@rolldown/binding-linux-x64-musl@1.2.12': + resolution: {integrity: sha512-3IBxWFMjbOZskDPKv8Lf9BCnahlKuHthWkYnyIxOH/QcJrFcS4EmcenthApkwr/5+nEqZlLzeYbxeMaX7A5u4g==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] @@ -3808,8 +3771,8 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.2.11': - resolution: {integrity: sha512-dUCXneZ87INUMyQ0D+C0HrEBNUPNXHaPmU5GTjyKTJEiussw9Kaj5Ln8UztPe4epV/ffvgNBEadksdYhmW6xJA==} + '@rolldown/binding-openharmony-arm64@1.2.12': + resolution: {integrity: sha512-xtX61xg4LKPkPWilZU1ynKClz5Gj4bf74LML4r3eVLWumKnGjoEr1OSHQhMdbBDoYTi+yjrujvpZe2pUnqCrrA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] @@ -3825,8 +3788,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.2.11': - resolution: {integrity: sha512-jByxb6qfd+bH1xUd0qnfFnb17i9sWBPY2tOavJ0l3tdr3OTu+Kvtm8cd/JV5nFt657b1VqGltxg9olOEfofXWw==} + '@rolldown/binding-win32-arm64-msvc@1.2.12': + resolution: {integrity: sha512-At7fPB6PCaIjzgIhEZFxuT+BBFqiQibJDT4d3PhiR3f4E7bbMZF4aKblbFfEM3sETRDd1YiQx/+U/g/B/ou5Ew==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] @@ -3837,8 +3800,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.2.11': - resolution: {integrity: sha512-/PzKqzAJ03i19oy2ItPvyvaVjOjBCNnfaJs8yvUdGBKmiESgnrJSQ2awd81QzFbbnAmu7YO9ZnJrDCb9VSJPRA==} + '@rolldown/binding-win32-x64-msvc@1.2.12': + resolution: {integrity: sha512-WIw2haVKwjuYdXkHaoC0mF8Le71TuCBxjrdKqLbJGctbBABj+ClfmNvtbOnzpq3RokNo5+V1qhtSzJyXorsklQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3904,10 +3867,6 @@ packages: resolution: {integrity: sha512-doH1gimEu3A46VX6aVxpHTeHrytJAG6HgdxntYnCFiIFHEM/ZGpG8KiZGBChchjQmG0XFIBL552kBTjVcMZXwQ==} engines: {node: '>=12'} - '@smithy/core@3.32.0': - resolution: {integrity: sha512-NAiCSC78fzbNIEWoheoF74Ob5ZorLijCHpMY26Fqvqg/+9LuyIqMfHDg2p8Yk1rqOyowtiL3y7WX0AW+teL6zw==} - engines: {node: '>=18.0.0'} - '@smithy/core@3.33.3': resolution: {integrity: sha512-CsOeKq/9kA3y6VJHt+/+VTCtBaxJ4OTFpgrjIUhPpDIKxBci1k2bJaQASF2h/ELWrulGp+t97DZ0mevfAD8idg==} engines: {node: '>=18.0.0'} @@ -3940,10 +3899,6 @@ packages: resolution: {integrity: sha512-tHy0K0VtqNd5Y7Y41h0a0Lhh0L1GzC08dTWg0F7vRJWFtTENg7IZikf3wQkanYIRdb7ngoIPMTmqgUi401fEeQ==} engines: {node: '>=18.0.0'} - '@smithy/types@4.17.0': - resolution: {integrity: sha512-Aw4joiM0ZdErpo39lCj8phT2lxoiKZV+KZzBxnnQhWVtU2Is/WffQSL04uUWRcXUse9Ln8vXZK6V/FwqRVnQpg==} - engines: {node: '>=18.0.0'} - '@smithy/types@4.18.0': resolution: {integrity: sha512-CgB6HHWer/vrKps24ulRIbpcpb7K4xAU7SkZ7YHzBPlwHsvsrCJFEXK421s+cJzX+ZrqtA/TuU5w1HzI7k9N8A==} engines: {node: '>=18.0.0'} @@ -4395,14 +4350,8 @@ packages: peerDependencies: zod: ^3.25.76 || ^4.1.8 - ai@7.0.122: - resolution: {integrity: sha512-Un4yVROG+BMd6Q62xUxb9yV+wlTrUGeXhRtg5ltEFDV0p3lOYQaQHK9ozB6rdPdqlH3LyaszfbFdUkZ1p00nIQ==} - engines: {node: '>=22'} - peerDependencies: - zod: ^3.25.76 || ^4.1.8 - - ai@7.0.16: - resolution: {integrity: sha512-OuA+uz6ZUVId+SVeB5bThi25Ofee/FmLvffAA368tlgqYCe2qAhqZUpfHL0dd9QC/iPiszdvCQYENJavSo/0gw==} + ai@7.0.120: + resolution: {integrity: sha512-HMNH1OZW4C7wSGQ802CC9tBQsxjgjR7ZaNg9XyYL3v5zM1gPolVS8PzdmyUdhceQzrsRz+2JXj+jqULZmLi/Aw==} engines: {node: '>=22'} peerDependencies: zod: ^3.25.76 || ^4.1.8 @@ -6765,10 +6714,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -7227,7 +7172,8 @@ packages: variants: - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-rseyRkr7mfB4wZywbSAdVDvTsxHLoHEoK84bF8l+WLs= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-aix-ppc64.tar.gz @@ -7236,7 +7182,8 @@ packages: os: aix - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-vtfupTJeEQjzLOUijd1qXw8IpJnuQqp0Qq6lg3AvYFc= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-darwin-arm64.tar.gz @@ -7245,7 +7192,8 @@ packages: os: darwin - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-FGLLOzBGuBXPjqQ209pFDsGp8R2sflpGsK2lMF1+gJc= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-darwin-x64.tar.gz @@ -7254,7 +7202,8 @@ packages: os: darwin - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-ckKCw7Q67JmKqVJzgEZbRdIp4CG1gDX19PYwleq/5dU= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-arm64.tar.gz @@ -7263,7 +7212,8 @@ packages: os: linux - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-UcXVMGbukpILYXg7A7Buy5nzZhFg97Fcp36EdBFaZ7w= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-ppc64le.tar.gz @@ -7272,7 +7222,8 @@ packages: os: linux - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-Xy+jdCLgx13jXBaG/lHXgyTywqj+LMI5pB2cAAop2Tg= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-s390x.tar.gz @@ -7281,16 +7232,19 @@ packages: os: linux - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-PWNAX8ZaDS0pdsHwvC/Se7C9ByEkaecFqsPwOuWrTJw= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-x64-musl.tar.gz targets: - - cpu: x64-musl + - cpu: x64 os: linux + libc: musl - resolution: archive: tarball - bin: bin/node + bin: + node: bin/node integrity: sha256-bh24fvWLiBnl1UAu/xU2SRsY7djre+5e94l4duiNxf8= type: binary url: https://nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-x64.tar.gz @@ -7299,7 +7253,8 @@ packages: os: linux - resolution: archive: zip - bin: node.exe + bin: + node: node.exe integrity: sha256-h3mxveHTn41CDjtXqmV7OYka9DTT3kSpGQRM7AZ4WSE= prefix: node-v24.21.0-win-arm64 type: binary @@ -7309,7 +7264,8 @@ packages: os: win32 - resolution: archive: zip - bin: node.exe + bin: + node: node.exe integrity: sha256-FY92hbRN5R9sDfHRU1JsvNPhvHOajfxgdyHO913p5UE= prefix: node-v24.21.0-win-x64 type: binary @@ -7317,6 +7273,28 @@ packages: targets: - cpu: x64 os: win32 + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-MEiwgR4VjKDYZytZyDmGF2PhREkpgNjSmzad/uRXR+Q= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-arm64-musl.tar.gz + targets: + - cpu: arm64 + os: linux + libc: musl + - resolution: + archive: tarball + bin: + node: bin/node + integrity: sha256-AacT402pjntNKjGR7nyj+T3QOE0aLvI8N5shYe5uEzo= + type: binary + url: https://unofficial-builds.nodejs.org/download/release/v24.21.0/node-v24.21.0-linux-x64-musl.tar.gz + targets: + - cpu: x64 + os: linux + libc: musl version: 24.21.0 hasBin: true @@ -7983,10 +7961,10 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.3.0: + resolution: {integrity: sha512-JDk8dgif51OjFoDE70+OT9ICyYr+69HlmihNwp1+Nsfbna3t5sIiCa9ZJktDmQ4/1b/rn26hIAR2uYXDMr5r0Q==} peerDependencies: - react: ^18.3.1 + react: ^19.3.0 react-reconciler@0.32.0: resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} @@ -8212,8 +8190,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.2.11: - resolution: {integrity: sha512-qpSwIyz0jHQq5qXBTNxFmE6664rJ7O+4TvPFOiOaBSrz8IOHc1koKKSqTM2H6u1UG1+TveuC6vaDHKXFOvb1Kw==} + rolldown@1.2.12: + resolution: {integrity: sha512-8wafseiaG80xmXSfqidUNqZcylTlhmPZZt+za2m+js2sFZ8dTNlhIOV2WcbIPx2hgwPBJpEUGFAMZ9bgBBLTSQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -8273,12 +8251,12 @@ packages: resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} engines: {node: '>=11.0.0'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.28.0: + resolution: {integrity: sha512-juorfCmIkIw8tT+p5BXSm6PJjQF/ycEYmKyzURCIt/RaZIhL+PulbQ9Yu2z1HdOJDdqDTlxA1+xKBmHXJsczAw==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -9312,11 +9290,11 @@ packages: snapshots: - '@a2a-js/sdk@0.3.14(express@5.2.1)': + '@a2a-js/sdk@0.3.14(express@5.2.1(supports-color@8.1.1))': dependencies: uuid: 11.1.1 optionalDependencies: - express: 5.2.1 + express: 5.2.1(supports-color@8.1.1) '@ai-sdk/amazon-bedrock@3.0.111(zod@4.4.3)': dependencies: @@ -9336,10 +9314,10 @@ snapshots: zod: 4.4.3 optional: true - '@ai-sdk/anthropic@4.0.8(zod@4.4.3)': + '@ai-sdk/anthropic@4.0.67(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) + '@ai-sdk/provider': 4.0.19 + '@ai-sdk/provider-utils': 5.0.50(zod@4.4.3) zod: 4.4.3 '@ai-sdk/azure@2.0.120(zod@4.4.3)': @@ -9359,13 +9337,6 @@ snapshots: zod: 4.4.3 optional: true - '@ai-sdk/cerebras@3.0.5(zod@4.4.3)': - dependencies: - '@ai-sdk/openai-compatible': 3.0.5(zod@4.4.3) - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) - zod: 4.4.3 - '@ai-sdk/deepseek@1.0.48(zod@4.4.3)': dependencies: '@ai-sdk/provider': 2.0.3 @@ -9380,28 +9351,21 @@ snapshots: '@vercel/oidc': 3.1.0 zod: 4.4.3 - '@ai-sdk/gateway@4.0.100(zod@4.4.3)': + '@ai-sdk/gateway@4.0.98(zod@4.4.3)': dependencies: '@ai-sdk/provider': 4.0.19 - '@ai-sdk/provider-utils': 5.0.51(zod@4.4.3) + '@ai-sdk/provider-utils': 5.0.50(zod@4.4.3) '@vercel/oidc': 3.2.0 zod: 4.4.3 - '@ai-sdk/gateway@4.0.12(zod@4.4.3)': - dependencies: - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) - '@vercel/oidc': 3.2.0 - zod: 4.4.3 - - '@ai-sdk/google-vertex@3.0.158(zod@4.4.3)': + '@ai-sdk/google-vertex@3.0.158(supports-color@8.1.1)(zod@4.4.3)': dependencies: '@ai-sdk/anthropic': 2.0.91(zod@4.4.3) '@ai-sdk/google': 2.0.85(zod@4.4.3) '@ai-sdk/openai-compatible': 1.0.46(zod@4.4.3) '@ai-sdk/provider': 2.0.3 '@ai-sdk/provider-utils': 3.0.30(zod@4.4.3) - google-auth-library: 10.9.1 + google-auth-library: 10.9.1(supports-color@8.1.1) zod: 4.4.3 transitivePeerDependencies: - supports-color @@ -9414,10 +9378,10 @@ snapshots: zod: 4.4.3 optional: true - '@ai-sdk/google@4.0.8(zod@4.4.3)': + '@ai-sdk/google@4.0.84(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) + '@ai-sdk/provider': 4.0.19 + '@ai-sdk/provider-utils': 5.0.50(zod@4.4.3) zod: 4.4.3 '@ai-sdk/groq@2.0.45(zod@4.4.3)': @@ -9427,12 +9391,6 @@ snapshots: zod: 4.4.3 optional: true - '@ai-sdk/groq@4.0.5(zod@4.4.3)': - dependencies: - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) - zod: 4.4.3 - '@ai-sdk/mcp@2.0.22(zod@4.4.3)': dependencies: '@ai-sdk/provider': 4.0.4 @@ -9467,10 +9425,10 @@ snapshots: zod: 4.4.3 optional: true - '@ai-sdk/openai@4.0.8(zod@4.4.3)': + '@ai-sdk/openai@4.0.79(zod@4.4.3)': dependencies: - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) + '@ai-sdk/provider': 4.0.19 + '@ai-sdk/provider-utils': 5.0.50(zod@4.4.3) zod: 4.4.3 '@ai-sdk/perplexity@2.0.36(zod@4.4.3)': @@ -9519,7 +9477,7 @@ snapshots: eventsource-parser: 3.1.0 zod: 4.4.3 - '@ai-sdk/provider-utils@5.0.51(zod@4.4.3)': + '@ai-sdk/provider-utils@5.0.50(zod@4.4.3)': dependencies: '@ai-sdk/provider': 4.0.19 '@standard-schema/spec': 1.1.0 @@ -9595,7 +9553,7 @@ snapshots: '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.224': optional: true - '@anthropic-ai/claude-agent-sdk@0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(zod@4.4.3)': + '@anthropic-ai/claude-agent-sdk@0.3.224(@anthropic-ai/sdk@0.129.0(zod@4.4.3))(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.129.0(zod@4.4.3) '@modelcontextprotocol/sdk': 1.29.0(supports-color@8.1.1)(zod@4.4.3) @@ -9995,24 +9953,24 @@ snapshots: '@babel/helper-string-parser': 8.0.0 '@babel/helper-validator-identifier': 8.0.4 - '@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.29.7 - '@base-ui/utils': 0.3.2(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@floating-ui/react-dom': 2.1.9(react-dom@18.3.1(react@19.2.3))(react@19.2.3) + '@base-ui/utils': 0.3.2(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.9(react-dom@19.3.0(react@19.2.3))(react@19.2.3) '@floating-ui/utils': 0.2.12 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: '@types/react': 19.2.17 - '@base-ui/utils@0.3.2(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@base-ui/utils@0.3.2(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.29.7 '@floating-ui/utils': 0.2.12 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) reselect: 5.2.0 use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: @@ -10039,13 +9997,13 @@ snapshots: '@braintrust/bt-win32-x64@0.12.0': optional: true - '@braintrust/otel@0.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3))': + '@braintrust/otel@0.2.1(@opentelemetry/api@1.9.1)(@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/exporter-trace-otlp-http@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3))': dependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) '@opentelemetry/exporter-trace-otlp-http': 0.220.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.1) - braintrust: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + braintrust: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3) '@browserbasehq/sdk@2.16.0': dependencies: @@ -10064,7 +10022,7 @@ snapshots: '@ai-sdk/provider': 2.0.3 '@anthropic-ai/sdk': 0.39.0 '@browserbasehq/sdk': 2.16.0 - '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0) + '@google/genai': 1.52.0(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@8.1.1) '@modelcontextprotocol/sdk': 1.29.0(supports-color@8.1.1)(zod@4.4.3) ai: 5.0.220(zod@4.4.3) devtools-protocol: 0.0.1642743 @@ -10083,7 +10041,7 @@ snapshots: '@ai-sdk/cerebras': 1.0.51(zod@4.4.3) '@ai-sdk/deepseek': 1.0.48(zod@4.4.3) '@ai-sdk/google': 2.0.85(zod@4.4.3) - '@ai-sdk/google-vertex': 3.0.158(zod@4.4.3) + '@ai-sdk/google-vertex': 3.0.158(supports-color@8.1.1)(zod@4.4.3) '@ai-sdk/groq': 2.0.45(zod@4.4.3) '@ai-sdk/mistral': 2.0.40(zod@4.4.3) '@ai-sdk/openai': 2.0.115(zod@4.4.3) @@ -10338,9 +10296,9 @@ snapshots: dependencies: esbuild: 0.28.2 - '@earendil-works/pi-agent-core@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': + '@earendil-works/pi-agent-core@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': dependencies: - '@earendil-works/pi-ai': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) + '@earendil-works/pi-ai': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) typebox: 1.3.27 transitivePeerDependencies: - '@aws-sdk/credential-provider-node' @@ -10355,12 +10313,12 @@ snapshots: - ws - zod - '@earendil-works/pi-ai@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': + '@earendil-works/pi-ai@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': dependencies: '@anthropic-ai/sdk': 0.129.0(zod@4.4.3) '@aws-sdk/client-bedrock-runtime': 3.1127.0 '@earendil-works/pi-telemetry': 1.0.2 - '@google/genai': 2.21.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0) + '@google/genai': 2.21.0(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@8.1.1) '@smithy/node-http-handler': 4.12.1 http-proxy-agent: 9.1.0(supports-color@8.1.1) https-proxy-agent: 9.1.0(supports-color@8.1.1) @@ -10384,11 +10342,11 @@ snapshots: dependencies: quickjs-wasi: 3.6.2 - '@earendil-works/pi-coding-agent@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': + '@earendil-works/pi-coding-agent@1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3)': dependencies: '@earendil-works/chord': 1.0.2 - '@earendil-works/pi-agent-core': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) - '@earendil-works/pi-ai': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) + '@earendil-works/pi-agent-core': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) + '@earendil-works/pi-ai': 1.0.2(@aws-sdk/credential-provider-node@3.972.83)(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(@smithy/signature-v4@5.7.4)(bufferutil@4.1.0)(supports-color@8.1.1)(undici@8.10.2)(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) '@earendil-works/pi-codemode': 1.0.2 '@earendil-works/pi-mcp': 1.0.2 '@earendil-works/pi-tui': 1.0.2 @@ -10652,17 +10610,17 @@ snapshots: '@floating-ui/core': 1.8.0 '@floating-ui/utils': 0.2.12 - '@floating-ui/react-dom@2.1.9(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@floating-ui/react-dom@2.1.9(react-dom@19.3.0(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/dom': 1.8.0 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) '@floating-ui/utils@0.2.12': {} - '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)': + '@google/genai@1.52.0(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@8.1.1)': dependencies: - google-auth-library: 10.9.1 + google-auth-library: 10.9.1(supports-color@8.1.1) p-retry: 4.6.2 protobufjs: 7.6.5 ws: 8.21.0(bufferutil@4.1.0) @@ -10673,9 +10631,9 @@ snapshots: - supports-color - utf-8-validate - '@google/genai@2.21.0(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(bufferutil@4.1.0)': + '@google/genai@2.21.0(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(bufferutil@4.1.0)(supports-color@8.1.1)': dependencies: - google-auth-library: 10.9.1 + google-auth-library: 10.9.1(supports-color@8.1.1) p-retry: 4.6.2 protobufjs: 7.6.5 ws: 8.21.0(bufferutil@4.1.0) @@ -11016,21 +10974,6 @@ snapshots: optionalDependencies: '@types/node': 20.19.43 - '@inquirer/prompts@7.10.1(@types/node@24.13.2)': - dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@24.13.2) - '@inquirer/confirm': 5.1.21(@types/node@24.13.2) - '@inquirer/editor': 4.2.23(@types/node@24.13.2) - '@inquirer/expand': 4.0.23(@types/node@24.13.2) - '@inquirer/input': 4.3.1(@types/node@24.13.2) - '@inquirer/number': 3.0.23(@types/node@24.13.2) - '@inquirer/password': 4.0.23(@types/node@24.13.2) - '@inquirer/rawlist': 4.1.11(@types/node@24.13.2) - '@inquirer/search': 3.2.2(@types/node@24.13.2) - '@inquirer/select': 4.4.2(@types/node@24.13.2) - optionalDependencies: - '@types/node': 24.13.2 - '@inquirer/prompts@7.9.0(@types/node@24.13.2)': dependencies: '@inquirer/checkbox': 4.3.2(@types/node@24.13.2) @@ -11202,9 +11145,9 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@mastra/core@1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3)': + '@mastra/core@1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3)': dependencies: - '@a2a-js/sdk': 0.3.14(express@5.2.1) + '@a2a-js/sdk': 0.3.14(express@5.2.1(supports-color@8.1.1)) '@ai-sdk/provider-utils-v5': '@ai-sdk/provider-utils@3.0.30(zod@4.4.3)' '@ai-sdk/provider-utils-v6': '@ai-sdk/provider-utils@4.0.40(zod@4.4.3)' '@ai-sdk/provider-utils-v7': '@ai-sdk/provider-utils@5.0.13(zod@4.4.3)' @@ -11218,7 +11161,7 @@ snapshots: '@sindresorhus/slugify': 2.2.1 '@standard-schema/spec': 1.1.0 ajv: 8.20.0 - chat: 4.37.0(ai@7.0.122(zod@4.4.3))(zod@4.4.3) + chat: 4.37.0(ai@7.0.120(zod@4.4.3))(supports-color@8.1.1)(zod@4.4.3) croner: 10.0.1 dotenv: 17.4.2 execa: 9.6.1 @@ -11248,10 +11191,10 @@ snapshots: - utf-8-validate - workflow - '@mastra/mcp@1.15.1(@mastra/core@1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3))(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(zod@4.4.3)': + '@mastra/mcp@1.15.1(@mastra/core@1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(zod@4.4.3)': dependencies: - '@mastra/core': 1.57.0(ai@7.0.122(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1)(rxjs@7.8.2)(zod@4.4.3) - '@modelcontextprotocol/ext-apps': 1.7.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(zod@4.4.3) + '@mastra/core': 1.57.0(ai@7.0.120(zod@4.4.3))(bufferutil@4.1.0)(express@5.2.1(supports-color@8.1.1))(rxjs@7.8.2)(supports-color@8.1.1)(zod@4.4.3) + '@modelcontextprotocol/ext-apps': 1.7.5(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(zod@4.4.3) '@modelcontextprotocol/sdk': 1.29.0(supports-color@8.1.1)(zod@4.4.3) exit-hook: 5.1.0 fast-deep-equal: 3.1.3 @@ -11270,7 +11213,7 @@ snapshots: zod-from-json-schema-v3: zod-from-json-schema@0.0.5 zod-to-json-schema: 3.25.2(zod@4.4.3) - '@mdx-js/mdx@3.1.1': + '@mdx-js/mdx@3.1.1(supports-color@8.1.1)': dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 @@ -11282,14 +11225,14 @@ snapshots: estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.6(supports-color@8.1.1) markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 recma-jsx: 1.0.1(acorn@8.11.2) recma-stringify: 1.0.0 - rehype-recma: 1.0.0 - remark-mdx: 3.1.1 - remark-parse: 11.0.0 + rehype-recma: 1.0.0(supports-color@8.1.1) + remark-mdx: 3.1.1(supports-color@8.1.1) + remark-parse: 11.0.0(supports-color@8.1.1) remark-rehype: 11.1.1 source-map: 0.7.6 unified: 11.0.5 @@ -11306,15 +11249,15 @@ snapshots: '@types/react': 19.2.17 react: 19.2.3 - '@mintlify/cli@4.0.1391(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3)': + '@mintlify/cli@4.0.1391(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@inquirer/prompts': 7.9.0(@types/node@24.13.2) - '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/link-rot': 3.0.1278(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/models': 0.0.347 - '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3) - '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/link-rot': 3.0.1278(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/models': 0.0.347(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) + '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/previewing': 4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) adm-zip: 0.6.1 chalk: 5.2.0 color: 4.2.3 @@ -11324,17 +11267,17 @@ snapshots: inquirer: 12.3.0(@types/node@24.13.2) js-yaml: 4.3.2 jsonc-parser: 3.3.1 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1) open: 8.4.2 openid-client: 6.8.2 posthog-node: 5.17.2 prosemirror-model: 1.25.11 react: 19.2.3 - remark: 15.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - remark-math: 6.0.0 - remark-mdx: 3.1.1 + remark: 15.0.1(supports-color@8.1.1) + remark-frontmatter: 5.0.0(supports-color@8.1.1) + remark-gfm: 4.0.1(supports-color@8.1.1) + remark-math: 6.0.0(supports-color@8.1.1) + remark-mdx: 3.1.1(supports-color@8.1.1) remark-stringify: 11.0.0 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -11360,13 +11303,13 @@ snapshots: - typescript - utf-8-validate - '@mintlify/common@1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': + '@mintlify/common@1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/models': 0.0.347 + '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/models': 0.0.347(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -11379,21 +11322,21 @@ snapshots: ignore: 7.0.5 js-yaml: 4.3.2 lodash: 4.18.1 - mdast-util-from-markdown: 2.0.2 - mdast-util-gfm: 3.0.0 - mdast-util-mdx: 3.0.0 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-from-markdown: 2.0.2(supports-color@8.1.1) + mdast-util-gfm: 3.0.0(supports-color@8.1.1) + mdast-util-mdx: 3.0.0(supports-color@8.1.1) + mdast-util-mdx-jsx: 3.1.3(supports-color@8.1.1) micromark-extension-gfm: 3.0.0 micromark-extension-mdxjs: 3.0.0 openapi-types: 12.1.3 postcss: 8.5.23 rehype-stringify: 10.0.1 - remark: 15.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.0 - remark-math: 6.0.0 - remark-mdx: 3.1.0 - remark-parse: 11.0.0 + remark: 15.0.1(supports-color@8.1.1) + remark-frontmatter: 5.0.0(supports-color@8.1.1) + remark-gfm: 4.0.0(supports-color@8.1.1) + remark-math: 6.0.0(supports-color@8.1.1) + remark-mdx: 3.1.0(supports-color@8.1.1) + remark-parse: 11.0.0(supports-color@8.1.1) remark-rehype: 11.1.1 remark-stringify: 11.0.0 sucrase: 3.34.0 @@ -11418,14 +11361,14 @@ snapshots: - ts-node - typescript - '@mintlify/link-rot@3.0.1278(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/link-rot@3.0.1278(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/models': 0.0.347 - '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/previewing': 4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3) - '@mintlify/scraping': 4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/models': 0.0.347(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) + '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/previewing': 4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/scraping': 4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) fs-extra: 11.1.0 unist-util-visit: 4.1.2 transitivePeerDependencies: @@ -11446,23 +11389,23 @@ snapshots: - typescript - utf-8-validate - '@mintlify/mdx@4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': + '@mintlify/mdx@4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@base-ui/react': 1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) + '@base-ui/react': 1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3) '@shikijs/transformers': 3.23.0 - '@shikijs/twoslash': 3.23.0(typescript@5.9.3) + '@shikijs/twoslash': 3.23.0(supports-color@8.1.1)(typescript@5.9.3) arktype: 2.2.3 hast-util-to-string: 3.0.1 - mdast-util-from-markdown: 2.0.3 - mdast-util-gfm: 3.1.0 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) + mdast-util-gfm: 3.1.0(supports-color@8.1.1) + mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1) mdast-util-to-hast: 13.2.1 - next-mdx-remote-client: 2.1.11(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5) + next-mdx-remote-client: 2.1.11(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(unified@11.0.5) react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) rehype-katex: 7.0.1 - remark-gfm: 4.0.1 - remark-math: 6.0.0 + remark-gfm: 4.0.1(supports-color@8.1.1) + remark-math: 6.0.0(supports-color@8.1.1) remark-smartypants: 3.0.3 shiki: 3.23.0 twoslash: 0.3.9(supports-color@8.1.1)(typescript@5.9.3) @@ -11473,9 +11416,9 @@ snapshots: - supports-color - typescript - '@mintlify/models@0.0.347': + '@mintlify/models@0.0.347(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1)': dependencies: - axios: 1.20.0 + axios: 1.20.0(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) openapi-types: 12.1.3 transitivePeerDependencies: - debug @@ -11490,11 +11433,11 @@ snapshots: leven: 4.1.0 yaml: 2.9.0 - '@mintlify/prebuild@1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/prebuild@1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/scraping': 4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/scraping': 4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) chalk: 5.3.0 favicons: 7.2.0(@types/node@24.13.2) fflate: 0.8.3 @@ -11521,16 +11464,16 @@ snapshots: - typescript - utf-8-validate - '@mintlify/previewing@4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(typescript@5.9.3)': + '@mintlify/previewing@4.0.1302(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) - '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3) + '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/prebuild': 1.0.1231(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/validation': 0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) adm-zip: 0.6.1 better-opn: 3.0.2 chalk: 5.2.0 chokidar: 3.5.3 - express: 4.22.3 + express: 4.22.3(supports-color@8.1.1) fs-extra: 11.1.0 got: 13.0.0 ink: 6.3.0(@types/react@19.2.17)(bufferutil@4.1.0)(react@19.2.3) @@ -11538,7 +11481,7 @@ snapshots: is-online: 10.0.0 js-yaml: 4.3.2 react: 19.2.3 - socket.io: 4.8.0(bufferutil@4.1.0) + socket.io: 4.8.0(bufferutil@4.1.0)(supports-color@8.1.1) tar: 7.5.21 yargs: 17.7.1 transitivePeerDependencies: @@ -11558,21 +11501,21 @@ snapshots: - typescript - utf-8-validate - '@mintlify/scraping@4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/scraping@4.0.947(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/common': 1.0.1080(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) fast-xml-parser: 5.7.3 fs-extra: 11.1.1 graphql: 16.11.0 hast-util-to-mdast: 10.1.0 js-yaml: 4.3.2 - mdast-util-mdx-jsx: 3.1.3 + mdast-util-mdx-jsx: 3.1.3(supports-color@8.1.1) neotraverse: 0.6.18 - puppeteer: 24.3.1(bufferutil@4.1.0)(typescript@5.9.3) + puppeteer: 24.3.1(bufferutil@4.1.0)(supports-color@8.1.1)(typescript@5.9.3) rehype-parse: 9.0.1 - remark-gfm: 4.0.0 - remark-mdx: 3.0.1 - remark-parse: 11.0.0 + remark-gfm: 4.0.0(supports-color@8.1.1) + remark-mdx: 3.0.1(supports-color@8.1.1) + remark-parse: 11.0.0(supports-color@8.1.1) remark-stringify: 11.0.0 unified: 11.0.5 unist-util-visit: 5.0.0 @@ -11594,10 +11537,10 @@ snapshots: - typescript - utf-8-validate - '@mintlify/validation@0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@5.9.3)': + '@mintlify/validation@0.1.823(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) - '@mintlify/models': 0.0.347 + '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/models': 0.0.347(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1) fractional-indexing: 3.2.0 js-yaml: 4.3.2 lcm: 0.0.3 @@ -11617,14 +11560,14 @@ snapshots: - supports-color - typescript - '@modelcontextprotocol/ext-apps@1.7.5(@modelcontextprotocol/sdk@1.29.0(zod@4.4.3))(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(zod@4.4.3)': + '@modelcontextprotocol/ext-apps@1.7.5(@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3))(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(zod@4.4.3)': dependencies: '@modelcontextprotocol/sdk': 1.29.0(supports-color@8.1.1)(zod@4.4.3) '@standard-schema/spec': 1.1.0 zod: 4.4.3 optionalDependencies: react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) '@modelcontextprotocol/sdk@1.29.0(supports-color@8.1.1)(zod@4.4.3)': dependencies: @@ -11636,8 +11579,8 @@ snapshots: cross-spawn: 7.0.6 eventsource: 3.0.7 eventsource-parser: 3.1.0 - express: 5.2.1 - express-rate-limit: 8.6.0(express@5.2.1)(supports-color@8.1.1) + express: 5.2.1(supports-color@8.1.1) + express-rate-limit: 8.6.0(express@5.2.1(supports-color@8.1.1))(supports-color@8.1.1) hono: 4.13.13 jose: 6.2.4 json-schema-typed: 8.0.2 @@ -11671,27 +11614,6 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 - '@oclif/core@4.13.0': - dependencies: - ansi-escapes: 4.3.2 - ansis: 3.17.0 - clean-stack: 3.0.1 - cli-spinners: 2.9.2 - debug: 4.4.3(supports-color@8.1.1) - ejs: 3.1.10 - get-package-type: 0.1.0 - indent-string: 4.0.0 - is-wsl: 2.2.0 - lilconfig: 3.1.3 - minimatch: 10.2.5 - semver: 7.8.5 - string-width: 4.2.3 - supports-color: 8.1.1 - tinyglobby: 0.2.17 - widest-line: 3.1.0 - wordwrap: 1.0.0 - wrap-ansi: 7.0.0 - '@oclif/core@4.14.0': dependencies: ansi-escapes: 4.3.2 @@ -11715,7 +11637,7 @@ snapshots: '@oclif/plugin-help@6.3.0': dependencies: - '@oclif/core': 4.13.0 + '@oclif/core': 4.14.0 '@oclif/plugin-not-found@3.3.0(@types/node@20.19.43)': dependencies: @@ -11728,7 +11650,7 @@ snapshots: '@oclif/plugin-warn-if-update-available@3.2.0(supports-color@8.1.1)': dependencies: - '@oclif/core': 4.13.0 + '@oclif/core': 4.14.0 ansis: 3.17.0 debug: 4.4.3(supports-color@8.1.1) http-call: 5.3.0(supports-color@8.1.1) @@ -11901,7 +11823,7 @@ snapshots: '@oxc-project/types@0.139.0': {} - '@oxc-project/types@0.151.0': {} + '@oxc-project/types@0.152.0': {} '@oxfmt/binding-android-arm-eabi@0.57.0': optional: true @@ -12093,12 +12015,12 @@ snapshots: dependencies: tinyexec: 1.2.4 - '@puppeteer/browsers@2.7.1': + '@puppeteer/browsers@2.7.1(supports-color@8.1.1)': dependencies: debug: 4.4.3(supports-color@8.1.1) - extract-zip: 2.0.1 + extract-zip: 2.0.1(supports-color@8.1.1) progress: 2.0.3 - proxy-agent: 6.5.0 + proxy-agent: 6.5.0(supports-color@8.1.1) semver: 7.8.5 tar-fs: 3.1.3 yargs: 17.7.3 @@ -12112,79 +12034,79 @@ snapshots: dependencies: quansync: 1.0.0 - '@rolldown/binding-android-arm-eabi@1.2.11': + '@rolldown/binding-android-arm-eabi@1.2.12': optional: true '@rolldown/binding-android-arm64@1.1.5': optional: true - '@rolldown/binding-android-arm64@1.2.11': + '@rolldown/binding-android-arm64@1.2.12': optional: true '@rolldown/binding-darwin-arm64@1.1.5': optional: true - '@rolldown/binding-darwin-arm64@1.2.11': + '@rolldown/binding-darwin-arm64@1.2.12': optional: true '@rolldown/binding-darwin-x64@1.1.5': optional: true - '@rolldown/binding-darwin-x64@1.2.11': + '@rolldown/binding-darwin-x64@1.2.12': optional: true '@rolldown/binding-freebsd-x64@1.1.5': optional: true - '@rolldown/binding-freebsd-x64@1.2.11': + '@rolldown/binding-freebsd-x64@1.2.12': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.1.5': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.2.11': + '@rolldown/binding-linux-arm-gnueabihf@1.2.12': optional: true '@rolldown/binding-linux-arm64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-arm64-gnu@1.2.11': + '@rolldown/binding-linux-arm64-gnu@1.2.12': optional: true '@rolldown/binding-linux-arm64-musl@1.1.5': optional: true - '@rolldown/binding-linux-arm64-musl@1.2.11': + '@rolldown/binding-linux-arm64-musl@1.2.12': optional: true '@rolldown/binding-linux-ppc64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.2.11': + '@rolldown/binding-linux-ppc64-gnu@1.2.12': optional: true '@rolldown/binding-linux-s390x-gnu@1.1.5': optional: true - '@rolldown/binding-linux-s390x-gnu@1.2.11': + '@rolldown/binding-linux-s390x-gnu@1.2.12': optional: true '@rolldown/binding-linux-x64-gnu@1.1.5': optional: true - '@rolldown/binding-linux-x64-gnu@1.2.11': + '@rolldown/binding-linux-x64-gnu@1.2.12': optional: true '@rolldown/binding-linux-x64-musl@1.1.5': optional: true - '@rolldown/binding-linux-x64-musl@1.2.11': + '@rolldown/binding-linux-x64-musl@1.2.12': optional: true '@rolldown/binding-openharmony-arm64@1.1.5': optional: true - '@rolldown/binding-openharmony-arm64@1.2.11': + '@rolldown/binding-openharmony-arm64@1.2.12': optional: true '@rolldown/binding-wasm32-wasi@1.1.5': @@ -12197,13 +12119,13 @@ snapshots: '@rolldown/binding-win32-arm64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-arm64-msvc@1.2.11': + '@rolldown/binding-win32-arm64-msvc@1.2.12': optional: true '@rolldown/binding-win32-x64-msvc@1.1.5': optional: true - '@rolldown/binding-win32-x64-msvc@1.2.11': + '@rolldown/binding-win32-x64-msvc@1.2.12': optional: true '@rolldown/pluginutils@1.0.1': {} @@ -12243,7 +12165,7 @@ snapshots: '@shikijs/core': 3.23.0 '@shikijs/types': 3.23.0 - '@shikijs/twoslash@3.23.0(typescript@5.9.3)': + '@shikijs/twoslash@3.23.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@shikijs/core': 3.23.0 '@shikijs/types': 3.23.0 @@ -12279,12 +12201,6 @@ snapshots: dependencies: escape-string-regexp: 5.0.0 - '@smithy/core@3.32.0': - dependencies: - '@smithy/types': 4.17.0 - tslib: 2.8.1 - optional: true - '@smithy/core@3.33.3': dependencies: '@smithy/types': 4.18.0 @@ -12303,7 +12219,7 @@ snapshots: '@smithy/eventstream-codec@4.4.14': dependencies: - '@smithy/core': 3.32.0 + '@smithy/core': 3.35.1 tslib: 2.8.1 optional: true @@ -12331,11 +12247,6 @@ snapshots: '@smithy/types': 4.19.0 tslib: 2.8.1 - '@smithy/types@4.17.0': - dependencies: - tslib: 2.8.1 - optional: true - '@smithy/types@4.18.0': dependencies: tslib: 2.8.1 @@ -12346,7 +12257,7 @@ snapshots: '@smithy/util-utf8@4.4.14': dependencies: - '@smithy/core': 3.32.0 + '@smithy/core': 3.35.1 tslib: 2.8.1 optional: true @@ -12676,10 +12587,10 @@ snapshots: '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/type-utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.70.0 eslint: 10.10.0(jiti@2.7.0)(supports-color@8.1.1) - ignore: 7.0.5 + ignore: 7.0.8 natural-compare: 1.4.0 ts-api-utils: 2.5.0(typescript@5.9.3) typescript: 5.9.3 @@ -12690,7 +12601,7 @@ snapshots: dependencies: '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.70.0 debug: 4.4.3(supports-color@8.1.1) eslint: 10.10.0(jiti@2.7.0)(supports-color@8.1.1) @@ -12698,7 +12609,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.70.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.70.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@5.9.3) '@typescript-eslint/types': 8.70.0 @@ -12719,8 +12630,8 @@ snapshots: '@typescript-eslint/type-utils@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 10.10.0(jiti@2.7.0)(supports-color@8.1.1) ts-api-utils: 2.5.0(typescript@5.9.3) @@ -12730,9 +12641,9 @@ snapshots: '@typescript-eslint/types@8.70.0': {} - '@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.70.0(supports-color@8.1.1)(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.70.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.70.0(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/tsconfig-utils': 8.70.0(typescript@5.9.3) '@typescript-eslint/types': 8.70.0 '@typescript-eslint/visitor-keys': 8.70.0 @@ -12745,12 +12656,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1)) '@typescript-eslint/scope-manager': 8.70.0 '@typescript-eslint/types': 8.70.0 - '@typescript-eslint/typescript-estree': 8.70.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@8.1.1)(typescript@5.9.3) eslint: 10.10.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: @@ -12875,7 +12786,7 @@ snapshots: adm-zip@0.6.1: {} - agent-base@6.0.2: + agent-base@6.0.2(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -12902,18 +12813,11 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 4.4.3 - ai@7.0.122(zod@4.4.3): + ai@7.0.120(zod@4.4.3): dependencies: - '@ai-sdk/gateway': 4.0.100(zod@4.4.3) + '@ai-sdk/gateway': 4.0.98(zod@4.4.3) '@ai-sdk/provider': 4.0.19 - '@ai-sdk/provider-utils': 5.0.51(zod@4.4.3) - zod: 4.4.3 - - ai@7.0.16(zod@4.4.3): - dependencies: - '@ai-sdk/gateway': 4.0.12(zod@4.4.3) - '@ai-sdk/provider': 4.0.2 - '@ai-sdk/provider-utils': 5.0.5(zod@4.4.3) + '@ai-sdk/provider-utils': 5.0.50(zod@4.4.3) zod: 4.4.3 ajv-draft-04@1.0.0(ajv@8.20.0): @@ -13079,11 +12983,11 @@ snapshots: aws4fetch@1.0.20: optional: true - axios@1.20.0: + axios@1.20.0(debug@4.4.3(supports-color@8.1.1))(supports-color@8.1.1): dependencies: - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3(supports-color@8.1.1)) form-data: 4.0.6 - https-proxy-agent: 5.0.1 + https-proxy-agent: 5.0.1(supports-color@8.1.1) proxy-from-env: 2.1.0 transitivePeerDependencies: - debug @@ -13153,11 +13057,11 @@ snapshots: readable-stream: 3.6.2 optional: true - body-parser@1.20.8: + body-parser@1.20.8(supports-color@8.1.1): dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 2.6.9 + debug: 2.6.9(supports-color@8.1.1) depd: 2.0.0 destroy: 1.2.0 http-errors: 2.0.1 @@ -13170,7 +13074,7 @@ snapshots: transitivePeerDependencies: - supports-color - body-parser@2.3.0: + body-parser@2.3.0(supports-color@8.1.1): dependencies: bytes: 3.1.2 content-type: 2.0.0 @@ -13205,7 +13109,7 @@ snapshots: dependencies: fill-range: 7.1.1 - braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3): + braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3): dependencies: '@next/env': 14.2.35 '@vercel/functions': 1.6.0(@aws-sdk/credential-provider-web-identity@3.972.77) @@ -13222,7 +13126,7 @@ snapshots: esbuild: 0.28.1 esquery: 1.7.0 eventsource-parser: 1.1.2 - express: 5.2.1 + express: 5.2.1(supports-color@8.1.1) http-errors: 2.0.1 meriyah: 6.1.4 minimatch: 10.2.5 @@ -13378,17 +13282,17 @@ snapshots: chardet@2.2.0: {} - chat@4.37.0(ai@7.0.122(zod@4.4.3))(zod@4.4.3): + chat@4.37.0(ai@7.0.120(zod@4.4.3))(supports-color@8.1.1)(zod@4.4.3): dependencies: '@workflow/serde': 4.1.0-beta.2 mdast-util-to-string: 4.0.0 - remark-gfm: 4.0.1 - remark-parse: 11.0.0 + remark-gfm: 4.0.1(supports-color@8.1.1) + remark-parse: 11.0.0(supports-color@8.1.1) remark-stringify: 11.0.0 remend: 1.3.0 unified: 11.0.5 optionalDependencies: - ai: 7.0.122(zod@4.4.3) + ai: 7.0.120(zod@4.4.3) zod: 4.4.3 transitivePeerDependencies: - supports-color @@ -13644,13 +13548,17 @@ snapshots: db0@0.4.1: {} - debug@2.6.9: + debug@2.6.9(supports-color@8.1.1): dependencies: ms: 2.0.0 + optionalDependencies: + supports-color: 8.1.1 - debug@4.3.7: + debug@4.3.7(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 debug@4.4.3(supports-color@8.1.1): dependencies: @@ -13824,7 +13732,7 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.11(bufferutil@4.1.0): + engine.io@6.6.11(bufferutil@4.1.0)(supports-color@8.1.1): dependencies: '@types/cors': 2.8.19 '@types/node': 20.19.43 @@ -14164,14 +14072,14 @@ snapshots: etag@1.8.1: {} - eve@0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.122(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3)): + eve@0.71.2(@opentelemetry/api@1.9.1)(ai@7.0.120(zod@4.4.3))(braintrust@3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3)): dependencies: - ai: 7.0.122(zod@4.4.3) + ai: 7.0.120(zod@4.4.3) nitro: 3.0.260903-beta undici: 8.10.2 optionalDependencies: '@opentelemetry/api': 1.9.1 - braintrust: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(zod@4.4.3) + braintrust: 3.28.0(@aws-sdk/credential-provider-web-identity@3.972.77)(supports-color@8.1.1)(zod@4.4.3) event-target-shim@5.0.1: {} @@ -14217,29 +14125,29 @@ snapshots: expr-eval-fork@3.0.3: {} - express-rate-limit@8.6.0(express@5.2.1)(supports-color@8.1.1): + express-rate-limit@8.6.0(express@5.2.1(supports-color@8.1.1))(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) - express: 5.2.1 + express: 5.2.1(supports-color@8.1.1) ip-address: 10.7.3 transitivePeerDependencies: - supports-color - express@4.22.3: + express@4.22.3(supports-color@8.1.1): dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.8 + body-parser: 1.20.8(supports-color@8.1.1) content-disposition: 0.5.4 content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.0.7 - debug: 2.6.9 + debug: 2.6.9(supports-color@8.1.1) depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.2 + finalhandler: 1.3.2(supports-color@8.1.1) fresh: 0.5.2 http-errors: 2.0.1 merge-descriptors: 1.0.3 @@ -14251,8 +14159,8 @@ snapshots: qs: 6.16.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 + send: 0.19.2(supports-color@8.1.1) + serve-static: 1.16.3(supports-color@8.1.1) setprototypeof: 1.2.0 statuses: 2.0.2 type-is: 1.6.18 @@ -14261,10 +14169,10 @@ snapshots: transitivePeerDependencies: - supports-color - express@5.2.1: + express@5.2.1(supports-color@8.1.1): dependencies: accepts: 2.0.0 - body-parser: 2.3.0 + body-parser: 2.3.0(supports-color@8.1.1) content-disposition: 1.1.0 content-type: 1.0.5 cookie: 0.7.2 @@ -14274,7 +14182,7 @@ snapshots: encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 2.1.1 + finalhandler: 2.1.1(supports-color@8.1.1) fresh: 2.0.0 http-errors: 2.0.1 merge-descriptors: 2.0.0 @@ -14285,9 +14193,9 @@ snapshots: proxy-addr: 2.0.7 qs: 6.16.0 range-parser: 1.2.1 - router: 2.2.0 - send: 1.2.1 - serve-static: 2.2.1 + router: 2.2.0(supports-color@8.1.1) + send: 1.2.1(supports-color@8.1.1) + serve-static: 2.2.1(supports-color@8.1.1) statuses: 2.0.2 type-is: 2.1.0 vary: 1.1.2 @@ -14304,7 +14212,7 @@ snapshots: extendable-error@0.1.7: {} - extract-zip@2.0.1: + extract-zip@2.0.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) get-stream: 5.2.0 @@ -14404,11 +14312,11 @@ snapshots: fflate@0.8.3: {} - ffmpeg-static@5.3.0: + ffmpeg-static@5.3.0(supports-color@8.1.1): dependencies: '@derhuerst/http-basic': 8.2.4 env-paths: 2.2.1 - https-proxy-agent: 5.0.1 + https-proxy-agent: 5.0.1(supports-color@8.1.1) progress: 2.0.3 transitivePeerDependencies: - supports-color @@ -14429,9 +14337,9 @@ snapshots: dependencies: to-regex-range: 5.0.1 - finalhandler@1.3.2: + finalhandler@1.3.2(supports-color@8.1.1): dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@8.1.1) encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 @@ -14441,7 +14349,7 @@ snapshots: transitivePeerDependencies: - supports-color - finalhandler@2.1.1: + finalhandler@2.1.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 @@ -14474,7 +14382,9 @@ snapshots: flatted@3.4.4: {} - follow-redirects@1.16.0: {} + follow-redirects@1.16.0(debug@4.4.3(supports-color@8.1.1)): + optionalDependencies: + debug: 4.4.3(supports-color@8.1.1) for-each@0.3.5: dependencies: @@ -14577,19 +14487,19 @@ snapshots: functions-have-names@1.2.3: {} - gaxios@7.3.0: + gaxios@7.3.0(supports-color@8.1.1): dependencies: extend: 3.0.2 - https-proxy-agent: 7.0.6 + https-proxy-agent: 7.0.6(supports-color@8.1.1) node-fetch: 3.3.2 transitivePeerDependencies: - supports-color gcd@0.0.1: {} - gcp-metadata@8.1.2: + gcp-metadata@8.1.2(supports-color@8.1.1): dependencies: - gaxios: 7.3.0 + gaxios: 7.3.0(supports-color@8.1.1) google-logging-utils: 1.1.3 json-bigint: 1.0.0 transitivePeerDependencies: @@ -14642,7 +14552,7 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.5: + get-uri@6.0.5(supports-color@8.1.1): dependencies: basic-ftp: 6.2.1 data-uri-to-buffer: 6.0.2 @@ -14697,12 +14607,12 @@ snapshots: merge2: 1.4.1 slash: 3.0.0 - google-auth-library@10.9.1: + google-auth-library@10.9.1(supports-color@8.1.1): dependencies: base64-js: 1.5.1 ecdsa-sig-formatter: 1.0.11 - gaxios: 7.3.0 - gcp-metadata: 8.1.2 + gaxios: 7.3.0(supports-color@8.1.1) + gcp-metadata: 8.1.2(supports-color@8.1.1) google-logging-utils: 1.1.3 jws: 4.0.1 transitivePeerDependencies: @@ -14859,7 +14769,7 @@ snapshots: hast-util-is-body-ok-link: 3.0.1 hast-util-is-element: 3.0.0 - hast-util-to-estree@3.1.3: + hast-util-to-estree@3.1.3(supports-color@8.1.1): dependencies: '@types/estree': 1.0.9 '@types/estree-jsx': 1.0.5 @@ -14869,9 +14779,9 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@8.1.1) + mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1) + mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -14908,7 +14818,7 @@ snapshots: stringify-entities: 4.0.4 zwitch: 2.0.4 - hast-util-to-jsx-runtime@2.3.6: + hast-util-to-jsx-runtime@2.3.6(supports-color@8.1.1): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 @@ -14917,9 +14827,9 @@ snapshots: devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-mdx-expression: 2.0.1(supports-color@8.1.1) + mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1) + mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1) property-information: 7.2.0 space-separated-tokens: 2.0.2 style-to-js: 1.1.21 @@ -15018,7 +14928,7 @@ snapshots: statuses: 2.0.2 toidentifier: 1.0.1 - http-proxy-agent@7.0.2: + http-proxy-agent@7.0.2(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) @@ -15045,14 +14955,14 @@ snapshots: quick-lru: 5.1.1 resolve-alpn: 1.2.1 - https-proxy-agent@5.0.1: + https-proxy-agent@5.0.1(supports-color@8.1.1): dependencies: - agent-base: 6.0.2 + agent-base: 6.0.2(supports-color@8.1.1) debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - https-proxy-agent@7.0.6: + https-proxy-agent@7.0.6(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) @@ -15163,7 +15073,7 @@ snapshots: inquirer@12.3.0(@types/node@24.13.2): dependencies: '@inquirer/core': 10.3.2(@types/node@24.13.2) - '@inquirer/prompts': 7.10.1(@types/node@24.13.2) + '@inquirer/prompts': 7.9.0(@types/node@24.13.2) '@inquirer/type': 3.0.10(@types/node@24.13.2) '@types/node': 24.13.2 ansi-escapes: 4.3.2 @@ -15496,13 +15406,13 @@ snapshots: kind-of@6.0.3: {} - langsmith@0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.9.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3))(ws@8.21.0(bufferutil@4.1.0)): + langsmith@0.6.3(@opentelemetry/api@1.9.1)(@opentelemetry/exporter-trace-otlp-proto@0.220.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(openai@4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3))(ws@8.21.0(bufferutil@4.1.0)): dependencies: p-queue: 6.6.2 optionalDependencies: '@opentelemetry/api': 1.9.1 '@opentelemetry/exporter-trace-otlp-proto': 0.220.0(@opentelemetry/api@1.9.1) - '@opentelemetry/sdk-trace-base': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) openai: 4.104.0(ws@8.21.0(bufferutil@4.1.0))(zod@4.4.3) ws: 8.21.0(bufferutil@4.1.0) @@ -15602,10 +15512,6 @@ snapshots: longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -15644,14 +15550,14 @@ snapshots: unist-util-is: 6.0.1 unist-util-visit-parents: 6.0.2 - mdast-util-from-markdown@2.0.2: + mdast-util-from-markdown@2.0.2(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@8.1.1) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -15661,14 +15567,14 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-from-markdown@2.0.3: + mdast-util-from-markdown@2.0.3(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 decode-named-character-reference: 1.3.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 + micromark: 4.0.2(supports-color@8.1.1) micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-decode-string: 2.0.1 micromark-util-normalize-identifier: 2.0.1 @@ -15678,12 +15584,12 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-frontmatter@2.0.1: + mdast-util-frontmatter@2.0.1(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: @@ -15697,91 +15603,91 @@ snapshots: mdast-util-find-and-replace: 3.0.2 micromark-util-character: 2.1.1 - mdast-util-gfm-footnote@2.1.0: + mdast-util-gfm-footnote@2.1.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.1 transitivePeerDependencies: - supports-color - mdast-util-gfm-strikethrough@2.0.0: + mdast-util-gfm-strikethrough@2.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-table@2.0.0: + mdast-util-gfm-table@2.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm-task-list-item@2.0.0: + mdast-util-gfm-task-list-item@2.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.0.0: + mdast-util-gfm@3.0.0(supports-color@8.1.1): dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@8.1.1) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@8.1.1) + mdast-util-gfm-table: 2.0.0(supports-color@8.1.1) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-gfm@3.1.0: + mdast-util-gfm@3.1.0(supports-color@8.1.1): dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 - mdast-util-gfm-strikethrough: 2.0.0 - mdast-util-gfm-table: 2.0.0 - mdast-util-gfm-task-list-item: 2.0.0 + mdast-util-gfm-footnote: 2.1.0(supports-color@8.1.1) + mdast-util-gfm-strikethrough: 2.0.0(supports-color@8.1.1) + mdast-util-gfm-table: 2.0.0(supports-color@8.1.1) + mdast-util-gfm-task-list-item: 2.0.0(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-math@3.0.0: + mdast-util-math@3.0.0(supports-color@8.1.1): dependencies: '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 unist-util-remove-position: 5.0.0 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.1: + mdast-util-mdx-expression@2.0.1(supports-color@8.1.1): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.3: + mdast-util-mdx-jsx@3.1.3(supports-color@8.1.1): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -15789,7 +15695,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -15798,7 +15704,7 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + mdast-util-mdx-jsx@3.2.0(supports-color@8.1.1): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 @@ -15806,7 +15712,7 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.2 stringify-entities: 4.0.4 @@ -15815,23 +15721,23 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + mdast-util-mdx@3.0.0(supports-color@8.1.1): dependencies: - mdast-util-from-markdown: 2.0.3 - mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 - mdast-util-mdxjs-esm: 2.0.1 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) + mdast-util-mdx-expression: 2.0.1(supports-color@8.1.1) + mdast-util-mdx-jsx: 3.2.0(supports-color@8.1.1) + mdast-util-mdxjs-esm: 2.0.1(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + mdast-util-mdxjs-esm@2.0.1(supports-color@8.1.1): dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.5 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -16143,7 +16049,7 @@ snapshots: micromark-util-types@2.0.2: {} - micromark@4.0.2: + micromark@4.0.2(supports-color@8.1.1): dependencies: '@types/debug': 4.1.13 debug: 4.4.3(supports-color@8.1.1) @@ -16218,9 +16124,9 @@ snapshots: dependencies: minipass: 7.1.3 - mint@4.2.788(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3): + mint@4.2.788(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3): dependencies: - '@mintlify/cli': 4.0.1391(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(react-dom@18.3.1(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) + '@mintlify/cli': 4.0.1391(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3))(@types/node@24.13.2)(@types/react@19.2.17)(bufferutil@4.1.0)(debug@4.4.3(supports-color@8.1.1))(react-dom@19.3.0(react@19.2.3))(supports-color@8.1.1)(typescript@5.9.3) transitivePeerDependencies: - '@base-ui/react' - '@types/node' @@ -16278,14 +16184,14 @@ snapshots: netmask@2.1.1: {} - next-mdx-remote-client@2.1.11(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5): + next-mdx-remote-client@2.1.11(@types/react@19.2.17)(react-dom@19.3.0(react@19.2.3))(react@19.2.3)(supports-color@8.1.1)(unified@11.0.5): dependencies: '@babel/code-frame': 7.29.7 - '@mdx-js/mdx': 3.1.1 + '@mdx-js/mdx': 3.1.1(supports-color@8.1.1) '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.3) '@types/mdx': 2.0.14 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.3.0(react@19.2.3) remark-mdx-remove-esm: 1.3.2(unified@11.0.5) serialize-error: 13.0.1 vfile: 6.0.3 @@ -16317,7 +16223,7 @@ snapshots: hookable: 6.1.1 nf3: 0.3.24 ocache: 0.3.0 - rolldown: 1.2.11 + rolldown: 1.2.12 rou3: 0.9.2 srvx: 1.0.5 unenv: 2.0.0-rc.24 @@ -16421,7 +16327,7 @@ snapshots: '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.0 + '@oclif/core': 4.14.0 '@oclif/plugin-help': 6.3.0 '@oclif/plugin-not-found': 3.3.0(@types/node@20.19.43) '@oclif/plugin-warn-if-update-available': 3.2.0(supports-color@8.1.1) @@ -16651,16 +16557,16 @@ snapshots: p-try@2.2.0: {} - pac-proxy-agent@7.2.0: + pac-proxy-agent@7.2.0(supports-color@8.1.1): dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - get-uri: 6.0.5 - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + get-uri: 6.0.5(supports-color@8.1.1) + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) pac-resolver: 7.0.1 - socks-proxy-agent: 8.0.5 + socks-proxy-agent: 8.0.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -16958,7 +16864,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.2 - '@types/node': 20.19.43 + '@types/node': 24.13.2 long: 5.3.2 proxy-addr@2.0.7: @@ -16968,16 +16874,16 @@ snapshots: proxy-agent-negotiate@1.1.0: {} - proxy-agent@6.5.0: + proxy-agent@6.5.0(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) - http-proxy-agent: 7.0.2 - https-proxy-agent: 7.0.6 + http-proxy-agent: 7.0.2(supports-color@8.1.1) + https-proxy-agent: 7.0.6(supports-color@8.1.1) lru-cache: 7.18.3 - pac-proxy-agent: 7.2.0 + pac-proxy-agent: 7.2.0(supports-color@8.1.1) proxy-from-env: 1.1.0 - socks-proxy-agent: 8.0.5 + socks-proxy-agent: 8.0.5(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17005,9 +16911,9 @@ snapshots: punycode@2.3.1: {} - puppeteer-core@24.3.1(bufferutil@4.1.0): + puppeteer-core@24.3.1(bufferutil@4.1.0)(supports-color@8.1.1): dependencies: - '@puppeteer/browsers': 2.7.1 + '@puppeteer/browsers': 2.7.1(supports-color@8.1.1) chromium-bidi: 2.1.2(devtools-protocol@0.0.1402036) debug: 4.4.3(supports-color@8.1.1) devtools-protocol: 0.0.1402036 @@ -17021,13 +16927,13 @@ snapshots: - supports-color - utf-8-validate - puppeteer@24.3.1(bufferutil@4.1.0)(typescript@5.9.3): + puppeteer@24.3.1(bufferutil@4.1.0)(supports-color@8.1.1)(typescript@5.9.3): dependencies: - '@puppeteer/browsers': 2.7.1 + '@puppeteer/browsers': 2.7.1(supports-color@8.1.1) chromium-bidi: 2.1.2(devtools-protocol@0.0.1402036) cosmiconfig: 9.0.2(typescript@5.9.3) devtools-protocol: 0.0.1402036 - puppeteer-core: 24.3.1(bufferutil@4.1.0) + puppeteer-core: 24.3.1(bufferutil@4.1.0)(supports-color@8.1.1) typed-query-selector: 2.12.2 transitivePeerDependencies: - bare-abort-controller @@ -17085,11 +16991,10 @@ snapshots: strip-json-comments: 2.0.1 optional: true - react-dom@18.3.1(react@19.2.3): + react-dom@19.3.0(react@19.2.3): dependencies: - loose-envify: 1.4.0 react: 19.2.3 - scheduler: 0.23.2 + scheduler: 0.28.0 react-reconciler@0.32.0(react@19.2.3): dependencies: @@ -17229,11 +17134,11 @@ snapshots: hast-util-from-html: 2.0.3 unified: 11.0.5 - rehype-recma@1.0.0: + rehype-recma@1.0.0(supports-color@8.1.1): dependencies: '@types/estree': 1.0.9 '@types/hast': 3.0.5 - hast-util-to-estree: 3.1.3 + hast-util-to-estree: 3.1.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17243,41 +17148,41 @@ snapshots: hast-util-to-html: 9.0.5 unified: 11.0.5 - remark-frontmatter@5.0.0: + remark-frontmatter@5.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-frontmatter: 2.0.1 + mdast-util-frontmatter: 2.0.1(supports-color@8.1.1) micromark-extension-frontmatter: 2.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-gfm@4.0.0: + remark-gfm@4.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@8.1.1) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@8.1.1) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-gfm@4.0.1: + remark-gfm@4.0.1(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.1.0(supports-color@8.1.1) micromark-extension-gfm: 3.0.0 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@8.1.1) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-math@6.0.0: + remark-math@6.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-math: 3.0.0 + mdast-util-math: 3.0.0(supports-color@8.1.1) micromark-extension-math: 3.1.0 unified: 11.0.5 transitivePeerDependencies: @@ -17289,31 +17194,31 @@ snapshots: unified: 11.0.5 unist-util-remove: 4.0.0 - remark-mdx@3.0.1: + remark-mdx@3.0.1(supports-color@8.1.1): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@8.1.1) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-mdx@3.1.0: + remark-mdx@3.1.0(supports-color@8.1.1): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@8.1.1) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-mdx@3.1.1: + remark-mdx@3.1.1(supports-color@8.1.1): dependencies: - mdast-util-mdx: 3.0.0 + mdast-util-mdx: 3.0.0(supports-color@8.1.1) micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + remark-parse@11.0.0(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.3(supports-color@8.1.1) micromark-util-types: 2.0.2 unified: 11.0.5 transitivePeerDependencies: @@ -17340,10 +17245,10 @@ snapshots: mdast-util-to-markdown: 2.1.2 unified: 11.0.5 - remark@15.0.1: + remark@15.0.1(supports-color@8.1.1): dependencies: '@types/mdast': 4.0.4 - remark-parse: 11.0.0 + remark-parse: 11.0.0(supports-color@8.1.1) remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: @@ -17449,30 +17354,30 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.1.5 '@rolldown/binding-win32-x64-msvc': 1.1.5 - rolldown@1.2.11: + rolldown@1.2.12: dependencies: - '@oxc-project/types': 0.151.0 + '@oxc-project/types': 0.152.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm-eabi': 1.2.11 - '@rolldown/binding-android-arm64': 1.2.11 - '@rolldown/binding-darwin-arm64': 1.2.11 - '@rolldown/binding-darwin-x64': 1.2.11 - '@rolldown/binding-freebsd-x64': 1.2.11 - '@rolldown/binding-linux-arm-gnueabihf': 1.2.11 - '@rolldown/binding-linux-arm64-gnu': 1.2.11 - '@rolldown/binding-linux-arm64-musl': 1.2.11 - '@rolldown/binding-linux-ppc64-gnu': 1.2.11 - '@rolldown/binding-linux-s390x-gnu': 1.2.11 - '@rolldown/binding-linux-x64-gnu': 1.2.11 - '@rolldown/binding-linux-x64-musl': 1.2.11 - '@rolldown/binding-openharmony-arm64': 1.2.11 - '@rolldown/binding-win32-arm64-msvc': 1.2.11 - '@rolldown/binding-win32-x64-msvc': 1.2.11 + '@rolldown/binding-android-arm-eabi': 1.2.12 + '@rolldown/binding-android-arm64': 1.2.12 + '@rolldown/binding-darwin-arm64': 1.2.12 + '@rolldown/binding-darwin-x64': 1.2.12 + '@rolldown/binding-freebsd-x64': 1.2.12 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.12 + '@rolldown/binding-linux-arm64-gnu': 1.2.12 + '@rolldown/binding-linux-arm64-musl': 1.2.12 + '@rolldown/binding-linux-ppc64-gnu': 1.2.12 + '@rolldown/binding-linux-s390x-gnu': 1.2.12 + '@rolldown/binding-linux-x64-gnu': 1.2.12 + '@rolldown/binding-linux-x64-musl': 1.2.12 + '@rolldown/binding-openharmony-arm64': 1.2.12 + '@rolldown/binding-win32-arm64-msvc': 1.2.12 + '@rolldown/binding-win32-x64-msvc': 1.2.12 rou3@0.9.2: {} - router@2.2.0: + router@2.2.0(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 @@ -17531,12 +17436,10 @@ snapshots: sax@1.6.0: {} - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - scheduler@0.26.0: {} + scheduler@0.28.0: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -17548,9 +17451,9 @@ snapshots: semver@7.8.5: {} - send@0.19.2: + send@0.19.2(supports-color@8.1.1): dependencies: - debug: 2.6.9 + debug: 2.6.9(supports-color@8.1.1) depd: 2.0.0 destroy: 1.2.0 encodeurl: 2.0.0 @@ -17566,7 +17469,7 @@ snapshots: transitivePeerDependencies: - supports-color - send@1.2.1: + send@1.2.1(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) encodeurl: 2.0.0 @@ -17593,21 +17496,21 @@ snapshots: non-error: 0.1.0 type-fest: 5.8.0 - serve-static@1.16.3: + serve-static@1.16.3(supports-color@8.1.1): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.2 + send: 0.19.2(supports-color@8.1.1) transitivePeerDependencies: - supports-color - serve-static@2.2.1: + serve-static@2.2.1(supports-color@8.1.1): dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 1.2.1 + send: 1.2.1(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -17772,7 +17675,7 @@ snapshots: map-obj: 5.0.2 type-fest: 4.41.0 - socket.io-adapter@2.5.8(bufferutil@4.1.0): + socket.io-adapter@2.5.8(bufferutil@4.1.0)(supports-color@8.1.1): dependencies: debug: 4.4.3(supports-color@8.1.1) ws: 8.21.0(bufferutil@4.1.0) @@ -17781,28 +17684,28 @@ snapshots: - supports-color - utf-8-validate - socket.io-parser@4.2.7: + socket.io-parser@4.2.7(supports-color@8.1.1): dependencies: '@socket.io/component-emitter': 3.1.2 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - socket.io@4.8.0(bufferutil@4.1.0): + socket.io@4.8.0(bufferutil@4.1.0)(supports-color@8.1.1): dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.6 - debug: 4.3.7 - engine.io: 6.6.11(bufferutil@4.1.0) - socket.io-adapter: 2.5.8(bufferutil@4.1.0) - socket.io-parser: 4.2.7 + debug: 4.3.7(supports-color@8.1.1) + engine.io: 6.6.11(bufferutil@4.1.0)(supports-color@8.1.1) + socket.io-adapter: 2.5.8(bufferutil@4.1.0)(supports-color@8.1.1) + socket.io-parser: 4.2.7(supports-color@8.1.1) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - socks-proxy-agent@8.0.5: + socks-proxy-agent@8.0.5(supports-color@8.1.1): dependencies: agent-base: 7.1.4 debug: 4.4.3(supports-color@8.1.1) @@ -18283,8 +18186,8 @@ snapshots: dependencies: '@typescript-eslint/eslint-plugin': 8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) '@typescript-eslint/parser': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.70.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.70.0(supports-color@8.1.1)(typescript@5.9.3) + '@typescript-eslint/utils': 8.70.0(eslint@10.10.0(jiti@2.7.0)(supports-color@8.1.1))(supports-color@8.1.1)(typescript@5.9.3) eslint: 10.10.0(jiti@2.7.0)(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e3ccbeb404..bb62f21d86 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -36,7 +36,7 @@ catalog: vitest: 4.1.11 zod: 4.4.3 devtools-protocol: ^0.0.1657692 - ai: ^7.0.16 + ai: ^7.0.120 "@openai/codex-sdk": 0.153.4 "@anthropic-ai/claude-agent-sdk": 0.3.224 typebox: 1.3.7 @@ -45,12 +45,10 @@ catalog: "@mastra/mcp": ^1.15.0 "@ai-sdk/mcp": 2.0.22 eve: 0.71.2 - "@ai-sdk/provider": ^4.0.2 - "@ai-sdk/openai": ^4.0.8 - "@ai-sdk/anthropic": ^4.0.8 - "@ai-sdk/google": ^4.0.8 - "@ai-sdk/groq": ^4.0.5 - "@ai-sdk/cerebras": ^3.0.5 + "@ai-sdk/provider": ^4.0.19 + "@ai-sdk/openai": ^4.0.79 + "@ai-sdk/anthropic": ^4.0.67 + "@ai-sdk/google": ^4.0.84 camelcase-keys: ^10.0.2 snakecase-keys: ^9.0.2 zustand: ^5.0.14 @@ -107,4 +105,11 @@ minimumReleaseAgeExclude: - "@cursor/sdk-linux-x64@1.0.36" - "@cursor/sdk-win32-x64@1.0.36" - "@cursor/sdk@1.0.36" + - "@ai-sdk/anthropic@4.0.67" + - "@ai-sdk/gateway@4.0.98" + - "@ai-sdk/google@4.0.84" + - "@ai-sdk/openai@4.0.79" + - "@ai-sdk/provider-utils@5.0.50" + - "@ai-sdk/provider@4.0.19" + - ai@7.0.120 - eve@0.71.2