diff --git a/CHANGELOG.md b/CHANGELOG.md index 7fcd1e4..f71440a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # @browserbasehq/mcp-server-browserbase +## 2.3.0 + +### Minor Changes + +- upgrade to stagehand v3 + ## 2.2.0 ### Minor Changes diff --git a/README.md b/README.md index de26e95..640def0 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,20 @@ This server provides cloud browser automation capabilities using [Browserbase](https://www.browserbase.com/) and [Stagehand](https://github.com/browserbase/stagehand). It enables LLMs to interact with web pages, take screenshots, extract information, and perform automated actions with atomic precision. +## What's New in Stagehand v3 + +Powered by [Stagehand v3.0](https://github.com/browserbase/stagehand), this MCP server now includes: + +- **20-40% Faster Performance**: Speed improvements across all core operations (`act`, `extract`, `observe`) through automatic caching +- **Enhanced Extraction**: Targeted extraction and observation across iframes and shadow roots +- **Improved Schemas**: Streamlined extract schemas for more intuitive data extraction +- **Advanced Selector Support**: CSS selector support with improved element targeting +- **Multi-Browser Support**: Compatible with Playwright, Puppeteer, and Patchright +- **New Primitives**: Built-in `page`, `locator`, `frameLocator`, and `deepLocator` for simplified automation +- **Experimental Features**: Enable cutting-edge capabilities with the `--experimental` flag + +For more details, visit the [Stagehand v3 documentation](https://docs.stagehand.dev/). + ## Features | Feature | Description | @@ -19,6 +33,8 @@ This server provides cloud browser automation capabilities using [Browserbase](h | Model Flexibility | Supports multiple models (OpenAI, Claude, Gemini, and more) | | Vision Support | Use annotated screenshots for complex DOMs | | Session Management | Create, manage, and close browser sessions | +| High Performance | 20-40% faster operations with automatic caching (v3) | +| Advanced Selectors | Enhanced CSS selector support for precise element targeting | ## How to Setup @@ -190,7 +206,6 @@ The Browserbase MCP server accepts the following command-line flags: | `--persist` | Whether to persist the Browserbase context (default: true) | | `--port ` | Port to listen on for HTTP/SHTTP transport | | `--host ` | Host to bind server to (default: localhost, use 0.0.0.0 for all interfaces) | -| `--cookies [json]` | JSON array of cookies to inject into the browser | | `--browserWidth ` | Browser viewport width (default: 1024) | | `--browserHeight ` | Browser viewport height (default: 768) | | `--modelName ` | The model to use for Stagehand (default: gemini-2.0-flash) | @@ -343,6 +358,30 @@ Here's how to use it for custom browser sizing. We recommend to stick with 16:9 } ``` +### Experimental Features + +Stagehand v3 includes experimental features that can be enabled with the `--experimental` flag. These features provide cutting-edge capabilities that are actively being developed and refined. + +To enable experimental features: + +```json +{ + "mcpServers": { + "browserbase": { + "command": "npx", + "args": ["@browserbasehq/mcp-server-browserbase", "--experimental"], + "env": { + "BROWSERBASE_API_KEY": "", + "BROWSERBASE_PROJECT_ID": "", + "GEMINI_API_KEY": "" + } + } + } +} +``` + +_Note: Experimental features may change or be removed in future releases. Use them at your own discretion._ + ### Model Configuration Stagehand defaults to using Google's Gemini 2.0 Flash model, but you can configure it to use other models like GPT-4o, Claude, or other providers. @@ -359,7 +398,7 @@ Here's how to configure different models: "args": [ "@browserbasehq/mcp-server-browserbase", "--modelName", - "anthropic/claude-3-5-sonnet-latest", + "anthropic/claude-sonnet-4.5", "--modelApiKey", "your-anthropic-api-key" ], diff --git a/config.d.ts b/config.d.ts index 1b85dcc..9cb4d5f 100644 --- a/config.d.ts +++ b/config.d.ts @@ -1,4 +1,3 @@ -import type { Cookie } from "playwright-core"; import type { AvailableModelSchema } from "@browserbasehq/stagehand"; export type Config = { @@ -59,11 +58,6 @@ export type Config = { */ browserHeight?: number; }; - /** - * Cookies to inject into the Browserbase context - * Format: Array of cookie objects with name, value, domain, and optional path, expires, httpOnly, secure, sameSite - */ - cookies?: Cookie[]; /** * Server configuration for MCP transport layer * diff --git a/package.json b/package.json index a8532a3..fb43c7c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@browserbasehq/mcp-server-browserbase", - "version": "2.2.0", + "version": "2.3.0", "description": "MCP server for AI web browser automation using Browserbase and Stagehand", "mcpName": "io.github.browserbase/mcp-server-browserbase", "license": "Apache-2.0", @@ -46,12 +46,11 @@ }, "dependencies": { "@browserbasehq/sdk": "^2.6.0", - "@browserbasehq/stagehand": "^2.5.2", + "@browserbasehq/stagehand": "^3.0.1", "@mcp-ui/server": "^5.10.0", "@modelcontextprotocol/sdk": "^1.13.1", "commander": "^14.0.0", "dotenv": "^16.4.6", - "mcpvals": "^0.0.3", "zod": "^3.25.67" }, "devDependencies": { @@ -64,7 +63,7 @@ "globals": "^16.2.0", "husky": "^9.1.7", "lint-staged": "^16.1.2", - "playwright-core": "^1.53.2", + "mcpvals": "^0.4.0", "prettier": "^3.6.1", "shx": "^0.3.4", "tsx": "^4.20.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8587ca..18da851 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,8 +11,8 @@ importers: specifier: ^2.6.0 version: 2.6.0 "@browserbasehq/stagehand": - specifier: ^2.5.2 - version: 2.5.2(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(react@19.1.0)(zod@3.25.76) + specifier: ^3.0.1 + version: 3.0.1(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(zod@3.25.76) "@mcp-ui/server": specifier: ^5.10.0 version: 5.10.0 @@ -25,9 +25,6 @@ importers: dotenv: specifier: ^16.4.6 version: 16.6.1 - mcpvals: - specifier: ^0.0.3 - version: 0.0.3(react@19.1.0) zod: specifier: ^3.25.67 version: 3.25.76 @@ -59,9 +56,9 @@ importers: lint-staged: specifier: ^16.1.2 version: 16.1.2 - playwright-core: - specifier: ^1.53.2 - version: 1.54.1 + mcpvals: + specifier: ^0.4.0 + version: 0.4.0(react@19.1.0) prettier: specifier: ^3.6.1 version: 3.6.2 @@ -88,68 +85,86 @@ packages: peerDependencies: zod: ^3.0.0 - "@ai-sdk/azure@1.3.24": + "@ai-sdk/anthropic@2.0.40": resolution: { - integrity: sha512-6zOG8mwmd8esSL/L9oYFZSyZWORRTxuG6on9A3RdPe7MRJ607Q6BWsuvul79kecbLf5xQ4bfP7LzXaBizsd8OA==, + integrity: sha512-aHtqlIIS8lyesSNFxevLGWozCCZ1xQ4Wy2HfQSVVQu3dWtndfPzF6hbWof2Way+qNrvRtjnBpRQyaVeu6Js4pQ==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/cerebras@0.2.16": + "@ai-sdk/azure@2.0.60": resolution: { - integrity: sha512-FbT3gFYADXwyjQlpluWxl5fRnkJvGMHX5ahLZZ7qqpDQHH86ZO6X9j9Gk6vcMCwNPpI7+miiK79q1e5wzVHBSQ==, + integrity: sha512-7G5e5eYovGLb/ZOtlukCJjuxwa24t4gVnMhJg/0AZj7MAkoFeNZm/1T7FwXTyWw0xBR5AY5SyhKCU4rqbe17Zw==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/deepseek@0.2.16": + "@ai-sdk/cerebras@1.0.28": resolution: { - integrity: sha512-pIlwtjNehCpDr1wqxtSbXshynW4CiwS6S3yAKHzHi73QtmS2Hg9kE1DB0zgENKaZLmbsc4UgigGM6FzuUd4M8Q==, + integrity: sha512-gL16Uv2FHXSd3Mj/gfQv8/ylTnYPyWHlu0KauHHd1QYkwSx/tZG7JagoAC+7IePor0kWIxFXepif4p89bzNYJg==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/google@1.2.22": + "@ai-sdk/deepseek@1.0.26": resolution: { - integrity: sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==, + integrity: sha512-HUpDS05A5GEtrWN7LKzG5aTPjETnG/MPB59IwZVvFseKOElAXCNfhMzD3HookIVMwgOYlvpHd8SroFCeKyWAUA==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/groq@1.2.9": + "@ai-sdk/gateway@2.0.5": resolution: { - integrity: sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg==, + integrity: sha512-5TTDSl0USWY6YGnb4QmJGplFZhk+p9OT7hZevAaER6OGiZ17LB1GypsGYDpNo/MiVMklk8kX4gk6p1/R/EiJ8Q==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/mistral@1.2.8": + "@ai-sdk/google@2.0.26": resolution: { - integrity: sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==, + integrity: sha512-LMCT8TDwj1ww4W34f1YJHfk2LggsMV4dqF8qSolJIopdERCclA+S+LzaIaiyeoYDD+slUrf3FXvi1t+yd21jxQ==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 - "@ai-sdk/openai-compatible@0.2.16": + "@ai-sdk/groq@2.0.27": resolution: { - integrity: sha512-LkvfcM8slJedRyJa/MiMiaOzcMjV1zNDwzTHEGz7aAsgsQV0maLfmJRi/nuSwf5jmp0EouC+JXXDUj2l94HgQw==, + integrity: sha512-n5Ap/uLIUbBz3DYy4yvkIKoBUj1Bb6jJ7+hVlvveqdvmxSEPXjN47hs4Pj2pwZMAXoILVSTmd8wu24tmekidUA==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 + + "@ai-sdk/mistral@2.0.22": + resolution: + { + integrity: sha512-/CnLJIzZfVmk7N1f+WRt+/uBV6tmzh77KxzMNxtTnhzIGTgI68ck0NOW5H1VMDBMTsC5D99zsOrbCzn7lreokg==, + } + engines: { node: ">=18" } + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + + "@ai-sdk/openai-compatible@1.0.25": + resolution: + { + integrity: sha512-VPylb5ytkOu9Bs1UnVmz4x0wr1VtS30Pw6ghh6GxpGH6lo4GOWqVnYuB+8M755dkof74c5LULZq5C1n/1J4Kvg==, + } + engines: { node: ">=18" } + peerDependencies: + zod: ^3.25.76 || ^4.1.8 "@ai-sdk/openai@1.3.23": resolution: @@ -160,14 +175,23 @@ packages: peerDependencies: zod: ^3.0.0 - "@ai-sdk/perplexity@1.1.9": + "@ai-sdk/openai@2.0.59": resolution: { - integrity: sha512-Ytolh/v2XupXbTvjE18EFBrHLoNMH0Ueji3lfSPhCoRUfkwrgZ2D9jlNxvCNCCRiGJG5kfinSHvzrH5vGDklYA==, + integrity: sha512-ylaL91BrMyqHsprEI0+brvvGwDjRlKxsJTRL1kpzx6AhG37JqpECQwuqNk7aq+T5Qww9w7dqn1JMUuVPvyZtsA==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 + + "@ai-sdk/perplexity@2.0.16": + resolution: + { + integrity: sha512-qEE+xlSOca7CWWBExepOP+j7D/CKCzSCaKyNdMzW/jDlz8SvKS+omVYJvtSk4tojZaB08h4N9wvhbEN/YYKQCA==, + } + engines: { node: ">=18" } + peerDependencies: + zod: ^3.25.76 || ^4.1.8 "@ai-sdk/provider-utils@2.2.8": resolution: @@ -178,6 +202,15 @@ packages: peerDependencies: zod: ^3.23.8 + "@ai-sdk/provider-utils@3.0.15": + resolution: + { + integrity: sha512-kOc6Pxb7CsRlNt+sLZKL7/VGQUd7ccl3/tIK+Bqf5/QhHR0Qm3qRBMz1IwU1RmjJEZA73x+KB5cUckbDl2WF7Q==, + } + engines: { node: ">=18" } + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + "@ai-sdk/provider@1.1.3": resolution: { @@ -185,6 +218,13 @@ packages: } engines: { node: ">=18" } + "@ai-sdk/provider@2.0.0": + resolution: + { + integrity: sha512-6o7Y2SeO9vFKB8lArHXehNuusnpddKPk7xqL7T2/b+OvXMRIXUO1rR4wcv1hAFUAT9avGZshty3Wlua/XA7TvA==, + } + engines: { node: ">=18" } + "@ai-sdk/react@1.2.12": resolution: { @@ -198,14 +238,14 @@ packages: zod: optional: true - "@ai-sdk/togetherai@0.2.16": + "@ai-sdk/togetherai@1.0.26": resolution: { - integrity: sha512-vCtYUrIdep0M6GIvemyYpwSa9SWOleb/2cuGNXcxzU2xy4GJQdHK/MigQbT9rfeuqnjU2W9KIdtAVJGVwIBogw==, + integrity: sha512-F3nvcS1TNnxPoL8R1Pq6YOxThjPNBkXqywly+EpO5FPvqQx2sL2Cymu1epKlbYWVJXT3ZJAb2+NISH2Fldsv8w==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 "@ai-sdk/ui-utils@1.2.11": resolution: @@ -216,14 +256,14 @@ packages: peerDependencies: zod: ^3.23.8 - "@ai-sdk/xai@1.2.18": + "@ai-sdk/xai@2.0.30": resolution: { - integrity: sha512-T70WEu+UKXD/Fdj9ck+ujIqUp5ru06mJ/7usePXeXL5EeTi8KXevXF9AMIDdhyD5MZPT2jI8t19lEr8Bhuh/Bg==, + integrity: sha512-dVnt57hX4n8NCjmQ++Bfq5PFdTy4yToOWK2hrs6AsrRfHWsT+7BKecTorsDyX85C4h6yIoB6k1AboDYKsxCpeQ==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 + zod: ^3.25.76 || ^4.1.8 "@anthropic-ai/sdk@0.32.1": resolution: @@ -250,16 +290,21 @@ packages: integrity: sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==, } - "@browserbasehq/stagehand@2.5.2": + "@browserbasehq/stagehand@3.0.1": resolution: { - integrity: sha512-Awo4IRYtlY+jrGpzyAY5+nqPurp87Ou2qGortNYf8hlR+KB+cI7sgIS7SfCbldkMyGO++uXUHTXkyfNutNuo7w==, + integrity: sha512-GfI6qWAGBj3obGvIgi8wbE1e65y29hB7u9FUmlQIz2wUX/izFFchlq+PszafPr9d2q4ZzbqzqNoc9WSjhxT65w==, } - hasBin: true peerDependencies: deepmerge: ^4.3.1 dotenv: ^16.4.5 - zod: ">=3.25.0 <3.25.68" + zod: 3.25.67 + + "@cfworker/json-schema@4.1.1": + resolution: + { + integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==, + } "@changesets/apply-release-plan@7.0.12": resolution: @@ -370,6 +415,14 @@ packages: integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==, } + "@composio/json-schema-to-zod@0.1.18": + resolution: + { + integrity: sha512-y/1AXznIZE92KTKmDCFa2S4/+WulfdrO1RH65fy8CG7sXJVxOExktUiQUrvatnZZ5LzXUJqke9W+fMxLBvm5jw==, + } + peerDependencies: + zod: ">=3.25.76 <4 || >=4.1 <5" + "@esbuild/aix-ppc64@0.25.6": resolution: { @@ -728,6 +781,22 @@ packages: "@types/node": optional: true + "@langchain/core@0.3.79": + resolution: + { + integrity: sha512-ZLAs5YMM5N2UXN3kExMglltJrKKoW7hs3KMZFlXUnD7a5DFKBYxPFMeXA4rT+uvTxuJRZPCYX0JKI5BhyAWx4A==, + } + engines: { node: ">=18" } + + "@langchain/openai@0.4.9": + resolution: + { + integrity: sha512-NAsaionRHNdqaMjVLPkFCyjUDze+OqRHghA1Cn4fPoAafz+FXcl9c7LlEl9Xo0FH6/8yiCl7Rw2t780C/SBVxQ==, + } + engines: { node: ">=18" } + peerDependencies: + "@langchain/core": ">=0.3.39 <0.4.0" + "@manypkg/find-root@1.1.0": resolution: { @@ -911,6 +980,14 @@ packages: } engines: { node: ">=8.0.0" } + "@puppeteer/browsers@2.3.0": + resolution: + { + integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==, + } + engines: { node: ">=18" } + hasBin: true + "@smithery/cli@1.2.15": resolution: { @@ -933,6 +1010,18 @@ packages: integrity: sha512-ZXwdgsF2/0xaeRTurNaJ+YI4YsxaQsXDbHXRwy545LBUNqSYpDq+VG1fWGeEks5ODHiXxMeF1JrP9MhgH75BFg==, } + "@standard-schema/spec@1.0.0": + resolution: + { + integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==, + } + + "@tootallnate/quickjs-emscripten@0.23.0": + resolution: + { + integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==, + } + "@types/diff-match-patch@1.0.36": resolution: { @@ -969,12 +1058,24 @@ packages: integrity: sha512-d0F6m9itIPaKnrvEMlzE48UjwZaAnFW7Jwibacw9MNdqadjKNpUm9tfJYDwmShJmgqcoqYUX3EMKO1+RWiuuNg==, } + "@types/retry@0.12.0": + resolution: + { + integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==, + } + "@types/uuid@10.0.0": resolution: { integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==, } + "@types/yauzl@2.10.3": + resolution: + { + integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==, + } + "@typescript-eslint/eslint-plugin@8.37.0": resolution: { @@ -1064,6 +1165,13 @@ packages: } engines: { node: ^18.18.0 || ^20.9.0 || >=21.1.0 } + "@vercel/oidc@3.0.3": + resolution: + { + integrity: sha512-yNEQvPcVrK9sIe637+I0jD6leluPxzwJKx/Haw6F4H77CdDsszUn5V3o96LPziXkSNE2B83+Z3mjqGKBK/R6Gg==, + } + engines: { node: ">= 20" } + abort-controller@3.0.0: resolution: { @@ -1121,6 +1229,15 @@ packages: react: optional: true + ai@5.0.86: + resolution: + { + integrity: sha512-ooHwNTkLdedFf98iQhtSc5btc/P4UuXuOpYneoifq0190vqosLunNdW8Hs6CiE0Am7YOGNplDK56JIPlHZIL4w==, + } + engines: { node: ">=18" } + peerDependencies: + zod: ^3.25.76 || ^4.1.8 + ajv@6.12.6: resolution: { @@ -1169,6 +1286,13 @@ packages: } engines: { node: ">=8" } + ansi-styles@5.2.0: + resolution: + { + integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, + } + engines: { node: ">=10" } + ansi-styles@6.2.1: resolution: { @@ -1244,6 +1368,13 @@ packages: } engines: { node: ">= 0.4" } + ast-types@0.13.4: + resolution: + { + integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==, + } + engines: { node: ">=4" } + async-function@1.0.0: resolution: { @@ -1271,60 +1402,109 @@ packages: } engines: { node: ">= 0.4" } + b4a@1.7.3: + resolution: + { + integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==, + } + peerDependencies: + react-native-b4a: "*" + peerDependenciesMeta: + react-native-b4a: + optional: true + balanced-match@1.0.2: resolution: { integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, } - base64-js@1.5.1: + bare-events@2.8.1: resolution: { - integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + integrity: sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==, } + peerDependencies: + bare-abort-controller: "*" + peerDependenciesMeta: + bare-abort-controller: + optional: true - basic-auth@0.0.1: + bare-fs@4.5.0: resolution: { - integrity: sha512-sCz6E05DMvrA9dUBGJFfnQ3qs+/lQkVr7qjOT5XMMNfpTzWbpkElpzXfnbNlBjPnDQyz0uBFJ4nELJRIdcKoNQ==, + integrity: sha512-GljgCjeupKZJNetTqxKaQArLK10vpmK28or0+RwWjEl5Rk+/xG3wkpmkv+WrcBm3q1BwHKlnhXzR8O37kcvkXQ==, } + engines: { bare: ">=1.16.0" } + peerDependencies: + bare-buffer: "*" + peerDependenciesMeta: + bare-buffer: + optional: true - basic-auth@2.0.1: + bare-os@3.6.2: resolution: { - integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==, + integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==, } - engines: { node: ">= 0.8" } + engines: { bare: ">=1.14.0" } - better-path-resolve@1.0.0: + bare-path@3.0.0: resolution: { - integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, + integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==, } - engines: { node: ">=4" } - bignumber.js@9.3.1: + bare-stream@2.7.0: resolution: { - integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==, + integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==, + } + peerDependencies: + bare-buffer: "*" + bare-events: "*" + peerDependenciesMeta: + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.3.2: + resolution: + { + integrity: sha512-ZMq4gd9ngV5aTMa5p9+UfY0b3skwhHELaDkhEHetMdX0LRkW9kzaym4oo/Eh+Ghm0CCDuMTsRIGM/ytUc1ZYmw==, } - bl@4.1.0: + base64-js@1.5.1: resolution: { - integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, + integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==, + } + + basic-ftp@5.0.5: + resolution: + { + integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==, + } + engines: { node: ">=10.0.0" } + + better-path-resolve@1.0.0: + resolution: + { + integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==, } + engines: { node: ">=4" } - bluebird@2.11.0: + bignumber.js@9.3.1: resolution: { - integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==, + integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==, } - bluebird@3.7.2: + bl@4.1.0: resolution: { - integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==, + integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==, } body-parser@2.2.0: @@ -1353,6 +1533,12 @@ packages: } engines: { node: ">=8" } + buffer-crc32@0.2.13: + resolution: + { + integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, + } + buffer-equal-constant-time@1.0.1: resolution: { @@ -1407,6 +1593,13 @@ packages: } engines: { node: ">=6" } + camelcase@6.3.0: + resolution: + { + integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==, + } + engines: { node: ">=10" } + chalk@4.1.2: resolution: { @@ -1433,6 +1626,22 @@ packages: integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==, } + chrome-launcher@1.2.1: + resolution: + { + integrity: sha512-qmFR5PLMzHyuNJHwOloHPAHhbaNglkfeV/xDtt5b7xiFFyU1I+AZZX0PYseMuhenJSSirgxELYIbswcoc+5H4A==, + } + engines: { node: ">=12.13.0" } + hasBin: true + + chromium-bidi@0.6.3: + resolution: + { + integrity: sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==, + } + peerDependencies: + devtools-protocol: "*" + ci-info@3.9.0: resolution: { @@ -1475,26 +1684,19 @@ packages: } engines: { node: ">= 10" } - clone@1.0.4: - resolution: - { - integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, - } - engines: { node: ">=0.8" } - - co-bluebird@1.1.0: + cliui@8.0.1: resolution: { - integrity: sha512-JuoemMXxQjYAxbfRrNpOsLyiwDiY8mXvGqJyYLM7jMySDJtnMklW3V2o8uyubpc1eN2YoRsAdfZ1lfKCd3lsrA==, + integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==, } - engines: { node: ">=0.12.0" } + engines: { node: ">=12" } - co-use@1.1.0: + clone@1.0.4: resolution: { - integrity: sha512-1lVRtdywv41zQO/xvI2wU8w6oFcUYT6T84YKSxN25KN4N4Kld3scLovt8FjDmD63Cm7HtyRWHjezt+IanXmkyA==, + integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==, } - engines: { node: ">=0.12.0" } + engines: { node: ">=0.8" } color-convert@2.0.1: resolution: @@ -1542,6 +1744,12 @@ packages: integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, } + console-table-printer@2.15.0: + resolution: + { + integrity: sha512-SrhBq4hYVjLCkBVOWaTzceJalvn5K1Zq5aQA6wXC/cYjI3frKWNPEMK3sZsJfNNQApvCQmgBcc13ZKmFj8qExw==, + } + content-disposition@1.0.0: resolution: { @@ -1590,6 +1798,13 @@ packages: } engines: { node: ">= 8" } + data-uri-to-buffer@6.0.2: + resolution: + { + integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==, + } + engines: { node: ">= 14" } + data-view-buffer@1.0.2: resolution: { @@ -1629,6 +1844,13 @@ packages: supports-color: optional: true + decamelize@1.2.0: + resolution: + { + integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==, + } + engines: { node: ">=0.10.0" } + deep-is@0.1.4: resolution: { @@ -1662,6 +1884,13 @@ packages: } engines: { node: ">= 0.4" } + degenerator@5.0.1: + resolution: + { + integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==, + } + engines: { node: ">= 14" } + delayed-stream@1.0.0: resolution: { @@ -1690,6 +1919,12 @@ packages: } engines: { node: ">=8" } + devtools-protocol@0.0.1312386: + resolution: + { + integrity: sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==, + } + devtools-protocol@0.0.1464554: resolution: { @@ -1845,6 +2080,13 @@ packages: engines: { node: ">=18" } hasBin: true + escalade@3.2.0: + resolution: + { + integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==, + } + engines: { node: ">=6" } + escape-html@1.0.3: resolution: { @@ -1865,6 +2107,14 @@ packages: } engines: { node: ">=10" } + escodegen@2.1.0: + resolution: + { + integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==, + } + engines: { node: ">=6.0" } + hasBin: true + eslint-plugin-react@7.37.5: resolution: { @@ -1965,12 +2215,24 @@ packages: } engines: { node: ">=6" } + eventemitter3@4.0.7: + resolution: + { + integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==, + } + eventemitter3@5.0.1: resolution: { integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==, } + events-universal@1.0.1: + resolution: + { + integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==, + } + eventsource-parser@3.0.3: resolution: { @@ -1978,6 +2240,13 @@ packages: } engines: { node: ">=20.0.0" } + eventsource-parser@3.0.6: + resolution: + { + integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==, + } + engines: { node: ">=18.0.0" } + eventsource@3.0.7: resolution: { @@ -2027,6 +2296,14 @@ packages: } engines: { node: ">=4" } + extract-zip@2.0.1: + resolution: + { + integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==, + } + engines: { node: ">= 10.17.0" } + hasBin: true + fast-copy@3.0.2: resolution: { @@ -2039,6 +2316,12 @@ packages: integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, } + fast-fifo@1.3.2: + resolution: + { + integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==, + } + fast-glob@3.3.3: resolution: { @@ -2077,6 +2360,12 @@ packages: integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==, } + fd-slicer@1.1.0: + resolution: + { + integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==, + } + fetch-cookie@3.1.0: resolution: { @@ -2248,6 +2537,13 @@ packages: } engines: { node: ">=14" } + get-caller-file@2.0.5: + resolution: + { + integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, + } + engines: { node: 6.* || 8.* || >= 10.* } + get-east-asian-width@1.3.0: resolution: { @@ -2269,6 +2565,13 @@ packages: } engines: { node: ">= 0.4" } + get-stream@5.2.0: + resolution: + { + integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==, + } + engines: { node: ">=8" } + get-stream@8.0.1: resolution: { @@ -2289,10 +2592,17 @@ packages: integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==, } - glob-parent@5.1.2: + get-uri@6.0.5: resolution: { - integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, + integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==, + } + engines: { node: ">= 14" } + + glob-parent@5.1.2: + resolution: + { + integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, } engines: { node: ">= 6" } @@ -2439,6 +2749,13 @@ packages: } engines: { node: ">= 0.8" } + http-proxy-agent@7.0.2: + resolution: + { + integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==, + } + engines: { node: ">= 14" } + https-proxy-agent@7.0.6: resolution: { @@ -2565,6 +2882,13 @@ packages: } engines: { node: ">= 0.10" } + ip-address@10.0.1: + resolution: + { + integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==, + } + engines: { node: ">= 12" } + ipaddr.js@1.9.1: resolution: { @@ -2628,6 +2952,14 @@ packages: } engines: { node: ">= 0.4" } + is-docker@2.2.1: + resolution: + { + integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==, + } + engines: { node: ">=8" } + hasBin: true + is-extglob@2.1.1: resolution: { @@ -2670,12 +3002,6 @@ packages: } engines: { node: ">= 0.4" } - is-generator@1.0.3: - resolution: - { - integrity: sha512-G56jBpbJeg7ds83HW1LuShNs8J73Fv3CPz/bmROHOHlnKkN8sWb9ujiagjmxxMUywftgq48HlBZELKKqFLk0oA==, - } - is-glob@4.0.3: resolution: { @@ -2843,6 +3169,13 @@ packages: } engines: { node: ">=0.10.0" } + is-wsl@2.2.0: + resolution: + { + integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==, + } + engines: { node: ">=8" } + isarray@2.0.5: resolution: { @@ -2869,6 +3202,12 @@ packages: } engines: { node: ">=10" } + js-tiktoken@1.0.21: + resolution: + { + integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==, + } + js-tokens@4.0.0: resolution: { @@ -2958,6 +3297,26 @@ packages: integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==, } + langsmith@0.3.77: + resolution: + { + integrity: sha512-wbS/9IX/hOAsOEOtPj8kCS8H0tFHaelwQ97gTONRtIfoPPLd9MMUmhk0KQB5DdsGAI5abg966+f0dZ/B+YRRzg==, + } + peerDependencies: + "@opentelemetry/api": "*" + "@opentelemetry/exporter-trace-otlp-proto": "*" + "@opentelemetry/sdk-trace-base": "*" + openai: "*" + peerDependenciesMeta: + "@opentelemetry/api": + optional: true + "@opentelemetry/exporter-trace-otlp-proto": + optional: true + "@opentelemetry/sdk-trace-base": + optional: true + openai: + optional: true + levn@0.4.1: resolution: { @@ -2965,6 +3324,12 @@ packages: } engines: { node: ">= 0.8.0" } + lighthouse-logger@2.0.2: + resolution: + { + integrity: sha512-vWl2+u5jgOQuZR55Z1WM0XDdrJT6mzMP8zHUct7xTlWhuQs+eV0g+QL0RQdFjT54zVmbhLCP8vIVpy1wGn/gCg==, + } + lilconfig@3.1.3: resolution: { @@ -3013,12 +3378,6 @@ packages: integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==, } - lodash@4.17.19: - resolution: - { - integrity: sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==, - } - lodash@4.17.21: resolution: { @@ -3053,26 +3412,32 @@ packages: } hasBin: true - math-intrinsics@1.1.0: + lru-cache@7.18.3: resolution: { - integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, + integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==, } - engines: { node: ">= 0.4" } + engines: { node: ">=12" } - mcpvals@0.0.3: + marky@1.3.0: resolution: { - integrity: sha512-aMOsp8K6eJNId796Y1K+S2nNHiW8wuGtMuTEB1aCpMAvT57XpK2cMu/SCoKp3vqMZMPFOWX1TS2AhSdhYaOwkw==, + integrity: sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==, } - hasBin: true - media-typer@0.3.0: + math-intrinsics@1.1.0: resolution: { - integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==, + integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==, } - engines: { node: ">= 0.6" } + engines: { node: ">= 0.4" } + + mcpvals@0.4.0: + resolution: + { + integrity: sha512-2HoHO+XSi5g1PH1wUI+QTUljqEdWsWUKPqM8PtzOZlVDh9WODCQgujD63hodnd6heV8+LwV2Zu0dbklLeqW1uQ==, + } + hasBin: true media-typer@1.1.0: resolution: @@ -3176,6 +3541,12 @@ packages: integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, } + mitt@3.0.1: + resolution: + { + integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==, + } + mri@1.2.0: resolution: { @@ -3189,6 +3560,13 @@ packages: integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==, } + mustache@4.2.0: + resolution: + { + integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==, + } + hasBin: true + mute-stream@0.0.8: resolution: { @@ -3223,6 +3601,13 @@ packages: } engines: { node: ">= 0.6" } + netmask@2.0.2: + resolution: + { + integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==, + } + engines: { node: ">= 0.4.0" } + node-domexception@1.0.0: resolution: { @@ -3249,13 +3634,6 @@ packages: } hasBin: true - node-oauth2-server@2.4.0: - resolution: - { - integrity: sha512-k3NUmzjEIPyKBuY1OYtHqJ2L6siIlN+oERGe1MVeUGxzeOxEq/2z5K03/P8lfW4ys0Iivbn1KlGJgBeXNZ6Z5w==, - } - engines: { node: ">=0.8" } - npm-run-path@5.3.0: resolution: { @@ -3263,13 +3641,6 @@ packages: } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - oauth2-server@3.1.1: - resolution: - { - integrity: sha512-4dv+fE9hrK+xTaCygOLh/kQeFzbFr7UqSyHvBDbrQq8Hg52sAkV2vTsyH3Z42hoeaKpbhM7udhL8Y4GYbl6TGQ==, - } - engines: { node: ">=4.0" } - object-assign@4.1.1: resolution: { @@ -3325,17 +3696,14 @@ packages: integrity: sha512-1GZkj84Uw2STYhwcGhEkgvNXkremOEmTwSgufKm9CcprjwKFuF6md5f1CIvWJgtYlyfR6BbZYnjr6HCfhUuCpQ==, } - ollama-ai-provider@1.2.0: + ollama-ai-provider-v2@1.5.2: resolution: { - integrity: sha512-jTNFruwe3O/ruJeppI/quoOUxG7NA6blG3ZyQj3lei4+NnJo7bi3eIRWqlVpRlu/mbzbFXeJSBuYQWF6pzGKww==, + integrity: sha512-G7ta7r0oWuwSakxP9fLXwrrYc3Emw+LuDGdLHvqwLmxXR8cadVezrKVpwD57rHMrkihvgOKoHoi7SS73uqCTDQ==, } engines: { node: ">=18" } peerDependencies: - zod: ^3.0.0 - peerDependenciesMeta: - zod: - optional: true + zod: ^4.0.16 on-exit-leak-free@2.1.2: resolution: @@ -3441,6 +3809,13 @@ packages: } engines: { node: ">=8" } + p-finally@1.0.0: + resolution: + { + integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==, + } + engines: { node: ">=4" } + p-limit@2.3.0: resolution: { @@ -3476,6 +3851,27 @@ packages: } engines: { node: ">=6" } + p-queue@6.6.2: + resolution: + { + integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==, + } + engines: { node: ">=8" } + + p-retry@4.6.2: + resolution: + { + integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==, + } + engines: { node: ">=8" } + + p-timeout@3.2.0: + resolution: + { + integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==, + } + engines: { node: ">=8" } + p-try@2.2.0: resolution: { @@ -3483,6 +3879,20 @@ packages: } engines: { node: ">=6" } + pac-proxy-agent@7.2.0: + resolution: + { + integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==, + } + engines: { node: ">= 14" } + + pac-resolver@7.0.1: + resolution: + { + integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==, + } + engines: { node: ">= 14" } + package-manager-detector@0.2.11: resolution: { @@ -3503,11 +3913,13 @@ packages: } engines: { node: ">= 0.8" } - partial-json@0.1.7: + patchright-core@1.56.1: resolution: { - integrity: sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==, + integrity: sha512-ot1WU31T+FLjBg8LUbEnPPhzh6uRYji25ZONHpxVUEXtANuVJf6tI4nv6jw6n37qsjgS4u12sq7Go0Vdte3JJQ==, } + engines: { node: ">=18" } + hasBin: true path-exists@4.0.0: resolution: @@ -3557,6 +3969,12 @@ packages: } engines: { node: ">=8" } + pend@1.2.0: + resolution: + { + integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==, + } + picocolors@1.1.1: resolution: { @@ -3670,12 +4088,12 @@ packages: integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==, } - promisify-any@2.0.1: + progress@2.0.3: resolution: { - integrity: sha512-pVaGouFbTVxqpVJ+T5A15olNJDASAZHYq5cXz6mWdr6/X34mVWiG9MSdzHTcVBCv4aqBP7wGspi7BUSRbEmhsw==, + integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==, } - engines: { node: ">=0.10.0" } + engines: { node: ">=0.4.0" } prop-types@15.8.1: resolution: @@ -3690,6 +4108,19 @@ packages: } engines: { node: ">= 0.10" } + proxy-agent@6.5.0: + resolution: + { + integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==, + } + engines: { node: ">= 14" } + + proxy-from-env@1.1.0: + resolution: + { + integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==, + } + pump@3.0.3: resolution: { @@ -3703,6 +4134,13 @@ packages: } engines: { node: ">=6" } + puppeteer-core@22.15.0: + resolution: + { + integrity: sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==, + } + engines: { node: ">=18" } + qs@6.14.0: resolution: { @@ -3797,6 +4235,13 @@ packages: } engines: { node: ">= 0.4" } + require-directory@2.1.1: + resolution: + { + integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==, + } + engines: { node: ">=0.10.0" } + resolve-from@4.0.0: resolution: { @@ -3846,6 +4291,13 @@ packages: } engines: { node: ">=18" } + retry@0.13.1: + resolution: + { + integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==, + } + engines: { node: ">= 4" } + reusify@1.1.0: resolution: { @@ -3892,12 +4344,6 @@ packages: } engines: { node: ">=0.4" } - safe-buffer@5.1.2: - resolution: - { - integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==, - } - safe-buffer@5.2.1: resolution: { @@ -4070,6 +4516,12 @@ packages: } engines: { node: ">=14" } + simple-wcswidth@1.1.2: + resolution: + { + integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==, + } + slash@3.0.0: resolution: { @@ -4091,12 +4543,40 @@ packages: } engines: { node: ">=18" } + smart-buffer@4.2.0: + resolution: + { + integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==, + } + engines: { node: ">= 6.0.0", npm: ">= 3.0.0" } + + socks-proxy-agent@8.0.5: + resolution: + { + integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==, + } + engines: { node: ">= 14" } + + socks@2.8.7: + resolution: + { + integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==, + } + engines: { node: ">= 10.0.0", npm: ">= 3.0.0" } + sonic-boom@4.2.0: resolution: { integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==, } + source-map@0.6.1: + resolution: + { + integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, + } + engines: { node: ">=0.10.0" } + spawndamnit@3.0.1: resolution: { @@ -4116,13 +4596,6 @@ packages: integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==, } - statuses@1.5.0: - resolution: - { - integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==, - } - engines: { node: ">= 0.6" } - statuses@2.0.1: resolution: { @@ -4151,6 +4624,12 @@ packages: } engines: { node: ">= 0.4" } + streamx@2.23.0: + resolution: + { + integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==, + } + string-argv@0.3.2: resolution: { @@ -4269,6 +4748,18 @@ packages: peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + tar-fs@3.1.1: + resolution: + { + integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==, + } + + tar-stream@3.1.7: + resolution: + { + integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==, + } + term-size@2.2.1: resolution: { @@ -4276,6 +4767,12 @@ packages: } engines: { node: ">=8" } + text-decoder@1.2.3: + resolution: + { + integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==, + } + thread-stream@3.1.0: resolution: { @@ -4379,13 +4876,6 @@ packages: } engines: { node: ">=10" } - type-is@1.6.18: - resolution: - { - integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==, - } - engines: { node: ">= 0.6" } - type-is@2.0.1: resolution: { @@ -4446,6 +4936,12 @@ packages: } engines: { node: ">= 0.4" } + unbzip2-stream@1.4.3: + resolution: + { + integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==, + } + undici-types@5.26.5: resolution: { @@ -4472,6 +4968,12 @@ packages: integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, } + urlpattern-polyfill@10.0.0: + resolution: + { + integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==, + } + use-sync-external-store@1.5.0: resolution: { @@ -4486,6 +4988,13 @@ packages: integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==, } + uuid@10.0.0: + resolution: + { + integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==, + } + hasBin: true + uuid@11.1.0: resolution: { @@ -4589,6 +5098,13 @@ packages: } engines: { node: ">=8" } + wrap-ansi@7.0.0: + resolution: + { + integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==, + } + engines: { node: ">=10" } + wrap-ansi@9.0.0: resolution: { @@ -4617,6 +5133,13 @@ packages: utf-8-validate: optional: true + y18n@5.0.8: + resolution: + { + integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==, + } + engines: { node: ">=10" } + yaml@2.8.0: resolution: { @@ -4625,6 +5148,26 @@ packages: engines: { node: ">= 14.6" } hasBin: true + yargs-parser@21.1.1: + resolution: + { + integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==, + } + engines: { node: ">=12" } + + yargs@17.7.2: + resolution: + { + integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==, + } + engines: { node: ">=12" } + + yauzl@2.10.0: + resolution: + { + integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==, + } + yocto-queue@0.1.0: resolution: { @@ -4640,6 +5183,12 @@ packages: peerDependencies: zod: ^3.24.1 + zod@3.23.8: + resolution: + { + integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==, + } + zod@3.25.76: resolution: { @@ -4653,55 +5202,69 @@ snapshots: "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) zod: 3.25.76 - "@ai-sdk/azure@1.3.24(zod@3.25.76)": + "@ai-sdk/anthropic@2.0.40(zod@3.25.76)": dependencies: - "@ai-sdk/openai": 1.3.23(zod@3.25.76) - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/cerebras@0.2.16(zod@3.25.76)": + "@ai-sdk/azure@2.0.60(zod@3.25.76)": dependencies: - "@ai-sdk/openai-compatible": 0.2.16(zod@3.25.76) - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/openai": 2.0.59(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/deepseek@0.2.16(zod@3.25.76)": + "@ai-sdk/cerebras@1.0.28(zod@3.25.76)": dependencies: - "@ai-sdk/openai-compatible": 0.2.16(zod@3.25.76) - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/openai-compatible": 1.0.25(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/google@1.2.22(zod@3.25.76)": + "@ai-sdk/deepseek@1.0.26(zod@3.25.76)": dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/openai-compatible": 1.0.25(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/groq@1.2.9(zod@3.25.76)": + "@ai-sdk/gateway@2.0.5(zod@3.25.76)": dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) + "@vercel/oidc": 3.0.3 + zod: 3.25.76 + + "@ai-sdk/google@2.0.26(zod@3.25.76)": + dependencies: + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/mistral@1.2.8(zod@3.25.76)": + "@ai-sdk/groq@2.0.27(zod@3.25.76)": dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true - "@ai-sdk/openai-compatible@0.2.16(zod@3.25.76)": + "@ai-sdk/mistral@2.0.22(zod@3.25.76)": dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) + zod: 3.25.76 + optional: true + + "@ai-sdk/openai-compatible@1.0.25(zod@3.25.76)": + dependencies: + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true @@ -4711,10 +5274,17 @@ snapshots: "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) zod: 3.25.76 - "@ai-sdk/perplexity@1.1.9(zod@3.25.76)": + "@ai-sdk/openai@2.0.59(zod@3.25.76)": dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) + zod: 3.25.76 + optional: true + + "@ai-sdk/perplexity@2.0.16(zod@3.25.76)": + dependencies: + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true @@ -4725,10 +5295,21 @@ snapshots: secure-json-parse: 2.7.0 zod: 3.25.76 + "@ai-sdk/provider-utils@3.0.15(zod@3.25.76)": + dependencies: + "@ai-sdk/provider": 2.0.0 + "@standard-schema/spec": 1.0.0 + eventsource-parser: 3.0.6 + zod: 3.25.76 + "@ai-sdk/provider@1.1.3": dependencies: json-schema: 0.4.0 + "@ai-sdk/provider@2.0.0": + dependencies: + json-schema: 0.4.0 + "@ai-sdk/react@1.2.12(react@19.1.0)(zod@3.25.76)": dependencies: "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) @@ -4739,11 +5320,11 @@ snapshots: optionalDependencies: zod: 3.25.76 - "@ai-sdk/togetherai@0.2.16(zod@3.25.76)": + "@ai-sdk/togetherai@1.0.26(zod@3.25.76)": dependencies: - "@ai-sdk/openai-compatible": 0.2.16(zod@3.25.76) - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/openai-compatible": 1.0.25(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true @@ -4754,11 +5335,11 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) - "@ai-sdk/xai@1.2.18(zod@3.25.76)": + "@ai-sdk/xai@2.0.30(zod@3.25.76)": dependencies: - "@ai-sdk/openai-compatible": 0.2.16(zod@3.25.76) - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) + "@ai-sdk/openai-compatible": 1.0.25(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true @@ -4800,13 +5381,15 @@ snapshots: transitivePeerDependencies: - encoding - "@browserbasehq/stagehand@2.5.2(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(react@19.1.0)(zod@3.25.76)": + "@browserbasehq/stagehand@3.0.1(@opentelemetry/api@1.9.0)(bufferutil@4.0.9)(deepmerge@4.3.1)(dotenv@16.6.1)(zod@3.25.76)": dependencies: + "@ai-sdk/provider": 2.0.0 "@anthropic-ai/sdk": 0.39.0 "@browserbasehq/sdk": 2.6.0 "@google/genai": 1.24.0(@modelcontextprotocol/sdk@1.17.5)(bufferutil@4.0.9) + "@langchain/openai": 0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9)) "@modelcontextprotocol/sdk": 1.17.5 - ai: 4.3.19(react@19.1.0)(zod@3.25.76) + ai: 5.0.86(zod@3.25.76) deepmerge: 4.3.1 devtools-protocol: 0.0.1464554 dotenv: 16.6.1 @@ -4819,25 +5402,37 @@ snapshots: zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) optionalDependencies: - "@ai-sdk/anthropic": 1.2.12(zod@3.25.76) - "@ai-sdk/azure": 1.3.24(zod@3.25.76) - "@ai-sdk/cerebras": 0.2.16(zod@3.25.76) - "@ai-sdk/deepseek": 0.2.16(zod@3.25.76) - "@ai-sdk/google": 1.2.22(zod@3.25.76) - "@ai-sdk/groq": 1.2.9(zod@3.25.76) - "@ai-sdk/mistral": 1.2.8(zod@3.25.76) - "@ai-sdk/openai": 1.3.23(zod@3.25.76) - "@ai-sdk/perplexity": 1.1.9(zod@3.25.76) - "@ai-sdk/togetherai": 0.2.16(zod@3.25.76) - "@ai-sdk/xai": 1.2.18(zod@3.25.76) - ollama-ai-provider: 1.2.0(zod@3.25.76) + "@ai-sdk/anthropic": 2.0.40(zod@3.25.76) + "@ai-sdk/azure": 2.0.60(zod@3.25.76) + "@ai-sdk/cerebras": 1.0.28(zod@3.25.76) + "@ai-sdk/deepseek": 1.0.26(zod@3.25.76) + "@ai-sdk/google": 2.0.26(zod@3.25.76) + "@ai-sdk/groq": 2.0.27(zod@3.25.76) + "@ai-sdk/mistral": 2.0.22(zod@3.25.76) + "@ai-sdk/openai": 2.0.59(zod@3.25.76) + "@ai-sdk/perplexity": 2.0.16(zod@3.25.76) + "@ai-sdk/togetherai": 1.0.26(zod@3.25.76) + "@ai-sdk/xai": 2.0.30(zod@3.25.76) + "@langchain/core": 0.3.79(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + chrome-launcher: 1.2.1 + ollama-ai-provider-v2: 1.5.2(zod@3.25.76) + patchright-core: 1.56.1 + playwright-core: 1.54.1 + puppeteer-core: 22.15.0(bufferutil@4.0.9) transitivePeerDependencies: + - "@opentelemetry/api" + - "@opentelemetry/exporter-trace-otlp-proto" + - "@opentelemetry/sdk-trace-base" + - bare-abort-controller + - bare-buffer - bufferutil - encoding - - react + - react-native-b4a - supports-color - utf-8-validate + "@cfworker/json-schema@4.1.1": {} + "@changesets/apply-release-plan@7.0.12": dependencies: "@changesets/config": 3.1.1 @@ -4982,6 +5577,10 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 + "@composio/json-schema-to-zod@0.1.18(zod@3.25.76)": + dependencies: + zod: 3.25.76 + "@esbuild/aix-ppc64@0.25.6": optional: true @@ -5136,6 +5735,37 @@ snapshots: optionalDependencies: "@types/node": 18.19.119 + "@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76))": + dependencies: + "@cfworker/json-schema": 4.1.1 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.21 + langsmith: 0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - "@opentelemetry/api" + - "@opentelemetry/exporter-trace-otlp-proto" + - "@opentelemetry/sdk-trace-base" + - openai + + "@langchain/openai@0.4.9(@langchain/core@0.3.79(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)))(ws@8.18.3(bufferutil@4.0.9))": + dependencies: + "@langchain/core": 0.3.79(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)) + js-tiktoken: 1.0.21 + openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76) + zod: 3.25.76 + zod-to-json-schema: 3.24.6(zod@3.25.76) + transitivePeerDependencies: + - encoding + - ws + "@manypkg/find-root@1.1.0": dependencies: "@babel/runtime": 7.28.3 @@ -5261,6 +5891,23 @@ snapshots: "@opentelemetry/api@1.9.0": {} + "@puppeteer/browsers@2.3.0": + dependencies: + debug: 4.4.1 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.2 + tar-fs: 3.1.1 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + optional: true + "@smithery/cli@1.2.15(react@19.1.0)(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)": dependencies: "@modelcontextprotocol/sdk": 1.15.1 @@ -5313,6 +5960,11 @@ snapshots: - supports-color - ws + "@standard-schema/spec@1.0.0": {} + + "@tootallnate/quickjs-emscripten@0.23.0": + optional: true + "@types/diff-match-patch@1.0.36": {} "@types/estree@1.0.8": {} @@ -5330,8 +5982,15 @@ snapshots: dependencies: undici-types: 5.26.5 + "@types/retry@0.12.0": {} + "@types/uuid@10.0.0": {} + "@types/yauzl@2.10.3": + dependencies: + "@types/node": 18.19.119 + optional: true + "@typescript-eslint/eslint-plugin@8.37.0(@typescript-eslint/parser@8.37.0(eslint@9.31.0)(typescript@5.8.3))(eslint@9.31.0)(typescript@5.8.3)": dependencies: "@eslint-community/regexpp": 4.12.1 @@ -5425,6 +6084,8 @@ snapshots: "@typescript-eslint/types": 8.37.0 eslint-visitor-keys: 4.2.1 + "@vercel/oidc@3.0.3": {} + abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -5458,6 +6119,14 @@ snapshots: optionalDependencies: react: 19.1.0 + ai@5.0.86(zod@3.25.76): + dependencies: + "@ai-sdk/gateway": 2.0.5(zod@3.25.76) + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) + "@opentelemetry/api": 1.9.0 + zod: 3.25.76 + ajv@6.12.6: dependencies: fast-deep-equal: 3.1.3 @@ -5483,6 +6152,8 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} argparse@1.0.10: @@ -5550,6 +6221,11 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + optional: true + async-function@1.0.0: {} asynckit@0.4.0: {} @@ -5560,15 +6236,53 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 + b4a@1.7.3: + optional: true + balanced-match@1.0.2: {} - base64-js@1.5.1: {} + bare-events@2.8.1: + optional: true + + bare-fs@4.5.0: + dependencies: + bare-events: 2.8.1 + bare-path: 3.0.0 + bare-stream: 2.7.0(bare-events@2.8.1) + bare-url: 2.3.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true - basic-auth@0.0.1: {} + bare-os@3.6.2: + optional: true - basic-auth@2.0.1: + bare-path@3.0.0: dependencies: - safe-buffer: 5.1.2 + bare-os: 3.6.2 + optional: true + + bare-stream@2.7.0(bare-events@2.8.1): + dependencies: + streamx: 2.23.0 + optionalDependencies: + bare-events: 2.8.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.2: + dependencies: + bare-path: 3.0.0 + optional: true + + base64-js@1.5.1: {} + + basic-ftp@5.0.5: + optional: true better-path-resolve@1.0.0: dependencies: @@ -5582,10 +6296,6 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 - bluebird@2.11.0: {} - - bluebird@3.7.2: {} - body-parser@2.2.0: dependencies: bytes: 3.1.2 @@ -5613,6 +6323,9 @@ snapshots: dependencies: fill-range: 7.1.1 + buffer-crc32@0.2.13: + optional: true + buffer-equal-constant-time@1.0.1: {} buffer@5.7.1: @@ -5646,6 +6359,8 @@ snapshots: callsites@3.1.0: {} + camelcase@6.3.0: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -5657,6 +6372,24 @@ snapshots: chardet@2.1.0: {} + chrome-launcher@1.2.1: + dependencies: + "@types/node": 18.19.119 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 2.0.2 + transitivePeerDependencies: + - supports-color + optional: true + + chromium-bidi@0.6.3(devtools-protocol@0.0.1312386): + dependencies: + devtools-protocol: 0.0.1312386 + mitt: 3.0.1 + urlpattern-polyfill: 10.0.0 + zod: 3.23.8 + optional: true + ci-info@3.9.0: {} cli-cursor@3.1.0: @@ -5676,14 +6409,14 @@ snapshots: cli-width@3.0.0: {} - clone@1.0.4: {} - - co-bluebird@1.1.0: + cliui@8.0.1: dependencies: - bluebird: 2.11.0 - co-use: 1.1.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + optional: true - co-use@1.1.0: {} + clone@1.0.4: {} color-convert@2.0.1: dependencies: @@ -5703,6 +6436,10 @@ snapshots: concat-map@0.0.1: {} + console-table-printer@2.15.0: + dependencies: + simple-wcswidth: 1.1.2 + content-disposition@1.0.0: dependencies: safe-buffer: 5.2.1 @@ -5730,6 +6467,9 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + data-uri-to-buffer@6.0.2: + optional: true + data-view-buffer@1.0.2: dependencies: call-bound: 1.0.4 @@ -5754,6 +6494,8 @@ snapshots: dependencies: ms: 2.1.3 + decamelize@1.2.0: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -5774,6 +6516,13 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + optional: true + delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -5782,6 +6531,9 @@ snapshots: detect-indent@6.1.0: {} + devtools-protocol@0.0.1312386: + optional: true + devtools-protocol@0.0.1464554: {} diff-match-patch@1.0.5: {} @@ -5955,12 +6707,24 @@ snapshots: "@esbuild/win32-ia32": 0.25.6 "@esbuild/win32-x64": 0.25.6 + escalade@3.2.0: + optional: true + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} escape-string-regexp@4.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + optional: true + eslint-plugin-react@7.37.5(eslint@9.31.0): dependencies: array-includes: 3.1.9 @@ -6056,10 +6820,21 @@ snapshots: event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} + eventemitter3@5.0.1: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.1 + transitivePeerDependencies: + - bare-abort-controller + optional: true + eventsource-parser@3.0.3: {} + eventsource-parser@3.0.6: {} + eventsource@3.0.7: dependencies: eventsource-parser: 3.0.3 @@ -6122,10 +6897,24 @@ snapshots: iconv-lite: 0.4.24 tmp: 0.0.33 + extract-zip@2.0.1: + dependencies: + debug: 4.4.1 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + "@types/yauzl": 2.10.3 + transitivePeerDependencies: + - supports-color + optional: true + fast-copy@3.0.2: {} fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: + optional: true + fast-glob@3.3.3: dependencies: "@nodelib/fs.stat": 2.0.5 @@ -6146,6 +6935,11 @@ snapshots: dependencies: reusify: 1.1.0 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + optional: true + fetch-cookie@3.1.0: dependencies: set-cookie-parser: 2.7.1 @@ -6267,6 +7061,9 @@ snapshots: - encoding - supports-color + get-caller-file@2.0.5: + optional: true + get-east-asian-width@1.3.0: {} get-intrinsic@1.3.0: @@ -6287,6 +7084,11 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.3 + optional: true + get-stream@8.0.1: {} get-symbol-description@1.1.0: @@ -6299,6 +7101,15 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + optional: true + glob-parent@5.1.2: dependencies: is-glob: 4.0.3 @@ -6394,6 +7205,14 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + transitivePeerDependencies: + - supports-color + optional: true + https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.4 @@ -6474,6 +7293,9 @@ snapshots: interpret@1.4.0: {} + ip-address@10.0.1: + optional: true + ipaddr.js@1.9.1: {} is-array-buffer@3.0.5: @@ -6516,6 +7338,9 @@ snapshots: call-bound: 1.0.4 has-tostringtag: 1.0.2 + is-docker@2.2.1: + optional: true + is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: @@ -6537,8 +7362,6 @@ snapshots: has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 - is-generator@1.0.3: {} - is-glob@4.0.3: dependencies: is-extglob: 2.1.1 @@ -6615,6 +7438,11 @@ snapshots: is-windows@1.0.2: {} + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + optional: true + isarray@2.0.5: {} isexe@2.0.0: {} @@ -6630,6 +7458,10 @@ snapshots: joycon@3.1.1: {} + js-tiktoken@1.0.21: + dependencies: + base64-js: 1.5.1 + js-tokens@4.0.0: {} js-yaml@3.14.1: @@ -6685,11 +7517,32 @@ snapshots: dependencies: json-buffer: 3.0.1 + langsmith@0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76)): + dependencies: + "@types/uuid": 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.15.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.2 + uuid: 10.0.0 + optionalDependencies: + "@opentelemetry/api": 1.9.0 + openai: 4.104.0(ws@8.18.3(bufferutil@4.0.9))(zod@3.25.76) + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + lighthouse-logger@2.0.2: + dependencies: + debug: 4.4.1 + marky: 1.3.0 + transitivePeerDependencies: + - supports-color + optional: true + lilconfig@3.1.3: {} lint-staged@16.1.2: @@ -6728,8 +7581,6 @@ snapshots: lodash.startcase@4.4.0: {} - lodash@4.17.19: {} - lodash@4.17.21: {} log-symbols@4.1.0: @@ -6754,26 +7605,29 @@ snapshots: dependencies: js-tokens: 4.0.0 + lru-cache@7.18.3: + optional: true + + marky@1.3.0: + optional: true + math-intrinsics@1.1.0: {} - mcpvals@0.0.3(react@19.1.0): + mcpvals@0.4.0(react@19.1.0): dependencies: "@ai-sdk/anthropic": 1.2.12(zod@3.25.76) "@ai-sdk/openai": 1.3.23(zod@3.25.76) - "@modelcontextprotocol/sdk": 1.15.1 + "@composio/json-schema-to-zod": 0.1.18(zod@3.25.76) + "@modelcontextprotocol/sdk": 1.17.5 ai: 4.3.19(react@19.1.0)(zod@3.25.76) chalk: 5.4.1 commander: 11.1.0 execa: 8.0.1 - node-oauth2-server: 2.4.0 - oauth2-server: 3.1.1 zod: 3.25.76 transitivePeerDependencies: - react - supports-color - media-typer@0.3.0: {} - media-typer@1.1.0: {} merge-descriptors@2.0.0: {} @@ -6815,10 +7669,15 @@ snapshots: minimist@1.2.8: {} + mitt@3.0.1: + optional: true + mri@1.2.0: {} ms@2.1.3: {} + mustache@4.2.0: {} + mute-stream@0.0.8: {} nano-spawn@1.0.2: {} @@ -6829,6 +7688,9 @@ snapshots: negotiator@1.0.0: {} + netmask@2.0.2: + optional: true + node-domexception@1.0.0: {} node-fetch@2.7.0: @@ -6838,23 +7700,10 @@ snapshots: node-gyp-build@4.8.4: optional: true - node-oauth2-server@2.4.0: - dependencies: - basic-auth: 0.0.1 - npm-run-path@5.3.0: dependencies: path-key: 4.0.0 - oauth2-server@3.1.1: - dependencies: - basic-auth: 2.0.1 - bluebird: 3.7.2 - lodash: 4.17.19 - promisify-any: 2.0.1 - statuses: 1.5.0 - type-is: 1.6.18 - object-assign@4.1.1: {} object-inspect@1.13.4: {} @@ -6893,12 +7742,10 @@ snapshots: okay-error@1.0.3: {} - ollama-ai-provider@1.2.0(zod@3.25.76): + ollama-ai-provider-v2@1.5.2(zod@3.25.76): dependencies: - "@ai-sdk/provider": 1.1.3 - "@ai-sdk/provider-utils": 2.2.8(zod@3.25.76) - partial-json: 0.1.7 - optionalDependencies: + "@ai-sdk/provider": 2.0.0 + "@ai-sdk/provider-utils": 3.0.15(zod@3.25.76) zod: 3.25.76 optional: true @@ -6986,6 +7833,8 @@ snapshots: dependencies: p-map: 2.1.0 + p-finally@1.0.0: {} + p-limit@2.3.0: dependencies: p-try: 2.2.0 @@ -7004,8 +7853,42 @@ snapshots: p-map@2.1.0: {} + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + "@types/retry": 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + p-try@2.2.0: {} + pac-proxy-agent@7.2.0: + dependencies: + "@tootallnate/quickjs-emscripten": 0.23.0 + agent-base: 7.1.4 + debug: 4.4.1 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + optional: true + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + optional: true + package-manager-detector@0.2.11: dependencies: quansync: 0.2.11 @@ -7016,7 +7899,7 @@ snapshots: parseurl@1.3.3: {} - partial-json@0.1.7: + patchright-core@1.56.1: optional: true path-exists@4.0.0: {} @@ -7033,6 +7916,9 @@ snapshots: path-type@4.0.0: {} + pend@1.2.0: + optional: true + picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -7097,11 +7983,8 @@ snapshots: process-warning@5.0.0: {} - promisify-any@2.0.1: - dependencies: - bluebird: 2.11.0 - co-bluebird: 1.1.0 - is-generator: 1.0.3 + progress@2.0.3: + optional: true prop-types@15.8.1: dependencies: @@ -7114,6 +7997,23 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + optional: true + + proxy-from-env@1.1.0: + optional: true + pump@3.0.3: dependencies: end-of-stream: 1.4.5 @@ -7121,6 +8021,22 @@ snapshots: punycode@2.3.1: {} + puppeteer-core@22.15.0(bufferutil@4.0.9): + dependencies: + "@puppeteer/browsers": 2.3.0 + chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) + debug: 4.4.1 + devtools-protocol: 0.0.1312386 + ws: 8.18.3(bufferutil@4.0.9) + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - bufferutil + - react-native-b4a + - supports-color + - utf-8-validate + optional: true + qs@6.14.0: dependencies: side-channel: 1.1.0 @@ -7183,6 +8099,9 @@ snapshots: gopd: 1.2.0 set-function-name: 2.0.2 + require-directory@2.1.1: + optional: true + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -7211,6 +8130,8 @@ snapshots: onetime: 7.0.0 signal-exit: 4.1.0 + retry@0.13.1: {} + reusify@1.1.0: {} rfdc@1.4.1: {} @@ -7243,8 +8164,6 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 - safe-buffer@5.1.2: {} - safe-buffer@5.2.1: {} safe-push-apply@1.0.0: @@ -7368,6 +8287,8 @@ snapshots: signal-exit@4.1.0: {} + simple-wcswidth@1.1.2: {} + slash@3.0.0: {} slice-ansi@5.0.0: @@ -7380,10 +8301,31 @@ snapshots: ansi-styles: 6.2.1 is-fullwidth-code-point: 5.0.0 + smart-buffer@4.2.0: + optional: true + + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.1 + socks: 2.8.7 + transitivePeerDependencies: + - supports-color + optional: true + + socks@2.8.7: + dependencies: + ip-address: 10.0.1 + smart-buffer: 4.2.0 + optional: true + sonic-boom@4.2.0: dependencies: atomic-sleep: 1.0.0 + source-map@0.6.1: + optional: true + spawndamnit@3.0.1: dependencies: cross-spawn: 7.0.6 @@ -7393,8 +8335,6 @@ snapshots: sprintf-js@1.0.3: {} - statuses@1.5.0: {} - statuses@2.0.1: {} statuses@2.0.2: {} @@ -7406,6 +8346,16 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + streamx@2.23.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + string-argv@0.3.2: {} string-width@4.2.3: @@ -7494,8 +8444,38 @@ snapshots: react: 19.1.0 use-sync-external-store: 1.5.0(react@19.1.0) + tar-fs@3.1.1: + dependencies: + pump: 3.0.3 + tar-stream: 3.1.7 + optionalDependencies: + bare-fs: 4.5.0 + bare-path: 3.0.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + optional: true + + tar-stream@3.1.7: + dependencies: + b4a: 1.7.3 + fast-fifo: 1.3.2 + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + term-size@2.2.1: {} + text-decoder@1.2.3: + dependencies: + b4a: 1.7.3 + transitivePeerDependencies: + - react-native-b4a + optional: true + thread-stream@3.1.0: dependencies: real-require: 0.2.0 @@ -7545,11 +8525,6 @@ snapshots: type-fest@0.21.3: {} - type-is@1.6.18: - dependencies: - media-typer: 0.3.0 - mime-types: 2.1.35 - type-is@2.0.1: dependencies: content-type: 1.0.5 @@ -7609,6 +8584,12 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + optional: true + undici-types@5.26.5: {} universalify@0.1.2: {} @@ -7619,12 +8600,17 @@ snapshots: dependencies: punycode: 2.3.1 + urlpattern-polyfill@10.0.0: + optional: true + use-sync-external-store@1.5.0(react@19.1.0): dependencies: react: 19.1.0 util-deprecate@1.0.2: {} + uuid@10.0.0: {} + uuid@11.1.0: {} uuid@9.0.1: {} @@ -7699,6 +8685,13 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + optional: true + wrap-ansi@9.0.0: dependencies: ansi-styles: 6.2.1 @@ -7711,12 +8704,38 @@ snapshots: optionalDependencies: bufferutil: 4.0.9 + y18n@5.0.8: + optional: true + yaml@2.8.0: {} + yargs-parser@21.1.1: + optional: true + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + optional: true + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + optional: true + yocto-queue@0.1.0: {} zod-to-json-schema@3.24.6(zod@3.25.76): dependencies: zod: 3.25.76 + zod@3.23.8: + optional: true + zod@3.25.76: {} diff --git a/smithery.config.js b/smithery.config.js deleted file mode 100644 index c082c3c..0000000 --- a/smithery.config.js +++ /dev/null @@ -1,10 +0,0 @@ -/** - * @type {import('esbuild').BuildOptions} - */ -export default { - esbuild: { - // Mark playwright-core as external to prevent bundling - // This avoids the relative path resolution issue in Docker - external: ["playwright-core"], - }, -}; diff --git a/src/config.ts b/src/config.ts index 3ceb662..07c7d5a 100644 --- a/src/config.ts +++ b/src/config.ts @@ -1,7 +1,4 @@ -import type { Cookie } from "playwright-core"; import type { Config } from "../config.d.ts"; -import { z } from "zod"; -import { AvailableModelSchema } from "@browserbasehq/stagehand"; export type ToolCapability = "core" | string; @@ -13,10 +10,9 @@ export type CLIOptions = { persist?: boolean; port?: number; host?: string; - cookies?: Cookie[]; browserWidth?: number; browserHeight?: number; - modelName?: z.infer; + modelName?: string; modelApiKey?: string; keepAlive?: boolean; experimental?: boolean; @@ -35,7 +31,6 @@ const defaultConfig: Config = { browserWidth: 1024, browserHeight: 768, }, - cookies: undefined, modelName: "gemini-2.0-flash", // Default Model }; @@ -98,7 +93,6 @@ export async function configFromCLIOptions( browserHeight: cliOptions.browserHeight, }, advancedStealth: cliOptions.advancedStealth, - cookies: cliOptions.cookies, modelName: cliOptions.modelName, modelApiKey: cliOptions.modelApiKey, keepAlive: cliOptions.keepAlive, diff --git a/src/context.ts b/src/context.ts index 9fe3daa..00a27e5 100644 --- a/src/context.ts +++ b/src/context.ts @@ -4,7 +4,7 @@ import type { Config } from "../config.d.ts"; import { CallToolResult } from "@modelcontextprotocol/sdk/types.js"; import { listResources, readResource } from "./mcp/resources.js"; import { SessionManager } from "./sessionManager.js"; -import type { MCPTool, BrowserSession } from "./types/types.js"; +import type { MCPTool } from "./types/types.js"; /** * MCP Server Context @@ -54,33 +54,6 @@ export class Context { return session.stagehand; } - public async getActivePage(): Promise { - // Get page from session manager - const session = await this.sessionManager.getSession( - this.currentSessionId, - this.config, - ); - if (session && session.page && !session.page.isClosed()) { - return session.page; - } - - return null; - } - - public async getActiveBrowser( - createIfMissing: boolean = true, - ): Promise { - const session = await this.sessionManager.getSession( - this.currentSessionId, - this.config, - createIfMissing, - ); - if (!session || !session.browser || !session.browser.isConnected()) { - return null; - } - return session.browser; - } - async run(tool: MCPTool, args: unknown): Promise { try { console.error( diff --git a/src/index.ts b/src/index.ts index b59473b..f77c6a4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -10,7 +10,6 @@ import type { MCPToolsArray } from "./types/types.js"; import { Context } from "./context.js"; import type { Config } from "../config.d.ts"; import { TOOLS } from "./tools/index.js"; -import { AvailableModelSchema } from "@browserbasehq/stagehand"; import { RESOURCE_TEMPLATES } from "./mcp/resources.js"; import { @@ -19,17 +18,6 @@ import { ListResourceTemplatesRequestSchema, } from "@modelcontextprotocol/sdk/types.js"; -const cookieSchema = z.object({ - name: z.string(), - value: z.string(), - domain: z.string(), - path: z.string().optional(), - expires: z.number().optional(), - httpOnly: z.boolean().optional(), - secure: z.boolean().optional(), - sameSite: z.enum(["Strict", "Lax", "None"]).optional(), -}); - // Configuration schema for Smithery - matches existing Config interface export const configSchema = z .object({ @@ -75,10 +63,6 @@ export const configSchema = z .describe("The height of the browser"), }) .optional(), - cookies: z - .array(cookieSchema) - .optional() - .describe("Cookies to inject into the Browserbase context"), server: z .object({ port: z @@ -93,9 +77,10 @@ export const configSchema = z ), }) .optional(), - modelName: AvailableModelSchema.optional().describe( - "The model to use for Stagehand (default: gemini-2.0-flash)", - ), // Already an existing Zod Enum + modelName: z + .string() + .optional() + .describe("The model to use for Stagehand (default: gemini-2.0-flash)"), modelApiKey: z .string() .optional() @@ -111,7 +96,11 @@ export const configSchema = z (data) => { // If a non-default model is explicitly specified, API key is required if (data.modelName && data.modelName !== "gemini-2.0-flash") { - return data.modelApiKey !== undefined && data.modelApiKey.length > 0; + return ( + data.modelApiKey !== undefined && + typeof data.modelApiKey === "string" && + data.modelApiKey.length > 0 + ); } return true; }, @@ -132,7 +121,7 @@ export default function ({ config }: { config: z.infer }) { const server = new McpServer({ name: "Browserbase MCP Server", - version: "2.2.0", + version: "2.3.0", description: "Cloud browser automation server powered by Browserbase and Stagehand. Enables LLMs to navigate websites, interact with elements, extract data, and capture screenshots using natural language commands.", capabilities: { @@ -140,6 +129,7 @@ export default function ({ config }: { config: z.infer }) { subscribe: true, listChanged: true, }, + tools: {}, }, }); diff --git a/src/program.ts b/src/program.ts index 09a25b9..430f6d5 100644 --- a/src/program.ts +++ b/src/program.ts @@ -50,10 +50,6 @@ program "--host ", "Host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.", ) - .option( - "--cookies [json]", - 'JSON array of cookies to inject into the browser. Format: [{"name":"cookie1","value":"val1","domain":"example.com"}, ...]', - ) .option("--browserWidth ", "Browser width to use for the browser.") .option("--browserHeight ", "Browser height to use for the browser.") .option( diff --git a/src/sessionManager.ts b/src/sessionManager.ts index 65aead7..e6aacc9 100644 --- a/src/sessionManager.ts +++ b/src/sessionManager.ts @@ -1,6 +1,5 @@ -import { BrowserContext, Stagehand } from "@browserbasehq/stagehand"; +import { Stagehand } from "@browserbasehq/stagehand"; import type { Config } from "../config.d.ts"; -import type { Cookie } from "playwright-core"; import { clearScreenshotsForSession } from "./mcp/resources.js"; import type { BrowserSession, CreateSessionParams } from "./types/types.js"; import { randomUUID } from "crypto"; @@ -22,17 +21,22 @@ export const createStagehandInstance = async ( throw new Error("Browserbase API Key and Project ID are required"); } + const modelName = params.modelName || config.modelName || "gemini-2.0-flash"; + const modelApiKey = + config.modelApiKey || + process.env.GEMINI_API_KEY || + process.env.GOOGLE_API_KEY; + const stagehand = new Stagehand({ env: "BROWSERBASE", apiKey, projectId, - modelName: params.modelName || config.modelName || "gemini-2.0-flash", - modelClientOptions: { - apiKey: - config.modelApiKey || - process.env.GEMINI_API_KEY || - process.env.GOOGLE_API_KEY, - }, + model: modelApiKey + ? { + apiKey: modelApiKey, + modelName: modelName, + } + : modelName, ...(params.browserbaseSessionID && { browserbaseSessionID: params.browserbaseSessionID, }), @@ -127,38 +131,6 @@ export class SessionManager { return this.activeSessionId; } - /** - * Adds cookies to a browser context - * @param context Playwright browser context - * @param cookies Array of cookies to add - */ - async addCookiesToContext( - context: BrowserContext, - cookies: Cookie[], - ): Promise { - if (!cookies || cookies.length === 0) { - return; - } - - try { - process.stderr.write( - `[SessionManager] Adding ${cookies.length} cookies to browser context\n`, - ); - - // Injecting cookies into the Browser Context - await context.addCookies(cookies); - process.stderr.write( - `[SessionManager] Successfully added cookies to browser context\n`, - ); - } catch (error) { - process.stderr.write( - `[SessionManager] Error adding cookies to browser context: ${ - error instanceof Error ? error.message : String(error) - }\n`, - ); - } - } - /** * Creates a new Browserbase session using Stagehand. * @param newSessionId - Internal session ID for tracking in SessionManager @@ -193,15 +165,12 @@ export class SessionManager { newSessionId, ); - // Get the page and browser from Stagehand - const page = stagehand.page; - const browser = page.context().browser(); - - if (!browser) { - throw new Error("Failed to get browser from Stagehand page context"); + const page = stagehand.context.pages()[0]; + if (!page) { + throw new Error("No pages available in Stagehand context"); } - const browserbaseSessionId = stagehand.browserbaseSessionID; + const browserbaseSessionId = stagehand.browserbaseSessionId; if (!browserbaseSessionId) { throw new Error( @@ -216,63 +185,7 @@ export class SessionManager { `[SessionManager] Browserbase Live Debugger URL: https://www.browserbase.com/sessions/${browserbaseSessionId}\n`, ); - // Set up disconnect handler - browser.on("disconnected", () => { - process.stderr.write( - `[SessionManager] Disconnected: ${newSessionId}\n`, - ); - this.browsers.delete(newSessionId); - if ( - this.defaultBrowserSession && - this.defaultBrowserSession.browser === browser - ) { - process.stderr.write( - `[SessionManager] Disconnected (default): ${newSessionId}\n`, - ); - this.defaultBrowserSession = null; - // Reset active session to default ID since default session needs recreation - this.setActiveSessionId(this.defaultSessionId); - } - if ( - this.activeSessionId === newSessionId && - newSessionId !== this.defaultSessionId - ) { - process.stderr.write( - `[SessionManager] WARN - Active session disconnected, resetting to default: ${newSessionId}\n`, - ); - this.setActiveSessionId(this.defaultSessionId); - } - - // Purge any screenshots associated with both internal and Browserbase IDs - try { - clearScreenshotsForSession(newSessionId); - const bbId = browserbaseSessionId; - if (bbId) { - clearScreenshotsForSession(bbId); - } - } catch (err) { - process.stderr.write( - `[SessionManager] WARN - Failed to clear screenshots on disconnect for ${newSessionId}: ${ - err instanceof Error ? err.message : String(err) - }\n`, - ); - } - }); - - // Add cookies to the context if they are provided in the config - if ( - config.cookies && - Array.isArray(config.cookies) && - config.cookies.length > 0 - ) { - await this.addCookiesToContext( - page.context() as BrowserContext, - config.cookies, - ); - } - const sessionObj: BrowserSession = { - browser, page, sessionId: browserbaseSessionId, stagehand, @@ -330,13 +243,9 @@ export class SessionManager { process.stderr.write( `[SessionManager] Successfully closed Stagehand and browser for session: ${sessionIdToLog}\n`, ); - // After close, purge any screenshots associated with both internal and Browserbase IDs + // After close, purge any screenshots associated with this session try { clearScreenshotsForSession(sessionIdToLog); - const bbId = session?.stagehand?.browserbaseSessionID; - if (bbId) { - clearScreenshotsForSession(bbId); - } } catch (err) { process.stderr.write( `[SessionManager] WARN - Failed to clear screenshots after close for ${sessionIdToLog}: ${ @@ -379,17 +288,25 @@ export class SessionManager { process.stderr.write( `[SessionManager] Default session ${sessionId} not found, creating.\n`, ); - } else if ( - !this.defaultBrowserSession.browser.isConnected() || - this.defaultBrowserSession.page.isClosed() - ) { - needsReCreation = true; - process.stderr.write( - `[SessionManager] Default session ${sessionId} is stale, recreating.\n`, - ); - await this.closeBrowserGracefully(this.defaultBrowserSession, sessionId); - this.defaultBrowserSession = null; - this.browsers.delete(sessionId); + } else { + try { + // Try a simple operation to validate the session is alive + const pages = this.defaultBrowserSession.stagehand.context.pages(); + if (!pages || pages.length === 0) { + throw new Error("No pages available"); + } + } catch { + needsReCreation = true; + process.stderr.write( + `[SessionManager] Default session ${sessionId} is stale, recreating.\n`, + ); + await this.closeBrowserGracefully( + this.defaultBrowserSession, + sessionId, + ); + this.defaultBrowserSession = null; + this.browsers.delete(sessionId); + } } if (needsReCreation) { @@ -474,8 +391,12 @@ export class SessionManager { return null; } - // Validate the found session - if (!sessionObj.browser.isConnected() || sessionObj.page.isClosed()) { + try { + const pages = sessionObj.stagehand.context.pages(); + if (!pages || pages.length === 0) { + throw new Error("No pages available"); + } + } catch { process.stderr.write( `[SessionManager] WARN - Found session ${sessionId} is stale, removing.\n`, ); @@ -518,17 +439,6 @@ export class SessionManager { // Remove from browsers map this.browsers.delete(sessionId); - // Always purge screenshots for this (internal) session id - try { - clearScreenshotsForSession(sessionId); - } catch (err) { - process.stderr.write( - `[SessionManager] WARN - Failed to clear screenshots during cleanup for ${sessionId}: ${ - err instanceof Error ? err.message : String(err) - }\n`, - ); - } - // Clear default session reference if this was the default if (sessionId === this.defaultSessionId && this.defaultBrowserSession) { this.defaultBrowserSession = null; diff --git a/src/tools/act.ts b/src/tools/act.ts index 3957708..d395a66 100644 --- a/src/tools/act.ts +++ b/src/tools/act.ts @@ -41,8 +41,7 @@ async function handleAct( try { const stagehand = await context.getStagehand(); - await stagehand.page.act({ - action: params.action, + await stagehand.act(params.action, { variables: params.variables, }); diff --git a/src/tools/extract.ts b/src/tools/extract.ts index ffd649d..7bfb56b 100644 --- a/src/tools/extract.ts +++ b/src/tools/extract.ts @@ -36,7 +36,8 @@ async function handleExtract( const action = async (): Promise => { try { const stagehand = await context.getStagehand(); - const extraction = await stagehand.page.extract(params.instruction); + + const extraction = await stagehand.extract(params.instruction); return { content: [ diff --git a/src/tools/navigate.ts b/src/tools/navigate.ts index 5992994..c6309a0 100644 --- a/src/tools/navigate.ts +++ b/src/tools/navigate.ts @@ -23,14 +23,16 @@ async function handleNavigate( const action = async (): Promise => { try { const stagehand = await context.getStagehand(); - const page = await context.getActivePage(); + + const pages = stagehand.context.pages(); + const page = pages[0]; if (!page) { throw new Error("No active page available"); } await page.goto(params.url, { waitUntil: "domcontentloaded" }); - const sessionId = stagehand.browserbaseSessionID; + const sessionId = stagehand.browserbaseSessionId; if (!sessionId) { throw new Error("No Browserbase session ID available"); } diff --git a/src/tools/observe.ts b/src/tools/observe.ts index 583b21f..b473300 100644 --- a/src/tools/observe.ts +++ b/src/tools/observe.ts @@ -22,13 +22,6 @@ const ObserveInputSchema = z.object({ you want to observe. This tool is designed to help you identify interactive elements that you can later use with the act tool for performing actions like clicking, typing, or form submission.`, ), - returnAction: z - .boolean() - .optional() - .describe( - `Whether to return the action to perform on the element. If true, the action will be returned as a string. - If false, the action will not be returned.`, - ), }); type ObserveInput = z.infer; @@ -47,10 +40,7 @@ async function handleObserve( try { const stagehand = await context.getStagehand(); - const observations = await stagehand.page.observe({ - instruction: params.instruction, - returnAction: params.returnAction, - }); + const observations = await stagehand.observe(params.instruction); return { content: [ diff --git a/src/tools/screenshot.ts b/src/tools/screenshot.ts index 69e06e4..5a96bf9 100644 --- a/src/tools/screenshot.ts +++ b/src/tools/screenshot.ts @@ -6,7 +6,6 @@ import { registerScreenshot } from "../mcp/resources.js"; /** * Screenshot - * Docs: https://playwright.dev/docs/screenshots * * This tool is used to take a screenshot of the current page. */ @@ -29,7 +28,9 @@ async function handleScreenshot( ): Promise { const action = async (): Promise => { try { - const page = await context.getActivePage(); + const stagehand = await context.getStagehand(); + const page = stagehand.context.pages()[0]; + if (!page) { throw new Error("No active page available"); } diff --git a/src/tools/session.ts b/src/tools/session.ts index a3f9c2a..aa2406a 100644 --- a/src/tools/session.ts +++ b/src/tools/session.ts @@ -65,7 +65,6 @@ async function handleCreateSession( if ( !session || - !session.browser || !session.page || !session.sessionId || !session.stagehand @@ -81,7 +80,7 @@ async function handleCreateSession( apiKey: config.browserbaseApiKey, }); - const browserbaseSessionId = session.stagehand.browserbaseSessionID; + const browserbaseSessionId = session.stagehand.browserbaseSessionId; if (!browserbaseSessionId) { throw new Error( "Browserbase session ID not found in Stagehand instance", diff --git a/src/tools/url.ts b/src/tools/url.ts index 84988bb..da7e124 100644 --- a/src/tools/url.ts +++ b/src/tools/url.ts @@ -29,8 +29,13 @@ async function handleGetUrl( try { const stagehand = await context.getStagehand(); - // Get the current URL from the Playwright page - const currentUrl = stagehand.page.url(); + const page = stagehand.context.pages()[0]; + + if (!page) { + throw new Error("No active page available"); + } + + const currentUrl = page.url(); return { content: [ diff --git a/src/types/types.ts b/src/types/types.ts index b516c99..f09c9a7 100644 --- a/src/types/types.ts +++ b/src/types/types.ts @@ -1,4 +1,4 @@ -import type { Stagehand, Browser, Page } from "@browserbasehq/stagehand"; +import type { Stagehand } from "@browserbasehq/stagehand"; import { ImageContent, TextContent } from "@modelcontextprotocol/sdk/types.js"; import { Tool } from "../tools/tool.js"; import { InputType } from "../tools/tool.js"; @@ -6,8 +6,7 @@ import { InputType } from "../tools/tool.js"; export type StagehandSession = { id: string; // MCP-side ID stagehand: Stagehand; // owns the Browserbase session - page: Page; - browser: Browser; + page: any; // TODO: replace with Stagehand v3 Page created: number; metadata?: Record; // optional extras (proxy, contextId, bbSessionId) }; @@ -23,8 +22,7 @@ export type CreateSessionParams = { }; export type BrowserSession = { - browser: Browser; - page: Page; + page: any; // TODO: replace with Stagehand v3 Page sessionId: string; stagehand: Stagehand; };