From b8acbcf198f63b77a8528732d8c565d38d34d8c6 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:05:49 -0400 Subject: [PATCH 01/20] img diff algo for screenshots --- evals/utils/ScreenshotCollector.ts | 113 +++++++++++++++++++++++++++-- 1 file changed, 106 insertions(+), 7 deletions(-) diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index dcfc69c8c..200dd1c51 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -15,6 +15,9 @@ export class ScreenshotCollector { private intervalId?: NodeJS.Timeout; private navigationListeners: Array<() => void> = []; private isCapturing: boolean = false; + private lastScreenshot?: Buffer; + private ssimThreshold: number = 0.92; + private mseThreshold: number = 100; constructor(page: Page, options: ScreenshotCollectorOptions = {}) { this.page = page; @@ -72,15 +75,44 @@ export class ScreenshotCollector { try { const screenshot = await this.page.screenshot(); - this.screenshots.push(screenshot); - - if (this.screenshots.length > this.maxScreenshots) { - this.screenshots.shift(); + + // Check if we should keep this screenshot based on image diff + let shouldKeep = true; + if (this.lastScreenshot && trigger !== 'initial' && trigger !== 'final') { + try { + // First do a quick MSE check + const mse = await this.calculateMSE(this.lastScreenshot, screenshot); + if (mse < this.mseThreshold) { + // Very similar, skip + shouldKeep = false; + } else { + // Significant difference detected, verify with SSIM + const ssim = await this.calculateSSIM(this.lastScreenshot, screenshot); + shouldKeep = ssim < this.ssimThreshold; + } + } catch (error) { + // If comparison fails, keep the screenshot + console.error('Image comparison failed:', error); + shouldKeep = true; + } } - console.log( - `Screenshot captured (trigger: ${trigger}), total: ${this.screenshots.length}`, - ); + if (shouldKeep) { + this.screenshots.push(screenshot); + this.lastScreenshot = screenshot; + + if (this.screenshots.length > this.maxScreenshots) { + this.screenshots.shift(); + } + + console.log( + `Screenshot captured (trigger: ${trigger}), total: ${this.screenshots.length}`, + ); + } else { + console.log( + `Screenshot skipped (trigger: ${trigger}), too similar to previous`, + ); + } } catch (error) { console.error(`Failed to capture screenshot (${trigger}):`, error); } finally { @@ -98,5 +130,72 @@ export class ScreenshotCollector { clear(): void { this.screenshots = []; + this.lastScreenshot = undefined; + } + + private async calculateMSE(img1: Buffer, img2: Buffer): Promise { + try { + const sharp = require('sharp'); + + // Resize images for faster comparison + const size = { width: 400, height: 300 }; + const data1 = await sharp(img1).resize(size).raw().toBuffer(); + const data2 = await sharp(img2).resize(size).raw().toBuffer(); + + if (data1.length !== data2.length) return Number.MAX_SAFE_INTEGER; + + let sum = 0; + for (let i = 0; i < data1.length; i++) { + const diff = data1[i] - data2[i]; + sum += diff * diff; + } + + return sum / data1.length; + } catch (error) { + // If sharp is not available, assume images are different + return Number.MAX_SAFE_INTEGER; + } + } + + private async calculateSSIM(img1: Buffer, img2: Buffer): Promise { + try { + const sharp = require('sharp'); + + // Resize and convert to grayscale for SSIM calculation + const size = { width: 400, height: 300 }; + const gray1 = await sharp(img1).resize(size).grayscale().raw().toBuffer(); + const gray2 = await sharp(img2).resize(size).grayscale().raw().toBuffer(); + + if (gray1.length !== gray2.length) return 0; + + // Simplified SSIM calculation + const c1 = 0.01 * 0.01; + const c2 = 0.03 * 0.03; + + let sum1 = 0, sum2 = 0, sum1_sq = 0, sum2_sq = 0, sum12 = 0; + const N = gray1.length; + + for (let i = 0; i < N; i++) { + sum1 += gray1[i]; + sum2 += gray2[i]; + sum1_sq += gray1[i] * gray1[i]; + sum2_sq += gray2[i] * gray2[i]; + sum12 += gray1[i] * gray2[i]; + } + + const mean1 = sum1 / N; + const mean2 = sum2 / N; + const var1 = (sum1_sq / N) - (mean1 * mean1); + const var2 = (sum2_sq / N) - (mean2 * mean2); + const cov12 = (sum12 / N) - (mean1 * mean2); + + const numerator = (2 * mean1 * mean2 + c1) * (2 * cov12 + c2); + const denominator = (mean1 * mean1 + mean2 * mean2 + c1) * (var1 + var2 + c2); + + return numerator / denominator; + } catch (error) { + // If sharp is not available, assume images are different + return 0; + } } } From 28d9f656e5143ce7ffc07d530bde43e83fba1f90 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:20:24 -0400 Subject: [PATCH 02/20] intercept agent ss instead of time based trigger --- evals/package.json | 3 +- evals/tasks/agent/webvoyager.ts | 12 ++-- evals/utils/ScreenshotCollector.ts | 105 +++++++++++++++++++++++++---- 3 files changed, 99 insertions(+), 21 deletions(-) diff --git a/evals/package.json b/evals/package.json index af581ee89..e205136ea 100644 --- a/evals/package.json +++ b/evals/package.json @@ -12,7 +12,8 @@ "e2e:local": "pnpm run build && playwright test --config deterministic/local.playwright.config.ts" }, "dependencies": { - "@browserbasehq/stagehand": "workspace:*" + "@browserbasehq/stagehand": "workspace:*", + "sharp": "^0.33.5" }, "devDependencies": { "tsx": "^4.10.5" diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index 76f6b357e..d2b99a64a 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -30,18 +30,18 @@ export const webvoyager: EvalFunction = async ({ await stagehand.page.goto(params.web); + // Start collecting screenshots using screenshot interception + const screenshotCollector = new ScreenshotCollector(stagehand.page, { + maxScreenshots: 10, // Keep last 10 screenshots + interceptScreenshots: true, // ENABLE screenshot interception + }); + const agent = stagehand.agent({ model: modelName, provider: modelName.startsWith("claude") ? "anthropic" : "openai", instructions: `You are a helpful assistant that must solve the task by browsing. At the end, produce a single line: "Final Answer: " summarizing the requested result (e.g., score, list, or text). Current page: ${await stagehand.page.title()}`, }); - // Start collecting screenshots in parallel - const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 10, // Keep last 10 screenshots - captureOnNavigation: true, // Also capture on page navigation - }); - screenshotCollector.start(); const agentResult = await agent.execute({ diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index 200dd1c51..1cfb24846 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -4,6 +4,7 @@ export interface ScreenshotCollectorOptions { interval?: number; maxScreenshots?: number; captureOnNavigation?: boolean; + interceptScreenshots?: boolean; } export class ScreenshotCollector { @@ -17,13 +18,16 @@ export class ScreenshotCollector { private isCapturing: boolean = false; private lastScreenshot?: Buffer; private ssimThreshold: number = 0.92; - private mseThreshold: number = 100; + private mseThreshold: number = 50; + private originalScreenshot?: any; + private interceptScreenshots: boolean; constructor(page: Page, options: ScreenshotCollectorOptions = {}) { this.page = page; this.interval = options.interval || 5000; this.maxScreenshots = options.maxScreenshots || 10; this.captureOnNavigation = options.captureOnNavigation ?? true; + this.interceptScreenshots = options.interceptScreenshots ?? false; } start(): void { @@ -31,22 +35,28 @@ export class ScreenshotCollector { return; } - this.intervalId = setInterval(async () => { - await this.captureScreenshot("interval"); - }, this.interval); + // Setup screenshot interception if enabled + if (this.interceptScreenshots) { + this.setupScreenshotInterception(); + } else { + // Original time-based approach + this.intervalId = setInterval(async () => { + await this.captureScreenshot("interval"); + }, this.interval); - if (this.captureOnNavigation) { - const loadListener = () => this.captureScreenshot("load"); - const domContentListener = () => - this.captureScreenshot("domcontentloaded"); + if (this.captureOnNavigation) { + const loadListener = () => this.captureScreenshot("load"); + const domContentListener = () => + this.captureScreenshot("domcontentloaded"); - this.page.on("load", loadListener); - this.page.on("domcontentloaded", domContentListener); + this.page.on("load", loadListener); + this.page.on("domcontentloaded", domContentListener); - this.navigationListeners = [ - () => this.page.off("load", loadListener), - () => this.page.off("domcontentloaded", domContentListener), - ]; + this.navigationListeners = [ + () => this.page.off("load", loadListener), + () => this.page.off("domcontentloaded", domContentListener), + ]; + } } this.captureScreenshot("initial"); @@ -58,6 +68,12 @@ export class ScreenshotCollector { this.intervalId = undefined; } + // Restore original screenshot method if we intercepted it + if (this.originalScreenshot && this.interceptScreenshots) { + this.page.screenshot = this.originalScreenshot; + this.originalScreenshot = undefined; + } + this.navigationListeners.forEach((removeListener) => removeListener()); this.navigationListeners = []; @@ -133,6 +149,67 @@ export class ScreenshotCollector { this.lastScreenshot = undefined; } + + private setupScreenshotInterception(): void { + // Store the original screenshot method + this.originalScreenshot = this.page.screenshot.bind(this.page); + let lastCallTime = 0; + + // Override the screenshot method + this.page.screenshot = async (options?: any) => { + const screenshot = await this.originalScreenshot(options); + + // If called within 3 seconds of previous call, likely from agent + const now = Date.now(); + if (now - lastCallTime < 3000) { + this.onAgentScreenshot(screenshot); + } + lastCallTime = now; + + return screenshot; + }; + } + + private async onAgentScreenshot(screenshot: Buffer): Promise { + // Apply MSE/SSIM logic to decide if we should keep this screenshot + let shouldKeep = true; + if (this.lastScreenshot) { + try { + // First do a quick MSE check + const mse = await this.calculateMSE(this.lastScreenshot, screenshot); + if (mse < this.mseThreshold) { + // Very similar, skip + shouldKeep = false; + } else { + // Significant difference detected, verify with SSIM + const ssim = await this.calculateSSIM(this.lastScreenshot, screenshot); + shouldKeep = ssim < this.ssimThreshold; + } + } catch (error) { + // If comparison fails, keep the screenshot + console.error('Image comparison failed:', error); + shouldKeep = true; + } + } + + if (shouldKeep) { + this.screenshots.push(screenshot); + this.lastScreenshot = screenshot; + + if (this.screenshots.length > this.maxScreenshots) { + this.screenshots.shift(); + } + + console.log( + `Agent screenshot captured, total: ${this.screenshots.length}`, + ); + } else { + console.log( + `Agent screenshot skipped, too similar to previous`, + ); + } + } + private async calculateMSE(img1: Buffer, img2: Buffer): Promise { try { const sharp = require('sharp'); From fd0985e23d7cd248cf5390137c765c013e730c01 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:29:39 -0400 Subject: [PATCH 03/20] lint --- evals/utils/ScreenshotCollector.ts | 133 ++++++++++++++++++++--------- 1 file changed, 93 insertions(+), 40 deletions(-) diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index 1cfb24846..3d0f65811 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -1,5 +1,22 @@ import { Page } from "@playwright/test"; +// Dynamic import for sharp to handle optional dependency +// eslint-disable-next-line @typescript-eslint/no-explicit-any +let sharp: any = null; + +async function getSharp() { + if (!sharp) { + try { + const sharpModule = await import("sharp"); + // Sharp is a CommonJS module, so it exports the function directly + sharp = sharpModule.default || sharpModule; + } catch { + // Sharp not available, will return fallback values + } + } + return sharp; +} + export interface ScreenshotCollectorOptions { interval?: number; maxScreenshots?: number; @@ -19,7 +36,7 @@ export class ScreenshotCollector { private lastScreenshot?: Buffer; private ssimThreshold: number = 0.92; private mseThreshold: number = 50; - private originalScreenshot?: any; + private originalScreenshot?: typeof this.page.screenshot; private interceptScreenshots: boolean; constructor(page: Page, options: ScreenshotCollectorOptions = {}) { @@ -91,10 +108,10 @@ export class ScreenshotCollector { try { const screenshot = await this.page.screenshot(); - + // Check if we should keep this screenshot based on image diff let shouldKeep = true; - if (this.lastScreenshot && trigger !== 'initial' && trigger !== 'final') { + if (this.lastScreenshot && trigger !== "initial" && trigger !== "final") { try { // First do a quick MSE check const mse = await this.calculateMSE(this.lastScreenshot, screenshot); @@ -103,12 +120,15 @@ export class ScreenshotCollector { shouldKeep = false; } else { // Significant difference detected, verify with SSIM - const ssim = await this.calculateSSIM(this.lastScreenshot, screenshot); + const ssim = await this.calculateSSIM( + this.lastScreenshot, + screenshot, + ); shouldKeep = ssim < this.ssimThreshold; } } catch (error) { // If comparison fails, keep the screenshot - console.error('Image comparison failed:', error); + console.error("Image comparison failed:", error); shouldKeep = true; } } @@ -149,23 +169,36 @@ export class ScreenshotCollector { this.lastScreenshot = undefined; } - private setupScreenshotInterception(): void { + console.log("🔧 Setting up screenshot interception..."); // Store the original screenshot method this.originalScreenshot = this.page.screenshot.bind(this.page); let lastCallTime = 0; + let screenshotCount = 0; // Override the screenshot method - this.page.screenshot = async (options?: any) => { - const screenshot = await this.originalScreenshot(options); + this.page.screenshot = async ( + options?: Parameters[0], + ) => { + screenshotCount++; + const screenshot = await this.originalScreenshot!(options); // If called within 3 seconds of previous call, likely from agent const now = Date.now(); - if (now - lastCallTime < 3000) { + const timeSinceLastCall = now - lastCallTime; + + if (timeSinceLastCall < 3000 && lastCallTime > 0) { + console.log( + `📸 Agent screenshot detected (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, + ); this.onAgentScreenshot(screenshot); + } else { + console.log( + `📷 Non-agent screenshot ignored (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, + ); } - lastCallTime = now; + lastCallTime = now; return screenshot; }; } @@ -182,12 +215,15 @@ export class ScreenshotCollector { shouldKeep = false; } else { // Significant difference detected, verify with SSIM - const ssim = await this.calculateSSIM(this.lastScreenshot, screenshot); + const ssim = await this.calculateSSIM( + this.lastScreenshot, + screenshot, + ); shouldKeep = ssim < this.ssimThreshold; } } catch (error) { // If comparison fails, keep the screenshot - console.error('Image comparison failed:', error); + console.error("Image comparison failed:", error); shouldKeep = true; } } @@ -204,31 +240,32 @@ export class ScreenshotCollector { `Agent screenshot captured, total: ${this.screenshots.length}`, ); } else { - console.log( - `Agent screenshot skipped, too similar to previous`, - ); + console.log(`Agent screenshot skipped, too similar to previous`); } } private async calculateMSE(img1: Buffer, img2: Buffer): Promise { try { - const sharp = require('sharp'); - + const sharpInstance = await getSharp(); + if (!sharpInstance) { + return Number.MAX_SAFE_INTEGER; + } + // Resize images for faster comparison const size = { width: 400, height: 300 }; - const data1 = await sharp(img1).resize(size).raw().toBuffer(); - const data2 = await sharp(img2).resize(size).raw().toBuffer(); - + const data1 = await sharpInstance(img1).resize(size).raw().toBuffer(); + const data2 = await sharpInstance(img2).resize(size).raw().toBuffer(); + if (data1.length !== data2.length) return Number.MAX_SAFE_INTEGER; - + let sum = 0; for (let i = 0; i < data1.length; i++) { const diff = data1[i] - data2[i]; sum += diff * diff; } - + return sum / data1.length; - } catch (error) { + } catch { // If sharp is not available, assume images are different return Number.MAX_SAFE_INTEGER; } @@ -236,22 +273,37 @@ export class ScreenshotCollector { private async calculateSSIM(img1: Buffer, img2: Buffer): Promise { try { - const sharp = require('sharp'); - + const sharpInstance = await getSharp(); + if (!sharpInstance) { + return 0; + } + // Resize and convert to grayscale for SSIM calculation const size = { width: 400, height: 300 }; - const gray1 = await sharp(img1).resize(size).grayscale().raw().toBuffer(); - const gray2 = await sharp(img2).resize(size).grayscale().raw().toBuffer(); - + const gray1 = await sharpInstance(img1) + .resize(size) + .grayscale() + .raw() + .toBuffer(); + const gray2 = await sharpInstance(img2) + .resize(size) + .grayscale() + .raw() + .toBuffer(); + if (gray1.length !== gray2.length) return 0; - + // Simplified SSIM calculation const c1 = 0.01 * 0.01; const c2 = 0.03 * 0.03; - - let sum1 = 0, sum2 = 0, sum1_sq = 0, sum2_sq = 0, sum12 = 0; + + let sum1 = 0, + sum2 = 0, + sum1_sq = 0, + sum2_sq = 0, + sum12 = 0; const N = gray1.length; - + for (let i = 0; i < N; i++) { sum1 += gray1[i]; sum2 += gray2[i]; @@ -259,18 +311,19 @@ export class ScreenshotCollector { sum2_sq += gray2[i] * gray2[i]; sum12 += gray1[i] * gray2[i]; } - + const mean1 = sum1 / N; const mean2 = sum2 / N; - const var1 = (sum1_sq / N) - (mean1 * mean1); - const var2 = (sum2_sq / N) - (mean2 * mean2); - const cov12 = (sum12 / N) - (mean1 * mean2); - + const var1 = sum1_sq / N - mean1 * mean1; + const var2 = sum2_sq / N - mean2 * mean2; + const cov12 = sum12 / N - mean1 * mean2; + const numerator = (2 * mean1 * mean2 + c1) * (2 * cov12 + c2); - const denominator = (mean1 * mean1 + mean2 * mean2 + c1) * (var1 + var2 + c2); - + const denominator = + (mean1 * mean1 + mean2 * mean2 + c1) * (var1 + var2 + c2); + return numerator / denominator; - } catch (error) { + } catch { // If sharp is not available, assume images are different return 0; } From ef3947e406c92322ca98776a5c68834e8d8d6585 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:38:15 -0400 Subject: [PATCH 04/20] default 1 trial --- evals/index.eval.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evals/index.eval.ts b/evals/index.eval.ts index a7a488cf3..962aa1beb 100644 --- a/evals/index.eval.ts +++ b/evals/index.eval.ts @@ -54,7 +54,7 @@ const MAX_CONCURRENCY = process.env.EVAL_MAX_CONCURRENCY const TRIAL_COUNT = process.env.EVAL_TRIAL_COUNT ? parseInt(process.env.EVAL_TRIAL_COUNT, 10) - : 3; + : 1; const USE_API: boolean = (process.env.USE_API ?? "").toLowerCase() === "true"; From 4ce7df8e262b6186d15c7bbcab0528454fdcf0a5 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:42:52 -0400 Subject: [PATCH 05/20] image resize --- evals/evaluator.ts | 17 +++++++++--- evals/utils/imageResize.ts | 55 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 evals/utils/imageResize.ts diff --git a/evals/evaluator.ts b/evals/evaluator.ts index e3bfd4be5..49d513a89 100644 --- a/evals/evaluator.ts +++ b/evals/evaluator.ts @@ -20,6 +20,10 @@ import { LLMParsedResponse } from "@/lib/inference"; import { LLMResponse } from "@/lib/llm/LLMClient"; import { LogLine } from "@/types/log"; import { z } from "zod"; +import { + takeOptimizedScreenshot, + compressImageBuffer, +} from "./utils/imageResize"; dotenv.config(); @@ -81,7 +85,8 @@ export class Evaluator { await new Promise((resolve) => setTimeout(resolve, screenshotDelayMs)); let imageBuffer: Buffer; if (screenshot) { - imageBuffer = await this.stagehand.page.screenshot(); + // Use optimized screenshot for faster evaluator calls (25% size reduction) + imageBuffer = await takeOptimizedScreenshot(this.stagehand.page); } const llmClient = this.stagehand.llmProvider.getClient( this.modelName, @@ -185,7 +190,8 @@ export class Evaluator { let imageBuffer: Buffer; if (screenshot) { - imageBuffer = await this.stagehand.page.screenshot(); + // Use optimized screenshot for faster evaluator calls (25% size reduction) + imageBuffer = await takeOptimizedScreenshot(this.stagehand.page); } // Get the LLM client with our preferred model @@ -292,7 +298,12 @@ export class Evaluator { this.modelClientOptions, ); - const imageContents = screenshots.map((screenshot) => ({ + // Compress multiple screenshots for faster evaluator calls + const compressedScreenshots = screenshots.map((screenshot) => + compressImageBuffer(screenshot), + ); + + const imageContents = compressedScreenshots.map((screenshot) => ({ type: "image_url" as const, image_url: { url: `data:image/jpeg;base64,${screenshot.toString("base64")}`, diff --git a/evals/utils/imageResize.ts b/evals/utils/imageResize.ts new file mode 100644 index 000000000..b84e28778 --- /dev/null +++ b/evals/utils/imageResize.ts @@ -0,0 +1,55 @@ +import { Page } from "playwright"; + +/** + * Takes a screenshot optimized for evaluator use (smaller size, lower quality) + * @param page - The Playwright page to screenshot + * @param scaleFactor - The scale factor (e.g., 0.75 for 25% reduction) + * @returns Optimized screenshot buffer + */ +export async function takeOptimizedScreenshot( + page: Page, + scaleFactor: number = 0.75, +): Promise { + try { + // Get current viewport + const viewport = page.viewportSize(); + if (!viewport) { + // Take regular screenshot if viewport not available + return await page.screenshot({ type: "jpeg", quality: 70 }); + } + + // Calculate new dimensions + const newWidth = Math.round(viewport.width * scaleFactor); + const newHeight = Math.round(viewport.height * scaleFactor); + + // Set a smaller viewport temporarily + await page.setViewportSize({ width: newWidth, height: newHeight }); + + // Take screenshot with lower quality + const screenshot = await page.screenshot({ + type: "jpeg", + quality: 70, // Lower quality for smaller file size + }); + + // Restore original viewport + await page.setViewportSize(viewport); + + return screenshot; + } catch (error) { + console.warn("Failed to take optimized screenshot:", error); + // Fallback to regular screenshot with lower quality + return await page.screenshot({ type: "jpeg", quality: 70 }); + } +} + +/** + * Compresses an existing image buffer (simple quality reduction) + * @param imageBuffer - The original image buffer + * @returns Compressed buffer (returns original if compression fails) + */ +export function compressImageBuffer(imageBuffer: Buffer): Buffer { + // For now, just return the original buffer + // This is a placeholder for potential future compression + // The main optimization comes from takeOptimizedScreenshot + return imageBuffer; +} From 001e8d2c0ed3846ef54358d5c74544c11b166030 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 13 Sep 2025 15:47:27 -0400 Subject: [PATCH 06/20] add changeset --- .changeset/curly-boats-push.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/curly-boats-push.md diff --git a/.changeset/curly-boats-push.md b/.changeset/curly-boats-push.md new file mode 100644 index 000000000..7f2bdbc77 --- /dev/null +++ b/.changeset/curly-boats-push.md @@ -0,0 +1,5 @@ +--- +"@browserbasehq/stagehand-evals": patch +--- + +improve evals screenshot service - add img hashing diff to add screenshots and change to screenshot intercepts from the agent From e76719f64e4bd40b421231d987d6ddae5c487846 Mon Sep 17 00:00:00 2001 From: Filip Michalsky <31483888+filip-michalsky@users.noreply.github.com> Date: Fri, 19 Sep 2025 12:08:47 +0200 Subject: [PATCH 07/20] Update evals/index.eval.ts Co-authored-by: Miguel <36487034+miguelg719@users.noreply.github.com> --- evals/index.eval.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evals/index.eval.ts b/evals/index.eval.ts index 19646fff1..148dc507a 100644 --- a/evals/index.eval.ts +++ b/evals/index.eval.ts @@ -56,7 +56,7 @@ const MAX_CONCURRENCY = process.env.EVAL_MAX_CONCURRENCY const TRIAL_COUNT = process.env.EVAL_TRIAL_COUNT ? parseInt(process.env.EVAL_TRIAL_COUNT, 10) - : 1; + : 3; const USE_API: boolean = (process.env.USE_API ?? "").toLowerCase() === "true"; From 14a185e1c577a3f6a852a26e85b383bc6d2fdfa3 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Fri, 19 Sep 2025 12:37:49 +0200 Subject: [PATCH 08/20] do NOT resize viewport, intercept ss by default --- evals/tasks/agent/onlineMind2Web.ts | 1 + evals/tasks/agent/webbench.ts | 1 + evals/tasks/agent/webvoyager.ts | 1 + evals/utils/ScreenshotCollector.ts | 3 ++- evals/utils/imageResize.ts | 39 +++++++++++++++-------------- 5 files changed, 25 insertions(+), 20 deletions(-) diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index f3b2d91f7..129a2ce4d 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -43,6 +43,7 @@ export const onlineMind2Web: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 5, // Keep up to the last 5 screenshots captureOnNavigation: true, // Also capture on page navigation + interceptScreenshots: true, // Intercept agent screenshot calls }); screenshotCollector.start(); diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index 2ba9c1b93..fea51c59e 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -43,6 +43,7 @@ export const webbench: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots captureOnNavigation: true, // Also capture on page navigation + interceptScreenshots: true, // Intercept agent screenshot calls }); screenshotCollector.start(); diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index 780ae9076..c1911de47 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -87,6 +87,7 @@ export const webvoyager: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots captureOnNavigation: true, // Also capture on page navigation + interceptScreenshots: true, // Intercept agent screenshot calls }); screenshotCollector.start(); diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index 3d0f65811..a7069e543 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -7,6 +7,7 @@ let sharp: any = null; async function getSharp() { if (!sharp) { try { + // @ts-expect-error - sharp is an optional dependency const sharpModule = await import("sharp"); // Sharp is a CommonJS module, so it exports the function directly sharp = sharpModule.default || sharpModule; @@ -41,7 +42,7 @@ export class ScreenshotCollector { constructor(page: Page, options: ScreenshotCollectorOptions = {}) { this.page = page; - this.interval = options.interval || 5000; + this.interval = options.interval || 10000; this.maxScreenshots = options.maxScreenshots || 10; this.captureOnNavigation = options.captureOnNavigation ?? true; this.interceptScreenshots = options.interceptScreenshots ?? false; diff --git a/evals/utils/imageResize.ts b/evals/utils/imageResize.ts index b84e28778..b9b5c8e85 100644 --- a/evals/utils/imageResize.ts +++ b/evals/utils/imageResize.ts @@ -11,28 +11,29 @@ export async function takeOptimizedScreenshot( scaleFactor: number = 0.75, ): Promise { try { - // Get current viewport - const viewport = page.viewportSize(); - if (!viewport) { - // Take regular screenshot if viewport not available - return await page.screenshot({ type: "jpeg", quality: 70 }); - } - - // Calculate new dimensions - const newWidth = Math.round(viewport.width * scaleFactor); - const newHeight = Math.round(viewport.height * scaleFactor); + // Take screenshot first without modifying viewport + const screenshot = await page.screenshot({ type: "jpeg", quality: 70 }); - // Set a smaller viewport temporarily - await page.setViewportSize({ width: newWidth, height: newHeight }); + // Try to use sharp for resizing if available (optional dependency) + try { + // @ts-expect-error - sharp is an optional dependency + const sharp = await import("sharp"); + const sharpInstance = sharp.default || sharp; + const metadata = await sharpInstance(screenshot).metadata(); - // Take screenshot with lower quality - const screenshot = await page.screenshot({ - type: "jpeg", - quality: 70, // Lower quality for smaller file size - }); + if (metadata.width && metadata.height) { + const newWidth = Math.round(metadata.width * scaleFactor); + const newHeight = Math.round(metadata.height * scaleFactor); - // Restore original viewport - await page.setViewportSize(viewport); + return await sharpInstance(screenshot) + .resize(newWidth, newHeight) + .jpeg({ quality: 70 }) + .toBuffer(); + } + } catch (sharpError) { + // Sharp not available or failed, return original screenshot + console.debug("Sharp not available for image resizing:", sharpError); + } return screenshot; } catch (error) { From 9702884fc294dff14c67a7dd8e5eda4121a10860 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Fri, 19 Sep 2025 13:04:26 +0200 Subject: [PATCH 09/20] combine time based screenshot service with an interceptor --- .env.example | 6 +++ evals/tasks/agent/onlineMind2Web.ts | 5 +-- evals/tasks/agent/webbench.ts | 5 +-- evals/tasks/agent/webvoyager.ts | 5 +-- evals/utils/ScreenshotCollector.ts | 67 +++++++++++++---------------- 5 files changed, 43 insertions(+), 45 deletions(-) diff --git a/.env.example b/.env.example index b31704e32..ffe47eef1 100644 --- a/.env.example +++ b/.env.example @@ -11,3 +11,9 @@ EXPERIMENTAL_EVAL_MODELS="gpt-4o,claude-3-5-sonnet-latest,o1-mini,o1-preview" EVAL_CATEGORIES="observe,act,combination,extract,experimental" AGENT_EVAL_MAX_STEPS=50 STAGEHAND_API_URL="http://localhost:80" + +# Screenshot collector thresholds for determining when screenshots are too similar +# SSIM (Structural Similarity Index) threshold: 0-1, higher = more similar (default: 0.92) +SCREENSHOT_SSIM_THRESHOLD=0.92 +# MSE (Mean Squared Error) threshold: lower = more similar (default: 50) +SCREENSHOT_MSE_THRESHOLD=50 diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index 129a2ce4d..08d2ec9fd 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -39,11 +39,10 @@ export const onlineMind2Web: EvalFunction = async ({ const screenshot = await stagehand.page.screenshot(); fs.writeFileSync("screenshot.png", screenshot); - // Start collecting screenshots in parallel + // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 5, // Keep up to the last 5 screenshots - captureOnNavigation: true, // Also capture on page navigation - interceptScreenshots: true, // Intercept agent screenshot calls + interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception }); screenshotCollector.start(); diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index fea51c59e..da056e384 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -39,11 +39,10 @@ export const webbench: EvalFunction = async ({ await stagehand.page.goto(params.url, { waitUntil: "domcontentloaded" }); - // Start collecting screenshots in parallel + // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots - captureOnNavigation: true, // Also capture on page navigation - interceptScreenshots: true, // Intercept agent screenshot calls + interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception }); screenshotCollector.start(); diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index c1911de47..aaca6f6a6 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -83,11 +83,10 @@ export const webvoyager: EvalFunction = async ({ await stagehand.page.goto(params.web); - // Start collecting screenshots in parallel + // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots - captureOnNavigation: true, // Also capture on page navigation - interceptScreenshots: true, // Intercept agent screenshot calls + interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception }); screenshotCollector.start(); diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index a7069e543..e6daaa616 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -21,7 +21,6 @@ async function getSharp() { export interface ScreenshotCollectorOptions { interval?: number; maxScreenshots?: number; - captureOnNavigation?: boolean; interceptScreenshots?: boolean; } @@ -30,9 +29,7 @@ export class ScreenshotCollector { private page: Page; private interval: number; private maxScreenshots: number; - private captureOnNavigation: boolean; private intervalId?: NodeJS.Timeout; - private navigationListeners: Array<() => void> = []; private isCapturing: boolean = false; private lastScreenshot?: Buffer; private ssimThreshold: number = 0.92; @@ -44,39 +41,24 @@ export class ScreenshotCollector { this.page = page; this.interval = options.interval || 10000; this.maxScreenshots = options.maxScreenshots || 10; - this.captureOnNavigation = options.captureOnNavigation ?? true; - this.interceptScreenshots = options.interceptScreenshots ?? false; + this.interceptScreenshots = options.interceptScreenshots ?? true; + this.ssimThreshold = process.env.SCREENSHOT_SSIM_THRESHOLD + ? parseFloat(process.env.SCREENSHOT_SSIM_THRESHOLD) + : 0.92; + this.mseThreshold = process.env.SCREENSHOT_MSE_THRESHOLD + ? parseFloat(process.env.SCREENSHOT_MSE_THRESHOLD) + : 50; } start(): void { - if (this.intervalId) { - return; - } - - // Setup screenshot interception if enabled + // Setup screenshot interception if enabled (for agent screenshots) if (this.interceptScreenshots) { this.setupScreenshotInterception(); - } else { - // Original time-based approach - this.intervalId = setInterval(async () => { - await this.captureScreenshot("interval"); - }, this.interval); - - if (this.captureOnNavigation) { - const loadListener = () => this.captureScreenshot("load"); - const domContentListener = () => - this.captureScreenshot("domcontentloaded"); - - this.page.on("load", loadListener); - this.page.on("domcontentloaded", domContentListener); - - this.navigationListeners = [ - () => this.page.off("load", loadListener), - () => this.page.off("domcontentloaded", domContentListener), - ]; - } } + // Always start the interval timer + this.startIntervalTimer(); + this.captureScreenshot("initial"); } @@ -92,9 +74,6 @@ export class ScreenshotCollector { this.originalScreenshot = undefined; } - this.navigationListeners.forEach((removeListener) => removeListener()); - this.navigationListeners = []; - this.captureScreenshot("final"); return this.getScreenshots(); @@ -170,8 +149,19 @@ export class ScreenshotCollector { this.lastScreenshot = undefined; } + private startIntervalTimer(): void { + if (this.intervalId) { + clearInterval(this.intervalId); + } + this.intervalId = setInterval(async () => { + await this.captureScreenshot("interval"); + }, this.interval); + } + private setupScreenshotInterception(): void { - console.log("🔧 Setting up screenshot interception..."); + console.log( + "🔧 Setting up hybrid screenshot collection with interception...", + ); // Store the original screenshot method this.originalScreenshot = this.page.screenshot.bind(this.page); let lastCallTime = 0; @@ -192,7 +182,10 @@ export class ScreenshotCollector { console.log( `📸 Agent screenshot detected (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, ); - this.onAgentScreenshot(screenshot); + // Process agent screenshot and reset the interval timer + await this.onAgentScreenshot(screenshot); + // Reset the interval timer since we just captured a screenshot + this.startIntervalTimer(); } else { console.log( `📷 Non-agent screenshot ignored (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, @@ -238,10 +231,12 @@ export class ScreenshotCollector { } console.log( - `Agent screenshot captured, total: ${this.screenshots.length}`, + `Agent screenshot captured (hybrid mode), total: ${this.screenshots.length}`, ); } else { - console.log(`Agent screenshot skipped, too similar to previous`); + console.log( + `Agent screenshot skipped (hybrid mode), too similar to previous`, + ); } } From c255af5f067b385136eb8aa95cb36394b1c05cf1 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 20 Sep 2025 11:10:24 +0200 Subject: [PATCH 10/20] add sharp as dep for evals --- evals/tasks/agent/onlineMind2Web.ts | 20 +- evals/tasks/agent/webbench.ts | 68 +- evals/tasks/agent/webvoyager.ts | 20 +- evals/utils/ScreenshotCollector.ts | 255 +- evals/utils/imageResize.ts | 9 +- pnpm-lock.yaml | 3910 ++++++++++++++++----------- 6 files changed, 2552 insertions(+), 1730 deletions(-) diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index 08d2ec9fd..4276867d8 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -43,17 +43,23 @@ export const onlineMind2Web: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 5, // Keep up to the last 5 screenshots interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception + logger, // Pass the logger for proper logging }); - screenshotCollector.start(); + let screenshots: Buffer[] = []; + let agentResult; - const agentResult = await agent.execute({ - instruction: params.confirmed_task, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); + try { + screenshotCollector.start(); - // Stop collecting and get all screenshots - const screenshots = screenshotCollector.stop(); + agentResult = await agent.execute({ + instruction: params.confirmed_task, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + } finally { + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); + } logger.log({ category: "evaluation", diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index da056e384..5a7470202 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -43,42 +43,48 @@ export const webbench: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception + logger, // Pass the logger for proper logging }); - screenshotCollector.start(); + let screenshots: Buffer[] = []; + let result; - logger.log({ - category: "webbench", - message: `Starting WebBench task ${params.id}`, - level: 1, - auxiliary: { - category: { - value: params.category || "unknown", - type: "string", - }, - difficulty: { - value: params.difficulty || "unknown", - type: "string", - }, - url: { - value: params.url, - type: "string", - }, - task_preview: { - value: params.task.substring(0, 100) + "...", - type: "string", - }, - }, - }); + try { + screenshotCollector.start(); - // Execute the task using the pre-initialized agent - const result = await agent.execute({ - instruction: params.task, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); + logger.log({ + category: "webbench", + message: `Starting WebBench task ${params.id}`, + level: 1, + auxiliary: { + category: { + value: params.category || "unknown", + type: "string", + }, + difficulty: { + value: params.difficulty || "unknown", + type: "string", + }, + url: { + value: params.url, + type: "string", + }, + task_preview: { + value: params.task.substring(0, 100) + "...", + type: "string", + }, + }, + }); - // Stop collecting and get all screenshots - const screenshots = screenshotCollector.stop(); + // Execute the task using the pre-initialized agent + result = await agent.execute({ + instruction: params.task, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + } finally { + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); + } logger.log({ category: "evaluation", diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index aaca6f6a6..afbc4a394 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -87,17 +87,23 @@ export const webvoyager: EvalFunction = async ({ const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 10, // Keep last 10 screenshots interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception + logger, // Pass the logger for proper logging }); - screenshotCollector.start(); + let screenshots: Buffer[] = []; + let agentResult; - const agentResult = await agent.execute({ - instruction: params.ques, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); + try { + screenshotCollector.start(); - // Stop collecting and get all screenshots - const screenshots = screenshotCollector.stop(); + agentResult = await agent.execute({ + instruction: params.ques, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + } finally { + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); + } logger.log({ category: "evaluation", diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index e6daaa616..f94bce331 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -1,27 +1,13 @@ import { Page } from "@playwright/test"; - -// Dynamic import for sharp to handle optional dependency -// eslint-disable-next-line @typescript-eslint/no-explicit-any -let sharp: any = null; - -async function getSharp() { - if (!sharp) { - try { - // @ts-expect-error - sharp is an optional dependency - const sharpModule = await import("sharp"); - // Sharp is a CommonJS module, so it exports the function directly - sharp = sharpModule.default || sharpModule; - } catch { - // Sharp not available, will return fallback values - } - } - return sharp; -} +import { EvalLogger } from "../logger"; +import { LogLine } from "@browserbasehq/stagehand"; +import sharp from "sharp"; export interface ScreenshotCollectorOptions { interval?: number; maxScreenshots?: number; interceptScreenshots?: boolean; + logger?: EvalLogger; } export class ScreenshotCollector { @@ -36,12 +22,15 @@ export class ScreenshotCollector { private mseThreshold: number = 50; private originalScreenshot?: typeof this.page.screenshot; private interceptScreenshots: boolean; + private logger?: EvalLogger; + private isRunning: boolean = false; constructor(page: Page, options: ScreenshotCollectorOptions = {}) { this.page = page; this.interval = options.interval || 10000; this.maxScreenshots = options.maxScreenshots || 10; this.interceptScreenshots = options.interceptScreenshots ?? true; + this.logger = options.logger; this.ssimThreshold = process.env.SCREENSHOT_SSIM_THRESHOLD ? parseFloat(process.env.SCREENSHOT_SSIM_THRESHOLD) : 0.92; @@ -51,6 +40,17 @@ export class ScreenshotCollector { } start(): void { + if (this.isRunning) { + this.log({ + category: "screenshot_collector", + message: "Screenshot collector already running, ignoring start()", + level: 1, + }); + return; + } + + this.isRunning = true; + // Setup screenshot interception if enabled (for agent screenshots) if (this.interceptScreenshots) { this.setupScreenshotInterception(); @@ -63,6 +63,18 @@ export class ScreenshotCollector { } stop(): Buffer[] { + if (!this.isRunning) { + this.log({ + category: "screenshot_collector", + message: "Screenshot collector not running, ignoring stop()", + level: 1, + }); + return this.getScreenshots(); + } + + this.isRunning = false; + + // Clear interval timer first to prevent any more interval captures if (this.intervalId) { clearInterval(this.intervalId); this.intervalId = undefined; @@ -74,7 +86,16 @@ export class ScreenshotCollector { this.originalScreenshot = undefined; } - this.captureScreenshot("final"); + // Capture final screenshot only if we're not already capturing + if (!this.isCapturing) { + this.captureScreenshot("final"); + } + + this.log({ + category: "screenshot_collector", + message: `Screenshot collector stopped with ${this.screenshots.length} screenshots`, + level: 1, + }); return this.getScreenshots(); } @@ -95,6 +116,14 @@ export class ScreenshotCollector { try { // First do a quick MSE check const mse = await this.calculateMSE(this.lastScreenshot, screenshot); + + // Always log MSE comparison + this.log({ + category: "screenshot_collector", + message: `MSE comparison: ${mse.toFixed(2)} vs threshold ${this.mseThreshold} (${mse < this.mseThreshold ? "similar" : "different"})`, + level: 2, + }); + if (mse < this.mseThreshold) { // Very similar, skip shouldKeep = false; @@ -105,10 +134,15 @@ export class ScreenshotCollector { screenshot, ); shouldKeep = ssim < this.ssimThreshold; + this.log({ + category: "screenshot_collector", + message: `SSIM ${ssim.toFixed(4)} ${shouldKeep ? "<" : ">="} threshold ${this.ssimThreshold}, ${shouldKeep ? "keeping" : "skipping"} screenshot`, + level: 2, + }); } } catch (error) { // If comparison fails, keep the screenshot - console.error("Image comparison failed:", error); + this.logError("Image comparison failed:", error); shouldKeep = true; } } @@ -121,16 +155,20 @@ export class ScreenshotCollector { this.screenshots.shift(); } - console.log( - `Screenshot captured (trigger: ${trigger}), total: ${this.screenshots.length}`, - ); + this.log({ + category: "screenshot_collector", + message: `Screenshot captured (trigger: ${trigger}), total: ${this.screenshots.length}`, + level: 2, + }); } else { - console.log( - `Screenshot skipped (trigger: ${trigger}), too similar to previous`, - ); + this.log({ + category: "screenshot_collector", + message: `Screenshot skipped (trigger: ${trigger}), too similar to previous`, + level: 2, + }); } } catch (error) { - console.error(`Failed to capture screenshot (${trigger}):`, error); + this.logError(`Failed to capture screenshot (${trigger}):`, error); } finally { this.isCapturing = false; } @@ -153,15 +191,24 @@ export class ScreenshotCollector { if (this.intervalId) { clearInterval(this.intervalId); } - this.intervalId = setInterval(async () => { - await this.captureScreenshot("interval"); - }, this.interval); + // Only start timer if we're still running + if (this.isRunning) { + this.intervalId = setInterval(async () => { + // Check if still running before capturing + if (this.isRunning) { + await this.captureScreenshot("interval"); + } + }, this.interval); + } } private setupScreenshotInterception(): void { - console.log( - "🔧 Setting up hybrid screenshot collection with interception...", - ); + this.log({ + category: "screenshot_collector", + message: + "🔧 Setting up hybrid screenshot collection with interception...", + level: 1, + }); // Store the original screenshot method this.originalScreenshot = this.page.screenshot.bind(this.page); let lastCallTime = 0; @@ -179,17 +226,21 @@ export class ScreenshotCollector { const timeSinceLastCall = now - lastCallTime; if (timeSinceLastCall < 3000 && lastCallTime > 0) { - console.log( - `📸 Agent screenshot detected (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, - ); + this.log({ + category: "screenshot_collector", + message: `📸 Agent screenshot detected (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, + level: 2, + }); // Process agent screenshot and reset the interval timer await this.onAgentScreenshot(screenshot); // Reset the interval timer since we just captured a screenshot this.startIntervalTimer(); } else { - console.log( - `📷 Non-agent screenshot ignored (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, - ); + this.log({ + category: "screenshot_collector", + message: `📷 Non-agent screenshot ignored (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, + level: 2, + }); } lastCallTime = now; @@ -204,6 +255,14 @@ export class ScreenshotCollector { try { // First do a quick MSE check const mse = await this.calculateMSE(this.lastScreenshot, screenshot); + + // Always log MSE comparison + this.log({ + category: "screenshot_collector", + message: `MSE comparison: ${mse.toFixed(2)} vs threshold ${this.mseThreshold} (${mse < this.mseThreshold ? "similar" : "different"})`, + level: 2, + }); + if (mse < this.mseThreshold) { // Very similar, skip shouldKeep = false; @@ -214,6 +273,11 @@ export class ScreenshotCollector { screenshot, ); shouldKeep = ssim < this.ssimThreshold; + this.log({ + category: "screenshot_collector", + message: `SSIM ${ssim.toFixed(4)} ${shouldKeep ? "<" : ">="} threshold ${this.ssimThreshold}, ${shouldKeep ? "keeping" : "skipping"} screenshot`, + level: 2, + }); } } catch (error) { // If comparison fails, keep the screenshot @@ -230,27 +294,26 @@ export class ScreenshotCollector { this.screenshots.shift(); } - console.log( - `Agent screenshot captured (hybrid mode), total: ${this.screenshots.length}`, - ); + this.log({ + category: "screenshot_collector", + message: `Agent screenshot captured (hybrid mode), total: ${this.screenshots.length}`, + level: 2, + }); } else { - console.log( - `Agent screenshot skipped (hybrid mode), too similar to previous`, - ); + this.log({ + category: "screenshot_collector", + message: `Agent screenshot skipped (hybrid mode), too similar to previous`, + level: 2, + }); } } private async calculateMSE(img1: Buffer, img2: Buffer): Promise { try { - const sharpInstance = await getSharp(); - if (!sharpInstance) { - return Number.MAX_SAFE_INTEGER; - } - // Resize images for faster comparison const size = { width: 400, height: 300 }; - const data1 = await sharpInstance(img1).resize(size).raw().toBuffer(); - const data2 = await sharpInstance(img2).resize(size).raw().toBuffer(); + const data1 = await sharp(img1).resize(size).raw().toBuffer(); + const data2 = await sharp(img2).resize(size).raw().toBuffer(); if (data1.length !== data2.length) return Number.MAX_SAFE_INTEGER; @@ -261,37 +324,44 @@ export class ScreenshotCollector { } return sum / data1.length; - } catch { - // If sharp is not available, assume images are different + } catch (error) { + // Log error and assume images are different + this.logError("MSE calculation failed:", error); return Number.MAX_SAFE_INTEGER; } } private async calculateSSIM(img1: Buffer, img2: Buffer): Promise { try { - const sharpInstance = await getSharp(); - if (!sharpInstance) { - return 0; - } - // Resize and convert to grayscale for SSIM calculation const size = { width: 400, height: 300 }; - const gray1 = await sharpInstance(img1) - .resize(size) - .grayscale() - .raw() - .toBuffer(); - const gray2 = await sharpInstance(img2) - .resize(size) - .grayscale() - .raw() - .toBuffer(); + const gray1 = await sharp(img1).resize(size).grayscale().raw().toBuffer(); + const gray2 = await sharp(img2).resize(size).grayscale().raw().toBuffer(); if (gray1.length !== gray2.length) return 0; + // Debug: Check data properties + const samplePixels = [ + gray1[0], + gray1[1], + gray1[2], + gray2[0], + gray2[1], + gray2[2], + ]; + this.log({ + category: "screenshot_collector", + message: `SSIM input debug: buffer lengths=${gray1.length}/${gray2.length}, sample pixels=[${samplePixels.join(",")}]`, + level: 2, + }); + // Simplified SSIM calculation - const c1 = 0.01 * 0.01; - const c2 = 0.03 * 0.03; + // Use proper constants for 8-bit images (0-255 range) + const L = 255; // Dynamic range for 8-bit images + const k1 = 0.01; + const k2 = 0.03; + const c1 = k1 * L * (k1 * L); + const c2 = k2 * L * (k2 * L); let sum1 = 0, sum2 = 0, @@ -318,10 +388,47 @@ export class ScreenshotCollector { const denominator = (mean1 * mean1 + mean2 * mean2 + c1) * (var1 + var2 + c2); - return numerator / denominator; - } catch { - // If sharp is not available, assume images are different + const ssim = denominator !== 0 ? numerator / denominator : 0; + + // Always log SSIM calculation details for debugging + this.log({ + category: "screenshot_collector", + message: `SSIM calculation: result=${ssim.toFixed(4)}, mean1=${mean1.toFixed(2)}, mean2=${mean2.toFixed(2)}, var1=${var1.toFixed(2)}, var2=${var2.toFixed(2)}, cov12=${cov12.toFixed(2)}`, + level: 2, + }); + + this.log({ + category: "screenshot_collector", + message: `SSIM components: c1=${c1.toFixed(2)}, c2=${c2.toFixed(2)}, numerator=${numerator.toFixed(2)}, denominator=${denominator.toFixed(2)}`, + level: 2, + }); + + return ssim; + } catch (error) { + // Log error and assume images are different + this.logError("SSIM calculation failed:", error); return 0; } } + + private log(logLine: LogLine): void { + if (this.logger) { + this.logger.log(logLine); + } else { + console.log(`[${logLine.category}] ${logLine.message}`); + } + } + + private logError(message: string, error: unknown): void { + const logLine: LogLine = { + category: "screenshot_collector", + message: `${message}: ${error}`, + level: 0, + }; + if (this.logger) { + this.logger.error(logLine); + } else { + console.error(`[${logLine.category}] ${logLine.message}`); + } + } } diff --git a/evals/utils/imageResize.ts b/evals/utils/imageResize.ts index b9b5c8e85..a0e670c84 100644 --- a/evals/utils/imageResize.ts +++ b/evals/utils/imageResize.ts @@ -16,16 +16,15 @@ export async function takeOptimizedScreenshot( // Try to use sharp for resizing if available (optional dependency) try { - // @ts-expect-error - sharp is an optional dependency - const sharp = await import("sharp"); - const sharpInstance = sharp.default || sharp; - const metadata = await sharpInstance(screenshot).metadata(); + const sharpModule = await import("sharp"); + const sharp = sharpModule.default; + const metadata = await sharp(screenshot).metadata(); if (metadata.width && metadata.height) { const newWidth = Math.round(metadata.width * scaleFactor); const newHeight = Math.round(metadata.height * scaleFactor); - return await sharpInstance(screenshot) + return await sharp(screenshot) .resize(newWidth, newHeight) .jpeg({ quality: 70 }) .toBuffer(); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f9864d8f..cbd994598 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,16 +13,16 @@ importers: version: 0.39.0 '@browserbasehq/sdk': specifier: ^2.4.0 - version: 2.5.0 + version: 2.6.0 '@google/genai': specifier: ^0.8.0 version: 0.8.0 '@modelcontextprotocol/sdk': specifier: ^1.17.2 - version: 1.17.2 + version: 1.18.1 ai: specifier: ^4.3.9 - version: 4.3.12(react@19.1.0)(zod@3.25.67) + version: 4.3.19(react@19.1.1)(zod@3.25.67) deepmerge: specifier: ^4.3.1 version: 4.3.1 @@ -31,65 +31,65 @@ importers: version: 0.0.1464554 dotenv: specifier: ^16.4.5 - version: 16.5.0 + version: 16.6.1 fetch-cookie: specifier: ^3.1.0 version: 3.1.0 openai: specifier: ^4.87.1 - version: 4.96.2(ws@8.18.1)(zod@3.25.67) + version: 4.104.0(ws@8.18.3)(zod@3.25.67) pino: specifier: ^9.6.0 - version: 9.6.0 + version: 9.10.0 pino-pretty: specifier: ^13.0.0 - version: 13.0.0 + version: 13.1.1 playwright: specifier: ^1.52.0 - version: 1.52.0 + version: 1.55.0 ws: specifier: ^8.18.0 - version: 8.18.1 + version: 8.18.3 zod: specifier: '>=3.25.0 <3.25.68' version: 3.25.67 zod-to-json-schema: specifier: ^3.23.5 - version: 3.24.5(zod@3.25.67) + version: 3.24.6(zod@3.25.67) optionalDependencies: '@ai-sdk/anthropic': specifier: ^1.2.6 - version: 1.2.10(zod@3.25.67) + version: 1.2.12(zod@3.25.67) '@ai-sdk/azure': specifier: ^1.3.19 - version: 1.3.22(zod@3.25.67) + version: 1.3.25(zod@3.25.67) '@ai-sdk/cerebras': specifier: ^0.2.6 - version: 0.2.13(zod@3.25.67) + version: 0.2.16(zod@3.25.67) '@ai-sdk/deepseek': specifier: ^0.2.13 - version: 0.2.13(zod@3.25.67) + version: 0.2.16(zod@3.25.67) '@ai-sdk/google': specifier: ^1.2.6 - version: 1.2.14(zod@3.25.67) + version: 1.2.22(zod@3.25.67) '@ai-sdk/groq': specifier: ^1.2.4 - version: 1.2.8(zod@3.25.67) + version: 1.2.9(zod@3.25.67) '@ai-sdk/mistral': specifier: ^1.2.7 - version: 1.2.7(zod@3.25.67) + version: 1.2.8(zod@3.25.67) '@ai-sdk/openai': specifier: ^1.0.14 - version: 1.3.21(zod@3.25.67) + version: 1.3.24(zod@3.25.67) '@ai-sdk/perplexity': specifier: ^1.1.7 - version: 1.1.8(zod@3.25.67) + version: 1.1.9(zod@3.25.67) '@ai-sdk/togetherai': specifier: ^0.2.6 - version: 0.2.13(zod@3.25.67) + version: 0.2.16(zod@3.25.67) '@ai-sdk/xai': specifier: ^1.2.15 - version: 1.2.15(zod@3.25.67) + version: 1.2.18(zod@3.25.67) ollama-ai-provider: specifier: ^1.2.0 version: 1.2.0(zod@3.25.67) @@ -99,19 +99,19 @@ importers: version: 0.5.1 '@changesets/cli': specifier: ^2.27.9 - version: 2.29.2 + version: 2.29.7(@types/node@20.19.17) '@eslint/js': specifier: ^9.16.0 - version: 9.25.1 + version: 9.36.0 '@langchain/core': specifier: ^0.3.40 - version: 0.3.50(openai@4.96.2(ws@8.18.1)(zod@3.25.67)) + version: 0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)) '@langchain/openai': specifier: ^0.4.4 - version: 0.4.9(@langchain/core@0.3.50(openai@4.96.2(ws@8.18.1)(zod@3.25.67)))(ws@8.18.1) + version: 0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3) '@playwright/test': specifier: ^1.42.1 - version: 1.52.0 + version: 1.55.0 '@types/adm-zip': specifier: ^0.5.7 version: 0.5.7 @@ -120,10 +120,10 @@ importers: version: 0.22.35 '@types/express': specifier: ^4.17.21 - version: 4.17.21 + version: 4.17.23 '@types/node': specifier: ^20.11.30 - version: 20.17.32 + version: 20.19.17 '@types/ws': specifier: ^8.5.13 version: 8.18.1 @@ -135,13 +135,13 @@ importers: version: 0.0.64 braintrust: specifier: ^0.0.171 - version: 0.0.171(openai@4.96.2(ws@8.18.1)(zod@3.25.67))(react@19.1.0)(sswr@2.2.0(svelte@5.28.2))(svelte@5.28.2)(vue@3.5.13(typescript@5.8.3))(zod@3.25.67) + version: 0.0.171(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) chalk: specifier: ^5.4.1 - version: 5.4.1 + version: 5.6.2 cheerio: specifier: ^1.0.0 - version: 1.0.0 + version: 1.1.2 chromium-bidi: specifier: ^0.10.0 version: 0.10.2(devtools-protocol@0.0.1464554) @@ -150,7 +150,7 @@ importers: version: 0.21.5 eslint: specifier: ^9.16.0 - version: 9.25.1(jiti@1.21.7) + version: 9.36.0(jiti@1.21.7) express: specifier: ^4.21.0 version: 4.21.2 @@ -162,31 +162,31 @@ importers: version: 1.4.5-lts.2 prettier: specifier: ^3.2.5 - version: 3.5.3 + version: 3.6.2 string-comparison: specifier: ^1.3.0 version: 1.3.0 tsup: specifier: ^8.2.1 - version: 8.4.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1) + version: 8.5.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1) tsx: specifier: ^4.10.5 - version: 4.19.4 + version: 4.20.5 typescript: specifier: ^5.2.2 - version: 5.8.3 + version: 5.9.2 typescript-eslint: specifier: ^8.17.0 - version: 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) + version: 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) docs: dependencies: mintlify: specifier: ^4.2.47 - version: 4.2.78(@types/node@20.17.32)(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3) + version: 4.2.121(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@20.19.17)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) tsx: specifier: ^4.19.2 - version: 4.19.4 + version: 4.20.5 zod: specifier: ^3.25.0 version: 3.25.76 @@ -196,6 +196,9 @@ importers: '@browserbasehq/stagehand': specifier: workspace:* version: link:.. + sharp: + specifier: ^0.33.5 + version: 0.33.5 devDependencies: '@types/papaparse': specifier: ^5.3.16 @@ -205,7 +208,7 @@ importers: version: 5.5.3 tsx: specifier: ^4.10.5 - version: 4.19.4 + version: 4.20.5 examples: dependencies: @@ -218,68 +221,68 @@ importers: version: 3.10.1 tsx: specifier: ^4.10.5 - version: 4.19.4 + version: 4.20.5 lib: {} packages: - '@ai-sdk/anthropic@1.2.10': - resolution: {integrity: sha512-PyE7EC2fPjs9DnzRAHDrPQmcnI2m2Eojr8pfhckOejOlDEh2w7NnSJr1W3qe5hUWzKr+6d7NG1ZKR9fhmpDdEQ==} + '@ai-sdk/anthropic@1.2.12': + resolution: {integrity: sha512-YSzjlko7JvuiyQFmI9RN1tNZdEiZxc+6xld/0tq/VkJaHpEzGAb1yiNxxvmYVcjvfu/PcvCxAAYXmTYQQ63IHQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/azure@1.3.22': - resolution: {integrity: sha512-X3Vlxwh0MSmmZ8Q7LgzCXHvPq0XsNL1dTODIZ3ziC7n8cME8yHvjpwPwMAHLK0a7YbWO7eOW0OsDnZXdong10g==} + '@ai-sdk/azure@1.3.25': + resolution: {integrity: sha512-cTME89A9UYrza0t5pbY9b80yYY02Q5ALQdB2WP3R7/Yl1PLwbFChx994Q3Un0G2XV5h3arlm4fZTViY10isjhQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/cerebras@0.2.13': - resolution: {integrity: sha512-PkVvWQfFTN4NGVVnlb4mogbdDyz3hydCKnffU8J8dHp2SBVVOElAYYm+MbHhF1k3cy8i4mBBoYAgZ8wch3K/OA==} + '@ai-sdk/cerebras@0.2.16': + resolution: {integrity: sha512-FbT3gFYADXwyjQlpluWxl5fRnkJvGMHX5ahLZZ7qqpDQHH86ZO6X9j9Gk6vcMCwNPpI7+miiK79q1e5wzVHBSQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/deepseek@0.2.13': - resolution: {integrity: sha512-+Vw+nMdypupRfQb37wT1YmNNAROhCBqVRhHule3dk8A26N/W8GlAfVwLiae1/fK275UddbQWpUTMzvrx7n9HDg==} + '@ai-sdk/deepseek@0.2.16': + resolution: {integrity: sha512-pIlwtjNehCpDr1wqxtSbXshynW4CiwS6S3yAKHzHi73QtmS2Hg9kE1DB0zgENKaZLmbsc4UgigGM6FzuUd4M8Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/google@1.2.14': - resolution: {integrity: sha512-r3FSyyWl0KVjUlKn5o+vMl+Nk8Z/mV6xrqW+49g7fMoRVr/wkRxJZtHorrdDGRreCJubZyAk8ziSQSLpgv2H6w==} + '@ai-sdk/google@1.2.22': + resolution: {integrity: sha512-Ppxu3DIieF1G9pyQ5O1Z646GYR0gkC57YdBqXJ82qvCdhEhZHu0TWhmnOoeIWe2olSbuDeoOY+MfJrW8dzS3Hw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/groq@1.2.8': - resolution: {integrity: sha512-DRq0b4twVUh52DFnIhVC4F14Po8w+76sCdigMRRIcAiSmGRr9I3Vyot36tun1q4tBZMYSvQUss60W3eiaoa6mg==} + '@ai-sdk/groq@1.2.9': + resolution: {integrity: sha512-7MoDaxm8yWtiRbD1LipYZG0kBl+Xe0sv/EeyxnHnGPZappXdlgtdOgTZVjjXkT3nWP30jjZi9A45zoVrBMb3Xg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/mistral@1.2.7': - resolution: {integrity: sha512-MbOMGfnHKcsvjbv4d6OT7Oaz+Wp4jD8yityqC4hASoKoW1s7L52woz25ES8RgAgTRlfbEZ3MOxEzLu58I228bQ==} + '@ai-sdk/mistral@1.2.8': + resolution: {integrity: sha512-lv857D9UJqCVxiq2Fcu7mSPTypEHBUqLl1K+lCaP6X/7QAkcaxI36QDONG+tOhGHJOXTsS114u8lrUTaEiGXbg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai-compatible@0.2.13': - resolution: {integrity: sha512-tB+lL8Z3j0qDod/mvxwjrPhbLUHp/aQW+NvMoJaqeTtP+Vmv5qR800pncGczxn5WN0pllQm+7aIRDnm69XeSbg==} + '@ai-sdk/openai-compatible@0.2.16': + resolution: {integrity: sha512-LkvfcM8slJedRyJa/MiMiaOzcMjV1zNDwzTHEGz7aAsgsQV0maLfmJRi/nuSwf5jmp0EouC+JXXDUj2l94HgQw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/openai@1.3.21': - resolution: {integrity: sha512-ipAhkRKUd2YaMmn7DAklX3N7Ywx/rCsJHVyb0V/lKRqPcc612qAFVbjg+Uve8QYJlbPxgfsM4s9JmCFp6PSdYw==} + '@ai-sdk/openai@1.3.24': + resolution: {integrity: sha512-GYXnGJTHRTZc4gJMSmFRgEQudjqd4PUN0ZjQhPwOAYH1yOAvQoG/Ikqs+HyISRbLPCrhbZnPKCNHuRU4OfpW0Q==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@ai-sdk/perplexity@1.1.8': - resolution: {integrity: sha512-hdyMknEKRhUr4AwIswUNsrT5XdQ35tZl9jAiyi1VbhxfW0mCr5dxPt/nYWYN0sc+2m7yfG3L3D5J5V7GIJiqzg==} + '@ai-sdk/perplexity@1.1.9': + resolution: {integrity: sha512-Ytolh/v2XupXbTvjE18EFBrHLoNMH0Ueji3lfSPhCoRUfkwrgZ2D9jlNxvCNCCRiGJG5kfinSHvzrH5vGDklYA==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -293,8 +296,8 @@ packages: zod: optional: true - '@ai-sdk/provider-utils@2.2.7': - resolution: {integrity: sha512-kM0xS3GWg3aMChh9zfeM+80vEZfXzR3JEUBdycZLtbRZ2TRT8xOj3WodGHPb06sUK5yD7pAXC/P7ctsi2fvUGQ==} + '@ai-sdk/provider-utils@2.2.8': + resolution: {integrity: sha512-fqhG+4sCVv8x7nFzYnFo19ryhAa3w096Kmc3hWxMQfW/TubPOmt3A6tYZhl4mUfQWWQMsuSkLrtjlWuXBVSGQA==} engines: {node: '>=18'} peerDependencies: zod: ^3.23.8 @@ -323,8 +326,8 @@ packages: zod: optional: true - '@ai-sdk/react@1.2.10': - resolution: {integrity: sha512-iUZfApc6aftVT7f41y9b1NPk0dZFt9vRR0/gkZsKdP56ShcKtuTu44BkjtWdrBs7fcTbN2BQZtDao1AY1GxzsQ==} + '@ai-sdk/react@1.2.12': + resolution: {integrity: sha512-jK1IZZ22evPZoQW3vlkZ7wvjYGYF+tRBKXtrcolduIkQ/m/sOAVcVeVDUDvh1T91xCnWCdUGCPZg2avZ90mv3g==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -351,8 +354,8 @@ packages: svelte: optional: true - '@ai-sdk/togetherai@0.2.13': - resolution: {integrity: sha512-DmcH+5aeLPpVCQYZgmM1nnKNMkqvJR8lWStFze5+PbKJsUHGqli8zdGEEOJ7iGWGOFONo7EpdW/tJeGP1xNXdw==} + '@ai-sdk/togetherai@0.2.16': + resolution: {integrity: sha512-vCtYUrIdep0M6GIvemyYpwSa9SWOleb/2cuGNXcxzU2xy4GJQdHK/MigQbT9rfeuqnjU2W9KIdtAVJGVwIBogw==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -366,8 +369,8 @@ packages: zod: optional: true - '@ai-sdk/ui-utils@1.2.9': - resolution: {integrity: sha512-cbiLzgXDv3+460f61UVSykn3XdKOS+SHs/EANw+pdOQKwn8JN7rZJL/ggPyMuZ7D9lO3oWOfOJ1QS+9uClfVug==} + '@ai-sdk/ui-utils@1.2.11': + resolution: {integrity: sha512-3zcwCc8ezzFlwp3ZD15wAPjf2Au4s3vAbKsXQVyhxODHcmu0iyPO2Eua6D/vicq/AUm/BAo60r97O6HU+EI0+w==} engines: {node: '>=18'} peerDependencies: zod: ^3.23.8 @@ -381,32 +384,28 @@ packages: vue: optional: true - '@ai-sdk/xai@1.2.15': - resolution: {integrity: sha512-18qEYyVHIqTiOMePE00bfx4kJrTHM4dV3D3Rpe+eBISlY80X1FnzZRnRTJo3Q6MOSmW5+ZKVaX9jtryhoFpn0A==} + '@ai-sdk/xai@1.2.18': + resolution: {integrity: sha512-T70WEu+UKXD/Fdj9ck+ujIqUp5ru06mJ/7usePXeXL5EeTi8KXevXF9AMIDdhyD5MZPT2jI8t19lEr8Bhuh/Bg==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 - '@alcalzone/ansi-tokenize@0.1.3': - resolution: {integrity: sha512-3yWxPTq3UQ/FY9p1ErPxIyfT64elWaMvM9lIHnaqpyft63tkxodF5aUElYHrdisWve5cETkh1+KBw1yJuW0aRw==} - engines: {node: '>=14.13.1'} + '@alcalzone/ansi-tokenize@0.2.0': + resolution: {integrity: sha512-qI/5TaaaCZE4yeSZ83lu0+xi1r88JSxUjnH4OP/iZF7+KKZ75u3ee5isd0LxX+6N8U0npL61YrpbthILHB6BnA==} + engines: {node: '>=18'} '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@anthropic-ai/sdk@0.39.0': resolution: {integrity: sha512-eMyDIPRZbt1CCLErRCi3exlAvNkBtRe+kW5vvJyef93PmNr/clstYgHhtvmkxN82nlKgzyGPCyGxrm0JQ1ZIdg==} - '@ark/schema@0.46.0': - resolution: {integrity: sha512-c2UQdKgP2eqqDArfBqQIJppxJHvNNXuQPeuSPlDML4rjw+f1cu0qAlzOG4b8ujgm9ctIDWwhpyw6gjG5ledIVQ==} + '@ark/schema@0.49.0': + resolution: {integrity: sha512-GphZBLpW72iS0v4YkeUtV3YIno35Gimd7+ezbPO9GwEi9kzdUrPVjvf6aXSBAfHikaFc/9pqZOpv3pOXnC71tw==} - '@ark/util@0.46.0': - resolution: {integrity: sha512-JPy/NGWn/lvf1WmGCPw2VGpBg5utZraE84I7wli18EDF3p3zc/e9WolT35tINeZO3l7C77SjqRJeAUoT0CvMRg==} + '@ark/util@0.49.0': + resolution: {integrity: sha512-/BtnX7oCjNkxi2vi6y1399b+9xd1jnCrDYhZ61f0a+3X8x8DxlK52VgEEzyuC2UQMPACIfYrmHkhD3lGt2GaMA==} '@asteasolutions/zod-to-openapi@6.4.0': resolution: {integrity: sha512-8cxfF7AHHx2PqnN4Cd8/O8CBu/nVYJP9DpnfVLW3BFb66VJDnqI/CczZnkqMc3SNh6J9GiX7JbJ5T4BSP4HZ2Q==} @@ -416,8 +415,8 @@ packages: '@asyncapi/parser@3.4.0': resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} - '@asyncapi/specs@6.8.1': - resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} + '@asyncapi/specs@6.10.0': + resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} @@ -431,17 +430,17 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.4': + resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.28.2': - resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} + '@babel/types@7.28.4': + resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==} engines: {node: '>=6.9.0'} '@braintrust/core@0.0.34': @@ -450,17 +449,17 @@ packages: '@braintrust/core@0.0.67': resolution: {integrity: sha512-aCWOIgGKeYeEQmU8FcPyfp0phaLpt4iaDcealooaI7Lw/Loz2LeHu5FdzVzu34B7zw3ZOkzyrr0I4X/YFdTy1w==} - '@browserbasehq/sdk@2.5.0': - resolution: {integrity: sha512-bcnbYZvm5Ht1nrHUfWDK4crspiTy1ESJYMApsMiOTUnlKOan0ocRD6m7hZH34iSC2c2XWsoryR80cwsYgCBWzQ==} + '@browserbasehq/sdk@2.6.0': + resolution: {integrity: sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==} '@cfworker/json-schema@4.1.1': resolution: {integrity: sha512-gAmrUZSGtKc3AiBL71iNWxDsyUC5uMaKKGdvzYsBoTW/xi42JQHl7eKV2OYzCUqvc+D2RCcf7EXY2iCyFIk6og==} - '@changesets/apply-release-plan@7.0.12': - resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} + '@changesets/apply-release-plan@7.0.13': + resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} - '@changesets/assemble-release-plan@6.0.6': - resolution: {integrity: sha512-Frkj8hWJ1FRZiY3kzVCKzS0N5mMwWKwmv9vpam7vt8rZjLL1JMthdh6pSDVSPumHPshTTkKZ0VtNbE0cJHZZUg==} + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} @@ -468,8 +467,8 @@ packages: '@changesets/changelog-github@0.5.1': resolution: {integrity: sha512-BVuHtF+hrhUScSoHnJwTELB4/INQxVFc+P/Qdt20BLiBFIHFJDDUaGsZw+8fQeJTRP5hJZrzpt3oZWh0G19rAQ==} - '@changesets/cli@2.29.2': - resolution: {integrity: sha512-vwDemKjGYMOc0l6WUUTGqyAWH3AmueeyoJa1KmFRtCYiCoY5K3B68ErYpDB6H48T4lLI4czum4IEjh6ildxUeg==} + '@changesets/cli@2.29.7': + resolution: {integrity: sha512-R7RqWoaksyyKXbKXBTbT4REdy22yH81mcFK6sWtqSanxUCbUi9Uf+6aqxZtDQouIqPdem2W56CdxXgsxdq7FLQ==} hasBin: true '@changesets/config@3.1.1': @@ -484,8 +483,8 @@ packages: '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.10': - resolution: {integrity: sha512-CCJ/f3edYaA3MqoEnWvGGuZm0uMEMzNJ97z9hdUR34AOvajSwySwsIzC/bBu3+kuGDsB+cny4FljG8UBWAa7jg==} + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -517,8 +516,8 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} '@esbuild/aix-ppc64@0.21.5': resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} @@ -526,8 +525,8 @@ packages: cpu: [ppc64] os: [aix] - '@esbuild/aix-ppc64@0.25.3': - resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} + '@esbuild/aix-ppc64@0.25.10': + resolution: {integrity: sha512-0NFWnA+7l41irNuaSVlLfgNT12caWJVLzp5eAVhZ0z1qpxbockccEt3s+149rE64VUI3Ml2zt8Nv5JVc4QXTsw==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -544,8 +543,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.3': - resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} + '@esbuild/android-arm64@0.25.10': + resolution: {integrity: sha512-LSQa7eDahypv/VO6WKohZGPSJDq5OVOo3UoFR1E4t4Gj1W7zEQMUhI+lo81H+DtB+kP+tDgBp+M4oNCwp6kffg==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -562,8 +561,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.3': - resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} + '@esbuild/android-arm@0.25.10': + resolution: {integrity: sha512-dQAxF1dW1C3zpeCDc5KqIYuZ1tgAdRXNoZP7vkBIRtKZPYe2xVr/d3SkirklCHudW1B45tGiUlz2pUWDfbDD4w==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -580,8 +579,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.3': - resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} + '@esbuild/android-x64@0.25.10': + resolution: {integrity: sha512-MiC9CWdPrfhibcXwr39p9ha1x0lZJ9KaVfvzA0Wxwz9ETX4v5CHfF09bx935nHlhi+MxhA63dKRRQLiVgSUtEg==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -598,8 +597,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.3': - resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} + '@esbuild/darwin-arm64@0.25.10': + resolution: {integrity: sha512-JC74bdXcQEpW9KkV326WpZZjLguSZ3DfS8wrrvPMHgQOIEIG/sPXEN/V8IssoJhbefLRcRqw6RQH2NnpdprtMA==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -616,8 +615,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.3': - resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} + '@esbuild/darwin-x64@0.25.10': + resolution: {integrity: sha512-tguWg1olF6DGqzws97pKZ8G2L7Ig1vjDmGTwcTuYHbuU6TTjJe5FXbgs5C1BBzHbJ2bo1m3WkQDbWO2PvamRcg==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -634,8 +633,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.3': - resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} + '@esbuild/freebsd-arm64@0.25.10': + resolution: {integrity: sha512-3ZioSQSg1HT2N05YxeJWYR+Libe3bREVSdWhEEgExWaDtyFbbXWb49QgPvFH8u03vUPX10JhJPcz7s9t9+boWg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -652,8 +651,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.3': - resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} + '@esbuild/freebsd-x64@0.25.10': + resolution: {integrity: sha512-LLgJfHJk014Aa4anGDbh8bmI5Lk+QidDmGzuC2D+vP7mv/GeSN+H39zOf7pN5N8p059FcOfs2bVlrRr4SK9WxA==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -670,8 +669,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.3': - resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} + '@esbuild/linux-arm64@0.25.10': + resolution: {integrity: sha512-5luJWN6YKBsawd5f9i4+c+geYiVEw20FVW5x0v1kEMWNq8UctFjDiMATBxLvmmHA4bf7F6hTRaJgtghFr9iziQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -688,8 +687,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.3': - resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} + '@esbuild/linux-arm@0.25.10': + resolution: {integrity: sha512-oR31GtBTFYCqEBALI9r6WxoU/ZofZl962pouZRTEYECvNF/dtXKku8YXcJkhgK/beU+zedXfIzHijSRapJY3vg==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -706,8 +705,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.3': - resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} + '@esbuild/linux-ia32@0.25.10': + resolution: {integrity: sha512-NrSCx2Kim3EnnWgS4Txn0QGt0Xipoumb6z6sUtl5bOEZIVKhzfyp/Lyw4C1DIYvzeW/5mWYPBFJU3a/8Yr75DQ==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -724,8 +723,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.3': - resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} + '@esbuild/linux-loong64@0.25.10': + resolution: {integrity: sha512-xoSphrd4AZda8+rUDDfD9J6FUMjrkTz8itpTITM4/xgerAZZcFW7Dv+sun7333IfKxGG8gAq+3NbfEMJfiY+Eg==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -742,8 +741,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.3': - resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} + '@esbuild/linux-mips64el@0.25.10': + resolution: {integrity: sha512-ab6eiuCwoMmYDyTnyptoKkVS3k8fy/1Uvq7Dj5czXI6DF2GqD2ToInBI0SHOp5/X1BdZ26RKc5+qjQNGRBelRA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -760,8 +759,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.3': - resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} + '@esbuild/linux-ppc64@0.25.10': + resolution: {integrity: sha512-NLinzzOgZQsGpsTkEbdJTCanwA5/wozN9dSgEl12haXJBzMTpssebuXR42bthOF3z7zXFWH1AmvWunUCkBE4EA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -778,8 +777,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.3': - resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} + '@esbuild/linux-riscv64@0.25.10': + resolution: {integrity: sha512-FE557XdZDrtX8NMIeA8LBJX3dC2M8VGXwfrQWU7LB5SLOajfJIxmSdyL/gU1m64Zs9CBKvm4UAuBp5aJ8OgnrA==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -796,8 +795,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.3': - resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} + '@esbuild/linux-s390x@0.25.10': + resolution: {integrity: sha512-3BBSbgzuB9ajLoVZk0mGu+EHlBwkusRmeNYdqmznmMc9zGASFjSsxgkNsqmXugpPk00gJ0JNKh/97nxmjctdew==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -814,14 +813,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.3': - resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} + '@esbuild/linux-x64@0.25.10': + resolution: {integrity: sha512-QSX81KhFoZGwenVyPoberggdW1nrQZSvfVDAIUXr3WqLRZGZqWk/P4T8p2SP+de2Sr5HPcvjhcJzEiulKgnxtA==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.3': - resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} + '@esbuild/netbsd-arm64@0.25.10': + resolution: {integrity: sha512-AKQM3gfYfSW8XRk8DdMCzaLUFB15dTrZfnX8WXQoOUpUBQ+NaAFCP1kPS/ykbbGYz7rxn0WS48/81l9hFl3u4A==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -838,14 +837,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.3': - resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} + '@esbuild/netbsd-x64@0.25.10': + resolution: {integrity: sha512-7RTytDPGU6fek/hWuN9qQpeGPBZFfB4zZgcz2VK2Z5VpdUxEI8JKYsg3JfO0n/Z1E/6l05n0unDCNc4HnhQGig==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.3': - resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} + '@esbuild/openbsd-arm64@0.25.10': + resolution: {integrity: sha512-5Se0VM9Wtq797YFn+dLimf2Zx6McttsH2olUBsDml+lm0GOCRVebRWUvDtkY4BWYv/3NgzS8b/UM3jQNh5hYyw==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -862,12 +861,18 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.3': - resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} + '@esbuild/openbsd-x64@0.25.10': + resolution: {integrity: sha512-XkA4frq1TLj4bEMB+2HnI0+4RnjbuGZfet2gs/LNs5Hc7D89ZQBHQ0gL2ND6Lzu1+QVkjp3x1gIcPKzRNP8bXw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.10': + resolution: {integrity: sha512-AVTSBhTX8Y/Fz6OmIVBip9tJzZEUcY8WLh7I59+upa5/GPhh2/aM6bvOMQySspnCCHvFi79kMtdJS1w0DXAeag==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} @@ -880,8 +885,8 @@ packages: cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.3': - resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} + '@esbuild/sunos-x64@0.25.10': + resolution: {integrity: sha512-fswk3XT0Uf2pGJmOpDB7yknqhVkJQkAQOcW/ccVOtfx05LkbWOaRAtn5SaqXypeKQra1QaEa841PgrSL9ubSPQ==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -898,8 +903,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.3': - resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} + '@esbuild/win32-arm64@0.25.10': + resolution: {integrity: sha512-ah+9b59KDTSfpaCg6VdJoOQvKjI33nTaQr4UluQwW7aEwZQsbMCfTmfEO4VyewOxx4RaDT/xCy9ra2GPWmO7Kw==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -916,8 +921,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.3': - resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} + '@esbuild/win32-ia32@0.25.10': + resolution: {integrity: sha512-QHPDbKkrGO8/cz9LKVnJU22HOi4pxZnZhhA2HYHez5Pz4JeffhDjf85E57Oyco163GnzNCVkZK0b/n4Y0UHcSw==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -934,14 +939,14 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.3': - resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} + '@esbuild/win32-x64@0.25.10': + resolution: {integrity: sha512-9KpxSVFCu0iK1owoez6aC/s/EdUQLDN3adTxGCqxMVhrPDj6bt5dbrHDXUuq+Bs2vATFBBrQS5vdQ/Ed2P+nbw==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.6.1': - resolution: {integrity: sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -950,34 +955,49 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.21.0': + resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.13.0': - resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.25.1': - resolution: {integrity: sha512-dEIwmjntEx8u3Uvv+kr3PDeeArL8Hw07H9kyYxCjnM9pBjfEhk6uLXSchxxzgiwtRhhzVzqmUSDFBOi1TuZ7qg==} + '@eslint/js@9.36.0': + resolution: {integrity: sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.8': - resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@floating-ui/core@1.7.3': + resolution: {integrity: sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==} + + '@floating-ui/dom@1.7.4': + resolution: {integrity: sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==} + + '@floating-ui/react-dom@2.1.6': + resolution: {integrity: sha512-4JX6rEatQEvlmgU80wZyq9RT96HZJa88q8hp0pBd+LrczeDI4o6uA2M+uvxngVHo4Ihr8uibXxH6+70zhAFrVw==} + peerDependencies: + react: '>=16.8.0' + react-dom: '>=16.8.0' + + '@floating-ui/utils@0.2.10': + resolution: {integrity: sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==} + '@google/genai@0.8.0': resolution: {integrity: sha512-Zs+OGyZKyMbFofGJTR9/jTQSv8kITh735N3tEuIZj4VlMQXTC0soCFahysJ9NaeenRlD7xGb6fyqmX+FwrpU6Q==} engines: {node: '>=18.0.0'} @@ -986,20 +1006,16 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@img/sharp-darwin-arm64@0.33.5': @@ -1107,8 +1123,21 @@ packages: cpu: [x64] os: [win32] - '@inquirer/checkbox@4.1.5': - resolution: {integrity: sha512-swPczVU+at65xa5uPfNP9u3qx/alNwiaykiI/ExpsmMSQW55trmZcwhYWzw/7fj+n6Q8z1eENvR7vFfq9oPSAQ==} + '@inquirer/ansi@1.0.0': + resolution: {integrity: sha512-JWaTfCxI1eTmJ1BIv86vUfjVatOdxwD0DAVKYevY8SazeUUZtW+tNbsdejVO1GYE0GXJW1N1ahmiC3TFd+7wZA==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.2.4': + resolution: {integrity: sha512-2n9Vgf4HSciFq8ttKXk+qy+GsyTXPV1An6QAwe/8bkbbqvG4VW1I/ZY1pNu2rf+h9bdzMLPbRSfcNxkHBy/Ydw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.18': + resolution: {integrity: sha512-MilmWOzHa3Ks11tzvuAmFoAd/wRuaP3SwlT1IZhyMke31FKLxPiuDWcGXhU+PKveNOpAc4axzAgrgxuIJJRmLw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1116,8 +1145,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.9': - resolution: {integrity: sha512-NgQCnHqFTjF7Ys2fsqK2WtnA8X1kHyInyG+nMIuHowVTIgIuS10T4AznI/PvbqSpJqjCUqNBlKGh1v3bwLFL4w==} + '@inquirer/core@10.2.2': + resolution: {integrity: sha512-yXq/4QUnk4sHMtmbd7irwiepjB8jXU0kkFRL4nr/aDBA2mDz13cMakEWdDwX3eSCTkk03kwcndD1zfRAIlELxA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1125,8 +1154,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.10': - resolution: {integrity: sha512-roDaKeY1PYY0aCqhRmXihrHjoSW2A00pV3Ke5fTpMCkzcGF64R8e0lw3dK+eLEHwS4vB5RnW1wuQmvzoRul8Mw==} + '@inquirer/editor@4.2.20': + resolution: {integrity: sha512-7omh5y5bK672Q+Brk4HBbnHNowOZwrb/78IFXdrEB9PfdxL3GudQyDk8O9vQ188wj3xrEebS2M9n18BjJoI83g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1134,8 +1163,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.10': - resolution: {integrity: sha512-5GVWJ+qeI6BzR6TIInLP9SXhWCEcvgFQYmcRG6d6RIlhFjM5TyG18paTGBgRYyEouvCmzeco47x9zX9tQEofkw==} + '@inquirer/expand@4.0.20': + resolution: {integrity: sha512-Dt9S+6qUg94fEvgn54F2Syf0Z3U8xmnBI9ATq2f5h9xt09fs2IJXSCIXyyVHwvggKWFXEY/7jATRo2K6Dkn6Ow==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1143,8 +1172,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.12': - resolution: {integrity: sha512-jV8QoZE1fC0vPe6TnsOfig+qwu7Iza1pkXoUJ3SroRagrt2hxiL+RbM432YAihNR7m7XnU0HWl/WQ35RIGmXHw==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1152,12 +1181,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.11': - resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} + '@inquirer/figures@1.0.13': + resolution: {integrity: sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==} engines: {node: '>=18'} - '@inquirer/input@4.1.9': - resolution: {integrity: sha512-mshNG24Ij5KqsQtOZMgj5TwEjIf+F2HOESk6bjMwGWgcH5UBe8UoljwzNFHqdMbGYbgAf6v2wU/X9CAdKJzgOA==} + '@inquirer/input@4.2.4': + resolution: {integrity: sha512-cwSGpLBMwpwcZZsc6s1gThm0J+it/KIJ+1qFL2euLmSKUMGumJ5TcbMgxEjMjNHRGadouIYbiIgruKoDZk7klw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1165,8 +1194,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.12': - resolution: {integrity: sha512-7HRFHxbPCA4e4jMxTQglHJwP+v/kpFsCf2szzfBHy98Wlc3L08HL76UDiA87TOdX5fwj2HMOLWqRWv9Pnn+Z5Q==} + '@inquirer/number@3.0.20': + resolution: {integrity: sha512-bbooay64VD1Z6uMfNehED2A2YOPHSJnQLs9/4WNiV/EK+vXczf/R988itL2XLDGTgmhMF2KkiWZo+iEZmc4jqg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1174,8 +1203,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.12': - resolution: {integrity: sha512-FlOB0zvuELPEbnBYiPaOdJIaDzb2PmJ7ghi/SVwIHDDSQ2K4opGBkF+5kXOg6ucrtSUQdLhVVY5tycH0j0l+0g==} + '@inquirer/password@4.0.20': + resolution: {integrity: sha512-nxSaPV2cPvvoOmRygQR+h0B+Av73B01cqYLcr7NXcGXhbmsYfUb8fDdw2Us1bI2YsX+VvY7I7upgFYsyf8+Nug==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1183,8 +1212,8 @@ packages: '@types/node': optional: true - '@inquirer/prompts@7.5.0': - resolution: {integrity: sha512-tk8Bx7l5AX/CR0sVfGj3Xg6v7cYlFBkEahH+EgBB+cZib6Fc83dwerTbzj7f2+qKckjIUGsviWRI1d7lx6nqQA==} + '@inquirer/prompts@7.8.6': + resolution: {integrity: sha512-68JhkiojicX9SBUD8FE/pSKbOKtwoyaVj1kwqLfvjlVXZvOy3iaSWX4dCLsZyYx/5Ur07Fq+yuDNOen+5ce6ig==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1192,8 +1221,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.0': - resolution: {integrity: sha512-6ob45Oh9pXmfprKqUiEeMz/tjtVTFQTgDDz1xAMKMrIvyrYjAmRbQZjMJfsictlL4phgjLhdLu27IkHNnNjB7g==} + '@inquirer/rawlist@4.1.8': + resolution: {integrity: sha512-CQ2VkIASbgI2PxdzlkeeieLRmniaUU1Aoi5ggEdm6BIyqopE9GuDXdDOj9XiwOqK5qm72oI2i6J+Gnjaa26ejg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1201,8 +1230,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.0.12': - resolution: {integrity: sha512-H/kDJA3kNlnNIjB8YsaXoQI0Qccgf0Na14K1h8ExWhNmUg2E941dyFPrZeugihEa9AZNW5NdsD/NcvUME83OPQ==} + '@inquirer/search@3.1.3': + resolution: {integrity: sha512-D5T6ioybJJH0IiSUK/JXcoRrrm8sXwzrVMjibuPs+AgxmogKslaafy1oxFiorNI4s3ElSkeQZbhYQgLqiL8h6Q==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1210,8 +1239,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.2.0': - resolution: {integrity: sha512-KkXQ4aSySWimpV4V/TUJWdB3tdfENZUU765GjOIZ0uPwdbGIG6jrxD4dDf1w68uP+DVtfNhr1A92B+0mbTZ8FA==} + '@inquirer/select@4.3.4': + resolution: {integrity: sha512-Qp20nySRmfbuJBBsgPU7E/cL62Hf250vMZRzYDcBHty2zdD1kKCnoDFWRr0WO2ZzaXp3R7a4esaVGJUx0E6zvA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1219,8 +1248,8 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.6': - resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} + '@inquirer/type@3.0.8': + resolution: {integrity: sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1232,32 +1261,21 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} - - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} @@ -1283,8 +1301,8 @@ packages: '@kwsites/promise-deferred@1.1.1': resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} - '@langchain/core@0.3.50': - resolution: {integrity: sha512-0MBVe7dZ4h3a3MJAg/YesWBvwkDg8t2rDIGg2Q11DxRBnxB7OqmvBlbZ1ftaDvoBZzxMY+8E58OsCLuay3Bk9w==} + '@langchain/core@0.3.77': + resolution: {integrity: sha512-aqXHea9xfpVn6VoCq9pjujwFqrh3vw3Fgm9KFUZJ1cF7Bx5HI62DvQPw8LlRB3NB4dhwBBA1ldAVkkkd1du8nA==} engines: {node: '>=18'} '@langchain/openai@0.4.9': @@ -1302,62 +1320,63 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mdx-js/mdx@3.1.0': - resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': '>=16' react: '>=16' - '@mintlify/cli@4.0.682': - resolution: {integrity: sha512-91XL+qCw9hm2KpMgKsNASIfUHYLhYwSmeoMRkE6p5Iy7P5dPAxJd+PUFPXdh4EGhMNALGRLHzm9rUoNvthM89w==} + '@mintlify/cli@4.0.725': + resolution: {integrity: sha512-F4CGPOlb4/xaT14+Jsk1eNG4t22DZv8zOH+rqAXjiJwU9ay0HOhAn6x5eVCX7oTSTGuw3zMW36qClNHkj85l7w==} engines: {node: '>=18.0.0'} hasBin: true - '@mintlify/common@1.0.496': - resolution: {integrity: sha512-OSYwjfiyfuDAoj03hOD2MNCGU9mz/hxCb/r/VC38xDwiukZe0i7UB4p6ytyyNKW3UrMkNPc33bMvCS0UNu6S8Q==} + '@mintlify/common@1.0.535': + resolution: {integrity: sha512-2oKMW123FLKcc78a6+KN1Wjh6YHWsrJd/DwdwuE3WZBeXXKYLwEs7zwYS8sX46bk9Ra+/irKk9d6btogxJLqIw==} - '@mintlify/link-rot@3.0.629': - resolution: {integrity: sha512-fFRY1CeJJ5SzcNTWHKSefcilhmUTMDLT0k4ocq6V6668piLhsHcV0lkQl1xZs9VaVpAxUJs76HLC/i2XimfBGQ==} + '@mintlify/link-rot@3.0.672': + resolution: {integrity: sha512-kHSpkpiHvw3zrd9TL9yRQ6OWo8w5ujepWw7pBPWc4ouDuNj6D4Af6aan1uV8QCP1KWINisaZUGhlVSe39u+E0A==} engines: {node: '>=18.0.0'} - '@mintlify/mdx@2.0.3': - resolution: {integrity: sha512-UGlwavma8QooWAlhtXpTAG5MAUZTTUKI8Qu25Wqfp1HMOPrYGvo5YQPmlqqogbMsqDMcFPLP/ZYnaZsGUYBspQ==} + '@mintlify/mdx@2.0.11': + resolution: {integrity: sha512-yXwuM0BNCxNaJetPrh89c5Q2lhzU2al4QrOM3zLUdrPOdjOpPmv8ewcdiXV/qIhZDpl5Ll9k47dsz33bZjVWTg==} peerDependencies: + '@radix-ui/react-popover': ^1.1.15 react: ^18.3.1 react-dom: ^18.3.1 - '@mintlify/models@0.0.219': - resolution: {integrity: sha512-/uR4hAwpcJW9+zbmZL48kKFnWLkOxhIqoGWvZzjg0CniVhR4emtQJAps80WqLAhz0iJgCQxg/axtA7leaznDzQ==} + '@mintlify/models@0.0.229': + resolution: {integrity: sha512-1P3R6dQFNzjTbmVDCQf/vAGFGOEUdUv6sCaJAmZCNWY2mhwgvDU/Oa2YLiNmVrAqnWDH1Pkz5nq+i7gClrdXgA==} engines: {node: '>=18.0.0'} '@mintlify/openapi-parser@0.0.7': resolution: {integrity: sha512-3ecbkzPbsnkKVZJypVL0H5pCTR7a4iLv4cP7zbffzAwy+vpH70JmPxNVpPPP62yLrdZlfNcMxu5xKeT7fllgMg==} engines: {node: '>=18'} - '@mintlify/prebuild@1.0.618': - resolution: {integrity: sha512-onCrK/PnBK2CK+JrbhJHQMh9kAzQrfo/XcnmfNz2ENFQtx4HM1Igkky/Ul6qrAn91wEpojPOtCbBuYTjyl/umw==} + '@mintlify/prebuild@1.0.659': + resolution: {integrity: sha512-JZbGL+JwCYXVlwwFPwCg5NInl2n2vsxeHrXK/WswUZ7FGsNnKMWGhWrzN6KVYiELvEwh87aGqVUMnTloW1aKNA==} - '@mintlify/previewing@4.0.665': - resolution: {integrity: sha512-dP5t3O1liyimSg8WeGU9ZmKcMpsVT3ic4AiaACcfk4YcrvTCz1HI0Vxf58/uxd5u6lYRKLJzOEsa8jqBFKoaiQ==} + '@mintlify/previewing@4.0.708': + resolution: {integrity: sha512-MK/ZrmG4wTPgX+hviFa3IQYCis4wmAcJ9zu5NHRDKohmT3qhEnVRHE6Ksf8bXBHHy6ArQB4erydXFSn3wpFb/g==} engines: {node: '>=18.0.0'} - '@mintlify/scraping@4.0.354': - resolution: {integrity: sha512-K9QhhEYvObRncobsqWQFBdon3l/0dUCNWdFC9qL5uH3GK2mH2veVXSE4iEi0tlZAixh2jwdN1Ucj8f+DbhXivA==} + '@mintlify/scraping@4.0.394': + resolution: {integrity: sha512-Mibw2Rm5le4twdiMKaauAVksDGl5VjuBF2lBmXjp/JQVqVlQEIqg6cxWg13u2lgVjCDSIIOrul8K7+/XO7xRmQ==} engines: {node: '>=18.0.0'} hasBin: true - '@mintlify/validation@0.1.442': - resolution: {integrity: sha512-s99u9Kv92nGjUvkdMpi7Mks+B8sG3t30p/8NppS04GngqlE16VDXp8z3qHhWUTJnjJFJZCyraz8zzWaonhWykA==} + '@mintlify/validation@0.1.471': + resolution: {integrity: sha512-lf4zp9sJspXmDA9HH9VaJfK4ll+BaaH9XxuU2SVNuploKjRKmpHYFfN9YI42pA2bda/X32rkqDZSRI+JHdQcNg==} - '@modelcontextprotocol/sdk@1.17.2': - resolution: {integrity: sha512-EFLRNXR/ixpXQWu6/3Cu30ndDFIFNaqUXcTqsGebujeMan9FzhAaFFswLRiFj61rgygDRr8WO1N+UijjgRxX9g==} + '@modelcontextprotocol/sdk@1.18.1': + resolution: {integrity: sha512-d//GE8/Yh7aC3e7p+kZG8JqqEAwwDUmAfvH1quogtbk+ksS6E0RR6toKKESPYYZVre0meqkJb27zb+dhqE9Sgw==} engines: {node: '>=18'} - '@next/env@14.2.28': - resolution: {integrity: sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g==} + '@next/env@14.2.32': + resolution: {integrity: sha512-n9mQdigI6iZ/DF6pCTwMKeWgF2e8lg7qgt5M7HXMLtyhZYMnf/u905M18sSpPmHL9MKp9JHo56C6jrD2EvWxng==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1382,8 +1401,8 @@ packages: resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} - '@playwright/test@1.52.0': - resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} + '@playwright/test@1.55.0': + resolution: {integrity: sha512-04IXzPwHrW69XusN/SIdDdKZBzMfOT9UNT/YiJit/xpy2VuAoB8NHc8Aplb96zsWDddLnbkPL3TsmrS04ZU2xQ==} engines: {node: '>=18'} hasBin: true @@ -1392,126 +1411,359 @@ packages: engines: {node: '>=18'} hasBin: true - '@rollup/rollup-android-arm-eabi@4.40.1': - resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} + '@radix-ui/primitive@1.1.3': + resolution: {integrity: sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==} + + '@radix-ui/react-arrow@1.1.7': + resolution: {integrity: sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-compose-refs@1.1.2': + resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-context@1.1.2': + resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-dismissable-layer@1.1.11': + resolution: {integrity: sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-focus-guards@1.1.3': + resolution: {integrity: sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-focus-scope@1.1.7': + resolution: {integrity: sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-id@1.1.1': + resolution: {integrity: sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-popover@1.1.15': + resolution: {integrity: sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-popper@1.2.8': + resolution: {integrity: sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-portal@1.1.9': + resolution: {integrity: sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-presence@1.1.5': + resolution: {integrity: sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-primitive@2.1.3': + resolution: {integrity: sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==} + peerDependencies: + '@types/react': '*' + '@types/react-dom': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + '@types/react-dom': + optional: true + + '@radix-ui/react-slot@1.2.3': + resolution: {integrity: sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-callback-ref@1.1.1': + resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-controllable-state@1.2.2': + resolution: {integrity: sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-effect-event@0.0.2': + resolution: {integrity: sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-escape-keydown@1.1.1': + resolution: {integrity: sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-layout-effect@1.1.1': + resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-rect@1.1.1': + resolution: {integrity: sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/react-use-size@1.1.1': + resolution: {integrity: sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==} + peerDependencies: + '@types/react': '*' + react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + '@radix-ui/rect@1.1.1': + resolution: {integrity: sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==} + + '@rollup/rollup-android-arm-eabi@4.52.0': + resolution: {integrity: sha512-VxDYCDqOaR7NXzAtvRx7G1u54d2kEHopb28YH/pKzY6y0qmogP3gG7CSiWsq9WvDFxOQMpNEyjVAHZFXfH3o/A==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.40.1': - resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} + '@rollup/rollup-android-arm64@4.52.0': + resolution: {integrity: sha512-pqDirm8koABIKvzL59YI9W9DWbRlTX7RWhN+auR8HXJxo89m4mjqbah7nJZjeKNTNYopqL+yGg+0mhCpf3xZtQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.40.1': - resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} + '@rollup/rollup-darwin-arm64@4.52.0': + resolution: {integrity: sha512-YCdWlY/8ltN6H78HnMsRHYlPiKvqKagBP1r+D7SSylxX+HnsgXGCmLiV3Y4nSyY9hW8qr8U9LDUx/Lo7M6MfmQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.40.1': - resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} + '@rollup/rollup-darwin-x64@4.52.0': + resolution: {integrity: sha512-z4nw6y1j+OOSGzuVbSWdIp1IUks9qNw4dc7z7lWuWDKojY38VMWBlEN7F9jk5UXOkUcp97vA1N213DF+Lz8BRg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.40.1': - resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} + '@rollup/rollup-freebsd-arm64@4.52.0': + resolution: {integrity: sha512-Q/dv9Yvyr5rKlK8WQJZVrp5g2SOYeZUs9u/t2f9cQ2E0gJjYB/BWoedXfUT0EcDJefi2zzVfhcOj8drWCzTviw==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.40.1': - resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} + '@rollup/rollup-freebsd-x64@4.52.0': + resolution: {integrity: sha512-kdBsLs4Uile/fbjZVvCRcKB4q64R+1mUq0Yd7oU1CMm1Av336ajIFqNFovByipciuUQjBCPMxwJhCgfG2re3rg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': - resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.0': + resolution: {integrity: sha512-aL6hRwu0k7MTUESgkg7QHY6CoqPgr6gdQXRJI1/VbFlUMwsSzPGSR7sG5d+MCbYnJmJwThc2ol3nixj1fvI/zQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.40.1': - resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} + '@rollup/rollup-linux-arm-musleabihf@4.52.0': + resolution: {integrity: sha512-BTs0M5s1EJejgIBJhCeiFo7GZZ2IXWkFGcyZhxX4+8usnIo5Mti57108vjXFIQmmJaRyDwmV59Tw64Ap1dkwMw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.40.1': - resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} + '@rollup/rollup-linux-arm64-gnu@4.52.0': + resolution: {integrity: sha512-uj672IVOU9m08DBGvoPKPi/J8jlVgjh12C9GmjjBxCTQc3XtVmRkRKyeHSmIKQpvJ7fIm1EJieBUcnGSzDVFyw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.40.1': - resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} + '@rollup/rollup-linux-arm64-musl@4.52.0': + resolution: {integrity: sha512-/+IVbeDMDCtB/HP/wiWsSzduD10SEGzIZX2945KSgZRNi4TSkjHqRJtNTVtVb8IRwhJ65ssI56krlLik+zFWkw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': - resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} + '@rollup/rollup-linux-loong64-gnu@4.52.0': + resolution: {integrity: sha512-U1vVzvSWtSMWKKrGoROPBXMh3Vwn93TA9V35PldokHGqiUbF6erSzox/5qrSMKp6SzakvyjcPiVF8yB1xKr9Pg==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': - resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} + '@rollup/rollup-linux-ppc64-gnu@4.52.0': + resolution: {integrity: sha512-X/4WfuBAdQRH8cK3DYl8zC00XEE6aM472W+QCycpQJeLWVnHfkv7RyBFVaTqNUMsTgIX8ihMjCvFF9OUgeABzw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.40.1': - resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} + '@rollup/rollup-linux-riscv64-gnu@4.52.0': + resolution: {integrity: sha512-xIRYc58HfWDBZoLmWfWXg2Sq8VCa2iJ32B7mqfWnkx5mekekl0tMe7FHpY8I72RXEcUkaWawRvl3qA55og+cwQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.40.1': - resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} + '@rollup/rollup-linux-riscv64-musl@4.52.0': + resolution: {integrity: sha512-mbsoUey05WJIOz8U1WzNdf+6UMYGwE3fZZnQqsM22FZ3wh1N887HT6jAOjXs6CNEK3Ntu2OBsyQDXfIjouI4dw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.40.1': - resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} + '@rollup/rollup-linux-s390x-gnu@4.52.0': + resolution: {integrity: sha512-qP6aP970bucEi5KKKR4AuPFd8aTx9EF6BvutvYxmZuWLJHmnq4LvBfp0U+yFDMGwJ+AIJEH5sIP+SNypauMWzg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.40.1': - resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} + '@rollup/rollup-linux-x64-gnu@4.52.0': + resolution: {integrity: sha512-nmSVN+F2i1yKZ7rJNKO3G7ZzmxJgoQBQZ/6c4MuS553Grmr7WqR7LLDcYG53Z2m9409z3JLt4sCOhLdbKQ3HmA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.40.1': - resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} + '@rollup/rollup-linux-x64-musl@4.52.0': + resolution: {integrity: sha512-2d0qRo33G6TfQVjaMR71P+yJVGODrt5V6+T0BDYH4EMfGgdC/2HWDVjSSFw888GSzAZUwuska3+zxNUCDco6rQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.40.1': - resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} + '@rollup/rollup-openharmony-arm64@4.52.0': + resolution: {integrity: sha512-A1JalX4MOaFAAyGgpO7XP5khquv/7xKzLIyLmhNrbiCxWpMlnsTYr8dnsWM7sEeotNmxvSOEL7F65j0HXFcFsw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.0': + resolution: {integrity: sha512-YQugafP/rH0eOOHGjmNgDURrpYHrIX0yuojOI8bwCyXwxC9ZdTd3vYkmddPX0oHONLXu9Rb1dDmT0VNpjkzGGw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.40.1': - resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} + '@rollup/rollup-win32-ia32-msvc@4.52.0': + resolution: {integrity: sha512-zYdUYhi3Qe2fndujBqL5FjAFzvNeLxtIqfzNEVKD1I7C37/chv1VxhscWSQHTNfjPCrBFQMnynwA3kpZpZ8w4A==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.40.1': - resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} + '@rollup/rollup-win32-x64-gnu@4.52.0': + resolution: {integrity: sha512-fGk03kQylNaCOQ96HDMeT7E2n91EqvCDd3RwvT5k+xNdFCeMGnj5b5hEgTGrQuyidqSsD3zJDQ21QIaxXqTBJw==} cpu: [x64] os: [win32] - '@shikijs/core@3.11.0': - resolution: {integrity: sha512-oJwU+DxGqp6lUZpvtQgVOXNZcVsirN76tihOLBmwILkKuRuwHteApP8oTXmL4tF5vS5FbOY0+8seXmiCoslk4g==} + '@rollup/rollup-win32-x64-msvc@4.52.0': + resolution: {integrity: sha512-6iKDCVSIUQ8jPMoIV0OytRKniaYyy5EbY/RRydmLW8ZR3cEBhxbWl5ro0rkUNe0ef6sScvhbY79HrjRm8i3vDQ==} + cpu: [x64] + os: [win32] + + '@shikijs/core@3.13.0': + resolution: {integrity: sha512-3P8rGsg2Eh2qIHekwuQjzWhKI4jV97PhvYjYUzGqjvJfqdQPz+nMlfWahU24GZAyW1FxFI1sYjyhfh5CoLmIUA==} + + '@shikijs/engine-javascript@3.13.0': + resolution: {integrity: sha512-Ty7xv32XCp8u0eQt8rItpMs6rU9Ki6LJ1dQOW3V/56PKDcpvfHPnYFbsx5FFUP2Yim34m/UkazidamMNVR4vKg==} - '@shikijs/engine-javascript@3.11.0': - resolution: {integrity: sha512-6/ov6pxrSvew13k9ztIOnSBOytXeKs5kfIR7vbhdtVRg+KPzvp2HctYGeWkqv7V6YIoLicnig/QF3iajqyElZA==} + '@shikijs/engine-oniguruma@3.13.0': + resolution: {integrity: sha512-O42rBGr4UDSlhT2ZFMxqM7QzIU+IcpoTMzb3W7AlziI1ZF7R8eS2M0yt5Ry35nnnTX/LTLXFPUjRFCIW+Operg==} - '@shikijs/engine-oniguruma@3.11.0': - resolution: {integrity: sha512-4DwIjIgETK04VneKbfOE4WNm4Q7WC1wo95wv82PoHKdqX4/9qLRUwrfKlmhf0gAuvT6GHy0uc7t9cailk6Tbhw==} + '@shikijs/langs@3.13.0': + resolution: {integrity: sha512-672c3WAETDYHwrRP0yLy3W1QYB89Hbpj+pO4KhxK6FzIrDI2FoEXNiNCut6BQmEApYLfuYfpgOZaqbY+E9b8wQ==} - '@shikijs/langs@3.11.0': - resolution: {integrity: sha512-Njg/nFL4HDcf/ObxcK2VeyidIq61EeLmocrwTHGGpOQx0BzrPWM1j55XtKQ1LvvDWH15cjQy7rg96aJ1/l63uw==} + '@shikijs/themes@3.13.0': + resolution: {integrity: sha512-Vxw1Nm1/Od8jyA7QuAenaV78BG2nSr3/gCGdBkLpfLscddCkzkL36Q5b67SrLLfvAJTOUzW39x4FHVCFriPVgg==} - '@shikijs/themes@3.11.0': - resolution: {integrity: sha512-BhhWRzCTEk2CtWt4S4bgsOqPJRkapvxdsifAwqP+6mk5uxboAQchc0etiJ0iIasxnMsb764qGD24DK9albcU9Q==} + '@shikijs/transformers@3.13.0': + resolution: {integrity: sha512-833lcuVzcRiG+fXvgslWsM2f4gHpjEgui1ipIknSizRuTgMkNZupiXE5/TVJ6eSYfhNBFhBZKkReKWO2GgYmqA==} - '@shikijs/transformers@3.11.0': - resolution: {integrity: sha512-fhSpVoq0FoCtKbBpzE3mXcIbr0b7ozFDSSWiVjWrQy+wrOfaFfwxgJqh8kY3Pbv/i+4pcuMIVismLD2MfO62eQ==} + '@shikijs/twoslash@3.13.0': + resolution: {integrity: sha512-OmNKNoZ8Hevt4VKQHfJL+hrsrqLSnW/Nz7RMutuBqXBCIYZWk80HnF9pcXEwRmy9MN0MGRmZCW2rDDP8K7Bxkw==} + peerDependencies: + typescript: '>=5.5.0' - '@shikijs/types@3.11.0': - resolution: {integrity: sha512-RB7IMo2E7NZHyfkqAuaf4CofyY8bPzjWPjJRzn6SEak3b46fIQyG6Vx5fG/obqkfppQ+g8vEsiD7Uc6lqQt32Q==} + '@shikijs/types@3.13.0': + resolution: {integrity: sha512-oM9P+NCFri/mmQ8LoFGVfVyemm5Hi27330zuOBp0annwJdKH1kOLndw3zCtAVDehPLg9fKqoEx3Ht/wNZxolfw==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -1615,8 +1867,8 @@ packages: '@types/adm-zip@0.5.7': resolution: {integrity: sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==} - '@types/body-parser@1.19.5': - resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} + '@types/body-parser@1.19.6': + resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} '@types/cheerio@0.22.35': resolution: {integrity: sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==} @@ -1624,8 +1876,8 @@ packages: '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cors@2.8.17': - resolution: {integrity: sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==} + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -1639,17 +1891,14 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} - '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} '@types/express-serve-static-core@4.19.6': resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} - '@types/express@4.17.21': - resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} + '@types/express@4.17.23': + resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1657,8 +1906,8 @@ packages: '@types/http-cache-semantics@4.0.4': resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - '@types/http-errors@2.0.4': - resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + '@types/http-errors@2.0.5': + resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -1681,38 +1930,38 @@ packages: '@types/nlcst@2.0.3': resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==} - '@types/node-fetch@2.6.12': - resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@18.19.87': - resolution: {integrity: sha512-OIAAu6ypnVZHmsHCeJ+7CCSub38QNBS9uceMQeg7K5Ur0Jr+wG9wEOEvvMbhp09pxD5czIUy/jND7s7Tb6Nw7A==} + '@types/node@18.19.127': + resolution: {integrity: sha512-gSjxjrnKXML/yo0BO099uPixMqfpJU0TKYjpfLU7TrtA2WWDki412Np/RSTPRil1saKBhvVVKzVx/p/6p94nVA==} - '@types/node@20.17.32': - resolution: {integrity: sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==} + '@types/node@20.19.17': + resolution: {integrity: sha512-gfehUI8N1z92kygssiuWvLiwcbOB3IRktR6hTDgJlXMYh5OvkPSRmgfoBUmfZt+vhwJtX7v1Yw4KvvAf7c5QKQ==} '@types/papaparse@5.3.16': resolution: {integrity: sha512-T3VuKMC2H0lgsjI9buTB3uuKj3EMD2eap1MOuEQuBQ44EnDx/IkGhU6EwiTf9zG3za4SKlmwKAImdDKdNnCsXg==} - '@types/qs@6.9.18': - resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} + '@types/qs@6.14.0': + resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react@19.1.3': - resolution: {integrity: sha512-dLWQ+Z0CkIvK1J8+wrDPwGxEYFA4RAyHoZPxHVGspYmFVnwGSNT24cGIhFJrtfRnWVuW8X7NO52gCXmhkVUWGQ==} + '@types/react@19.1.13': + resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - '@types/send@0.17.4': - resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + '@types/send@0.17.5': + resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} - '@types/serve-static@1.15.7': - resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} + '@types/serve-static@1.15.8': + resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -1732,53 +1981,70 @@ packages: '@types/yauzl@2.10.3': resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} - '@typescript-eslint/eslint-plugin@8.31.1': - resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} + '@typescript-eslint/eslint-plugin@8.44.0': + resolution: {integrity: sha512-EGDAOGX+uwwekcS0iyxVDmRV9HX6FLSM5kzrAToLTsr9OWCIKG/y3lQheCq18yZ5Xh78rRKJiEpP0ZaCs4ryOQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + '@typescript-eslint/parser': ^8.44.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.31.1': - resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} + '@typescript-eslint/parser@8.44.0': + resolution: {integrity: sha512-VGMpFQGUQWYT9LfnPcX8ouFojyrZ/2w3K5BucvxL/spdNehccKhB4jUyB1yBCXpr2XFm0jkECxgrpXBW2ipoAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/project-service@8.44.0': + resolution: {integrity: sha512-ZeaGNraRsq10GuEohKTo4295Z/SuGcSq2LzfGlqiuEvfArzo/VRrT0ZaJsVPuKZ55lVbNk8U6FcL+ZMH8CoyVA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + + '@typescript-eslint/scope-manager@8.44.0': + resolution: {integrity: sha512-87Jv3E+al8wpD+rIdVJm/ItDBe/Im09zXIjFoipOjr5gHUhJmTzfFLuTJ/nPTMc2Srsroy4IBXwcTCHyRR7KzA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/scope-manager@8.31.1': - resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} + '@typescript-eslint/tsconfig-utils@8.44.0': + resolution: {integrity: sha512-x5Y0+AuEPqAInc6yd0n5DAcvtoQ/vyaGwuX5HE9n6qAefk1GaedqrLQF8kQGylLUb9pnZyLf+iEiL9fr8APDtQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.31.1': - resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} + '@typescript-eslint/type-utils@8.44.0': + resolution: {integrity: sha512-9cwsoSxJ8Sak67Be/hD2RNt/fsqmWnNE1iHohG8lxqLSNY8xNfyY7wloo5zpW3Nu9hxVgURevqfcH6vvKCt6yg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.31.1': - resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} + '@typescript-eslint/types@8.44.0': + resolution: {integrity: sha512-ZSl2efn44VsYM0MfDQe68RKzBz75NPgLQXuGypmym6QVOWL5kegTZuZ02xRAT9T+onqvM6T8CdQk0OwYMB6ZvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.31.1': - resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} + '@typescript-eslint/typescript-estree@8.44.0': + resolution: {integrity: sha512-lqNj6SgnGcQZwL4/SBJ3xdPEfcBuhCG8zdcwCPgYcmiPLgokiNDKlbPzCwEwu7m279J/lBYWtDYL+87OEfn8Jw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.31.1': - resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} + '@typescript-eslint/utils@8.44.0': + resolution: {integrity: sha512-nktOlVcg3ALo0mYlV+L7sWUD58KG4CMj1rb2HUVOO4aL3K/6wcD+NERqd0rrA5Vg06b42YhF6cFxeixsp9Riqg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.31.1': - resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} + '@typescript-eslint/visitor-keys@8.44.0': + resolution: {integrity: sha512-zaz9u8EJ4GBmnehlrpoKvj/E3dNbuQ7q0ucyZImm3cLqJ8INTc970B1qEqDX/Rzq65r3TvVTN7kHWPBoyW7DWw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript/vfs@1.6.1': + resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==} + peerDependencies: + typescript: '*' + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -1791,34 +2057,34 @@ packages: '@aws-sdk/credential-provider-web-identity': optional: true - '@vue/compiler-core@3.5.13': - resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + '@vue/compiler-core@3.5.21': + resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} - '@vue/compiler-dom@3.5.13': - resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + '@vue/compiler-dom@3.5.21': + resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} - '@vue/compiler-sfc@3.5.13': - resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + '@vue/compiler-sfc@3.5.21': + resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} - '@vue/compiler-ssr@3.5.13': - resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + '@vue/compiler-ssr@3.5.21': + resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} - '@vue/reactivity@3.5.13': - resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + '@vue/reactivity@3.5.21': + resolution: {integrity: sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA==} - '@vue/runtime-core@3.5.13': - resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + '@vue/runtime-core@3.5.21': + resolution: {integrity: sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA==} - '@vue/runtime-dom@3.5.13': - resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + '@vue/runtime-dom@3.5.21': + resolution: {integrity: sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w==} - '@vue/server-renderer@3.5.13': - resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + '@vue/server-renderer@3.5.21': + resolution: {integrity: sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA==} peerDependencies: - vue: 3.5.13 + vue: 3.5.21 - '@vue/shared@3.5.13': - resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + '@vue/shared@3.5.21': + resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} @@ -1837,11 +2103,6 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} - engines: {node: '>=0.4.0'} - hasBin: true - acorn@8.15.0: resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} @@ -1855,8 +2116,8 @@ packages: resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==} engines: {node: '>=12.0'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} agentkeepalive@4.6.0: @@ -1888,8 +2149,8 @@ packages: zod: optional: true - ai@4.3.12: - resolution: {integrity: sha512-DWjtPI8YJVyvcJx27KW1i6PrwkbjTewflfH+qPtIuoAP0YYs6bH17cAihTt4je+itgazLXK07ZCbV019YkdYjw==} + ai@4.3.19: + resolution: {integrity: sha512-dIE2bfNpqHN3r6IINp9znguYdhIOheKW2LDigAMrgt/upT3B8eBGPSCblENvaZGoq+hxaN9fSMzjWpbqloP+7Q==} engines: {node: '>=18'} peerDependencies: react: ^18 || ^19 || ^19.0.0-rc @@ -1937,20 +2198,16 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - - ansi-escapes@7.0.0: - resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + ansi-escapes@7.1.0: + resolution: {integrity: sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==} engines: {node: '>=18'} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -1961,8 +2218,8 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} any-promise@1.3.0: @@ -1984,12 +2241,16 @@ packages: argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + aria-query@5.3.2: resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} engines: {node: '>= 0.4'} - arktype@2.1.20: - resolution: {integrity: sha512-IZCEEXaJ8g+Ijd59WtSYwtjnqXiwM8sWQ5EjGamcto7+HVN9eK0C4p0zDlCuAwWhpqr6fIBkxPuYDl4/Mcj/+Q==} + arktype@2.1.22: + resolution: {integrity: sha512-xdzl6WcAhrdahvRRnXaNwsipCgHuNoLobRqhiP8RjnfL9Gp947abGlo68GAIyLtxbD+MLzNyH2YR4kEqioMmYQ==} array-buffer-byte-length@1.0.2: resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} @@ -2039,19 +2300,24 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avsc@5.7.7: - resolution: {integrity: sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==} + avsc@5.7.9: + resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} engines: {node: '>=0.11'} - axios@1.9.0: - resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + axios@1.12.2: + resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} axobject-query@4.1.0: resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} engines: {node: '>= 0.4'} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + b4a@1.7.1: + resolution: {integrity: sha512-ZovbrBV0g6JxK5cGUF1Suby1vLfKjv4RWi8IxoaO/Mon8BDD9I21RxjHFtgQ+kskJqLAVyQZly3uMBui+vhc8Q==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2059,11 +2325,11 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + bare-events@2.7.0: + resolution: {integrity: sha512-b3N5eTW1g7vXkw+0CXh/HazGTcO5KYuu/RCNaJbDMPI6LHDi+7qe8EmxKUVe1sUbY2KZOVZFyj62x0OEz9qyAA==} - bare-fs@4.1.4: - resolution: {integrity: sha512-r8+26Voz8dGX3AYpJdFb1ZPaUSM8XOLCZvy+YGpRTmwPHIxA7Z3Jov/oMPtV7hfRQbOnH8qGlLTzQAbgtdNN0Q==} + bare-fs@4.4.4: + resolution: {integrity: sha512-Q8yxM1eLhJfuM7KXVP3zjhBvtMJCYRByoTT+wHXjpdMELv0xICFJX+1w4c7csa+WZEOsq4ItJ4RGwvzid6m/dw==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -2071,15 +2337,15 @@ packages: bare-buffer: optional: true - bare-os@3.6.1: - resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + bare-os@3.6.2: + resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + bare-stream@2.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -2089,6 +2355,9 @@ packages: bare-events: optional: true + bare-url@2.2.2: + resolution: {integrity: sha512-g+ueNGKkrjMazDG3elZO1pNs3HY5+mMmOet1jtKyhOaCnkLzitxf26z7hoAEkDNgdNmnc1KIlt/dw6Po6xZMpA==} + base-64@0.1.0: resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} @@ -2111,8 +2380,8 @@ packages: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} - bignumber.js@9.3.0: - resolution: {integrity: sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==} + bignumber.js@9.3.1: + resolution: {integrity: sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==} binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} @@ -2132,11 +2401,11 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -2217,8 +2486,8 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: @@ -2233,8 +2502,8 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - chardet@0.7.0: - resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} charenc@0.0.2: resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} @@ -2242,9 +2511,9 @@ packages: cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - cheerio@1.0.0: - resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} - engines: {node: '>=18.17'} + cheerio@1.1.2: + resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + engines: {node: '>=20.18.1'} cheminfo-types@1.8.1: resolution: {integrity: sha512-FRcpVkox+cRovffgqNdDFQ1eUav+i/Vq/CUd1hcfEl2bevntFlzznL+jE8g4twl6ElB7gZjCko6pYpXyMn+6dA==} @@ -2366,12 +2635,15 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + consola@3.4.2: resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} engines: {node: ^14.18.0 || >=16.10.0} - console-table-printer@2.12.1: - resolution: {integrity: sha512-wKGOQRRvdnd89pCeH96e2Fn4wkbenSP6LMHfjfyNLMbGuHEFbMqQNuxXqd0oXG9caIOQ1FTvc5Uijp9/4jujnQ==} + console-table-printer@2.14.6: + resolution: {integrity: sha512-MCBl5HNVaFuuHW6FGbL/4fB7N/ormCy+tQ+sxTrF6QtSbSNETvPuOVbkJBhzDgYhvjWGrTma4eYJa37ZuoQsPw==} content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} @@ -2427,11 +2699,11 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - css-select@5.1.0: - resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - css-what@6.1.0: - resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} engines: {node: '>= 6'} cssesc@3.0.0: @@ -2481,8 +2753,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -2494,8 +2766,8 @@ packages: resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} engines: {node: '>=0.10.0'} - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -2552,10 +2824,13 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.0: + resolution: {integrity: sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==} engines: {node: '>=8'} + detect-node-es@1.1.0: + resolution: {integrity: sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==} + detect-port@1.6.1: resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} engines: {node: '>= 4.0.0'} @@ -2607,8 +2882,8 @@ packages: domutils@3.2.2: resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} dotenv@8.6.0: @@ -2628,8 +2903,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2645,11 +2920,11 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - encoding-sniffer@0.2.0: - resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} engine.io-parser@5.2.3: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} @@ -2667,8 +2942,8 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} - entities@6.0.0: - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} env-paths@2.2.1: @@ -2679,15 +2954,15 @@ packages: resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} engines: {node: '>=18'} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-aggregate-error@1.0.13: - resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} + es-aggregate-error@1.0.14: + resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -2729,8 +3004,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.3: - resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} + esbuild@0.25.10: + resolution: {integrity: sha512-9RiGKvCwaqxO2owP61uQ4BgNborAQskMR6QusfWzQqv7AZOg5oGehdY2pRJMTKuwxd1IDBP4rSbI5lHzU7SMsQ==} engines: {node: '>=18'} hasBin: true @@ -2758,20 +3033,20 @@ packages: engines: {node: '>=6.0'} hasBin: true - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.25.1: - resolution: {integrity: sha512-E6Mtz9oGQWDCpV12319d59n4tx9zOTXSTmc8BLVxBx+G/0RdM5MvEEJLU9c0+aleoePYYgVTOsRblx433qmhWQ==} + eslint@9.36.0: + resolution: {integrity: sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -2783,8 +3058,8 @@ packages: esm-env@1.2.2: resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==} - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -2796,8 +3071,8 @@ packages: resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} - esrap@1.4.9: - resolution: {integrity: sha512-3OMlcd0a03UGuZpPeUC1HxR3nA23l+HEyCiZw3b3FumJIN9KphoGzDJKMXI1S72jVS1dsenDyQC0kJlO1U9E1g==} + esrap@2.1.0: + resolution: {integrity: sha512-yzmPNpl7TBbMRC5Lj2JlJZNPml0tzqoqP5B1JXycNUwtqma9AKCO0M2wHrdgsHcy1WRW7S9rJknAMtByg3usgA==} esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} @@ -2850,9 +3125,9 @@ packages: resolution: {integrity: sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==} engines: {node: '>=14.18'} - eventsource-parser@3.0.3: - resolution: {integrity: sha512-nVpZkTMM9rF6AQ9gPJpFsNAMt48wIzB5TQgiTLdHiuO8XEDhUgZEhqKlZWXbIzo9VmJ/HvysHqEaVeD5v9TPvA==} - 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: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==} @@ -2882,10 +3157,6 @@ packages: extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} - external-editor@3.1.0: - resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} - engines: {node: '>=4'} - extract-zip@2.0.1: resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} engines: {node: '>= 10.17.0'} @@ -2920,8 +3191,8 @@ packages: fast-safe-stringify@2.1.1: resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} @@ -2936,8 +3207,9 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -2974,6 +3246,9 @@ packages: resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} engines: {node: '>=10'} + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -2981,8 +3256,8 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3005,8 +3280,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} format@0.2.2: @@ -3029,8 +3304,8 @@ packages: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -3080,14 +3355,18 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} + get-nonce@1.0.1: + resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} + engines: {node: '>=6'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3104,11 +3383,11 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} glob-parent@5.1.2: @@ -3263,11 +3542,11 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - htmlparser2@9.1.0: - resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} - http-cache-semantics@4.1.1: - resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + http-cache-semantics@4.2.0: + resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} http-errors@2.0.0: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} @@ -3300,6 +3579,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -3307,6 +3590,10 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + immediate@3.0.6: resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} @@ -3335,13 +3622,13 @@ packages: ink: '>=4.0.0' react: '>=18.0.0' - ink@5.2.1: - resolution: {integrity: sha512-BqcUyWrG9zq5HIwW6JcfFHsIYebJkWWb4fczNah1goUO0vv5vneIlfwuS85twyJ5hYR/y18FlAYUxrO9ChIWVg==} - engines: {node: '>=18'} + ink@6.3.1: + resolution: {integrity: sha512-3wGwITGrzL6rkWsi2gEKzgwdafGn4ZYd3u4oRp+sOPvfoxEHlnoB5Vnk9Uy5dMRUhDOqF3hqr4rLQ4lEzBc2sQ==} + engines: {node: '>=20'} peerDependencies: - '@types/react': '>=18.0.0' - react: '>=18.0.0' - react-devtools-core: ^4.19.1 + '@types/react': '>=19.0.0' + react: '>=19.0.0' + react-devtools-core: ^6.1.2 peerDependenciesMeta: '@types/react': optional: true @@ -3351,8 +3638,8 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - inquirer@12.6.0: - resolution: {integrity: sha512-3zmmccQd/8o65nPOZJZ+2wqt76Ghw3+LaMrmc6JE/IzcvQhJ1st+QLCOo/iLS85/tILU0myG31a2TAZX0ysAvg==} + inquirer@12.9.6: + resolution: {integrity: sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -3368,8 +3655,8 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} ip-regex@4.3.0: @@ -3396,8 +3683,8 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -3462,8 +3749,8 @@ packages: resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} engines: {node: '>=12'} - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} + is-fullwidth-code-point@5.1.0: + resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} engines: {node: '>=18'} is-generator-function@1.1.0: @@ -3477,9 +3764,9 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-in-ci@1.0.0: - resolution: {integrity: sha512-eUuAjybVTHMYWm/U+vBO1sY/JOCgoPCXRxzdju0K+K0BiGW0SChEL1MLC0PoCIR1OlPo5YAp8HuQoUlsWEICwg==} - engines: {node: '>=18'} + is-in-ci@2.0.0: + resolution: {integrity: sha512-cFeerHriAnhrQSbpAxL37W1wcJKUUX07HyLWZCW1URJT/ra3GyUTzBgUnh24TMVfNTV2Hij2HLxkPHFZfOZy5w==} + engines: {node: '>=20'} hasBin: true is-ip@3.1.0: @@ -3490,6 +3777,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -3588,8 +3879,8 @@ packages: resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} engines: {node: '>=0.10.0'} - js-tiktoken@1.0.20: - resolution: {integrity: sha512-Xlaqhhs8VfCd6Sh7a1cFkZHQbYTLCwVJJWiHVxBYzLPxW0XsoxBy1hitmjkdIjD3Aon5BXLHFwU5O8WUx6HH+A==} + js-tiktoken@1.0.21: + resolution: {integrity: sha512-biOj/6M5qdgx5TKjDnFT1ymSpM5tbd3ylwDtrQvFQSu0Z7bBYko2dF+W/aUkXUPuk6IVpRxk/3Q2sHOzGlS36g==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -3602,9 +3893,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsep@1.4.0: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} @@ -3641,8 +3929,8 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} @@ -3656,8 +3944,8 @@ packages: jszip@3.10.1: resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} - jwa@2.0.0: - resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + jwa@2.0.1: + resolution: {integrity: sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==} jws@4.0.0: resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} @@ -3673,11 +3961,20 @@ packages: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} - langsmith@0.3.23: - resolution: {integrity: sha512-6gfotO1YS3vqznSJutdFmJXL2Vxy27/RV2JA7YTsfWoJtxlmBR/1QE7kMIyEvuoEE5KGFHyZMuAh/fVeiRffLA==} + langsmith@0.3.69: + resolution: {integrity: sha512-YKzu92YAP2o+d+1VmR38xqFX0RIRLKYj1IqdflVEY83X0FoiVlrWO3xDLXgnu7vhZ2N2M6jx8VO9fVF8yy9gHA==} 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 @@ -3688,8 +3985,8 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - leven@4.0.0: - resolution: {integrity: sha512-puehA3YKku3osqPlNuzGDUHq8WpwXupUg1V6NXdV38G+gr+gkBwFC8g1b/+YcIvp8gnqVIus+eJCH/eGsRmJNw==} + leven@4.1.0: + resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} levn@0.4.1: @@ -3757,8 +4054,8 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: + resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -4029,8 +4326,8 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mintlify@4.2.78: - resolution: {integrity: sha512-g3naXSI7RsmxUNJ87mKzRefKaMdqbAhxfaPaMkApwmeDB0TROwwUO0CS6ZDsbV5Qq3Sm5kH4mEDieEpAE6JG8A==} + mintlify@4.2.121: + resolution: {integrity: sha512-th+5Biyxd7puX2UmOV5Ns9dsZ8vJsGEYLuA/ToUHxP+FVhE/tiPMy5WekDAqS+rvASlS9icY2qXhXb+wYaDiIA==} engines: {node: '>=18.0.0'} hasBin: true @@ -4058,12 +4355,15 @@ packages: ml-matrix@6.12.1: resolution: {integrity: sha512-TJ+8eOFdp+INvzR4zAuwBQJznDUfktMtOB6g/hUcGh3rcyjxbz4Te57Pgri8Q9bhSQ7Zys4IYOGhFdnlgeB6Lw==} - ml-spectra-processing@14.12.0: - resolution: {integrity: sha512-RoJj2r4tGElyPDwBzmoCa+j3rLomBzz+JHGVPxf1tASAE82NkjgvuCFZFay+g0DXTkxDGYFxor+zayqA4nQrng==} + ml-spectra-processing@14.17.1: + resolution: {integrity: sha512-ff2K8Nb91I5fSYcRRiHH0RvUIX1nC4TGg/ctbbyf6R7SUR5MgKF5Kicj+w1HACCK4DQ1HvSc2ZHVE2Z1NDvCRQ==} ml-xsadd@3.0.1: resolution: {integrity: sha512-Fz2q6dwgzGM8wYKGArTUTZDGa4lQFA2Vi6orjGeTVRy22ZnQFKlJuwS9n8NRviqz1KHAHAzdKJwbnYhdo38uYg==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -4114,8 +4414,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-mdx-remote-client@1.1.1: - resolution: {integrity: sha512-cJnJGaRiHc1gn4aCzDmY9zmcCjEw+zMCpCYIy45Kjs8HzeQpdGcaO5GrgIcX/DFkuCVrrzc69wi2gGnExXbv/A==} + next-mdx-remote-client@1.1.2: + resolution: {integrity: sha512-LZJxBU420dTZsbWOrNYZXkahGJu8lNKxLTrQrZl4JUsKeFtp91yA78dHMTfOcp7UAud3txhM1tayyoKFq4tw7A==} engines: {node: '>=18.18.0'} peerDependencies: react: '>= 18.3.0 < 19.0.0' @@ -4155,8 +4455,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} engines: {node: '>=14.16'} nth-check@2.1.1: @@ -4216,12 +4516,8 @@ packages: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} - openai@4.23.0: - resolution: {integrity: sha512-ey2CXh1OTcTUa0AWZWuTpgA9t5GuAG3DVU1MofCRUI7fQJij8XJ3Sr0VtgxoAE69C9wbHBMCux8Z/IQZfSwHiA==} - hasBin: true - - openai@4.96.2: - resolution: {integrity: sha512-R2XnxvMsizkROr7BV3uNp1q/3skwPZ7fmPjO1bXLnfB4Tu5xKxrT1EVwzjhxn0MZKBKAvOaGWS63jTMN6KrIXA==} + openai@4.104.0: + resolution: {integrity: sha512-p99EFNsA/yX6UhVO93f5kJsDRLAg+CTA2RBqdHK4RtK8u5IJw32Hyb2dTGKbnnFmnuoBv5r7Z2CURI9sGZpSuA==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -4232,20 +4528,20 @@ packages: zod: optional: true + openai@4.23.0: + resolution: {integrity: sha512-ey2CXh1OTcTUa0AWZWuTpgA9t5GuAG3DVU1MofCRUI7fQJij8XJ3Sr0VtgxoAE69C9wbHBMCux8Z/IQZfSwHiA==} + hasBin: true + openapi-types@12.1.3: resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} - openapi3-ts@4.4.0: - resolution: {integrity: sha512-9asTNB9IkKEzWMcHmVZE7Ts3kC9G7AFHfs8i7caD8HbI76gEjdkId4z/AkP83xdZsH7PLAnnbl47qZkXuxpArw==} + openapi3-ts@4.5.0: + resolution: {integrity: sha512-jaL+HgTq2Gj5jRcfdutgRGLosCy/hT8sQf6VOy+P+g36cZOjI1iukdPnijC+4CmeRzg/jEllJUboEic2FhxhtQ==} optionator@0.9.4: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} - os-tmpdir@1.0.2: - resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} - engines: {node: '>=0.10.0'} - outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -4385,14 +4681,16 @@ packages: path-to-regexp@0.1.12: resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} - path-to-regexp@8.2.0: - resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} - engines: {node: '>=16'} + path-to-regexp@8.3.0: + resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} @@ -4403,8 +4701,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pify@2.3.0: @@ -4418,15 +4716,15 @@ packages: pino-abstract-transport@2.0.0: resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} - pino-pretty@13.0.0: - resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==} + pino-pretty@13.1.1: + resolution: {integrity: sha512-TNNEOg0eA0u+/WuqH0MH0Xui7uqVk9D74ESOpjtebSQYbNWJk/dIxCXIxFsNfeN53JmtWqYHP2OrIZjT/CBEnA==} hasBin: true pino-std-serializers@7.0.0: resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} - pino@9.6.0: - resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} + pino@9.10.0: + resolution: {integrity: sha512-VOFxoNnxICtxaN8S3E73pR66c5MTFC+rwRcNRyHV/bV/c90dXvJqMfjkeRFsGBDXmlUN3LccJQPqGIufnaJePA==} hasBin: true pirates@4.0.7: @@ -4437,13 +4735,16 @@ packages: resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} engines: {node: '>=16.20.0'} - playwright-core@1.52.0: - resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + playwright-core@1.55.0: + resolution: {integrity: sha512-GvZs4vU3U5ro2nZpeiwyb0zuFaqb9sUiAJuyrWpcGouD8y9/HLgGbNRjIph7zU9D3hnPaisMl9zG9CgFi/biIg==} engines: {node: '>=18'} hasBin: true - playwright@1.52.0: - resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} + playwright@1.55.0: + resolution: {integrity: sha512-sdCWStblvV1YU909Xqx0DhOjPZE4/5lJsIS84IfN9dAZfcl/CIZ5O8l3o0j7hPMjDvqoTF8ZUcc+i/GL5erstA==} engines: {node: '>=18'} hasBin: true @@ -4465,8 +4766,8 @@ packages: peerDependencies: postcss: ^8.0.0 - postcss-js@4.0.1: - resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + postcss-js@4.1.0: + resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} engines: {node: ^12 || ^14 || >= 16} peerDependencies: postcss: ^8.4.21 @@ -4527,23 +4828,23 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - process-warning@4.0.1: - resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - property-information@7.0.0: - resolution: {integrity: sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==} + property-information@7.1.0: + resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} @@ -4560,8 +4861,8 @@ packages: resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} engines: {node: ^14.13.1 || >=16.0.0} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -4585,8 +4886,8 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4606,27 +4907,53 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} react-dom@18.3.1: resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: react: ^18.3.1 - react-reconciler@0.29.2: - resolution: {integrity: sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg==} + react-reconciler@0.32.0: + resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} engines: {node: '>=0.10.0'} peerDependencies: - react: ^18.3.1 + react: ^19.1.0 - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} + react-remove-scroll-bar@2.3.8: + resolution: {integrity: sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + peerDependenciesMeta: + '@types/react': + optional: true + + react-remove-scroll@2.7.1: + resolution: {integrity: sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react-style-singleton@2.2.3: + resolution: {integrity: sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + react@19.1.1: + resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} read-cache@1.0.0: @@ -4654,8 +4981,10 @@ packages: recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - recma-jsx@1.0.0: - resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 recma-parse@1.0.0: resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} @@ -4701,11 +5030,13 @@ packages: remark-math@6.0.0: resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - remark-mdx-remove-esm@1.1.0: - resolution: {integrity: sha512-oN3F9QRuPKSdzZi+wvEodBVjKwya63sl403pWzJvm0+c503iUjCDR+JAnP3Ho/4205IWbQ2NujPQi/B9kU6ZrA==} + remark-mdx-remove-esm@1.2.1: + resolution: {integrity: sha512-Vz1GKmRR9u7ij8TTf88DK8dFc/mVror9YUJekl1uP+S0sTzHxGdszJMeBbh96aIR+ZiI2QRKHu2UsV+/pWj7uQ==} + peerDependencies: + unified: ^11 - remark-mdx@3.1.0: - resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -4778,8 +5109,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.40.1: - resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} + rollup@4.52.0: + resolution: {integrity: sha512-+IuescNkTJQgX7AkIDtITipZdIGcWF0pnVvZTWStiazUmcGA2ag8dfg0urest2XlXUi9kuhfQ+qmdc5Stc3z7g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -4787,8 +5118,8 @@ packages: resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} engines: {node: '>= 18'} - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} engines: {node: '>=0.12.0'} run-parallel@1.2.0: @@ -4831,6 +5162,9 @@ packages: scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + scheduler@0.26.0: + resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -4838,10 +5172,8 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true + secure-json-parse@4.0.0: + resolution: {integrity: sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA==} semver@7.7.2: resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} @@ -4901,8 +5233,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@3.11.0: - resolution: {integrity: sha512-VgKumh/ib38I1i3QkMn6mAQA6XjjQubqaAYhfge71glAll0/4xnt8L2oSuC45Qcr/G5Kbskj4RliMQddGmy/Og==} + shiki@3.13.0: + resolution: {integrity: sha512-aZW4l8Og16CokuCLf8CF8kq+KK2yOygapU5m3+hoGw0Mdosc6fPitjM+ujYarppj5ZIKGyPDPP1vqmQhr+5/0g==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -4931,14 +5263,14 @@ packages: resolution: {integrity: sha512-LH7FpTAkeD+y5xQC4fzS+tFtaNlvt3Ib1zKzvhjv/Y+cioV4zIuw4IZr2yhRLu67CWL7FR9/6KXKnjRoZTvGGQ==} engines: {node: '>=12'} - simple-git@3.27.0: - resolution: {integrity: sha512-ivHoFS9Yi9GY49ogc6/YAi3Fl9ROnF4VyubNylgCkA+RVqLaKWnDSzXOVzya8csELIaWaYNutsEuAhZrtOjozA==} + simple-git@3.28.0: + resolution: {integrity: sha512-Rs/vQRwsn1ILH1oBUy8NucJlXmnnLeLCfcvbSehkPzbv3wwoFWIdtfd6Ndo6ZPhlPsCZ60CPI4rxurnwAa+a2w==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - simple-wcswidth@1.0.1: - resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + simple-wcswidth@1.1.2: + resolution: {integrity: sha512-j7piyCjAeTDSjzTSQ7DokZtMNwNlEAyxqSZeCS+CXH7fJ4jx3FuJ/mTW3mE+6JLs4VJBbcll0Kjn+KXI5t21Iw==} slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -4948,8 +5280,8 @@ packages: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} + slice-ansi@7.1.2: + resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} engines: {node: '>=18'} slugify@1.6.6: @@ -4975,8 +5307,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + 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: @@ -4990,9 +5322,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} @@ -5012,9 +5344,6 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - sswr@2.2.0: resolution: {integrity: sha512-clTszLPZkmycALTHD1mXGU+mOtA/MIoLgS1KGTTzFNVm9rytQVykgRaP+z1zl572cz0bTqj4rFVoC2N+IGK4Sg==} peerDependencies: @@ -5028,12 +5357,20 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + statuses@2.0.2: + resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} + engines: {node: '>= 0.8'} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + streamsearch@1.1.0: resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} engines: {node: '>=10.0.0'} - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} string-comparison@1.3.0: resolution: {integrity: sha512-46aD+slEwybxAMPRII83ATbgMgTiz5P8mVd7Z6VJsCzSHFjdt1hkAVLeFxPIyEb11tc6ihpJTlIqoO0MCF6NPw==} @@ -5073,8 +5410,8 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + strip-ansi@7.1.2: + resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} engines: {node: '>=12'} strip-bom-string@1.0.0: @@ -5089,11 +5426,15 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + strip-json-comments@5.0.3: + resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} + engines: {node: '>=14.16'} + + style-to-js@1.1.17: + resolution: {integrity: sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==} - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + style-to-object@1.0.9: + resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} sucrase@3.35.0: resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} @@ -5108,12 +5449,12 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - svelte@5.28.2: - resolution: {integrity: sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==} + svelte@5.39.3: + resolution: {integrity: sha512-7Jwus6iXviGZAvhqbeYu3NNHA6LGyQ8EbmjdAhJUDade5rrW6g9VnBbRhUuYX4pMZLHozijsFolt88zvKPfsbQ==} engines: {node: '>=18'} - swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} + swr@2.3.6: + resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -5130,8 +5471,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - tar-fs@3.0.8: - resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@3.1.7: resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} @@ -5167,8 +5508,8 @@ packages: tinyexec@0.3.2: resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tldts-core@6.1.86: @@ -5178,10 +5519,6 @@ packages: resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} hasBin: true - tmp@0.0.33: - resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} - engines: {node: '>=0.6.0'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5228,8 +5565,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsup@8.4.0: - resolution: {integrity: sha512-b+eZbPCjz10fRryaAA7C8xlIHnf8VnsaRqydheLIqwG/Mcpfk8Z5zp3HayX7GaTygkigHl5cBUs+IhcySiIexQ==} + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -5247,19 +5584,23 @@ packages: typescript: optional: true - tsx@4.19.4: - resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} + tsx@4.20.5: + resolution: {integrity: sha512-+wKjMNU9w/EaQayHXb7WA7ZaHY6hN8WgfvHNQ3t1PnU91/7O8TcTnIhCDYTZwnt8JsO9IBqZ30Ln1r7pPF52Aw==} engines: {node: '>=18.0.0'} hasBin: true + twoslash-protocol@0.3.4: + resolution: {integrity: sha512-HHd7lzZNLUvjPzG/IE6js502gEzLC1x7HaO1up/f72d8G8ScWAs9Yfa97igelQRDl5h9tGcdFsRp+lNVre1EeQ==} + + twoslash@0.3.4: + resolution: {integrity: sha512-RtJURJlGRxrkJmTcZMjpr7jdYly1rfgpujJr1sBM9ch7SKVht/SjFk23IOAyvwT1NLCk+SJiMrvW4rIAUM2Wug==} + peerDependencies: + typescript: ^5.5.0 + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -5291,18 +5632,21 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.31.1: - resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} + typescript-eslint@8.44.0: + resolution: {integrity: sha512-ib7mCkYuIzYonCq9XWF5XNw+fkj2zg629PSa9KNIQ47RXFF763S5BIX4wqz1+FLPogTZoiw8KmCiRPRa8bL3qw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + unbox-primitive@1.1.0: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} @@ -5313,12 +5657,12 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@6.19.8: - resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - undici@6.21.2: - resolution: {integrity: sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g==} - engines: {node: '>=18.17'} + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -5392,6 +5736,26 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} + use-callback-ref@1.3.3: + resolution: {integrity: sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + + use-sidecar@1.1.3: + resolution: {integrity: sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==} + engines: {node: '>=10'} + peerDependencies: + '@types/react': '*' + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true + use-sync-external-store@1.5.0: resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} peerDependencies: @@ -5432,14 +5796,14 @@ packages: vfile-matter@5.0.1: resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vue@3.5.13: - resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + vue@3.5.21: + resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -5518,8 +5882,8 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} + wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} engines: {node: '>=18'} wrappy@1.0.2: @@ -5537,8 +5901,8 @@ packages: utf-8-validate: optional: true - ws@8.18.1: - resolution: {integrity: sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -5568,9 +5932,9 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@21.1.1: @@ -5588,18 +5952,18 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} yoga-layout@3.2.1: resolution: {integrity: sha512-0LPOt3AxKqMdFBZA3HBAt/t/8vIKq7VaQYbuA8WxCgung+p9TVyKRYdpvCb80HcdTN2NkbIKbhNwKUfm3tQywQ==} - zimmerframe@1.1.2: - resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==} + zimmerframe@1.1.4: + resolution: {integrity: sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} peerDependencies: zod: ^3.24.1 @@ -5617,76 +5981,76 @@ packages: snapshots: - '@ai-sdk/anthropic@1.2.10(zod@3.25.67)': + '@ai-sdk/anthropic@1.2.12(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/azure@1.3.22(zod@3.25.67)': + '@ai-sdk/azure@1.3.25(zod@3.25.67)': dependencies: - '@ai-sdk/openai': 1.3.21(zod@3.25.67) + '@ai-sdk/openai': 1.3.24(zod@3.25.67) '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/cerebras@0.2.13(zod@3.25.67)': + '@ai-sdk/cerebras@0.2.16(zod@3.25.67)': dependencies: - '@ai-sdk/openai-compatible': 0.2.13(zod@3.25.67) + '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.67) '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/deepseek@0.2.13(zod@3.25.67)': + '@ai-sdk/deepseek@0.2.16(zod@3.25.67)': dependencies: - '@ai-sdk/openai-compatible': 0.2.13(zod@3.25.67) + '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.67) '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/google@1.2.14(zod@3.25.67)': + '@ai-sdk/google@1.2.22(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/groq@1.2.8(zod@3.25.67)': + '@ai-sdk/groq@1.2.9(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/mistral@1.2.7(zod@3.25.67)': + '@ai-sdk/mistral@1.2.8(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/openai-compatible@0.2.13(zod@3.25.67)': + '@ai-sdk/openai-compatible@0.2.16(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/openai@1.3.21(zod@3.25.67)': + '@ai-sdk/openai@1.3.24(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@ai-sdk/perplexity@1.1.8(zod@3.25.67)': + '@ai-sdk/perplexity@1.1.9(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true @@ -5699,7 +6063,7 @@ snapshots: optionalDependencies: zod: 3.25.67 - '@ai-sdk/provider-utils@2.2.7(zod@3.25.67)': + '@ai-sdk/provider-utils@2.2.8(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 nanoid: 3.3.11 @@ -5718,22 +6082,22 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@0.0.70(react@19.1.0)(zod@3.25.67)': + '@ai-sdk/react@0.0.70(react@19.1.1)(zod@3.25.67)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.25.67) '@ai-sdk/ui-utils': 0.0.50(zod@3.25.67) - swr: 2.3.3(react@19.1.0) + swr: 2.3.6(react@19.1.1) throttleit: 2.1.0 optionalDependencies: - react: 19.1.0 + react: 19.1.1 zod: 3.25.67 - '@ai-sdk/react@1.2.10(react@19.1.0)(zod@3.25.67)': + '@ai-sdk/react@1.2.12(react@19.1.1)(zod@3.25.67)': dependencies: - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) - '@ai-sdk/ui-utils': 1.2.9(zod@3.25.67) - react: 19.1.0 - swr: 2.3.3(react@19.1.0) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67) + react: 19.1.1 + swr: 2.3.6(react@19.1.1) throttleit: 2.1.0 optionalDependencies: zod: 3.25.67 @@ -5745,21 +6109,21 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/svelte@0.0.57(svelte@5.28.2)(zod@3.25.67)': + '@ai-sdk/svelte@0.0.57(svelte@5.39.3)(zod@3.25.67)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.25.67) '@ai-sdk/ui-utils': 0.0.50(zod@3.25.67) - sswr: 2.2.0(svelte@5.28.2) + sswr: 2.2.0(svelte@5.39.3) optionalDependencies: - svelte: 5.28.2 + svelte: 5.39.3 transitivePeerDependencies: - zod - '@ai-sdk/togetherai@0.2.13(zod@3.25.67)': + '@ai-sdk/togetherai@0.2.16(zod@3.25.67)': dependencies: - '@ai-sdk/openai-compatible': 0.2.13(zod@3.25.67) + '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.67) '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true @@ -5769,51 +6133,46 @@ snapshots: '@ai-sdk/provider-utils': 1.0.22(zod@3.25.67) json-schema: 0.4.0 secure-json-parse: 2.7.0 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod-to-json-schema: 3.24.6(zod@3.25.67) optionalDependencies: zod: 3.25.67 - '@ai-sdk/ui-utils@1.2.9(zod@3.25.67)': + '@ai-sdk/ui-utils@1.2.11(zod@3.25.67)': dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod-to-json-schema: 3.24.6(zod@3.25.67) - '@ai-sdk/vue@0.0.59(vue@3.5.13(typescript@5.8.3))(zod@3.25.67)': + '@ai-sdk/vue@0.0.59(vue@3.5.21(typescript@5.9.2))(zod@3.25.67)': dependencies: '@ai-sdk/provider-utils': 1.0.22(zod@3.25.67) '@ai-sdk/ui-utils': 0.0.50(zod@3.25.67) - swrv: 1.1.0(vue@3.5.13(typescript@5.8.3)) + swrv: 1.1.0(vue@3.5.21(typescript@5.9.2)) optionalDependencies: - vue: 3.5.13(typescript@5.8.3) + vue: 3.5.21(typescript@5.9.2) transitivePeerDependencies: - zod - '@ai-sdk/xai@1.2.15(zod@3.25.67)': + '@ai-sdk/xai@1.2.18(zod@3.25.67)': dependencies: - '@ai-sdk/openai-compatible': 0.2.13(zod@3.25.67) + '@ai-sdk/openai-compatible': 0.2.16(zod@3.25.67) '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) zod: 3.25.67 optional: true - '@alcalzone/ansi-tokenize@0.1.3': + '@alcalzone/ansi-tokenize@0.2.0': dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 - '@anthropic-ai/sdk@0.39.0': dependencies: - '@types/node': 18.19.87 - '@types/node-fetch': 2.6.12 + '@types/node': 18.19.127 + '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 @@ -5822,20 +6181,20 @@ snapshots: transitivePeerDependencies: - encoding - '@ark/schema@0.46.0': + '@ark/schema@0.49.0': dependencies: - '@ark/util': 0.46.0 + '@ark/util': 0.49.0 - '@ark/util@0.46.0': {} + '@ark/util@0.49.0': {} - '@asteasolutions/zod-to-openapi@6.4.0(zod@3.25.76)': + '@asteasolutions/zod-to-openapi@6.4.0(zod@3.25.67)': dependencies: - openapi3-ts: 4.4.0 - zod: 3.25.76 + openapi3-ts: 4.5.0 + zod: 3.25.67 '@asyncapi/parser@3.4.0': dependencies: - '@asyncapi/specs': 6.8.1 + '@asyncapi/specs': 6.10.0 '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 '@stoplight/json': 3.21.0 '@stoplight/json-ref-readers': 1.2.2 @@ -5850,14 +6209,14 @@ snapshots: ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) ajv-formats: 2.1.1(ajv@8.17.1) - avsc: 5.7.7 + avsc: 5.7.9 js-yaml: 4.1.0 jsonpath-plus: 10.3.0 node-fetch: 2.6.7 transitivePeerDependencies: - encoding - '@asyncapi/specs@6.8.1': + '@asyncapi/specs@6.10.0': dependencies: '@types/json-schema': 7.0.15 @@ -5871,33 +6230,33 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} - '@babel/parser@7.28.0': + '@babel/parser@7.28.4': dependencies: - '@babel/types': 7.28.2 + '@babel/types': 7.28.4 - '@babel/runtime@7.27.1': {} + '@babel/runtime@7.28.4': {} - '@babel/types@7.28.2': + '@babel/types@7.28.4': dependencies: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 '@braintrust/core@0.0.34': dependencies: - '@asteasolutions/zod-to-openapi': 6.4.0(zod@3.25.76) + '@asteasolutions/zod-to-openapi': 6.4.0(zod@3.25.67) uuid: 9.0.1 - zod: 3.25.76 + zod: 3.25.67 '@braintrust/core@0.0.67': dependencies: - '@asteasolutions/zod-to-openapi': 6.4.0(zod@3.25.76) + '@asteasolutions/zod-to-openapi': 6.4.0(zod@3.25.67) uuid: 9.0.1 - zod: 3.25.76 + zod: 3.25.67 - '@browserbasehq/sdk@2.5.0': + '@browserbasehq/sdk@2.6.0': dependencies: - '@types/node': 18.19.87 - '@types/node-fetch': 2.6.12 + '@types/node': 18.19.127 + '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 @@ -5908,7 +6267,7 @@ snapshots: '@cfworker/json-schema@4.1.1': {} - '@changesets/apply-release-plan@7.0.12': + '@changesets/apply-release-plan@7.0.13': dependencies: '@changesets/config': 3.1.1 '@changesets/get-version-range-type': 0.4.0 @@ -5922,16 +6281,16 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 - '@changesets/assemble-release-plan@6.0.6': + '@changesets/assemble-release-plan@6.0.9': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 + semver: 7.7.2 '@changesets/changelog-git@0.2.1': dependencies: @@ -5945,15 +6304,15 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/cli@2.29.2': + '@changesets/cli@2.29.7(@types/node@20.19.17)': dependencies: - '@changesets/apply-release-plan': 7.0.12 - '@changesets/assemble-release-plan': 6.0.6 + '@changesets/apply-release-plan': 7.0.13 + '@changesets/assemble-release-plan': 6.0.9 '@changesets/changelog-git': 0.2.1 '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.10 + '@changesets/get-release-plan': 4.0.13 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 @@ -5961,20 +6320,22 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.2(@types/node@20.19.17) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 enquirer: 2.4.1 - external-editor: 3.1.0 fs-extra: 7.0.1 mri: 1.2.0 p-limit: 2.3.0 package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.2 spawndamnit: 3.0.1 term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' '@changesets/config@3.1.1': dependencies: @@ -5995,7 +6356,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.1 + semver: 7.7.2 '@changesets/get-github-info@0.6.0': dependencies: @@ -6004,9 +6365,9 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.10': + '@changesets/get-release-plan@4.0.13': dependencies: - '@changesets/assemble-release-plan': 6.0.6 + '@changesets/assemble-release-plan': 6.0.9 '@changesets/config': 3.1.1 '@changesets/pre': 2.0.2 '@changesets/read': 0.6.5 @@ -6065,7 +6426,7 @@ snapshots: human-id: 4.1.1 prettier: 2.8.8 - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true @@ -6073,7 +6434,7 @@ snapshots: '@esbuild/aix-ppc64@0.21.5': optional: true - '@esbuild/aix-ppc64@0.25.3': + '@esbuild/aix-ppc64@0.25.10': optional: true '@esbuild/android-arm64@0.18.20': @@ -6082,7 +6443,7 @@ snapshots: '@esbuild/android-arm64@0.21.5': optional: true - '@esbuild/android-arm64@0.25.3': + '@esbuild/android-arm64@0.25.10': optional: true '@esbuild/android-arm@0.18.20': @@ -6091,7 +6452,7 @@ snapshots: '@esbuild/android-arm@0.21.5': optional: true - '@esbuild/android-arm@0.25.3': + '@esbuild/android-arm@0.25.10': optional: true '@esbuild/android-x64@0.18.20': @@ -6100,7 +6461,7 @@ snapshots: '@esbuild/android-x64@0.21.5': optional: true - '@esbuild/android-x64@0.25.3': + '@esbuild/android-x64@0.25.10': optional: true '@esbuild/darwin-arm64@0.18.20': @@ -6109,7 +6470,7 @@ snapshots: '@esbuild/darwin-arm64@0.21.5': optional: true - '@esbuild/darwin-arm64@0.25.3': + '@esbuild/darwin-arm64@0.25.10': optional: true '@esbuild/darwin-x64@0.18.20': @@ -6118,7 +6479,7 @@ snapshots: '@esbuild/darwin-x64@0.21.5': optional: true - '@esbuild/darwin-x64@0.25.3': + '@esbuild/darwin-x64@0.25.10': optional: true '@esbuild/freebsd-arm64@0.18.20': @@ -6127,7 +6488,7 @@ snapshots: '@esbuild/freebsd-arm64@0.21.5': optional: true - '@esbuild/freebsd-arm64@0.25.3': + '@esbuild/freebsd-arm64@0.25.10': optional: true '@esbuild/freebsd-x64@0.18.20': @@ -6136,7 +6497,7 @@ snapshots: '@esbuild/freebsd-x64@0.21.5': optional: true - '@esbuild/freebsd-x64@0.25.3': + '@esbuild/freebsd-x64@0.25.10': optional: true '@esbuild/linux-arm64@0.18.20': @@ -6145,7 +6506,7 @@ snapshots: '@esbuild/linux-arm64@0.21.5': optional: true - '@esbuild/linux-arm64@0.25.3': + '@esbuild/linux-arm64@0.25.10': optional: true '@esbuild/linux-arm@0.18.20': @@ -6154,7 +6515,7 @@ snapshots: '@esbuild/linux-arm@0.21.5': optional: true - '@esbuild/linux-arm@0.25.3': + '@esbuild/linux-arm@0.25.10': optional: true '@esbuild/linux-ia32@0.18.20': @@ -6163,7 +6524,7 @@ snapshots: '@esbuild/linux-ia32@0.21.5': optional: true - '@esbuild/linux-ia32@0.25.3': + '@esbuild/linux-ia32@0.25.10': optional: true '@esbuild/linux-loong64@0.18.20': @@ -6172,7 +6533,7 @@ snapshots: '@esbuild/linux-loong64@0.21.5': optional: true - '@esbuild/linux-loong64@0.25.3': + '@esbuild/linux-loong64@0.25.10': optional: true '@esbuild/linux-mips64el@0.18.20': @@ -6181,7 +6542,7 @@ snapshots: '@esbuild/linux-mips64el@0.21.5': optional: true - '@esbuild/linux-mips64el@0.25.3': + '@esbuild/linux-mips64el@0.25.10': optional: true '@esbuild/linux-ppc64@0.18.20': @@ -6190,7 +6551,7 @@ snapshots: '@esbuild/linux-ppc64@0.21.5': optional: true - '@esbuild/linux-ppc64@0.25.3': + '@esbuild/linux-ppc64@0.25.10': optional: true '@esbuild/linux-riscv64@0.18.20': @@ -6199,7 +6560,7 @@ snapshots: '@esbuild/linux-riscv64@0.21.5': optional: true - '@esbuild/linux-riscv64@0.25.3': + '@esbuild/linux-riscv64@0.25.10': optional: true '@esbuild/linux-s390x@0.18.20': @@ -6208,7 +6569,7 @@ snapshots: '@esbuild/linux-s390x@0.21.5': optional: true - '@esbuild/linux-s390x@0.25.3': + '@esbuild/linux-s390x@0.25.10': optional: true '@esbuild/linux-x64@0.18.20': @@ -6217,10 +6578,10 @@ snapshots: '@esbuild/linux-x64@0.21.5': optional: true - '@esbuild/linux-x64@0.25.3': + '@esbuild/linux-x64@0.25.10': optional: true - '@esbuild/netbsd-arm64@0.25.3': + '@esbuild/netbsd-arm64@0.25.10': optional: true '@esbuild/netbsd-x64@0.18.20': @@ -6229,10 +6590,10 @@ snapshots: '@esbuild/netbsd-x64@0.21.5': optional: true - '@esbuild/netbsd-x64@0.25.3': + '@esbuild/netbsd-x64@0.25.10': optional: true - '@esbuild/openbsd-arm64@0.25.3': + '@esbuild/openbsd-arm64@0.25.10': optional: true '@esbuild/openbsd-x64@0.18.20': @@ -6241,7 +6602,10 @@ snapshots: '@esbuild/openbsd-x64@0.21.5': optional: true - '@esbuild/openbsd-x64@0.25.3': + '@esbuild/openbsd-x64@0.25.10': + optional: true + + '@esbuild/openharmony-arm64@0.25.10': optional: true '@esbuild/sunos-x64@0.18.20': @@ -6250,7 +6614,7 @@ snapshots: '@esbuild/sunos-x64@0.21.5': optional: true - '@esbuild/sunos-x64@0.25.3': + '@esbuild/sunos-x64@0.25.10': optional: true '@esbuild/win32-arm64@0.18.20': @@ -6259,7 +6623,7 @@ snapshots: '@esbuild/win32-arm64@0.21.5': optional: true - '@esbuild/win32-arm64@0.25.3': + '@esbuild/win32-arm64@0.25.10': optional: true '@esbuild/win32-ia32@0.18.20': @@ -6268,7 +6632,7 @@ snapshots: '@esbuild/win32-ia32@0.21.5': optional: true - '@esbuild/win32-ia32@0.25.3': + '@esbuild/win32-ia32@0.25.10': optional: true '@esbuild/win32-x64@0.18.20': @@ -6277,35 +6641,35 @@ snapshots: '@esbuild/win32-x64@0.21.5': optional: true - '@esbuild/win32-x64@0.25.3': + '@esbuild/win32-x64@0.25.10': optional: true - '@eslint-community/eslint-utils@4.6.1(eslint@9.25.1(jiti@1.21.7))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.36.0(jiti@1.21.7))': dependencies: - eslint: 9.25.1(jiti@1.21.7) + eslint: 9.36.0(jiti@1.21.7) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.21.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.1': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.13.0': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 - espree: 10.3.0 + debug: 4.4.3 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 @@ -6315,19 +6679,36 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.25.1': {} + '@eslint/js@9.36.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.8': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.13.0 + '@eslint/core': 0.15.2 levn: 0.4.1 + '@floating-ui/core@1.7.3': + dependencies: + '@floating-ui/utils': 0.2.10 + + '@floating-ui/dom@1.7.4': + dependencies: + '@floating-ui/core': 1.7.3 + '@floating-ui/utils': 0.2.10 + + '@floating-ui/react-dom@2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/dom': 1.7.4 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + + '@floating-ui/utils@0.2.10': {} + '@google/genai@0.8.0': dependencies: google-auth-library: 9.15.1 - ws: 8.18.1 + ws: 8.18.3 transitivePeerDependencies: - bufferutil - encoding @@ -6336,16 +6717,14 @@ snapshots: '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -6413,7 +6792,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.5.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -6422,159 +6801,158 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inquirer/checkbox@4.1.5(@types/node@20.17.32)': + '@inquirer/ansi@1.0.0': {} + + '@inquirer/checkbox@4.2.4(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@20.17.32) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/confirm@5.1.9(@types/node@20.17.32)': + '@inquirer/confirm@5.1.18(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/core@10.1.10(@types/node@20.17.32)': + '@inquirer/core@10.2.2(@types/node@20.19.17)': dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@20.17.32) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + yoctocolors-cjs: 2.1.3 + optionalDependencies: + '@types/node': 20.19.17 + + '@inquirer/editor@4.2.20(@types/node@20.19.17)': + dependencies: + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/external-editor': 1.0.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/editor@4.2.10(@types/node@20.17.32)': + '@inquirer/expand@4.0.20(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) - external-editor: 3.1.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/expand@4.0.12(@types/node@20.17.32)': + '@inquirer/external-editor@1.0.2(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) - yoctocolors-cjs: 2.1.2 + chardet: 2.1.0 + iconv-lite: 0.7.0 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/figures@1.0.11': {} + '@inquirer/figures@1.0.13': {} - '@inquirer/input@4.1.9(@types/node@20.17.32)': + '@inquirer/input@4.2.4(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/number@3.0.12(@types/node@20.17.32)': + '@inquirer/number@3.0.20(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/password@4.0.12(@types/node@20.17.32)': + '@inquirer/password@4.0.20(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 - - '@inquirer/prompts@7.5.0(@types/node@20.17.32)': - dependencies: - '@inquirer/checkbox': 4.1.5(@types/node@20.17.32) - '@inquirer/confirm': 5.1.9(@types/node@20.17.32) - '@inquirer/editor': 4.2.10(@types/node@20.17.32) - '@inquirer/expand': 4.0.12(@types/node@20.17.32) - '@inquirer/input': 4.1.9(@types/node@20.17.32) - '@inquirer/number': 3.0.12(@types/node@20.17.32) - '@inquirer/password': 4.0.12(@types/node@20.17.32) - '@inquirer/rawlist': 4.1.0(@types/node@20.17.32) - '@inquirer/search': 3.0.12(@types/node@20.17.32) - '@inquirer/select': 4.2.0(@types/node@20.17.32) + '@types/node': 20.19.17 + + '@inquirer/prompts@7.8.6(@types/node@20.19.17)': + dependencies: + '@inquirer/checkbox': 4.2.4(@types/node@20.19.17) + '@inquirer/confirm': 5.1.18(@types/node@20.19.17) + '@inquirer/editor': 4.2.20(@types/node@20.19.17) + '@inquirer/expand': 4.0.20(@types/node@20.19.17) + '@inquirer/input': 4.2.4(@types/node@20.19.17) + '@inquirer/number': 3.0.20(@types/node@20.19.17) + '@inquirer/password': 4.0.20(@types/node@20.19.17) + '@inquirer/rawlist': 4.1.8(@types/node@20.19.17) + '@inquirer/search': 3.1.3(@types/node@20.19.17) + '@inquirer/select': 4.3.4(@types/node@20.19.17) optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/rawlist@4.1.0(@types/node@20.17.32)': + '@inquirer/rawlist@4.1.8(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/search@3.0.12(@types/node@20.17.32)': + '@inquirer/search@3.1.3(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@20.17.32) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/select@4.2.0(@types/node@20.17.32)': + '@inquirer/select@4.3.4(@types/node@20.19.17)': dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@20.17.32) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/figures': 1.0.13 + '@inquirer/type': 3.0.8(@types/node@20.19.17) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@inquirer/type@3.0.6(@types/node@20.17.32)': + '@inquirer/type@3.0.8(@types/node@20.19.17)': optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 strip-ansi-cjs: strip-ansi@6.0.1 wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/gen-mapping@0.3.8': + '@jridgewell/remapping@2.3.5': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@jridgewell/trace-mapping@0.3.29': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: @@ -6590,36 +6968,39 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color '@kwsites/promise-deferred@1.1.1': {} - '@langchain/core@0.3.50(openai@4.96.2(ws@8.18.1)(zod@3.25.67))': + '@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67))': dependencies: '@cfworker/json-schema': 4.1.1 ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 - js-tiktoken: 1.0.20 - langsmith: 0.3.23(openai@4.96.2(ws@8.18.1)(zod@3.25.67)) + js-tiktoken: 1.0.21 + langsmith: 0.3.69(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)) 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.5(zod@3.25.76) + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' - openai - '@langchain/openai@0.4.9(@langchain/core@0.3.50(openai@4.96.2(ws@8.18.1)(zod@3.25.67)))(ws@8.18.1)': + '@langchain/openai@0.4.9(@langchain/core@0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3)': dependencies: - '@langchain/core': 0.3.50(openai@4.96.2(ws@8.18.1)(zod@3.25.67)) - js-tiktoken: 1.0.20 - openai: 4.96.2(ws@8.18.1)(zod@3.25.76) - zod: 3.25.76 - zod-to-json-schema: 3.24.5(zod@3.25.76) + '@langchain/core': 0.3.77(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)) + js-tiktoken: 1.0.21 + openai: 4.104.0(ws@8.18.3)(zod@3.25.67) + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) transitivePeerDependencies: - encoding - ws @@ -6628,26 +7009,27 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.28.4 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.28.4 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/mdx@3.1.0(acorn@8.15.0)': + '@mdx-js/mdx@3.1.1': dependencies: '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 + acorn: 8.15.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -6656,47 +7038,47 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.15.0) + recma-jsx: 1.0.1(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-rehype: 11.1.2 - source-map: 0.7.4 + source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: - - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@19.1.3)(react@18.3.1)': + '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.3 - react: 18.3.1 - - '@mintlify/cli@4.0.682(@types/node@20.17.32)(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3)': - dependencies: - '@mintlify/common': 1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mintlify/link-rot': 3.0.629(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@mintlify/models': 0.0.219 - '@mintlify/prebuild': 1.0.618(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@mintlify/previewing': 4.0.665(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3) - '@mintlify/validation': 0.1.442 - chalk: 5.4.1 + '@types/react': 19.1.13 + react: 19.1.1 + + '@mintlify/cli@4.0.725(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@20.19.17)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': + dependencies: + '@mintlify/common': 1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/link-rot': 3.0.672(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/models': 0.0.229 + '@mintlify/prebuild': 1.0.659(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/previewing': 4.0.708(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + chalk: 5.6.2 detect-port: 1.6.1 - fs-extra: 11.3.0 + fs-extra: 11.3.2 gray-matter: 4.0.3 - ink: 5.2.1(@types/react@19.1.3)(react@18.3.1) - inquirer: 12.6.0(@types/node@20.17.32) + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + inquirer: 12.9.6(@types/node@20.19.17) js-yaml: 4.1.0 - react: 18.3.1 + react: 19.1.1 semver: 7.7.2 yargs: 17.7.2 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/node' - '@types/react' - bare-buffer @@ -6705,18 +7087,19 @@ snapshots: - encoding - react-devtools-core - react-dom + - react-native-b4a - supports-color - ts-node - typescript - utf-8-validate - '@mintlify/common@1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mintlify/common@1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 2.0.3(@types/react@19.1.3)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mintlify/models': 0.0.219 + '@mintlify/mdx': 2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/models': 0.0.229 '@mintlify/openapi-parser': 0.0.7 - '@mintlify/validation': 0.1.442 + '@mintlify/validation': 0.1.471 '@sindresorhus/slugify': 2.2.1 acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) @@ -6742,7 +7125,7 @@ snapshots: remark-frontmatter: 5.0.0 remark-gfm: 4.0.1 remark-math: 6.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-stringify: 11.0.0 tailwindcss: 3.4.17 unified: 11.0.5 @@ -6754,6 +7137,7 @@ snapshots: unist-util-visit-parents: 6.0.1 vfile: 6.0.3 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/react' - debug - encoding @@ -6761,16 +7145,18 @@ snapshots: - react-dom - supports-color - ts-node + - typescript - '@mintlify/link-rot@3.0.629(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@mintlify/link-rot@3.0.672(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@mintlify/common': 1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mintlify/prebuild': 1.0.618(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@mintlify/previewing': 4.0.665(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3) - '@mintlify/validation': 0.1.442 - fs-extra: 11.3.0 + '@mintlify/common': 1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/prebuild': 1.0.659(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/previewing': 4.0.708(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + fs-extra: 11.3.2 unist-util-visit: 4.1.2 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/react' - bare-buffer - bufferutil @@ -6779,34 +7165,40 @@ snapshots: - react - react-devtools-core - react-dom + - react-native-b4a - supports-color - ts-node - typescript - utf-8-validate - '@mintlify/mdx@2.0.3(@types/react@19.1.3)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@mintlify/mdx@2.0.11(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@shikijs/transformers': 3.11.0 + '@radix-ui/react-popover': 1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@shikijs/transformers': 3.13.0 + '@shikijs/twoslash': 3.13.0(typescript@5.9.2) hast-util-to-string: 3.0.1 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm: 3.1.0 mdast-util-mdx-jsx: 3.2.0 - next-mdx-remote-client: 1.1.1(@types/react@19.1.3)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) + mdast-util-to-hast: 13.2.0 + next-mdx-remote-client: 1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) rehype-katex: 7.0.1 remark-gfm: 4.0.1 remark-math: 6.0.0 remark-smartypants: 3.0.2 - shiki: 3.11.0 + shiki: 3.13.0 unified: 11.0.5 unist-util-visit: 5.0.0 transitivePeerDependencies: - '@types/react' - - acorn - supports-color + - typescript - '@mintlify/models@0.0.219': + '@mintlify/models@0.0.229': dependencies: - axios: 1.9.0 + axios: 1.12.2 openapi-types: 12.1.3 transitivePeerDependencies: - debug @@ -6817,24 +7209,25 @@ snapshots: ajv-draft-04: 1.0.0(ajv@8.17.1) ajv-formats: 3.0.1(ajv@8.17.1) jsonpointer: 5.0.1 - leven: 4.0.0 - yaml: 2.7.1 + leven: 4.1.0 + yaml: 2.8.1 - '@mintlify/prebuild@1.0.618(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@mintlify/prebuild@1.0.659(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@mintlify/common': 1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mintlify/common': 1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) '@mintlify/openapi-parser': 0.0.7 - '@mintlify/scraping': 4.0.354(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@mintlify/validation': 0.1.442 - chalk: 5.4.1 + '@mintlify/scraping': 4.0.394(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/validation': 0.1.471 + chalk: 5.6.2 favicons: 7.2.0 - fs-extra: 11.3.0 + fs-extra: 11.3.2 gray-matter: 4.0.3 js-yaml: 4.1.0 mdast: 3.0.0 openapi-types: 12.1.3 unist-util-visit: 4.1.2 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/react' - bare-buffer - bufferutil @@ -6842,35 +7235,37 @@ snapshots: - encoding - react - react-dom + - react-native-b4a - supports-color - ts-node - typescript - utf-8-validate - '@mintlify/previewing@4.0.665(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3)': + '@mintlify/previewing@4.0.708(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2)': dependencies: - '@mintlify/common': 1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@mintlify/prebuild': 1.0.618(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3) - '@mintlify/validation': 0.1.442 + '@mintlify/common': 1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/prebuild': 1.0.659(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) + '@mintlify/validation': 0.1.471 better-opn: 3.0.2 - chalk: 5.4.1 + chalk: 5.6.2 chokidar: 3.6.0 express: 4.21.2 - fs-extra: 11.3.0 + fs-extra: 11.3.2 got: 13.0.0 gray-matter: 4.0.3 - ink: 5.2.1(@types/react@19.1.3)(react@18.3.1) - ink-spinner: 5.0.0(ink@5.2.1(@types/react@19.1.3)(react@18.3.1))(react@18.3.1) + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + ink-spinner: 5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1) is-online: 10.0.0 js-yaml: 4.1.0 mdast: 3.0.0 openapi-types: 12.1.3 - react: 18.3.1 + react: 19.1.1 socket.io: 4.8.1 tar: 6.2.1 unist-util-visit: 4.1.2 yargs: 17.7.2 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/react' - bare-buffer - bufferutil @@ -6878,24 +7273,25 @@ snapshots: - encoding - react-devtools-core - react-dom + - react-native-b4a - supports-color - ts-node - typescript - utf-8-validate - '@mintlify/scraping@4.0.354(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.3)': + '@mintlify/scraping@4.0.394(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2)': dependencies: - '@mintlify/common': 1.0.496(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@mintlify/common': 1.0.535(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(typescript@5.9.2) '@mintlify/openapi-parser': 0.0.7 - fs-extra: 11.3.0 + fs-extra: 11.3.2 hast-util-to-mdast: 10.1.2 js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 neotraverse: 0.6.18 - puppeteer: 22.15.0(typescript@5.8.3) + puppeteer: 22.15.0(typescript@5.9.2) rehype-parse: 9.0.1 remark-gfm: 4.0.1 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-stringify: 11.0.0 unified: 11.0.5 @@ -6903,6 +7299,7 @@ snapshots: yargs: 17.7.2 zod: 3.25.76 transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/react' - bare-buffer - bufferutil @@ -6910,41 +7307,42 @@ snapshots: - encoding - react - react-dom + - react-native-b4a - supports-color - ts-node - typescript - utf-8-validate - '@mintlify/validation@0.1.442': + '@mintlify/validation@0.1.471': dependencies: - '@mintlify/models': 0.0.219 - arktype: 2.1.20 + '@mintlify/models': 0.0.229 + arktype: 2.1.22 lcm: 0.0.3 lodash: 4.17.21 openapi-types: 12.1.3 zod: 3.25.76 - zod-to-json-schema: 3.24.5(zod@3.25.76) + zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: - debug - '@modelcontextprotocol/sdk@1.17.2': + '@modelcontextprotocol/sdk@1.18.1': dependencies: ajv: 6.12.6 content-type: 1.0.5 cors: 2.8.5 cross-spawn: 7.0.6 eventsource: 3.0.7 - eventsource-parser: 3.0.3 + eventsource-parser: 3.0.6 express: 5.1.0 express-rate-limit: 7.5.1(express@5.1.0) pkce-challenge: 5.0.0 - raw-body: 3.0.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.5(zod@3.25.76) + raw-body: 3.0.1 + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) transitivePeerDependencies: - supports-color - '@next/env@14.2.28': {} + '@next/env@14.2.32': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -6967,116 +7365,311 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@playwright/test@1.52.0': + '@playwright/test@1.55.0': dependencies: - playwright: 1.52.0 + playwright: 1.55.0 '@puppeteer/browsers@2.3.0': dependencies: - debug: 4.4.0 + debug: 4.4.3 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 semver: 7.7.2 - tar-fs: 3.0.8 + tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: - bare-buffer + - react-native-b4a - supports-color - '@rollup/rollup-android-arm-eabi@4.40.1': + '@radix-ui/primitive@1.1.3': {} + + '@radix-ui/react-arrow@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-compose-refs@1.1.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-context@1.1.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-dismissable-layer@1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-focus-guards@1.1.3(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-focus-scope@1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-id@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/primitive': 1.1.3 + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-dismissable-layer': 1.1.11(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-focus-guards': 1.1.3(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-focus-scope': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-id': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-popper': 1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-portal': 1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-presence': 1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-controllable-state': 1.2.2(@types/react@19.1.13)(react@19.1.1) + aria-hidden: 1.2.6 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + react-remove-scroll: 2.7.1(@types/react@19.1.13)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-popper@1.2.8(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@floating-ui/react-dom': 2.1.6(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-arrow': 1.1.7(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-context': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-rect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-size': 1.1.1(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-portal@1.1.9(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-primitive': 2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-presence@1.1.5(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-primitive@2.1.3(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)': + dependencies: + '@radix-ui/react-slot': 1.2.3(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-slot@1.2.3(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-controllable-state@1.2.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-effect-event': 0.0.2(@types/react@19.1.13)(react@19.1.1) + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-effect-event@0.0.2(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-escape-keydown@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-rect@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/rect': 1.1.1 + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/react-use-size@1.1.1(@types/react@19.1.13)(react@19.1.1)': + dependencies: + '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + optionalDependencies: + '@types/react': 19.1.13 + + '@radix-ui/rect@1.1.1': {} + + '@rollup/rollup-android-arm-eabi@4.52.0': + optional: true + + '@rollup/rollup-android-arm64@4.52.0': optional: true - '@rollup/rollup-android-arm64@4.40.1': + '@rollup/rollup-darwin-arm64@4.52.0': optional: true - '@rollup/rollup-darwin-arm64@4.40.1': + '@rollup/rollup-darwin-x64@4.52.0': optional: true - '@rollup/rollup-darwin-x64@4.40.1': + '@rollup/rollup-freebsd-arm64@4.52.0': optional: true - '@rollup/rollup-freebsd-arm64@4.40.1': + '@rollup/rollup-freebsd-x64@4.52.0': optional: true - '@rollup/rollup-freebsd-x64@4.40.1': + '@rollup/rollup-linux-arm-gnueabihf@4.52.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.40.1': + '@rollup/rollup-linux-arm-musleabihf@4.52.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.40.1': + '@rollup/rollup-linux-arm64-gnu@4.52.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.40.1': + '@rollup/rollup-linux-arm64-musl@4.52.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.40.1': + '@rollup/rollup-linux-loong64-gnu@4.52.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.40.1': + '@rollup/rollup-linux-ppc64-gnu@4.52.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': + '@rollup/rollup-linux-riscv64-gnu@4.52.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.40.1': + '@rollup/rollup-linux-riscv64-musl@4.52.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.40.1': + '@rollup/rollup-linux-s390x-gnu@4.52.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.40.1': + '@rollup/rollup-linux-x64-gnu@4.52.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.40.1': + '@rollup/rollup-linux-x64-musl@4.52.0': optional: true - '@rollup/rollup-linux-x64-musl@4.40.1': + '@rollup/rollup-openharmony-arm64@4.52.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.40.1': + '@rollup/rollup-win32-arm64-msvc@4.52.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.40.1': + '@rollup/rollup-win32-ia32-msvc@4.52.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.40.1': + '@rollup/rollup-win32-x64-gnu@4.52.0': optional: true - '@shikijs/core@3.11.0': + '@rollup/rollup-win32-x64-msvc@4.52.0': + optional: true + + '@shikijs/core@3.13.0': dependencies: - '@shikijs/types': 3.11.0 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 hast-util-to-html: 9.0.5 - '@shikijs/engine-javascript@3.11.0': + '@shikijs/engine-javascript@3.13.0': dependencies: - '@shikijs/types': 3.11.0 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 oniguruma-to-es: 4.3.3 - '@shikijs/engine-oniguruma@3.11.0': + '@shikijs/engine-oniguruma@3.13.0': dependencies: - '@shikijs/types': 3.11.0 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.11.0': + '@shikijs/langs@3.13.0': dependencies: - '@shikijs/types': 3.11.0 + '@shikijs/types': 3.13.0 - '@shikijs/themes@3.11.0': + '@shikijs/themes@3.13.0': dependencies: - '@shikijs/types': 3.11.0 + '@shikijs/types': 3.13.0 - '@shikijs/transformers@3.11.0': + '@shikijs/transformers@3.13.0': dependencies: - '@shikijs/core': 3.11.0 - '@shikijs/types': 3.11.0 + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 - '@shikijs/types@3.11.0': + '@shikijs/twoslash@3.13.0(typescript@5.9.2)': + dependencies: + '@shikijs/core': 3.13.0 + '@shikijs/types': 3.13.0 + twoslash: 0.3.4(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@shikijs/types@3.13.0': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -7104,7 +7697,7 @@ snapshots: '@stoplight/json-ref-readers@1.2.2': dependencies: - node-fetch: 2.7.0 + node-fetch: 2.6.7 tslib: 1.14.1 transitivePeerDependencies: - encoding @@ -7149,7 +7742,7 @@ snapshots: ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) ajv-formats: 2.1.1(ajv@8.17.1) - es-aggregate-error: 1.0.13 + es-aggregate-error: 1.0.14 jsonpath-plus: 10.3.0 lodash: 4.17.21 lodash.topath: 4.5.2 @@ -7251,24 +7844,24 @@ snapshots: '@types/adm-zip@0.5.7': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@types/body-parser@1.19.5': + '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@types/cheerio@0.22.35': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@types/connect@3.4.38': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@types/cors@2.8.17': + '@types/cors@2.8.19': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@types/debug@4.1.12': dependencies: @@ -7278,29 +7871,27 @@ snapshots: '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@types/estree-jsx@1.0.5': dependencies: '@types/estree': 1.0.8 - '@types/estree@1.0.7': {} - '@types/estree@1.0.8': {} '@types/express-serve-static-core@4.19.6': dependencies: - '@types/node': 20.17.32 - '@types/qs': 6.9.18 + '@types/node': 20.19.17 + '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.4 + '@types/send': 0.17.5 - '@types/express@4.17.21': + '@types/express@4.17.23': dependencies: - '@types/body-parser': 1.19.5 + '@types/body-parser': 1.19.6 '@types/express-serve-static-core': 4.19.6 - '@types/qs': 6.9.18 - '@types/serve-static': 1.15.7 + '@types/qs': 6.14.0 + '@types/serve-static': 1.15.8 '@types/hast@3.0.4': dependencies: @@ -7308,7 +7899,7 @@ snapshots: '@types/http-cache-semantics@4.0.4': {} - '@types/http-errors@2.0.4': {} + '@types/http-errors@2.0.5': {} '@types/json-schema@7.0.15': {} @@ -7328,45 +7919,45 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/node-fetch@2.6.12': + '@types/node-fetch@2.6.13': dependencies: - '@types/node': 20.17.32 - form-data: 4.0.2 + '@types/node': 20.19.17 + form-data: 4.0.4 '@types/node@12.20.55': {} - '@types/node@18.19.87': + '@types/node@18.19.127': dependencies: undici-types: 5.26.5 - '@types/node@20.17.32': + '@types/node@20.19.17': dependencies: - undici-types: 6.19.8 + undici-types: 6.21.0 '@types/papaparse@5.3.16': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@types/qs@6.9.18': {} + '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} - '@types/react@19.1.3': + '@types/react@19.1.13': dependencies: csstype: 3.1.3 '@types/retry@0.12.0': {} - '@types/send@0.17.4': + '@types/send@0.17.5': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.17.32 + '@types/node': 20.19.17 - '@types/serve-static@1.15.7': + '@types/serve-static@1.15.8': dependencies: - '@types/http-errors': 2.0.4 - '@types/node': 20.17.32 - '@types/send': 0.17.4 + '@types/http-errors': 2.0.5 + '@types/node': 20.19.17 + '@types/send': 0.17.5 '@types/unist@2.0.11': {} @@ -7378,147 +7969,170 @@ snapshots: '@types/ws@8.18.1': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 '@types/yauzl@2.10.3': dependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 optional: true - '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/type-utils': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.1 - eslint: 9.25.1(jiti@1.21.7) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.44.0 + '@typescript-eslint/type-utils': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.0 + eslint: 9.36.0(jiti@1.21.7) graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.44.0 + '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.44.0 + debug: 4.4.3 + eslint: 9.36.0(jiti@1.21.7) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/project-service@8.44.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0 - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.3 + '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) + '@typescript-eslint/types': 8.44.0 + debug: 4.4.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.31.1': + '@typescript-eslint/scope-manager@8.44.0': + dependencies: + '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/visitor-keys': 8.44.0 + + '@typescript-eslint/tsconfig-utils@8.44.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - debug: 4.4.0 - eslint: 9.25.1(jiti@1.21.7) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + debug: 4.4.3 + eslint: 9.36.0(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.31.1': {} + '@typescript-eslint/types@8.44.0': {} - '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.44.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.0 + '@typescript-eslint/project-service': 8.44.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.44.0(typescript@5.9.2) + '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/visitor-keys': 8.44.0 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3)': + '@typescript-eslint/utils@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) - '@typescript-eslint/scope-manager': 8.31.1 - '@typescript-eslint/types': 8.31.1 - '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.3 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.44.0 + '@typescript-eslint/types': 8.44.0 + '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) + eslint: 9.36.0(jiti@1.21.7) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.31.1': + '@typescript-eslint/visitor-keys@8.44.0': + dependencies: + '@typescript-eslint/types': 8.44.0 + eslint-visitor-keys: 4.2.1 + + '@typescript/vfs@1.6.1(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.31.1 - eslint-visitor-keys: 4.2.0 + debug: 4.4.3 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color '@ungap/structured-clone@1.3.0': {} '@vercel/functions@1.6.0': {} - '@vue/compiler-core@3.5.13': + '@vue/compiler-core@3.5.21': dependencies: - '@babel/parser': 7.28.0 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.4 + '@vue/shared': 3.5.21 entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.13': + '@vue/compiler-dom@3.5.21': dependencies: - '@vue/compiler-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-core': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/compiler-sfc@3.5.13': + '@vue/compiler-sfc@3.5.21': dependencies: - '@babel/parser': 7.28.0 - '@vue/compiler-core': 3.5.13 - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 + '@babel/parser': 7.28.4 + '@vue/compiler-core': 3.5.21 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 estree-walker: 2.0.2 - magic-string: 0.30.17 + magic-string: 0.30.19 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.13': + '@vue/compiler-ssr@3.5.21': dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/reactivity@3.5.13': + '@vue/reactivity@3.5.21': dependencies: - '@vue/shared': 3.5.13 + '@vue/shared': 3.5.21 - '@vue/runtime-core@3.5.13': + '@vue/runtime-core@3.5.21': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.21 + '@vue/shared': 3.5.21 - '@vue/runtime-dom@3.5.13': + '@vue/runtime-dom@3.5.21': dependencies: - '@vue/reactivity': 3.5.13 - '@vue/runtime-core': 3.5.13 - '@vue/shared': 3.5.13 + '@vue/reactivity': 3.5.21 + '@vue/runtime-core': 3.5.21 + '@vue/shared': 3.5.21 csstype: 3.1.3 - '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.8.3))': + '@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2))': dependencies: - '@vue/compiler-ssr': 3.5.13 - '@vue/shared': 3.5.13 - vue: 3.5.13(typescript@5.8.3) + '@vue/compiler-ssr': 3.5.21 + '@vue/shared': 3.5.21 + vue: 3.5.21(typescript@5.9.2) - '@vue/shared@3.5.13': {} + '@vue/shared@3.5.21': {} abort-controller@3.0.0: dependencies: @@ -7534,23 +8148,17 @@ snapshots: mime-types: 3.0.1 negotiator: 1.0.0 - acorn-jsx@5.3.2(acorn@8.14.1): - dependencies: - acorn: 8.14.1 - acorn-jsx@5.3.2(acorn@8.15.0): dependencies: acorn: 8.15.0 - acorn@8.14.1: {} - acorn@8.15.0: {} address@1.2.2: {} adm-zip@0.5.16: {} - agent-base@7.1.3: {} + agent-base@7.1.4: {} agentkeepalive@4.6.0: dependencies: @@ -7561,42 +8169,42 @@ snapshots: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@3.4.33(openai@4.96.2(ws@8.18.1)(zod@3.25.67))(react@19.1.0)(sswr@2.2.0(svelte@5.28.2))(svelte@5.28.2)(vue@3.5.13(typescript@5.8.3))(zod@3.25.67): + ai@3.4.33(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.25.67) - '@ai-sdk/react': 0.0.70(react@19.1.0)(zod@3.25.67) + '@ai-sdk/react': 0.0.70(react@19.1.1)(zod@3.25.67) '@ai-sdk/solid': 0.0.54(zod@3.25.67) - '@ai-sdk/svelte': 0.0.57(svelte@5.28.2)(zod@3.25.67) + '@ai-sdk/svelte': 0.0.57(svelte@5.39.3)(zod@3.25.67) '@ai-sdk/ui-utils': 0.0.50(zod@3.25.67) - '@ai-sdk/vue': 0.0.59(vue@3.5.13(typescript@5.8.3))(zod@3.25.67) + '@ai-sdk/vue': 0.0.59(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) '@opentelemetry/api': 1.9.0 eventsource-parser: 1.1.2 json-schema: 0.4.0 jsondiffpatch: 0.6.0 secure-json-parse: 2.7.0 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod-to-json-schema: 3.24.6(zod@3.25.67) optionalDependencies: - openai: 4.96.2(ws@8.18.1)(zod@3.25.67) - react: 19.1.0 - sswr: 2.2.0(svelte@5.28.2) - svelte: 5.28.2 + openai: 4.104.0(ws@8.18.3)(zod@3.25.67) + react: 19.1.1 + sswr: 2.2.0(svelte@5.39.3) + svelte: 5.39.3 zod: 3.25.67 transitivePeerDependencies: - solid-js - vue - ai@4.3.12(react@19.1.0)(zod@3.25.67): + ai@4.3.19(react@19.1.1)(zod@3.25.67): dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) - '@ai-sdk/react': 1.2.10(react@19.1.0)(zod@3.25.67) - '@ai-sdk/ui-utils': 1.2.9(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) + '@ai-sdk/react': 1.2.12(react@19.1.1)(zod@3.25.67) + '@ai-sdk/ui-utils': 1.2.11(zod@3.25.67) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 zod: 3.25.67 optionalDependencies: - react: 19.1.0 + react: 19.1.1 ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: @@ -7624,23 +8232,19 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - - ansi-escapes@7.0.0: + ansi-escapes@7.1.0: dependencies: environment: 1.1.0 ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: @@ -7648,7 +8252,7 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} any-promise@1.3.0: {} @@ -7667,12 +8271,16 @@ snapshots: argparse@2.0.1: {} + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + aria-query@5.3.2: {} - arktype@2.1.20: + arktype@2.1.22: dependencies: - '@ark/schema': 0.46.0 - '@ark/util': 0.46.0 + '@ark/schema': 0.49.0 + '@ark/util': 0.49.0 array-buffer-byte-length@1.0.2: dependencies: @@ -7690,7 +8298,7 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 @@ -7718,8 +8326,8 @@ snapshots: linear-sum-assignment: 1.0.7 mustache: 4.2.0 openai: 4.23.0 - zod: 3.25.76 - zod-to-json-schema: 3.24.5(zod@3.25.76) + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) transitivePeerDependencies: - encoding @@ -7727,47 +8335,58 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - avsc@5.7.7: {} + avsc@5.7.9: {} - axios@1.9.0: + axios@1.12.2: dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 + follow-redirects: 1.15.11 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug axobject-query@4.1.0: {} - b4a@1.6.7: {} + b4a@1.7.1: {} bail@2.0.2: {} balanced-match@1.0.2: {} - bare-events@2.5.4: + bare-events@2.7.0: optional: true - bare-fs@4.1.4: + bare-fs@4.4.4: dependencies: - bare-events: 2.5.4 + bare-events: 2.7.0 bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) + bare-stream: 2.7.0(bare-events@2.7.0) + bare-url: 2.2.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - react-native-b4a optional: true - bare-os@3.6.1: + bare-os@3.6.2: optional: true bare-path@3.0.0: dependencies: - bare-os: 3.6.1 + bare-os: 3.6.2 optional: true - bare-stream@2.6.5(bare-events@2.5.4): + bare-stream@2.7.0(bare-events@2.7.0): dependencies: - streamx: 2.22.0 + streamx: 2.22.1 optionalDependencies: - bare-events: 2.5.4 + bare-events: 2.7.0 + transitivePeerDependencies: + - react-native-b4a + optional: true + + bare-url@2.2.2: + dependencies: + bare-path: 3.0.0 optional: true base-64@0.1.0: {} @@ -7786,7 +8405,7 @@ snapshots: dependencies: is-windows: 1.0.2 - bignumber.js@9.3.0: {} + bignumber.js@9.3.1: {} binary-extensions@2.3.0: {} @@ -7813,24 +8432,24 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.0 + debug: 4.4.3 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 qs: 6.14.0 - raw-body: 3.0.0 + raw-body: 3.0.1 type-is: 2.0.1 transitivePeerDependencies: - supports-color boolbase@1.0.0: {} - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -7838,29 +8457,29 @@ snapshots: dependencies: fill-range: 7.1.1 - braintrust@0.0.171(openai@4.96.2(ws@8.18.1)(zod@3.25.67))(react@19.1.0)(sswr@2.2.0(svelte@5.28.2))(svelte@5.28.2)(vue@3.5.13(typescript@5.8.3))(zod@3.25.67): + braintrust@0.0.171(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67): dependencies: '@ai-sdk/provider': 0.0.11 '@braintrust/core': 0.0.67 - '@next/env': 14.2.28 + '@next/env': 14.2.32 '@vercel/functions': 1.6.0 - ai: 3.4.33(openai@4.96.2(ws@8.18.1)(zod@3.25.67))(react@19.1.0)(sswr@2.2.0(svelte@5.28.2))(svelte@5.28.2)(vue@3.5.13(typescript@5.8.3))(zod@3.25.67) + ai: 3.4.33(openai@4.104.0(ws@8.18.3)(zod@3.25.67))(react@19.1.1)(sswr@2.2.0(svelte@5.39.3))(svelte@5.39.3)(vue@3.5.21(typescript@5.9.2))(zod@3.25.67) argparse: 2.0.1 chalk: 4.1.2 cli-progress: 3.12.0 - dotenv: 16.5.0 + dotenv: 16.6.1 esbuild: 0.18.20 eventsource-parser: 1.1.2 graceful-fs: 4.2.11 minimatch: 9.0.5 mustache: 4.2.0 pluralize: 8.0.0 - simple-git: 3.27.0 + simple-git: 3.28.0 slugify: 1.6.6 - source-map: 0.7.4 + source-map: 0.7.6 uuid: 9.0.1 zod: 3.25.67 - zod-to-json-schema: 3.24.5(zod@3.25.67) + zod-to-json-schema: 3.24.6(zod@3.25.67) transitivePeerDependencies: - '@aws-sdk/credential-provider-web-identity' - openai @@ -7882,9 +8501,9 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 - bundle-require@5.1.0(esbuild@0.25.3): + bundle-require@5.1.0(esbuild@0.25.10): dependencies: - esbuild: 0.25.3 + esbuild: 0.25.10 load-tsconfig: 0.2.5 busboy@1.6.0: @@ -7901,10 +8520,10 @@ snapshots: dependencies: '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 - http-cache-semantics: 4.1.1 + http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.1 + normalize-url: 8.1.0 responselike: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -7937,7 +8556,7 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} + chalk@5.6.2: {} character-entities-html4@2.1.0: {} @@ -7947,31 +8566,31 @@ snapshots: character-reference-invalid@2.0.1: {} - chardet@0.7.0: {} + chardet@2.1.0: {} charenc@0.0.2: {} cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 - css-select: 5.1.0 - css-what: 6.1.0 + css-select: 5.2.2 + css-what: 6.2.2 domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - cheerio@1.0.0: + cheerio@1.1.2: dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 domutils: 3.2.2 - encoding-sniffer: 0.2.0 - htmlparser2: 9.1.0 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 parse5: 7.3.0 parse5-htmlparser2-tree-adapter: 7.1.0 parse5-parser-stream: 7.1.2 - undici: 6.21.2 + undici: 7.16.0 whatwg-mimetype: 4.0.0 cheminfo-types@1.8.1: {} @@ -8055,7 +8674,7 @@ snapshots: color-string@1.9.1: dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.2 + simple-swizzle: 0.2.4 color@4.2.3: dependencies: @@ -8100,11 +8719,13 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + confbox@0.1.8: {} + consola@3.4.2: {} - console-table-printer@2.12.1: + console-table-printer@2.14.6: dependencies: - simple-wcswidth: 1.0.1 + simple-wcswidth: 1.1.2 content-disposition@0.5.4: dependencies: @@ -8133,14 +8754,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.0(typescript@5.9.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 cross-spawn@7.0.6: dependencies: @@ -8150,15 +8771,15 @@ snapshots: crypt@0.0.2: {} - css-select@5.1.0: + css-select@5.2.2: dependencies: boolbase: 1.0.0 - css-what: 6.1.0 + css-what: 6.2.2 domhandler: 5.0.3 domutils: 3.2.2 nth-check: 2.1.1 - css-what@6.1.0: {} + css-what@6.2.2: {} cssesc@3.0.0: {} @@ -8196,13 +8817,13 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.3: dependencies: ms: 2.1.3 decamelize@1.2.0: {} - decode-named-character-reference@1.1.0: + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -8248,12 +8869,14 @@ snapshots: detect-indent@6.1.0: {} - detect-libc@2.0.4: {} + detect-libc@2.1.0: {} + + detect-node-es@1.1.0: {} detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -8306,7 +8929,7 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - dotenv@16.5.0: {} + dotenv@16.6.1: {} dotenv@8.6.0: {} @@ -8324,7 +8947,7 @@ snapshots: ee-first@1.1.1: {} - emoji-regex@10.4.0: {} + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} @@ -8334,12 +8957,12 @@ snapshots: encodeurl@2.0.0: {} - encoding-sniffer@0.2.0: + encoding-sniffer@0.2.1: dependencies: iconv-lite: 0.6.3 whatwg-encoding: 3.1.1 - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -8347,8 +8970,8 @@ snapshots: engine.io@6.6.4: dependencies: - '@types/cors': 2.8.17 - '@types/node': 20.17.32 + '@types/cors': 2.8.19 + '@types/node': 20.19.17 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -8368,17 +8991,17 @@ snapshots: entities@4.5.0: {} - entities@6.0.0: {} + entities@6.0.1: {} env-paths@2.2.1: {} environment@1.1.0: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.9: + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -8407,7 +9030,9 @@ snapshots: is-array-buffer: 3.0.5 is-callable: 1.2.7 is-data-view: 1.0.2 + is-negative-zero: 2.0.3 is-regex: 1.2.1 + is-set: 2.0.3 is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 @@ -8422,6 +9047,7 @@ snapshots: safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 string.prototype.trim: 1.2.10 string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 @@ -8432,11 +9058,11 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-aggregate-error@1.0.13: + es-aggregate-error@1.0.14: dependencies: define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 function-bind: 1.1.2 globalthis: 1.0.4 @@ -8478,7 +9104,7 @@ snapshots: '@types/estree-jsx': 1.0.5 acorn: 8.15.0 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 esbuild@0.18.20: optionalDependencies: @@ -8531,33 +9157,34 @@ snapshots: '@esbuild/win32-ia32': 0.21.5 '@esbuild/win32-x64': 0.21.5 - esbuild@0.25.3: + esbuild@0.25.10: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.3 - '@esbuild/android-arm': 0.25.3 - '@esbuild/android-arm64': 0.25.3 - '@esbuild/android-x64': 0.25.3 - '@esbuild/darwin-arm64': 0.25.3 - '@esbuild/darwin-x64': 0.25.3 - '@esbuild/freebsd-arm64': 0.25.3 - '@esbuild/freebsd-x64': 0.25.3 - '@esbuild/linux-arm': 0.25.3 - '@esbuild/linux-arm64': 0.25.3 - '@esbuild/linux-ia32': 0.25.3 - '@esbuild/linux-loong64': 0.25.3 - '@esbuild/linux-mips64el': 0.25.3 - '@esbuild/linux-ppc64': 0.25.3 - '@esbuild/linux-riscv64': 0.25.3 - '@esbuild/linux-s390x': 0.25.3 - '@esbuild/linux-x64': 0.25.3 - '@esbuild/netbsd-arm64': 0.25.3 - '@esbuild/netbsd-x64': 0.25.3 - '@esbuild/openbsd-arm64': 0.25.3 - '@esbuild/openbsd-x64': 0.25.3 - '@esbuild/sunos-x64': 0.25.3 - '@esbuild/win32-arm64': 0.25.3 - '@esbuild/win32-ia32': 0.25.3 - '@esbuild/win32-x64': 0.25.3 + '@esbuild/aix-ppc64': 0.25.10 + '@esbuild/android-arm': 0.25.10 + '@esbuild/android-arm64': 0.25.10 + '@esbuild/android-x64': 0.25.10 + '@esbuild/darwin-arm64': 0.25.10 + '@esbuild/darwin-x64': 0.25.10 + '@esbuild/freebsd-arm64': 0.25.10 + '@esbuild/freebsd-x64': 0.25.10 + '@esbuild/linux-arm': 0.25.10 + '@esbuild/linux-arm64': 0.25.10 + '@esbuild/linux-ia32': 0.25.10 + '@esbuild/linux-loong64': 0.25.10 + '@esbuild/linux-mips64el': 0.25.10 + '@esbuild/linux-ppc64': 0.25.10 + '@esbuild/linux-riscv64': 0.25.10 + '@esbuild/linux-s390x': 0.25.10 + '@esbuild/linux-x64': 0.25.10 + '@esbuild/netbsd-arm64': 0.25.10 + '@esbuild/netbsd-x64': 0.25.10 + '@esbuild/openbsd-arm64': 0.25.10 + '@esbuild/openbsd-x64': 0.25.10 + '@esbuild/openharmony-arm64': 0.25.10 + '@esbuild/sunos-x64': 0.25.10 + '@esbuild/win32-arm64': 0.25.10 + '@esbuild/win32-ia32': 0.25.10 + '@esbuild/win32-x64': 0.25.10 escalade@3.2.0: {} @@ -8577,38 +9204,38 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.25.1(jiti@1.21.7): + eslint@9.36.0(jiti@1.21.7): dependencies: - '@eslint-community/eslint-utils': 4.6.1(eslint@9.25.1(jiti@1.21.7)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.36.0(jiti@1.21.7)) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.1 - '@eslint/core': 0.13.0 + '@eslint/config-array': 0.21.0 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.25.1 - '@eslint/plugin-kit': 0.2.8 - '@humanfs/node': 0.16.6 + '@eslint/js': 9.36.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -8630,11 +9257,11 @@ snapshots: esm-env@1.2.2: {} - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -8642,9 +9269,9 @@ snapshots: dependencies: estraverse: 5.3.0 - esrap@1.4.9: + esrap@2.1.0: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 esrecurse@4.3.0: dependencies: @@ -8674,7 +9301,7 @@ snapshots: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 - source-map: 0.7.4 + source-map: 0.7.6 estree-util-visit@2.0.0: dependencies: @@ -8697,11 +9324,11 @@ snapshots: eventsource-parser@1.1.2: {} - eventsource-parser@3.0.3: {} + eventsource-parser@3.0.6: {} eventsource@3.0.7: dependencies: - eventsource-parser: 3.0.3 + eventsource-parser: 3.0.6 express-rate-limit@7.5.1(express@5.1.0): dependencies: @@ -8751,7 +9378,7 @@ snapshots: content-type: 1.0.5 cookie: 0.7.2 cookie-signature: 1.2.2 - debug: 4.4.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -8769,7 +9396,7 @@ snapshots: router: 2.2.0 send: 1.2.0 serve-static: 2.2.0 - statuses: 2.0.1 + statuses: 2.0.2 type-is: 2.0.1 vary: 1.1.2 transitivePeerDependencies: @@ -8783,15 +9410,9 @@ snapshots: extendable-error@0.1.7: {} - external-editor@3.1.0: - dependencies: - chardet: 0.7.0 - iconv-lite: 0.4.24 - tmp: 0.0.33 - extract-zip@2.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.3 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -8823,7 +9444,7 @@ snapshots: fast-safe-stringify@2.1.1: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fastq@1.19.1: dependencies: @@ -8843,9 +9464,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 fetch-cookie@3.1.0: dependencies: @@ -8876,12 +9497,12 @@ snapshots: finalhandler@2.1.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -8895,6 +9516,12 @@ snapshots: locate-path: 6.0.0 path-exists: 4.0.0 + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.19 + mlly: 1.8.0 + rollup: 4.52.0 + flat-cache@4.0.1: dependencies: flatted: 3.3.3 @@ -8902,7 +9529,7 @@ snapshots: flatted@3.3.3: {} - follow-redirects@1.15.9: {} + follow-redirects@1.15.11: {} for-each@0.3.5: dependencies: @@ -8917,11 +9544,12 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@4.0.2: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 format@0.2.2: {} @@ -8937,10 +9565,10 @@ snapshots: fresh@2.0.0: {} - fs-extra@11.3.0: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@7.0.1: @@ -9002,7 +9630,7 @@ snapshots: get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -9017,6 +9645,8 @@ snapshots: hasown: 2.0.2 math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -9024,7 +9654,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-stream@6.0.1: {} @@ -9034,15 +9664,15 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.0: + get-tsconfig@4.10.1: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.4: + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9191,7 +9821,7 @@ snapshots: hast-util-from-parse5: 8.0.3 parse5: 7.3.0 vfile: 6.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 hast-util-from-parse5@8.0.3: dependencies: @@ -9199,7 +9829,7 @@ snapshots: '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 9.0.1 - property-information: 7.0.0 + property-information: 7.1.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 @@ -9249,9 +9879,9 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.17 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -9266,7 +9896,7 @@ snapshots: hast-util-whitespace: 3.0.0 html-void-elements: 3.0.0 mdast-util-to-hast: 13.2.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 stringify-entities: 4.0.4 zwitch: 2.0.4 @@ -9283,11 +9913,11 @@ snapshots: mdast-util-mdx-expression: 2.0.1 mdast-util-mdx-jsx: 3.2.0 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.17 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -9328,21 +9958,21 @@ snapshots: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.0.0 + property-information: 7.1.0 space-separated-tokens: 2.0.2 help-me@5.0.0: {} html-void-elements@3.0.0: {} - htmlparser2@9.1.0: + htmlparser2@10.0.0: dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 domutils: 3.2.2 - entities: 4.5.0 + entities: 6.0.1 - http-cache-semantics@4.1.1: {} + http-cache-semantics@4.2.0: {} http-errors@2.0.0: dependencies: @@ -9354,8 +9984,8 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9366,8 +9996,8 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9385,10 +10015,16 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} + ignore@7.0.5: {} + immediate@3.0.6: {} immer@9.0.21: {} @@ -9404,58 +10040,57 @@ snapshots: inherits@2.0.4: {} - ink-spinner@5.0.0(ink@5.2.1(@types/react@19.1.3)(react@18.3.1))(react@18.3.1): + ink-spinner@5.0.0(ink@6.3.1(@types/react@19.1.13)(react@19.1.1))(react@19.1.1): dependencies: cli-spinners: 2.9.2 - ink: 5.2.1(@types/react@19.1.3)(react@18.3.1) - react: 18.3.1 + ink: 6.3.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 - ink@5.2.1(@types/react@19.1.3)(react@18.3.1): + ink@6.3.1(@types/react@19.1.13)(react@19.1.1): dependencies: - '@alcalzone/ansi-tokenize': 0.1.3 - ansi-escapes: 7.0.0 - ansi-styles: 6.2.1 + '@alcalzone/ansi-tokenize': 0.2.0 + ansi-escapes: 7.1.0 + ansi-styles: 6.2.3 auto-bind: 5.0.1 - chalk: 5.4.1 + chalk: 5.6.2 cli-boxes: 3.0.0 cli-cursor: 4.0.0 cli-truncate: 4.0.0 code-excerpt: 4.0.0 es-toolkit: 1.39.10 indent-string: 5.0.0 - is-in-ci: 1.0.0 + is-in-ci: 2.0.0 patch-console: 2.0.0 - react: 18.3.1 - react-reconciler: 0.29.2(react@18.3.1) - scheduler: 0.23.2 + react: 19.1.1 + react-reconciler: 0.32.0(react@19.1.1) signal-exit: 3.0.7 - slice-ansi: 7.1.0 + slice-ansi: 7.1.2 stack-utils: 2.0.6 string-width: 7.2.0 type-fest: 4.41.0 widest-line: 5.0.0 - wrap-ansi: 9.0.0 - ws: 8.18.1 + wrap-ansi: 9.0.2 + ws: 8.18.3 yoga-layout: 3.2.1 optionalDependencies: - '@types/react': 19.1.3 + '@types/react': 19.1.13 transitivePeerDependencies: - bufferutil - utf-8-validate inline-style-parser@0.2.4: {} - inquirer@12.6.0(@types/node@20.17.32): + inquirer@12.9.6(@types/node@20.19.17): dependencies: - '@inquirer/core': 10.1.10(@types/node@20.17.32) - '@inquirer/prompts': 7.5.0(@types/node@20.17.32) - '@inquirer/type': 3.0.6(@types/node@20.17.32) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.0 + '@inquirer/core': 10.2.2(@types/node@20.19.17) + '@inquirer/prompts': 7.8.6(@types/node@20.19.17) + '@inquirer/type': 3.0.8(@types/node@20.19.17) mute-stream: 2.0.0 - run-async: 3.0.0 + run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 20.17.32 + '@types/node': 20.19.17 install@0.13.0: {} @@ -9465,10 +10100,7 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.0.1: {} ip-regex@4.3.0: {} @@ -9491,7 +10123,7 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.4: {} is-async-function@2.1.1: dependencies: @@ -9549,9 +10181,9 @@ snapshots: is-fullwidth-code-point@4.0.0: {} - is-fullwidth-code-point@5.0.0: + is-fullwidth-code-point@5.1.0: dependencies: - get-east-asian-width: 1.3.0 + get-east-asian-width: 1.4.0 is-generator-function@1.1.0: dependencies: @@ -9566,7 +10198,7 @@ snapshots: is-hexadecimal@2.0.1: {} - is-in-ci@1.0.0: {} + is-in-ci@2.0.0: {} is-ip@3.1.0: dependencies: @@ -9574,6 +10206,8 @@ snapshots: is-map@2.0.3: {} + is-negative-zero@2.0.3: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -9665,7 +10299,7 @@ snapshots: js-levenshtein@1.1.6: {} - js-tiktoken@1.0.20: + js-tiktoken@1.0.21: dependencies: base64-js: 1.5.1 @@ -9680,13 +10314,11 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} - jsep@1.4.0: {} json-bigint@1.0.0: dependencies: - bignumber.js: 9.3.0 + bignumber.js: 9.3.1 json-buffer@3.0.1: {} @@ -9705,14 +10337,14 @@ snapshots: jsondiffpatch@0.6.0: dependencies: '@types/diff-match-patch': 1.0.36 - chalk: 5.4.1 + chalk: 5.6.2 diff-match-patch: 1.0.5 jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -9733,7 +10365,7 @@ snapshots: readable-stream: 2.3.8 setimmediate: 1.0.5 - jwa@2.0.0: + jwa@2.0.1: dependencies: buffer-equal-constant-time: 1.0.1 ecdsa-sig-formatter: 1.0.11 @@ -9741,7 +10373,7 @@ snapshots: jws@4.0.0: dependencies: - jwa: 2.0.0 + jwa: 2.0.1 safe-buffer: 5.2.1 katex@0.16.22: @@ -9754,17 +10386,18 @@ snapshots: kind-of@6.0.3: {} - langsmith@0.3.23(openai@4.96.2(ws@8.18.1)(zod@3.25.67)): + langsmith@0.3.69(@opentelemetry/api@1.9.0)(openai@4.104.0(ws@8.18.3)(zod@3.25.67)): dependencies: '@types/uuid': 10.0.0 chalk: 4.1.2 - console-table-printer: 2.12.1 + console-table-printer: 2.14.6 p-queue: 6.6.2 p-retry: 4.6.2 - semver: 7.7.1 + semver: 7.7.2 uuid: 10.0.0 optionalDependencies: - openai: 4.96.2(ws@8.18.1)(zod@3.25.67) + '@opentelemetry/api': 1.9.0 + openai: 4.104.0(ws@8.18.3)(zod@3.25.67) lcm@0.0.3: dependencies: @@ -9772,7 +10405,7 @@ snapshots: leven@3.1.0: {} - leven@4.0.0: {} + leven@4.1.0: {} levn@0.4.1: dependencies: @@ -9790,7 +10423,7 @@ snapshots: cheminfo-types: 1.8.1 install: 0.13.0 ml-matrix: 6.12.1 - ml-spectra-processing: 14.12.0 + ml-spectra-processing: 14.17.1 lines-and-columns@1.2.4: {} @@ -9828,9 +10461,9 @@ snapshots: lru-cache@7.18.3: {} - magic-string@0.30.17: + magic-string@0.30.19: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 markdown-extensions@2.0.0: {} @@ -9855,7 +10488,7 @@ snapshots: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -9972,7 +10605,7 @@ snapshots: parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -10046,7 +10679,7 @@ snapshots: micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -10160,7 +10793,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: @@ -10176,7 +10809,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: @@ -10212,7 +10845,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@2.0.1: dependencies: @@ -10259,7 +10892,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -10274,7 +10907,7 @@ snapshots: estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} @@ -10306,8 +10939,8 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.0 - decode-named-character-reference: 1.1.0 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -10352,11 +10985,11 @@ snapshots: minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -10373,10 +11006,11 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.2.78(@types/node@20.17.32)(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3): + mintlify@4.2.121(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@20.19.17)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2): dependencies: - '@mintlify/cli': 4.0.682(@types/node@20.17.32)(@types/react@19.1.3)(react-dom@18.3.1(react@18.3.1))(typescript@5.8.3) + '@mintlify/cli': 4.0.725(@radix-ui/react-popover@1.1.15(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1))(@types/node@20.19.17)(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(typescript@5.9.2) transitivePeerDependencies: + - '@radix-ui/react-popover' - '@types/node' - '@types/react' - bare-buffer @@ -10385,6 +11019,7 @@ snapshots: - encoding - react-devtools-core - react-dom + - react-native-b4a - supports-color - ts-node - typescript @@ -10417,7 +11052,7 @@ snapshots: is-any-array: 2.0.1 ml-array-rescale: 1.3.7 - ml-spectra-processing@14.12.0: + ml-spectra-processing@14.17.1: dependencies: binary-search: 1.3.6 cheminfo-types: 1.8.1 @@ -10428,6 +11063,13 @@ snapshots: ml-xsadd@3.0.1: {} + mlly@1.8.0: + dependencies: + acorn: 8.15.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + mri@1.2.0: {} ms@2.0.0: {} @@ -10466,21 +11108,21 @@ snapshots: netmask@2.0.2: {} - next-mdx-remote-client@1.1.1(@types/react@19.1.3)(acorn@8.15.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-mdx-remote-client@1.1.2(@types/react@19.1.13)(react-dom@18.3.1(react@19.1.1))(react@19.1.1)(unified@11.0.5): dependencies: '@babel/code-frame': 7.27.1 - '@mdx-js/mdx': 3.1.0(acorn@8.15.0) - '@mdx-js/react': 3.1.0(@types/react@19.1.3)(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - remark-mdx-remove-esm: 1.1.0 + '@mdx-js/mdx': 3.1.1 + '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) + react: 19.1.1 + react-dom: 18.3.1(react@19.1.1) + remark-mdx-remove-esm: 1.2.1(unified@11.0.5) serialize-error: 12.0.0 vfile: 6.0.3 vfile-matter: 5.0.1 transitivePeerDependencies: - '@types/react' - - acorn - supports-color + - unified nimma@0.2.3: dependencies: @@ -10508,7 +11150,7 @@ snapshots: normalize-path@3.0.0: {} - normalize-url@8.0.1: {} + normalize-url@8.1.0: {} nth-check@2.1.1: dependencies: @@ -10534,7 +11176,7 @@ snapshots: ollama-ai-provider@1.2.0(zod@3.25.67): dependencies: '@ai-sdk/provider': 1.1.3 - '@ai-sdk/provider-utils': 2.2.7(zod@3.25.67) + '@ai-sdk/provider-utils': 2.2.8(zod@3.25.67) partial-json: 0.1.7 optionalDependencies: zod: 3.25.67 @@ -10568,55 +11210,40 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.23.0: - dependencies: - '@types/node': 18.19.87 - '@types/node-fetch': 2.6.12 - abort-controller: 3.0.0 - agentkeepalive: 4.6.0 - digest-fetch: 1.3.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding - - openai@4.96.2(ws@8.18.1)(zod@3.25.67): + openai@4.104.0(ws@8.18.3)(zod@3.25.67): dependencies: - '@types/node': 18.19.87 - '@types/node-fetch': 2.6.12 + '@types/node': 18.19.127 + '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 optionalDependencies: - ws: 8.18.1 + ws: 8.18.3 zod: 3.25.67 transitivePeerDependencies: - encoding - openai@4.96.2(ws@8.18.1)(zod@3.25.76): + openai@4.23.0: dependencies: - '@types/node': 18.19.87 - '@types/node-fetch': 2.6.12 + '@types/node': 18.19.127 + '@types/node-fetch': 2.6.13 abort-controller: 3.0.0 agentkeepalive: 4.6.0 + digest-fetch: 1.3.0 form-data-encoder: 1.7.2 formdata-node: 4.4.1 node-fetch: 2.7.0 - optionalDependencies: - ws: 8.18.1 - zod: 3.25.76 + web-streams-polyfill: 3.3.3 transitivePeerDependencies: - encoding openapi-types@12.1.3: {} - openapi3-ts@4.4.0: + openapi3-ts@4.5.0: dependencies: - yaml: 2.7.1 + yaml: 2.8.1 optionator@0.9.4: dependencies: @@ -10627,8 +11254,6 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 - os-tmpdir@1.0.2: {} - outdent@0.5.0: {} own-keys@1.0.1: @@ -10694,9 +11319,9 @@ snapshots: pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.0 - get-uri: 6.0.4 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -10713,7 +11338,7 @@ snapshots: package-manager-detector@0.2.11: dependencies: - quansync: 0.2.10 + quansync: 0.2.11 pako@1.0.11: {} @@ -10728,7 +11353,7 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -10736,7 +11361,7 @@ snapshots: parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -10760,7 +11385,7 @@ snapshots: parse5@7.3.0: dependencies: - entities: 6.0.0 + entities: 6.0.1 parseurl@1.3.3: {} @@ -10782,17 +11407,19 @@ snapshots: path-to-regexp@0.1.12: {} - path-to-regexp@8.2.0: {} + path-to-regexp@8.3.0: {} path-type@4.0.0: {} + pathe@2.0.3: {} + pend@1.2.0: {} picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pify@2.3.0: {} @@ -10802,7 +11429,7 @@ snapshots: dependencies: split2: 4.2.0 - pino-pretty@13.0.0: + pino-pretty@13.1.1: dependencies: colorette: 2.0.20 dateformat: 4.6.3 @@ -10813,21 +11440,21 @@ snapshots: minimist: 1.2.8 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 - pump: 3.0.2 - secure-json-parse: 2.7.0 + pump: 3.0.3 + secure-json-parse: 4.0.0 sonic-boom: 4.2.0 - strip-json-comments: 3.1.1 + strip-json-comments: 5.0.3 pino-std-serializers@7.0.0: {} - pino@9.6.0: + pino@9.10.0: dependencies: atomic-sleep: 1.0.0 fast-redact: 3.5.0 on-exit-leak-free: 2.1.2 pino-abstract-transport: 2.0.0 pino-std-serializers: 7.0.0 - process-warning: 4.0.1 + process-warning: 5.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.5.0 @@ -10838,11 +11465,17 @@ snapshots: pkce-challenge@5.0.0: {} - playwright-core@1.52.0: {} + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.0 + pathe: 2.0.3 + + playwright-core@1.55.0: {} - playwright@1.52.0: + playwright@1.55.0: dependencies: - playwright-core: 1.52.0 + playwright-core: 1.55.0 optionalDependencies: fsevents: 2.3.2 @@ -10859,7 +11492,7 @@ snapshots: read-cache: 1.0.0 resolve: 1.22.10 - postcss-js@4.0.1(postcss@8.5.6): + postcss-js@4.1.0(postcss@8.5.6): dependencies: camelcase-css: 2.0.1 postcss: 8.5.6 @@ -10867,18 +11500,18 @@ snapshots: postcss-load-config@4.0.2(postcss@8.5.6): dependencies: lilconfig: 3.1.3 - yaml: 2.7.1 + yaml: 2.8.1 optionalDependencies: postcss: 8.5.6 - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.4)(yaml@2.7.1): + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 1.21.7 postcss: 8.5.6 - tsx: 4.19.4 - yaml: 2.7.1 + tsx: 4.20.5 + yaml: 2.8.1 postcss-nested@6.2.0(postcss@8.5.6): dependencies: @@ -10902,15 +11535,15 @@ snapshots: prettier@2.8.8: {} - prettier@3.5.3: {} + prettier@3.6.2: {} process-nextick-args@2.0.1: {} - process-warning@4.0.1: {} + process-warning@5.0.0: {} progress@2.0.3: {} - property-information@7.0.0: {} + property-information@7.1.0: {} proxy-addr@2.0.7: dependencies: @@ -10919,8 +11552,8 @@ snapshots: proxy-agent@6.5.0: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 + agent-base: 7.1.4 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -10938,9 +11571,9 @@ snapshots: got: 12.6.1 is-ip: 3.1.0 - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} @@ -10949,24 +11582,26 @@ snapshots: dependencies: '@puppeteer/browsers': 2.3.0 chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) - debug: 4.4.0 + debug: 4.4.3 devtools-protocol: 0.0.1312386 - ws: 8.18.1 + ws: 8.18.3 transitivePeerDependencies: - bare-buffer - bufferutil + - react-native-b4a - supports-color - utf-8-validate - puppeteer@22.15.0(typescript@5.8.3): + puppeteer@22.15.0(typescript@5.9.2): dependencies: '@puppeteer/browsers': 2.3.0 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.9.2) devtools-protocol: 0.0.1312386 puppeteer-core: 22.15.0 transitivePeerDependencies: - bare-buffer - bufferutil + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -10979,7 +11614,7 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.10: {} + quansync@0.2.11: {} queue-microtask@1.2.3: {} @@ -10996,30 +11631,52 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.0: + raw-body@3.0.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 - iconv-lite: 0.6.3 + iconv-lite: 0.7.0 unpipe: 1.0.0 - react-dom@18.3.1(react@18.3.1): + react-dom@18.3.1(react@19.1.1): dependencies: loose-envify: 1.4.0 - react: 18.3.1 + react: 19.1.1 scheduler: 0.23.2 - react-reconciler@0.29.2(react@18.3.1): + react-reconciler@0.32.0(react@19.1.1): dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 + react: 19.1.1 + scheduler: 0.26.0 - react@18.3.1: + react-remove-scroll-bar@2.3.8(@types/react@19.1.13)(react@19.1.1): dependencies: - loose-envify: 1.4.0 + react: 19.1.1 + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + react-remove-scroll@2.7.1(@types/react@19.1.13)(react@19.1.1): + dependencies: + react: 19.1.1 + react-remove-scroll-bar: 2.3.8(@types/react@19.1.13)(react@19.1.1) + react-style-singleton: 2.2.3(@types/react@19.1.13)(react@19.1.1) + tslib: 2.8.1 + use-callback-ref: 1.3.3(@types/react@19.1.13)(react@19.1.1) + use-sidecar: 1.1.3(@types/react@19.1.13)(react@19.1.1) + optionalDependencies: + '@types/react': 19.1.13 + + react-style-singleton@2.2.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + get-nonce: 1.0.1 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 - react@19.1.0: {} + react@19.1.1: {} read-cache@1.0.0: dependencies: @@ -11056,15 +11713,14 @@ snapshots: estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.15.0): + recma-jsx@1.0.1(acorn@8.15.0): dependencies: + acorn: 8.15.0 acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 - transitivePeerDependencies: - - acorn recma-parse@1.0.0: dependencies: @@ -11084,7 +11740,7 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 @@ -11168,15 +11824,16 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx-remove-esm@1.1.0: + remark-mdx-remove-esm@1.2.1(unified@11.0.5): dependencies: '@types/mdast': 4.0.4 mdast-util-mdxjs-esm: 2.0.1 + unified: 11.0.5 unist-util-remove: 4.0.0 transitivePeerDependencies: - supports-color - remark-mdx@3.1.0: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -11278,43 +11935,45 @@ snapshots: reusify@1.1.0: {} - rollup@4.40.1: + rollup@4.52.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.40.1 - '@rollup/rollup-android-arm64': 4.40.1 - '@rollup/rollup-darwin-arm64': 4.40.1 - '@rollup/rollup-darwin-x64': 4.40.1 - '@rollup/rollup-freebsd-arm64': 4.40.1 - '@rollup/rollup-freebsd-x64': 4.40.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 - '@rollup/rollup-linux-arm-musleabihf': 4.40.1 - '@rollup/rollup-linux-arm64-gnu': 4.40.1 - '@rollup/rollup-linux-arm64-musl': 4.40.1 - '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-gnu': 4.40.1 - '@rollup/rollup-linux-riscv64-musl': 4.40.1 - '@rollup/rollup-linux-s390x-gnu': 4.40.1 - '@rollup/rollup-linux-x64-gnu': 4.40.1 - '@rollup/rollup-linux-x64-musl': 4.40.1 - '@rollup/rollup-win32-arm64-msvc': 4.40.1 - '@rollup/rollup-win32-ia32-msvc': 4.40.1 - '@rollup/rollup-win32-x64-msvc': 4.40.1 + '@rollup/rollup-android-arm-eabi': 4.52.0 + '@rollup/rollup-android-arm64': 4.52.0 + '@rollup/rollup-darwin-arm64': 4.52.0 + '@rollup/rollup-darwin-x64': 4.52.0 + '@rollup/rollup-freebsd-arm64': 4.52.0 + '@rollup/rollup-freebsd-x64': 4.52.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.0 + '@rollup/rollup-linux-arm-musleabihf': 4.52.0 + '@rollup/rollup-linux-arm64-gnu': 4.52.0 + '@rollup/rollup-linux-arm64-musl': 4.52.0 + '@rollup/rollup-linux-loong64-gnu': 4.52.0 + '@rollup/rollup-linux-ppc64-gnu': 4.52.0 + '@rollup/rollup-linux-riscv64-gnu': 4.52.0 + '@rollup/rollup-linux-riscv64-musl': 4.52.0 + '@rollup/rollup-linux-s390x-gnu': 4.52.0 + '@rollup/rollup-linux-x64-gnu': 4.52.0 + '@rollup/rollup-linux-x64-musl': 4.52.0 + '@rollup/rollup-openharmony-arm64': 4.52.0 + '@rollup/rollup-win32-arm64-msvc': 4.52.0 + '@rollup/rollup-win32-ia32-msvc': 4.52.0 + '@rollup/rollup-win32-x64-gnu': 4.52.0 + '@rollup/rollup-win32-x64-msvc': 4.52.0 fsevents: 2.3.3 router@2.2.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 depd: 2.0.0 is-promise: 4.0.0 parseurl: 1.3.3 - path-to-regexp: 8.2.0 + path-to-regexp: 8.3.0 transitivePeerDependencies: - supports-color - run-async@3.0.0: {} + run-async@4.0.6: {} run-parallel@1.2.0: dependencies: @@ -11359,6 +12018,8 @@ snapshots: dependencies: loose-envify: 1.4.0 + scheduler@0.26.0: {} + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -11366,7 +12027,7 @@ snapshots: secure-json-parse@2.7.0: {} - semver@7.7.1: {} + secure-json-parse@4.0.0: {} semver@7.7.2: {} @@ -11390,7 +12051,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.0 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -11400,7 +12061,7 @@ snapshots: ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.1 + statuses: 2.0.2 transitivePeerDependencies: - supports-color @@ -11457,7 +12118,7 @@ snapshots: sharp@0.33.5: dependencies: color: 4.2.3 - detect-libc: 2.0.4 + detect-libc: 2.1.0 semver: 7.7.2 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 @@ -11486,14 +12147,14 @@ snapshots: shebang-regex@3.0.0: {} - shiki@3.11.0: + shiki@3.13.0: dependencies: - '@shikijs/core': 3.11.0 - '@shikijs/engine-javascript': 3.11.0 - '@shikijs/engine-oniguruma': 3.11.0 - '@shikijs/langs': 3.11.0 - '@shikijs/themes': 3.11.0 - '@shikijs/types': 3.11.0 + '@shikijs/core': 3.13.0 + '@shikijs/engine-javascript': 3.13.0 + '@shikijs/engine-oniguruma': 3.13.0 + '@shikijs/langs': 3.13.0 + '@shikijs/themes': 3.13.0 + '@shikijs/types': 3.13.0 '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -11533,31 +12194,31 @@ snapshots: dependencies: jsep: 1.4.0 - simple-git@3.27.0: + simple-git@3.28.0: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.0 + debug: 4.4.3 transitivePeerDependencies: - supports-color - simple-swizzle@0.2.2: + simple-swizzle@0.2.4: dependencies: - is-arrayish: 0.3.2 + is-arrayish: 0.3.4 - simple-wcswidth@1.0.1: {} + simple-wcswidth@1.1.2: {} slash@3.0.0: {} slice-ansi@5.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 is-fullwidth-code-point: 4.0.0 - slice-ansi@7.1.0: + slice-ansi@7.1.2: dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 + ansi-styles: 6.2.3 + is-fullwidth-code-point: 5.1.0 slugify@1.6.6: {} @@ -11595,15 +12256,15 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 - debug: 4.4.0 - socks: 2.8.4 + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.4: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.0.1 smart-buffer: 4.2.0 sonic-boom@4.2.0: @@ -11615,7 +12276,7 @@ snapshots: source-map@0.6.1: optional: true - source-map@0.7.4: {} + source-map@0.7.6: {} source-map@0.8.0-beta.0: dependencies: @@ -11632,11 +12293,9 @@ snapshots: sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - - sswr@2.2.0(svelte@5.28.2): + sswr@2.2.0(svelte@5.39.3): dependencies: - svelte: 5.28.2 + svelte: 5.39.3 swrev: 4.0.0 stack-utils@2.0.6: @@ -11645,14 +12304,23 @@ snapshots: statuses@2.0.1: {} + statuses@2.0.2: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + streamsearch@1.1.0: {} - streamx@2.22.0: + streamx@2.22.1: dependencies: fast-fifo: 1.3.2 text-decoder: 1.2.3 optionalDependencies: - bare-events: 2.5.4 + bare-events: 2.7.0 + transitivePeerDependencies: + - react-native-b4a string-comparison@1.3.0: {} @@ -11666,13 +12334,13 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 - strip-ansi: 7.1.0 + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.2 string.prototype.trim@1.2.10: dependencies: @@ -11680,7 +12348,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -11710,9 +12378,9 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: + strip-ansi@7.1.2: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom-string@1.0.0: {} @@ -11720,17 +12388,19 @@ snapshots: strip-json-comments@3.1.1: {} - style-to-js@1.1.16: + strip-json-comments@5.0.3: {} + + style-to-js@1.1.17: dependencies: - style-to-object: 1.0.8 + style-to-object: 1.0.9 - style-to-object@1.0.8: + style-to-object@1.0.9: dependencies: inline-style-parser: 0.2.4 sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -11744,10 +12414,10 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - svelte@5.28.2: + svelte@5.39.3: dependencies: - '@ampproject/remapping': 2.3.0 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/remapping': 2.3.5 + '@jridgewell/sourcemap-codec': 1.5.5 '@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0) '@types/estree': 1.0.8 acorn: 8.15.0 @@ -11755,23 +12425,23 @@ snapshots: axobject-query: 4.1.0 clsx: 2.1.1 esm-env: 1.2.2 - esrap: 1.4.9 + esrap: 2.1.0 is-reference: 3.0.3 locate-character: 3.0.0 - magic-string: 0.30.17 - zimmerframe: 1.1.2 + magic-string: 0.30.19 + zimmerframe: 1.1.4 - swr@2.3.3(react@19.1.0): + swr@2.3.6(react@19.1.1): dependencies: dequal: 2.0.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.1.1 + use-sync-external-store: 1.5.0(react@19.1.1) swrev@4.0.0: {} - swrv@1.1.0(vue@3.5.13(typescript@5.8.3)): + swrv@1.1.0(vue@3.5.21(typescript@5.9.2)): dependencies: - vue: 3.5.13(typescript@5.8.3) + vue: 3.5.21(typescript@5.9.2) tailwindcss@3.4.17: dependencies: @@ -11791,7 +12461,7 @@ snapshots: picocolors: 1.1.1 postcss: 8.5.6 postcss-import: 15.1.0(postcss@8.5.6) - postcss-js: 4.0.1(postcss@8.5.6) + postcss-js: 4.1.0(postcss@8.5.6) postcss-load-config: 4.0.2(postcss@8.5.6) postcss-nested: 6.2.0(postcss@8.5.6) postcss-selector-parser: 6.1.2 @@ -11800,21 +12470,24 @@ snapshots: transitivePeerDependencies: - ts-node - tar-fs@3.0.8: + tar-fs@3.1.1: dependencies: - pump: 3.0.2 + pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.1.4 + bare-fs: 4.4.4 bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer + - react-native-b4a tar-stream@3.1.7: dependencies: - b4a: 1.6.7 + b4a: 1.7.1 fast-fifo: 1.3.2 - streamx: 2.22.0 + streamx: 2.22.1 + transitivePeerDependencies: + - react-native-b4a tar@6.2.1: dependencies: @@ -11829,7 +12502,9 @@ snapshots: text-decoder@1.2.3: dependencies: - b4a: 1.6.7 + b4a: 1.7.1 + transitivePeerDependencies: + - react-native-b4a thenify-all@1.6.0: dependencies: @@ -11849,10 +12524,10 @@ snapshots: tinyexec@0.3.2: {} - tinyglobby@0.2.13: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 tldts-core@6.1.86: {} @@ -11860,10 +12535,6 @@ snapshots: dependencies: tldts-core: 6.1.86 - tmp@0.0.33: - dependencies: - os-tmpdir: 1.0.2 - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -11888,9 +12559,9 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 ts-interface-checker@0.1.13: {} @@ -11898,46 +12569,55 @@ snapshots: tslib@2.8.1: {} - tsup@8.4.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.4)(typescript@5.8.3)(yaml@2.7.1): + tsup@8.5.0(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.3) + bundle-require: 5.1.0(esbuild@0.25.10) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 - debug: 4.4.0 - esbuild: 0.25.3 + debug: 4.4.3 + esbuild: 0.25.10 + fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.4)(yaml@2.7.1) + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.20.5)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.40.1 + rollup: 4.52.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 - tinyglobby: 0.2.13 + tinyglobby: 0.2.15 tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color - tsx - yaml - tsx@4.19.4: + tsx@4.20.5: dependencies: - esbuild: 0.25.3 - get-tsconfig: 4.10.0 + esbuild: 0.25.10 + get-tsconfig: 4.10.1 optionalDependencies: fsevents: 2.3.3 + twoslash-protocol@0.3.4: {} + + twoslash@0.3.4(typescript@5.9.2): + dependencies: + '@typescript/vfs': 1.6.1(typescript@5.9.2) + twoslash-protocol: 0.3.4 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 - type-fest@0.21.3: {} - type-fest@4.41.0: {} type-is@1.6.18: @@ -11986,17 +12666,20 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3): + typescript-eslint@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3))(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/parser': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - '@typescript-eslint/utils': 8.31.1(eslint@9.25.1(jiti@1.21.7))(typescript@5.8.3) - eslint: 9.25.1(jiti@1.21.7) - typescript: 5.8.3 + '@typescript-eslint/eslint-plugin': 8.44.0(@typescript-eslint/parser@8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/parser': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.44.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.44.0(eslint@9.36.0(jiti@1.21.7))(typescript@5.9.2) + eslint: 9.36.0(jiti@1.21.7) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.9.2: {} + + ufo@1.6.1: {} unbox-primitive@1.1.0: dependencies: @@ -12012,9 +12695,9 @@ snapshots: undici-types@5.26.5: {} - undici-types@6.19.8: {} + undici-types@6.21.0: {} - undici@6.21.2: {} + undici@7.16.0: {} unified@11.0.5: dependencies: @@ -12115,9 +12798,24 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-sync-external-store@1.5.0(react@19.1.0): + use-callback-ref@1.3.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + use-sidecar@1.1.3(@types/react@19.1.13)(react@19.1.1): + dependencies: + detect-node-es: 1.1.0 + react: 19.1.1 + tslib: 2.8.1 + optionalDependencies: + '@types/react': 19.1.13 + + use-sync-external-store@1.5.0(react@19.1.1): dependencies: - react: 19.1.0 + react: 19.1.1 util-deprecate@1.0.2: {} @@ -12143,9 +12841,9 @@ snapshots: vfile-matter@5.0.1: dependencies: vfile: 6.0.3 - yaml: 2.7.1 + yaml: 2.8.1 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 @@ -12153,17 +12851,17 @@ snapshots: vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - vue@3.5.13(typescript@5.8.3): + vue@3.5.21(typescript@5.9.2): dependencies: - '@vue/compiler-dom': 3.5.13 - '@vue/compiler-sfc': 3.5.13 - '@vue/runtime-dom': 3.5.13 - '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.8.3)) - '@vue/shared': 3.5.13 + '@vue/compiler-dom': 3.5.21 + '@vue/compiler-sfc': 3.5.21 + '@vue/runtime-dom': 3.5.21 + '@vue/server-renderer': 3.5.21(vue@3.5.21(typescript@5.9.2)) + '@vue/shared': 3.5.21 optionalDependencies: - typescript: 5.8.3 + typescript: 5.9.2 web-namespaces@2.0.1: {} @@ -12257,21 +12955,21 @@ snapshots: wrap-ansi@8.1.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 - wrap-ansi@9.0.0: + wrap-ansi@9.0.2: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrappy@1.0.2: {} ws@8.17.1: {} - ws@8.18.1: {} + ws@8.18.3: {} xml2js@0.6.2: dependencies: @@ -12286,7 +12984,7 @@ snapshots: yallist@4.0.0: {} - yaml@2.7.1: {} + yaml@2.8.1: {} yargs-parser@21.1.1: {} @@ -12307,17 +13005,17 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} + yoctocolors-cjs@2.1.3: {} yoga-layout@3.2.1: {} - zimmerframe@1.1.2: {} + zimmerframe@1.1.4: {} - zod-to-json-schema@3.24.5(zod@3.25.67): + zod-to-json-schema@3.24.6(zod@3.25.67): dependencies: zod: 3.25.67 - zod-to-json-schema@3.24.5(zod@3.25.76): + zod-to-json-schema@3.24.6(zod@3.25.76): dependencies: zod: 3.25.76 From cd2f4a96a1e6374866494f8c849b0b9d4545bcc4 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 20 Sep 2025 12:29:38 +0200 Subject: [PATCH 11/20] adjust threshold to be less sensitive for screenshot UI changes --- .env.example | 8 ++++---- evals/utils/ScreenshotCollector.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.env.example b/.env.example index ffe47eef1..e1892af54 100644 --- a/.env.example +++ b/.env.example @@ -13,7 +13,7 @@ AGENT_EVAL_MAX_STEPS=50 STAGEHAND_API_URL="http://localhost:80" # Screenshot collector thresholds for determining when screenshots are too similar -# SSIM (Structural Similarity Index) threshold: 0-1, higher = more similar (default: 0.92) -SCREENSHOT_SSIM_THRESHOLD=0.92 -# MSE (Mean Squared Error) threshold: lower = more similar (default: 50) -SCREENSHOT_MSE_THRESHOLD=50 +# SSIM (Structural Similarity Index) threshold: 0-1, higher = more similar (default: 0.85) +SCREENSHOT_SSIM_THRESHOLD=0.85 +# MSE (Mean Squared Error) threshold: lower = more similar (default: 200) +SCREENSHOT_MSE_THRESHOLD=200 diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index f94bce331..aa4b482ee 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -33,10 +33,10 @@ export class ScreenshotCollector { this.logger = options.logger; this.ssimThreshold = process.env.SCREENSHOT_SSIM_THRESHOLD ? parseFloat(process.env.SCREENSHOT_SSIM_THRESHOLD) - : 0.92; + : 0.85; this.mseThreshold = process.env.SCREENSHOT_MSE_THRESHOLD ? parseFloat(process.env.SCREENSHOT_MSE_THRESHOLD) - : 50; + : 200; } start(): void { From 2c4069129cd042f64a0f6a9793120d011b6d5757 Mon Sep 17 00:00:00 2001 From: Filip Michalsky Date: Sat, 20 Sep 2025 12:33:05 +0200 Subject: [PATCH 12/20] add screenshot collector to all external benchmarks --- evals/tasks/agent/gaia.ts | 30 +++++++++++++++++++--- evals/tasks/agent/osworld.ts | 48 +++++++++++++++++++++++++++--------- 2 files changed, 63 insertions(+), 15 deletions(-) diff --git a/evals/tasks/agent/gaia.ts b/evals/tasks/agent/gaia.ts index 174e058ca..5bfa5db11 100644 --- a/evals/tasks/agent/gaia.ts +++ b/evals/tasks/agent/gaia.ts @@ -1,5 +1,6 @@ import { EvalFunction } from "@/types/evals"; import { Evaluator } from "../../evaluator"; +import { ScreenshotCollector } from "../../utils/ScreenshotCollector"; /** * Data-driven GAIA agent eval @@ -43,9 +44,32 @@ export const gaia: EvalFunction = async ({ } await stagehand.page.goto(params.web); - const result = await agent.execute({ - instruction: params.ques, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + const screenshotCollector = new ScreenshotCollector(stagehand.page, { + maxScreenshots: 10, // Keep last 10 screenshots + interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception + logger, // Pass the logger for proper logging + }); + + let screenshots: Buffer[] = []; + let result; + + try { + screenshotCollector.start(); + + result = await agent.execute({ + instruction: params.ques, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + } finally { + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); + } + + logger.log({ + category: "evaluation", + message: `Collected ${screenshots.length} screenshots for evaluation`, + level: 1, }); const expected = (params as Record).expected as diff --git a/evals/tasks/agent/osworld.ts b/evals/tasks/agent/osworld.ts index a37d62fbf..003453d79 100644 --- a/evals/tasks/agent/osworld.ts +++ b/evals/tasks/agent/osworld.ts @@ -2,6 +2,7 @@ import { EvalFunction } from "@/types/evals"; import type { OSWorldStagehandTask } from "../../datasets/osworld/types"; import { Stagehand } from "@/dist"; import { EvalLogger } from "../../logger"; +import { ScreenshotCollector } from "../../utils/ScreenshotCollector"; import { z } from "zod/v3"; export const osworld: EvalFunction = async ({ @@ -87,21 +88,44 @@ export const osworld: EvalFunction = async ({ // Set timeout for task execution const timeout = params.timeout || 60000; // Default 60 seconds - // Execute the task using the pre-initialized agent with timeout - const executionPromise = agent.execute({ - instruction: params.instruction, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + const screenshotCollector = new ScreenshotCollector(stagehand.page, { + maxScreenshots: 10, // Keep last 10 screenshots + interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception + logger, // Pass the logger for proper logging }); - // Apply timeout wrapper - const timeoutPromise = new Promise((_, reject) => - setTimeout( - () => reject(new Error(`Task timed out after ${timeout}ms`)), - timeout, - ), - ); + let screenshots: Buffer[] = []; + let result; - const result = await Promise.race([executionPromise, timeoutPromise]); + try { + screenshotCollector.start(); + + // Execute the task using the pre-initialized agent with timeout + const executionPromise = agent.execute({ + instruction: params.instruction, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + + // Apply timeout wrapper + const timeoutPromise = new Promise((_, reject) => + setTimeout( + () => reject(new Error(`Task timed out after ${timeout}ms`)), + timeout, + ), + ); + + result = await Promise.race([executionPromise, timeoutPromise]); + } finally { + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); + } + + logger.log({ + category: "evaluation", + message: `Collected ${screenshots.length} screenshots for evaluation`, + level: 1, + }); logger.log({ category: "osworld", From 814fccb4869034e2267da24854c2aee9ed0fea92 Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 13:42:50 -0700 Subject: [PATCH 13/20] updates and refactor --- evals/evaluator.ts | 39 +-- evals/index.eval.ts | 5 + evals/taskConfig.ts | 2 +- evals/tasks/agent/gaia.ts | 9 +- evals/tasks/agent/onlineMind2Web.ts | 79 +++--- evals/tasks/agent/osworld.ts | 9 +- evals/tasks/agent/webbench.ts | 9 +- evals/tasks/agent/webvoyager.ts | 9 +- evals/utils/ScreenshotCollector.ts | 362 +++++++------------------- evals/utils/imageResize.ts | 55 ---- evals/utils/imageUtils.ts | 19 ++ lib/a11y/utils.ts | 3 +- lib/agent/AgentClient.ts | 2 + lib/agent/AgentProvider.ts | 2 +- lib/agent/AnthropicCUAClient.ts | 4 + lib/agent/OpenAICUAClient.ts | 4 + lib/handlers/cuaAgentHandler.ts | 35 ++- lib/handlers/stagehandAgentHandler.ts | 30 ++- lib/index.ts | 127 ++++----- types/agent.ts | 1 + 20 files changed, 349 insertions(+), 456 deletions(-) delete mode 100644 evals/utils/imageResize.ts create mode 100644 evals/utils/imageUtils.ts diff --git a/evals/evaluator.ts b/evals/evaluator.ts index 49d513a89..28082e611 100644 --- a/evals/evaluator.ts +++ b/evals/evaluator.ts @@ -20,10 +20,7 @@ import { LLMParsedResponse } from "@/lib/inference"; import { LLMResponse } from "@/lib/llm/LLMClient"; import { LogLine } from "@/types/log"; import { z } from "zod"; -import { - takeOptimizedScreenshot, - compressImageBuffer, -} from "./utils/imageResize"; +import { imageResize } from "./utils/imageUtils"; dotenv.config(); @@ -48,7 +45,7 @@ export class Evaluator { this.stagehand = stagehand; this.modelName = modelName || "google/gemini-2.5-flash"; this.modelClientOptions = modelClientOptions || { - apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY || "", + apiKey: process.env.GEMINI_API_KEY || "", }; } @@ -85,8 +82,7 @@ export class Evaluator { await new Promise((resolve) => setTimeout(resolve, screenshotDelayMs)); let imageBuffer: Buffer; if (screenshot) { - // Use optimized screenshot for faster evaluator calls (25% size reduction) - imageBuffer = await takeOptimizedScreenshot(this.stagehand.page); + imageBuffer = await this.stagehand.page.screenshot(); } const llmClient = this.stagehand.llmProvider.getClient( this.modelName, @@ -190,8 +186,7 @@ export class Evaluator { let imageBuffer: Buffer; if (screenshot) { - // Use optimized screenshot for faster evaluator calls (25% size reduction) - imageBuffer = await takeOptimizedScreenshot(this.stagehand.page); + imageBuffer = await this.stagehand.page.screenshot(); } // Get the LLM client with our preferred model @@ -298,22 +293,36 @@ export class Evaluator { this.modelClientOptions, ); - // Compress multiple screenshots for faster evaluator calls - const compressedScreenshots = screenshots.map((screenshot) => - compressImageBuffer(screenshot), + //Downsize screenshots: + const downsizedScreenshots = await Promise.all( + screenshots.map(async (screenshot) => { + return await imageResize(screenshot, 0.7); + }), ); - const imageContents = compressedScreenshots.map((screenshot) => ({ + const imageContents = downsizedScreenshots.map((screenshot) => ({ type: "image_url" as const, image_url: { - url: `data:image/jpeg;base64,${screenshot.toString("base64")}`, + url: `data:image/png;base64,${screenshot.toString("base64")}`, }, })); + this.stagehand.logger?.({ + category: "evaluator", + message: `Evaluating question: ${question} with ${screenshots.length} screenshots`, + level: 2, + auxiliary: { + images: { + value: JSON.stringify(imageContents), + type: "object", + }, + }, + }); + const response = await llmClient.createChatCompletion< LLMParsedResponse >({ - logger: this.silentLogger, + logger: this.stagehand.logger, options: { messages: [ { role: "system", content: systemPrompt }, diff --git a/evals/index.eval.ts b/evals/index.eval.ts index 148dc507a..3fc03fa05 100644 --- a/evals/index.eval.ts +++ b/evals/index.eval.ts @@ -300,6 +300,8 @@ const generateFilteredTestcases = (): Testcase[] => { const braintrustProjectName = process.env.CI === "true" ? "stagehand" : "stagehand-dev"; + const startTime = Date.now(); + try { // Run the evaluations with the braintrust Eval function const evalResult = await Eval(braintrustProjectName, { @@ -483,6 +485,9 @@ const generateFilteredTestcases = (): Testcase[] => { // Generate and write the summary await generateSummary(summaryResults, experimentName); + console.log( + `\n⌛️Evaluation completed in ${(Date.now() - startTime) / 1000}s\n`, + ); } catch (error) { console.error("Error during evaluation run:", error); process.exit(1); diff --git a/evals/taskConfig.ts b/evals/taskConfig.ts index dae0e1344..4a36f7413 100644 --- a/evals/taskConfig.ts +++ b/evals/taskConfig.ts @@ -109,7 +109,7 @@ const DEFAULT_AGENT_MODELS = process.env.EVAL_AGENT_MODELS : [ "computer-use-preview-2025-03-11", "claude-sonnet-4-20250514", - "anthropic/claude-sonnet-4-20250514", + // "anthropic/claude-sonnet-4-20250514", ]; /** diff --git a/evals/tasks/agent/gaia.ts b/evals/tasks/agent/gaia.ts index 5bfa5db11..62163fcb8 100644 --- a/evals/tasks/agent/gaia.ts +++ b/evals/tasks/agent/gaia.ts @@ -46,11 +46,14 @@ export const gaia: EvalFunction = async ({ // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 10, // Keep last 10 screenshots - interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception - logger, // Pass the logger for proper logging + maxScreenshots: 8, // Keep last 8 screenshots }); + // Set the collector on the agent so it captures screenshots + if (agent.setScreenshotCollector) { + agent.setScreenshotCollector(screenshotCollector); + } + let screenshots: Buffer[] = []; let result; diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index 4276867d8..ac344816f 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -1,8 +1,10 @@ import { EvalFunction } from "@/types/evals"; import { Evaluator } from "../../evaluator"; import { ScreenshotCollector } from "../../utils/ScreenshotCollector"; +import { modelToAgentProviderMap } from "@/lib/agent/AgentProvider"; +import { loadApiKeyFromEnv } from "@/lib/utils"; import dotenv from "dotenv"; -import fs from "fs"; + dotenv.config(); export const onlineMind2Web: EvalFunction = async ({ @@ -10,9 +12,11 @@ export const onlineMind2Web: EvalFunction = async ({ logger, debugUrl, sessionUrl, + modelName, input, - agent, }) => { + const startTime = Date.now(); + try { const params = ((input && input.params) || {}) as { task_id?: string; @@ -33,33 +37,50 @@ export const onlineMind2Web: EvalFunction = async ({ } await stagehand.page.goto(params.website, { - timeout: 60_000, + timeout: 75_000, }); - const screenshot = await stagehand.page.screenshot(); - fs.writeFileSync("screenshot.png", screenshot); + if (!(modelName in modelToAgentProviderMap)) { + return { + _success: false, + error: `Model ${modelName} is not supported for agent tasks. Supported models: ${Object.keys(modelToAgentProviderMap).join(", ")}`, + debugUrl, + sessionUrl, + logs: logger.getLogs(), + }; + } + + const provider = modelToAgentProviderMap[modelName]; + const agent = stagehand.agent({ + model: modelName, + provider, + instructions: `You are a helpful assistant that must solve the task by browsing. At the end, produce a single line: "Final Answer: " summarizing the requested result (e.g., score, list, or text). Current page: ${await stagehand.page.title()}. ALWAYS OPERATE WITHIN THE PAGE OPENED BY THE USER, WHICHEVER TASK YOU ARE ATTEMPTING TO COMPLETE CAN BE ACCOMPLISHED WITHIN THE PAGE.`, + options: { + apiKey: loadApiKeyFromEnv(provider, stagehand.logger), + }, + }); - // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + // Start collecting screenshots in parallel const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 5, // Keep up to the last 5 screenshots - interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception - logger, // Pass the logger for proper logging + maxScreenshots: 8, // Keep up to the last 8 screenshots }); - let screenshots: Buffer[] = []; - let agentResult; + // Set the collector on the agent so it captures screenshots + if (agent.setScreenshotCollector) { + agent.setScreenshotCollector(screenshotCollector); + } - try { - screenshotCollector.start(); + screenshotCollector.start(); - agentResult = await agent.execute({ - instruction: params.confirmed_task, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); - } finally { - // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); - } + const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 50; + const agentResult = await agent.execute({ + instruction: params.confirmed_task, + maxSteps: maxSteps, + }); + + logger.log(agentResult); + // Stop collecting and get all screenshots + const screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation", @@ -69,7 +90,7 @@ export const onlineMind2Web: EvalFunction = async ({ const evaluator = new Evaluator(stagehand); const evalResult = await evaluator.ask({ - question: `Did the agent successfully complete this task: "${params.confirmed_task}"?`, + question: `Did the agent successfully complete this task: "${params.confirmed_task}"? The task might be a bit outdated or impossible to complete, in those cases lean towards YES.`, screenshot: screenshots, agentReasoning: agentResult.message || @@ -79,19 +100,17 @@ export const onlineMind2Web: EvalFunction = async ({ return { _success: evalResult.evaluation === "YES", reasoning: evalResult.reasoning, - // screenshotCount: screenshots.length, + final_answer: agentResult?.message, + screenshotCount: screenshots.length, task_level: params.level, + execution_time: Date.now() - startTime, debugUrl, sessionUrl, logs: logger.getLogs(), }; } catch (error) { - return { - _success: false, - error, - debugUrl, - sessionUrl, - logs: logger.getLogs(), - }; + // Let the error propagate - the parent runner will handle cleanup + console.error(error); + throw error; } }; diff --git a/evals/tasks/agent/osworld.ts b/evals/tasks/agent/osworld.ts index 003453d79..ca77404e0 100644 --- a/evals/tasks/agent/osworld.ts +++ b/evals/tasks/agent/osworld.ts @@ -90,11 +90,14 @@ export const osworld: EvalFunction = async ({ // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 10, // Keep last 10 screenshots - interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception - logger, // Pass the logger for proper logging + maxScreenshots: 8, // Keep last 8 screenshots }); + // Set the collector on the agent so it captures screenshots + if (agent.setScreenshotCollector) { + agent.setScreenshotCollector(screenshotCollector); + } + let screenshots: Buffer[] = []; let result; diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index 5a7470202..d07d8849f 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -41,11 +41,14 @@ export const webbench: EvalFunction = async ({ // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 10, // Keep last 10 screenshots - interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception - logger, // Pass the logger for proper logging + maxScreenshots: 8, // Keep last 8 screenshots }); + // Set the collector on the agent so it captures screenshots + if (agent.setScreenshotCollector) { + agent.setScreenshotCollector(screenshotCollector); + } + let screenshots: Buffer[] = []; let result; diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index afbc4a394..b1e40136a 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -85,11 +85,14 @@ export const webvoyager: EvalFunction = async ({ // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { - maxScreenshots: 10, // Keep last 10 screenshots - interceptScreenshots: true, // Enable hybrid mode: timer + agent screenshot interception - logger, // Pass the logger for proper logging + maxScreenshots: 8, // Keep last 8 screenshots }); + // Set the collector on the agent so it captures screenshots + if (agent.setScreenshotCollector) { + agent.setScreenshotCollector(screenshotCollector); + } + let screenshots: Buffer[] = []; let agentResult; diff --git a/evals/utils/ScreenshotCollector.ts b/evals/utils/ScreenshotCollector.ts index aa4b482ee..417b7b4a5 100644 --- a/evals/utils/ScreenshotCollector.ts +++ b/evals/utils/ScreenshotCollector.ts @@ -1,13 +1,10 @@ import { Page } from "@playwright/test"; -import { EvalLogger } from "../logger"; -import { LogLine } from "@browserbasehq/stagehand"; import sharp from "sharp"; export interface ScreenshotCollectorOptions { interval?: number; maxScreenshots?: number; - interceptScreenshots?: boolean; - logger?: EvalLogger; + captureOnNavigation?: boolean; } export class ScreenshotCollector { @@ -15,86 +12,79 @@ export class ScreenshotCollector { private page: Page; private interval: number; private maxScreenshots: number; + private captureOnNavigation: boolean; private intervalId?: NodeJS.Timeout; + private navigationListeners: Array<() => void> = []; private isCapturing: boolean = false; private lastScreenshot?: Buffer; - private ssimThreshold: number = 0.92; - private mseThreshold: number = 50; - private originalScreenshot?: typeof this.page.screenshot; - private interceptScreenshots: boolean; - private logger?: EvalLogger; - private isRunning: boolean = false; + private ssimThreshold: number = 0.75; + private mseThreshold: number = 30; constructor(page: Page, options: ScreenshotCollectorOptions = {}) { this.page = page; - this.interval = options.interval || 10000; + this.interval = options.interval || 5000; this.maxScreenshots = options.maxScreenshots || 10; - this.interceptScreenshots = options.interceptScreenshots ?? true; - this.logger = options.logger; - this.ssimThreshold = process.env.SCREENSHOT_SSIM_THRESHOLD - ? parseFloat(process.env.SCREENSHOT_SSIM_THRESHOLD) - : 0.85; - this.mseThreshold = process.env.SCREENSHOT_MSE_THRESHOLD - ? parseFloat(process.env.SCREENSHOT_MSE_THRESHOLD) - : 200; + this.captureOnNavigation = options.captureOnNavigation ?? false; } start(): void { - if (this.isRunning) { - this.log({ - category: "screenshot_collector", - message: "Screenshot collector already running, ignoring start()", - level: 1, - }); + if (this.intervalId) { return; } - this.isRunning = true; - - // Setup screenshot interception if enabled (for agent screenshots) - if (this.interceptScreenshots) { - this.setupScreenshotInterception(); - } + // Set up time-based screenshot capture + this.intervalId = setInterval(() => { + this.captureScreenshot("interval").catch((error) => { + console.error("Interval screenshot failed:", error); + }); + }, this.interval); - // Always start the interval timer - this.startIntervalTimer(); + if (this.captureOnNavigation) { + const loadListener = async () => { + try { + await this.captureScreenshot("load"); + } catch (error) { + console.error("Navigation screenshot failed (load):", error); + } + }; + const domContentListener = async () => { + try { + await this.captureScreenshot("domcontentloaded"); + } catch (error) { + console.error( + "Navigation screenshot failed (domcontentloaded):", + error, + ); + } + }; - this.captureScreenshot("initial"); - } + this.page.on("load", loadListener); + this.page.on("domcontentloaded", domContentListener); - stop(): Buffer[] { - if (!this.isRunning) { - this.log({ - category: "screenshot_collector", - message: "Screenshot collector not running, ignoring stop()", - level: 1, - }); - return this.getScreenshots(); + this.navigationListeners = [ + () => this.page.off("load", loadListener), + () => this.page.off("domcontentloaded", domContentListener), + ]; } - this.isRunning = false; + // Capture initial screenshot without blocking + this.captureScreenshot("initial").catch((error) => { + console.error("Failed to capture initial screenshot:", error); + }); + } - // Clear interval timer first to prevent any more interval captures + stop(): Buffer[] { if (this.intervalId) { clearInterval(this.intervalId); this.intervalId = undefined; } - // Restore original screenshot method if we intercepted it - if (this.originalScreenshot && this.interceptScreenshots) { - this.page.screenshot = this.originalScreenshot; - this.originalScreenshot = undefined; - } - - // Capture final screenshot only if we're not already capturing - if (!this.isCapturing) { - this.captureScreenshot("final"); - } + this.navigationListeners.forEach((removeListener) => removeListener()); + this.navigationListeners = []; - this.log({ - category: "screenshot_collector", - message: `Screenshot collector stopped with ${this.screenshots.length} screenshots`, - level: 1, + // Capture final screenshot without blocking + this.captureScreenshot("final").catch((error) => { + console.error("Failed to capture final screenshot:", error); }); return this.getScreenshots(); @@ -104,7 +94,6 @@ export class ScreenshotCollector { if (this.isCapturing) { return; } - this.isCapturing = true; try { @@ -116,14 +105,6 @@ export class ScreenshotCollector { try { // First do a quick MSE check const mse = await this.calculateMSE(this.lastScreenshot, screenshot); - - // Always log MSE comparison - this.log({ - category: "screenshot_collector", - message: `MSE comparison: ${mse.toFixed(2)} vs threshold ${this.mseThreshold} (${mse < this.mseThreshold ? "similar" : "different"})`, - level: 2, - }); - if (mse < this.mseThreshold) { // Very similar, skip shouldKeep = false; @@ -134,15 +115,10 @@ export class ScreenshotCollector { screenshot, ); shouldKeep = ssim < this.ssimThreshold; - this.log({ - category: "screenshot_collector", - message: `SSIM ${ssim.toFixed(4)} ${shouldKeep ? "<" : ">="} threshold ${this.ssimThreshold}, ${shouldKeep ? "keeping" : "skipping"} screenshot`, - level: 2, - }); } } catch (error) { // If comparison fails, keep the screenshot - this.logError("Image comparison failed:", error); + console.error("Image comparison failed:", error); shouldKeep = true; } } @@ -154,21 +130,9 @@ export class ScreenshotCollector { if (this.screenshots.length > this.maxScreenshots) { this.screenshots.shift(); } - - this.log({ - category: "screenshot_collector", - message: `Screenshot captured (trigger: ${trigger}), total: ${this.screenshots.length}`, - level: 2, - }); - } else { - this.log({ - category: "screenshot_collector", - message: `Screenshot skipped (trigger: ${trigger}), too similar to previous`, - level: 2, - }); } } catch (error) { - this.logError(`Failed to capture screenshot (${trigger}):`, error); + console.error(`Failed to capture screenshot (${trigger}):`, error); } finally { this.isCapturing = false; } @@ -184,130 +148,57 @@ export class ScreenshotCollector { clear(): void { this.screenshots = []; - this.lastScreenshot = undefined; } - private startIntervalTimer(): void { - if (this.intervalId) { - clearInterval(this.intervalId); - } - // Only start timer if we're still running - if (this.isRunning) { - this.intervalId = setInterval(async () => { - // Check if still running before capturing - if (this.isRunning) { - await this.captureScreenshot("interval"); - } - }, this.interval); + /** + * Manually add a screenshot to the collection + * @param screenshot The screenshot buffer to add + * @param source Optional source identifier for logging + */ + async addScreenshot(screenshot: Buffer): Promise { + // Prevent concurrent processing + if (this.isCapturing) { + return; } - } - - private setupScreenshotInterception(): void { - this.log({ - category: "screenshot_collector", - message: - "🔧 Setting up hybrid screenshot collection with interception...", - level: 1, - }); - // Store the original screenshot method - this.originalScreenshot = this.page.screenshot.bind(this.page); - let lastCallTime = 0; - let screenshotCount = 0; - - // Override the screenshot method - this.page.screenshot = async ( - options?: Parameters[0], - ) => { - screenshotCount++; - const screenshot = await this.originalScreenshot!(options); - - // If called within 3 seconds of previous call, likely from agent - const now = Date.now(); - const timeSinceLastCall = now - lastCallTime; - - if (timeSinceLastCall < 3000 && lastCallTime > 0) { - this.log({ - category: "screenshot_collector", - message: `📸 Agent screenshot detected (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, - level: 2, - }); - // Process agent screenshot and reset the interval timer - await this.onAgentScreenshot(screenshot); - // Reset the interval timer since we just captured a screenshot - this.startIntervalTimer(); - } else { - this.log({ - category: "screenshot_collector", - message: `📷 Non-agent screenshot ignored (#${screenshotCount}, ${timeSinceLastCall}ms since last)`, - level: 2, - }); - } - - lastCallTime = now; - return screenshot; - }; - } + this.isCapturing = true; - private async onAgentScreenshot(screenshot: Buffer): Promise { - // Apply MSE/SSIM logic to decide if we should keep this screenshot - let shouldKeep = true; - if (this.lastScreenshot) { - try { - // First do a quick MSE check - const mse = await this.calculateMSE(this.lastScreenshot, screenshot); - - // Always log MSE comparison - this.log({ - category: "screenshot_collector", - message: `MSE comparison: ${mse.toFixed(2)} vs threshold ${this.mseThreshold} (${mse < this.mseThreshold ? "similar" : "different"})`, - level: 2, - }); - - if (mse < this.mseThreshold) { - // Very similar, skip - shouldKeep = false; - } else { - // Significant difference detected, verify with SSIM - const ssim = await this.calculateSSIM( - this.lastScreenshot, - screenshot, - ); - shouldKeep = ssim < this.ssimThreshold; - this.log({ - category: "screenshot_collector", - message: `SSIM ${ssim.toFixed(4)} ${shouldKeep ? "<" : ">="} threshold ${this.ssimThreshold}, ${shouldKeep ? "keeping" : "skipping"} screenshot`, - level: 2, - }); + try { + // Apply MSE/SSIM logic to decide if we should keep this screenshot + let shouldKeep = true; + if (this.lastScreenshot) { + try { + // First do a quick MSE check + const mse = await this.calculateMSE(this.lastScreenshot, screenshot); + if (mse < this.mseThreshold) { + // Very similar, skip + shouldKeep = false; + } else { + // Significant difference detected, verify with SSIM + const ssim = await this.calculateSSIM( + this.lastScreenshot, + screenshot, + ); + shouldKeep = ssim < this.ssimThreshold; + } + } catch (error) { + // If comparison fails, keep the screenshot + console.error("Image comparison failed:", error); + shouldKeep = true; } - } catch (error) { - // If comparison fails, keep the screenshot - console.error("Image comparison failed:", error); - shouldKeep = true; } - } - if (shouldKeep) { - this.screenshots.push(screenshot); - this.lastScreenshot = screenshot; + if (shouldKeep) { + this.screenshots.push(screenshot); + this.lastScreenshot = screenshot; - if (this.screenshots.length > this.maxScreenshots) { - this.screenshots.shift(); + if (this.screenshots.length > this.maxScreenshots) { + this.screenshots.shift(); + } } - - this.log({ - category: "screenshot_collector", - message: `Agent screenshot captured (hybrid mode), total: ${this.screenshots.length}`, - level: 2, - }); - } else { - this.log({ - category: "screenshot_collector", - message: `Agent screenshot skipped (hybrid mode), too similar to previous`, - level: 2, - }); + } finally { + this.isCapturing = false; } } - private async calculateMSE(img1: Buffer, img2: Buffer): Promise { try { // Resize images for faster comparison @@ -324,9 +215,8 @@ export class ScreenshotCollector { } return sum / data1.length; - } catch (error) { - // Log error and assume images are different - this.logError("MSE calculation failed:", error); + } catch { + // If sharp is not available, assume images are different return Number.MAX_SAFE_INTEGER; } } @@ -340,28 +230,9 @@ export class ScreenshotCollector { if (gray1.length !== gray2.length) return 0; - // Debug: Check data properties - const samplePixels = [ - gray1[0], - gray1[1], - gray1[2], - gray2[0], - gray2[1], - gray2[2], - ]; - this.log({ - category: "screenshot_collector", - message: `SSIM input debug: buffer lengths=${gray1.length}/${gray2.length}, sample pixels=[${samplePixels.join(",")}]`, - level: 2, - }); - // Simplified SSIM calculation - // Use proper constants for 8-bit images (0-255 range) - const L = 255; // Dynamic range for 8-bit images - const k1 = 0.01; - const k2 = 0.03; - const c1 = k1 * L * (k1 * L); - const c2 = k2 * L * (k2 * L); + const c1 = 0.01 * 0.01; + const c2 = 0.03 * 0.03; let sum1 = 0, sum2 = 0, @@ -388,47 +259,10 @@ export class ScreenshotCollector { const denominator = (mean1 * mean1 + mean2 * mean2 + c1) * (var1 + var2 + c2); - const ssim = denominator !== 0 ? numerator / denominator : 0; - - // Always log SSIM calculation details for debugging - this.log({ - category: "screenshot_collector", - message: `SSIM calculation: result=${ssim.toFixed(4)}, mean1=${mean1.toFixed(2)}, mean2=${mean2.toFixed(2)}, var1=${var1.toFixed(2)}, var2=${var2.toFixed(2)}, cov12=${cov12.toFixed(2)}`, - level: 2, - }); - - this.log({ - category: "screenshot_collector", - message: `SSIM components: c1=${c1.toFixed(2)}, c2=${c2.toFixed(2)}, numerator=${numerator.toFixed(2)}, denominator=${denominator.toFixed(2)}`, - level: 2, - }); - - return ssim; - } catch (error) { - // Log error and assume images are different - this.logError("SSIM calculation failed:", error); + return numerator / denominator; + } catch { + // If sharp is not available, assume images are different return 0; } } - - private log(logLine: LogLine): void { - if (this.logger) { - this.logger.log(logLine); - } else { - console.log(`[${logLine.category}] ${logLine.message}`); - } - } - - private logError(message: string, error: unknown): void { - const logLine: LogLine = { - category: "screenshot_collector", - message: `${message}: ${error}`, - level: 0, - }; - if (this.logger) { - this.logger.error(logLine); - } else { - console.error(`[${logLine.category}] ${logLine.message}`); - } - } } diff --git a/evals/utils/imageResize.ts b/evals/utils/imageResize.ts deleted file mode 100644 index a0e670c84..000000000 --- a/evals/utils/imageResize.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Page } from "playwright"; - -/** - * Takes a screenshot optimized for evaluator use (smaller size, lower quality) - * @param page - The Playwright page to screenshot - * @param scaleFactor - The scale factor (e.g., 0.75 for 25% reduction) - * @returns Optimized screenshot buffer - */ -export async function takeOptimizedScreenshot( - page: Page, - scaleFactor: number = 0.75, -): Promise { - try { - // Take screenshot first without modifying viewport - const screenshot = await page.screenshot({ type: "jpeg", quality: 70 }); - - // Try to use sharp for resizing if available (optional dependency) - try { - const sharpModule = await import("sharp"); - const sharp = sharpModule.default; - const metadata = await sharp(screenshot).metadata(); - - if (metadata.width && metadata.height) { - const newWidth = Math.round(metadata.width * scaleFactor); - const newHeight = Math.round(metadata.height * scaleFactor); - - return await sharp(screenshot) - .resize(newWidth, newHeight) - .jpeg({ quality: 70 }) - .toBuffer(); - } - } catch (sharpError) { - // Sharp not available or failed, return original screenshot - console.debug("Sharp not available for image resizing:", sharpError); - } - - return screenshot; - } catch (error) { - console.warn("Failed to take optimized screenshot:", error); - // Fallback to regular screenshot with lower quality - return await page.screenshot({ type: "jpeg", quality: 70 }); - } -} - -/** - * Compresses an existing image buffer (simple quality reduction) - * @param imageBuffer - The original image buffer - * @returns Compressed buffer (returns original if compression fails) - */ -export function compressImageBuffer(imageBuffer: Buffer): Buffer { - // For now, just return the original buffer - // This is a placeholder for potential future compression - // The main optimization comes from takeOptimizedScreenshot - return imageBuffer; -} diff --git a/evals/utils/imageUtils.ts b/evals/utils/imageUtils.ts new file mode 100644 index 000000000..812221bef --- /dev/null +++ b/evals/utils/imageUtils.ts @@ -0,0 +1,19 @@ +import sharp from "sharp"; + +export async function imageResize( + img: Buffer, + scaleFactor: number, +): Promise { + const metadata = await sharp(img).metadata(); + // calculate new dimensions + const width = Math.round(metadata.width * scaleFactor); + const height = Math.round(metadata.height * scaleFactor); + return await sharp(img) + .resize(width, height, { fit: "inside", kernel: sharp.kernel.lanczos3 }) + .png({ + compressionLevel: 9, + adaptiveFiltering: true, + palette: true, + }) + .toBuffer(); +} diff --git a/lib/a11y/utils.ts b/lib/a11y/utils.ts index 49c9d8ab5..d18463be9 100644 --- a/lib/a11y/utils.ts +++ b/lib/a11y/utils.ts @@ -183,7 +183,8 @@ export async function buildBackendIdMaps( if (n.contentDocument && locate(n.contentDocument)) return true; return false; } else { - if (n.backendNodeId === backendNodeId) return (iframeNode = n), true; + if (n.backendNodeId === backendNodeId) + return ((iframeNode = n), true); return ( (n.children?.some(locate) ?? false) || (n.contentDocument ? locate(n.contentDocument) : false) diff --git a/lib/agent/AgentClient.ts b/lib/agent/AgentClient.ts index ac0aa83af..6ae500ae8 100644 --- a/lib/agent/AgentClient.ts +++ b/lib/agent/AgentClient.ts @@ -41,4 +41,6 @@ export abstract class AgentClient { abstract setActionHandler( handler: (action: AgentAction) => Promise, ): void; + + abstract setTools(tools: unknown): void; } diff --git a/lib/agent/AgentProvider.ts b/lib/agent/AgentProvider.ts index ea8947a9c..9e40980e8 100644 --- a/lib/agent/AgentProvider.ts +++ b/lib/agent/AgentProvider.ts @@ -10,7 +10,7 @@ import { AnthropicCUAClient } from "./AnthropicCUAClient"; import { OpenAICUAClient } from "./OpenAICUAClient"; // Map model names to their provider types -const modelToAgentProviderMap: Record = { +export const modelToAgentProviderMap: Record = { "computer-use-preview": "openai", "computer-use-preview-2025-03-11": "openai", "claude-3-7-sonnet-latest": "anthropic", diff --git a/lib/agent/AnthropicCUAClient.ts b/lib/agent/AnthropicCUAClient.ts index 0ea257bb1..35cadca8b 100644 --- a/lib/agent/AnthropicCUAClient.ts +++ b/lib/agent/AnthropicCUAClient.ts @@ -88,6 +88,10 @@ export class AnthropicCUAClient extends AgentClient { this.actionHandler = handler; } + setTools(tools: ToolSet): void { + this.tools = tools as ToolSet; + } + /** * Execute a task with the Anthropic CUA * This is the main entry point for the agent diff --git a/lib/agent/OpenAICUAClient.ts b/lib/agent/OpenAICUAClient.ts index ad8091d09..827a4a8af 100644 --- a/lib/agent/OpenAICUAClient.ts +++ b/lib/agent/OpenAICUAClient.ts @@ -87,6 +87,10 @@ export class OpenAICUAClient extends AgentClient { this.actionHandler = handler; } + setTools(tools: unknown): void { + this.tools = tools as ToolSet; + } + /** * Execute a task with the OpenAI CUA * This is the main entry point for the agent diff --git a/lib/handlers/cuaAgentHandler.ts b/lib/handlers/cuaAgentHandler.ts index 8b29e36f4..e0f9911ea 100644 --- a/lib/handlers/cuaAgentHandler.ts +++ b/lib/handlers/cuaAgentHandler.ts @@ -23,13 +23,15 @@ export class CuaAgentHandler { private logger: (message: LogLine) => void; private agentClient: AgentClient; private options: AgentHandlerOptions; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private screenshotCollector?: any; constructor( stagehand: Stagehand, stagehandPage: StagehandPage, logger: (message: LogLine) => void, options: AgentHandlerOptions, - tools: ToolSet, + tools?: ToolSet, ) { this.stagehand = stagehand; this.stagehandPage = stagehandPage; @@ -44,7 +46,7 @@ export class CuaAgentHandler { options.modelName, options.clientOptions || {}, options.userProvidedInstructions, - tools, + tools || {}, ); // Store the client @@ -422,6 +424,11 @@ export class CuaAgentHandler { fullPage: false, }); + // If we have a screenshot collector, add this screenshot to it + if (this.screenshotCollector) { + await this.screenshotCollector.addScreenshot(screenshot); + } + // Convert to base64 const base64Image = screenshot.toString("base64"); @@ -587,4 +594,28 @@ export class CuaAgentHandler { // stagehand.page is the live proxy you already implemented return this.stagehand.page; } + + /** + * Set the screenshot collector for this agent handler + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + setScreenshotCollector(collector: any): void { + this.screenshotCollector = collector; + } + + /** + * Get the screenshot collector + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + getScreenshotCollector(): any { + return this.screenshotCollector; + } + + /** + * Set the tools for this agent handler + */ + setTools(tools: ToolSet): void { + // Pass tools to the agent client + this.agentClient.setTools(tools); + } } diff --git a/lib/handlers/stagehandAgentHandler.ts b/lib/handlers/stagehandAgentHandler.ts index 18159987a..343d1a3c8 100644 --- a/lib/handlers/stagehandAgentHandler.ts +++ b/lib/handlers/stagehandAgentHandler.ts @@ -19,7 +19,9 @@ export class StagehandAgentHandler { private llmClient: LLMClient; private executionModel?: string; private systemInstructions?: string; - private mcpTools?: ToolSet; + private tools?: ToolSet; + // eslint-disable-next-line @typescript-eslint/no-explicit-any + private screenshotCollector?: any; constructor( stagehandPage: StagehandPage, @@ -27,14 +29,14 @@ export class StagehandAgentHandler { llmClient: LLMClient, executionModel?: string, systemInstructions?: string, - mcpTools?: ToolSet, + tools?: ToolSet, ) { this.stagehandPage = stagehandPage; this.logger = logger; this.llmClient = llmClient; this.executionModel = executionModel; this.systemInstructions = systemInstructions; - this.mcpTools = mcpTools; + this.tools = tools; } public async execute( @@ -57,8 +59,8 @@ export class StagehandAgentHandler { options.instruction, this.systemInstructions, ); - const tools = this.createTools(); - const allTools = { ...tools, ...this.mcpTools }; + const defaultTools = this.createTools(); + const allTools = { ...defaultTools, ...this.tools }; const messages: CoreMessage[] = [ { role: "user", @@ -244,4 +246,22 @@ For each action, provide clear reasoning about why you're taking that step.`; logger: this.logger, }); } + /** + * Set the screenshot collector for this agent handler + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + setScreenshotCollector(collector: any): void { + this.screenshotCollector = collector; + } + + /** + * Get the screenshot collector + */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + getScreenshotCollector(): any { + return this.screenshotCollector; + } + setTools(tools: ToolSet): void { + this.tools = tools; + } } diff --git a/lib/index.ts b/lib/index.ts index 7a1a95470..648e4c2dc 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -912,54 +912,49 @@ export class Stagehand { execute: ( instructionOrOptions: string | AgentExecuteOptions, ) => Promise; + setScreenshotCollector?: (collector: unknown) => void; } { - if (!options || !options.provider) { - const executionModel = options?.executionModel; - const systemInstructions = options?.instructions; - - return { - execute: async (instructionOrOptions: string | AgentExecuteOptions) => { - if (options?.integrations && !this.experimental) { - throw new StagehandError( - "MCP integrations are an experimental feature. Please enable experimental mode by setting experimental: true in the Stagehand constructor params.", - ); - } - - const executeOptions: AgentExecuteOptions = - typeof instructionOrOptions === "string" - ? { instruction: instructionOrOptions } - : instructionOrOptions; - - if (this.usingAPI) { - const agentConfigForApi: AgentConfig = options; - - return await this.apiClient.agentExecute( - agentConfigForApi, - executeOptions, - ); - } - - const tools = options?.integrations - ? await resolveTools(options?.integrations, options?.tools) - : (options?.tools ?? {}); - return new StagehandAgentHandler( - this.stagehandPage, - this.logger, - this.llmClient, - executionModel, - systemInstructions, - tools, - ).execute(executeOptions); - }, - }; - } - this.log({ category: "agent", message: "Creating agent instance", level: 1, }); + let agentHandler: StagehandAgentHandler | CuaAgentHandler | undefined; + if (options?.integrations && !this.experimental) { + throw new StagehandError( + "MCP integrations are an experimental feature. Please enable experimental mode by setting experimental: true in the Stagehand constructor params.", + ); + } + if (!options || !options.provider) { + const executionModel = options?.executionModel; + const systemInstructions = options?.instructions; + agentHandler = new StagehandAgentHandler( + this.stagehandPage, + this.logger, + this.llmClient, + executionModel, + systemInstructions, + undefined, + ); + } else { + agentHandler = new CuaAgentHandler( + this, + this.stagehandPage, + this.logger, + { + modelName: options.model, + clientOptions: options.options, + userProvidedInstructions: + options.instructions ?? + `You are a helpful assistant that can use a web browser. + You are currently on the following page: ${this.stagehandPage.page.url()}. + Do not ask follow up questions, the user will trust your judgement.`, + agentType: options.provider, + }, + undefined, + ); + } return { execute: async (instructionOrOptions: string | AgentExecuteOptions) => { // Check if integrations are being used without experimental flag @@ -973,22 +968,9 @@ export class Stagehand { ? await resolveTools(options?.integrations, options?.tools) : (options?.tools ?? {}); - const agentHandler = new CuaAgentHandler( - this, - this.stagehandPage, - this.logger, - { - modelName: options.model, - clientOptions: options.options, - userProvidedInstructions: - options.instructions ?? - `You are a helpful assistant that can use a web browser. - You are currently on the following page: ${this.stagehandPage.page.url()}. - Do not ask follow up questions, the user will trust your judgement.`, - agentType: options.provider, - }, - tools, - ); + if (agentHandler) { + agentHandler.setTools(tools); + } const executeOptions: AgentExecuteOptions = typeof instructionOrOptions === "string" @@ -1009,19 +991,20 @@ export class Stagehand { if (!options.options) { options.options = {}; } - - if (options.provider === "anthropic") { - options.options.apiKey = process.env.ANTHROPIC_API_KEY; - } else if (options.provider === "openai") { - options.options.apiKey = process.env.OPENAI_API_KEY; - } else if (options.provider === "google") { - options.options.apiKey = process.env.GOOGLE_API_KEY; - } - - if (!options.options.apiKey) { - throw new StagehandError( - `API key not found for \`${options.provider}\` provider. Please set the ${options.provider === "anthropic" ? "ANTHROPIC_API_KEY" : "OPENAI_API_KEY"} environment variable or pass an apiKey in the options object.`, - ); + if (options.provider) { + if (options.provider === "anthropic") { + options.options.apiKey = process.env.ANTHROPIC_API_KEY; + } else if (options.provider === "openai") { + options.options.apiKey = process.env.OPENAI_API_KEY; + } else if (options.provider === "google") { + options.options.apiKey = process.env.GOOGLE_API_KEY; + } + + if (!options.options.apiKey) { + throw new StagehandError( + `API key not found for \`${options.provider}\` provider. Please set the ${options.provider === "anthropic" ? "ANTHROPIC_API_KEY" : "OPENAI_API_KEY"} environment variable or pass an apiKey in the options object.`, + ); + } } return await this.apiClient.agentExecute(options, executeOptions); @@ -1029,6 +1012,10 @@ export class Stagehand { return await agentHandler.execute(executeOptions); }, + setScreenshotCollector: (collector: unknown) => { + // eslint-disable-next-line @typescript-eslint/no-explicit-any + agentHandler.setScreenshotCollector(collector as any); + }, }; } } diff --git a/types/agent.ts b/types/agent.ts index 9be344f0f..9ab4cba0e 100644 --- a/types/agent.ts +++ b/types/agent.ts @@ -168,4 +168,5 @@ export interface AgentInstance { execute: ( instructionOrOptions: string | AgentExecuteOptions, ) => Promise; + setScreenshotCollector?: (collector: unknown) => void; } From 783cf338f67dad7c031e38e718da4b03e10f1bd0 Mon Sep 17 00:00:00 2001 From: Miguel <36487034+miguelg719@users.noreply.github.com> Date: Mon, 22 Sep 2025 13:50:33 -0700 Subject: [PATCH 14/20] Update evals/evaluator.ts --- evals/evaluator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evals/evaluator.ts b/evals/evaluator.ts index 28082e611..0b32236cf 100644 --- a/evals/evaluator.ts +++ b/evals/evaluator.ts @@ -45,7 +45,7 @@ export class Evaluator { this.stagehand = stagehand; this.modelName = modelName || "google/gemini-2.5-flash"; this.modelClientOptions = modelClientOptions || { - apiKey: process.env.GEMINI_API_KEY || "", + apiKey: process.env.GOOGLE_GENERATIVE_AI_API_KEY || "", }; } From 9c5f69a13fe5dbdbabe914c7f2c01b6f75127e92 Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 14:01:31 -0700 Subject: [PATCH 15/20] enable dom agent --- .env.example | 6 ------ evals/taskConfig.ts | 2 +- evals/tasks/agent/onlineMind2Web.ts | 16 +++++----------- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/.env.example b/.env.example index e1892af54..b31704e32 100644 --- a/.env.example +++ b/.env.example @@ -11,9 +11,3 @@ EXPERIMENTAL_EVAL_MODELS="gpt-4o,claude-3-5-sonnet-latest,o1-mini,o1-preview" EVAL_CATEGORIES="observe,act,combination,extract,experimental" AGENT_EVAL_MAX_STEPS=50 STAGEHAND_API_URL="http://localhost:80" - -# Screenshot collector thresholds for determining when screenshots are too similar -# SSIM (Structural Similarity Index) threshold: 0-1, higher = more similar (default: 0.85) -SCREENSHOT_SSIM_THRESHOLD=0.85 -# MSE (Mean Squared Error) threshold: lower = more similar (default: 200) -SCREENSHOT_MSE_THRESHOLD=200 diff --git a/evals/taskConfig.ts b/evals/taskConfig.ts index 4a36f7413..dae0e1344 100644 --- a/evals/taskConfig.ts +++ b/evals/taskConfig.ts @@ -109,7 +109,7 @@ const DEFAULT_AGENT_MODELS = process.env.EVAL_AGENT_MODELS : [ "computer-use-preview-2025-03-11", "claude-sonnet-4-20250514", - // "anthropic/claude-sonnet-4-20250514", + "anthropic/claude-sonnet-4-20250514", ]; /** diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index ac344816f..573f05214 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -40,17 +40,11 @@ export const onlineMind2Web: EvalFunction = async ({ timeout: 75_000, }); - if (!(modelName in modelToAgentProviderMap)) { - return { - _success: false, - error: `Model ${modelName} is not supported for agent tasks. Supported models: ${Object.keys(modelToAgentProviderMap).join(", ")}`, - debugUrl, - sessionUrl, - logs: logger.getLogs(), - }; - } + const provider = + modelName in modelToAgentProviderMap + ? modelToAgentProviderMap[modelName] + : undefined; - const provider = modelToAgentProviderMap[modelName]; const agent = stagehand.agent({ model: modelName, provider, @@ -72,7 +66,7 @@ export const onlineMind2Web: EvalFunction = async ({ screenshotCollector.start(); - const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 50; + const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 5; const agentResult = await agent.execute({ instruction: params.confirmed_task, maxSteps: maxSteps, From be168ef2c07cb6ab26db1fafe0486471136fc74a Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 15:00:00 -0700 Subject: [PATCH 16/20] update benchmark runners --- evals/cli.ts | 1 - evals/initStagehand.ts | 1 - evals/tasks/agent/gaia.ts | 94 ++++++++++++++--------------- evals/tasks/agent/onlineMind2Web.ts | 15 +++-- evals/tasks/agent/osworld.ts | 53 ++++++---------- evals/tasks/agent/webbench.ts | 55 +++++------------ evals/tasks/agent/webvoyager.ts | 24 ++++---- 7 files changed, 98 insertions(+), 145 deletions(-) diff --git a/evals/cli.ts b/evals/cli.ts index 9560659b5..bd941b009 100644 --- a/evals/cli.ts +++ b/evals/cli.ts @@ -381,7 +381,6 @@ function handleRun(args: string[]): void { webbench: "agent/webbench", gaia: "agent/gaia", webvoyager: "agent/webvoyager", - osworld: "agent/osworld", onlineMind2Web: "agent/onlineMind2Web", }; diff --git a/evals/initStagehand.ts b/evals/initStagehand.ts index ae3396d4d..519636fdc 100644 --- a/evals/initStagehand.ts +++ b/evals/initStagehand.ts @@ -117,7 +117,6 @@ export const initStagehand = async ({ } else { agentConfig = { model: modelName, - executionModel: "google/gemini-2.5-flash", } as AgentConfig; } diff --git a/evals/tasks/agent/gaia.ts b/evals/tasks/agent/gaia.ts index 62163fcb8..35aed40ec 100644 --- a/evals/tasks/agent/gaia.ts +++ b/evals/tasks/agent/gaia.ts @@ -1,7 +1,11 @@ import { EvalFunction } from "@/types/evals"; import { Evaluator } from "../../evaluator"; import { ScreenshotCollector } from "../../utils/ScreenshotCollector"; +import { loadApiKeyFromEnv } from "@/lib/utils"; +import { modelToAgentProviderMap } from "@/lib/agent/AgentProvider"; +import dotenv from "dotenv"; +dotenv.config(); /** * Data-driven GAIA agent eval * - Expects per-test params injected via eval runner: { id, level, web, ques } @@ -15,25 +19,20 @@ export const gaia: EvalFunction = async ({ debugUrl, sessionUrl, input, - agent, + modelName, }) => { + const startTime = Date.now(); + try { const params = ((input && input.params) || {}) as { id?: string; level?: number; web?: string; ques?: string; + expected?: string; }; if (!params.web || !params.ques) { - logger.error({ - category: "gaia", - level: 0, - message: `Missing GAIA params (web, ques).`, - auxiliary: { - params: { value: JSON.stringify(params), type: "object" }, - }, - }); return { _success: false, error: `Missing GAIA params (web, ques). Got: ${JSON.stringify(params)}`, @@ -42,7 +41,24 @@ export const gaia: EvalFunction = async ({ logs: logger.getLogs(), }; } - await stagehand.page.goto(params.web); + + await stagehand.page.goto(params.web, { + timeout: 75_000, + }); + + const provider = + modelName in modelToAgentProviderMap + ? modelToAgentProviderMap[modelName] + : undefined; + + const agent = stagehand.agent({ + model: modelName, + provider, + instructions: `You are a helpful assistant that must solve the task by browsing. At the end, produce a single line: "Final Answer: " summarizing the requested result (e.g., score, list, or text). Current page: ${await stagehand.page.title()}. ALWAYS OPERATE WITHIN THE PAGE OPENED BY THE USER, WHICHEVER TASK YOU ARE ATTEMPTING TO COMPLETE CAN BE ACCOMPLISHED WITHIN THE PAGE.`, + options: { + apiKey: loadApiKeyFromEnv(provider, stagehand.logger), + }, + }); // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) const screenshotCollector = new ScreenshotCollector(stagehand.page, { @@ -54,20 +70,15 @@ export const gaia: EvalFunction = async ({ agent.setScreenshotCollector(screenshotCollector); } - let screenshots: Buffer[] = []; - let result; + screenshotCollector.start(); - try { - screenshotCollector.start(); - - result = await agent.execute({ - instruction: params.ques, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); - } finally { - // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); - } + const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 50; + const agentResult = await agent.execute({ + instruction: params.ques, + maxSteps, + }); + // Stop collecting and get all screenshots + const screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation", @@ -75,46 +86,29 @@ export const gaia: EvalFunction = async ({ level: 1, }); - const expected = (params as Record).expected as - | string - | undefined; + const expected = params.expected; const evaluator = new Evaluator(stagehand); const evalResult = await evaluator.ask({ question: `Did the agent provide the expected answer: "${expected}"?`, - answer: result?.message || "", - screenshot: false, + answer: agentResult.message || "", + screenshot: screenshots, }); return { _success: evalResult.evaluation === "YES", reasoning: evalResult.reasoning, expectedAnswer: expected, + final_answer: agentResult?.message, + screenshotCount: screenshots.length, + task_level: params.level, + execution_time: Date.now() - startTime, debugUrl, sessionUrl, logs: logger.getLogs(), }; } catch (error) { - logger.error({ - category: "gaia", - level: 0, - message: `Unhandled error in GAIA task`, - auxiliary: { - error: { - value: error instanceof Error ? error.message : String(error), - type: "string", - }, - trace: { - value: error instanceof Error && error.stack ? error.stack : "", - type: "string", - }, - }, - }); - return { - _success: false, - error, - debugUrl, - sessionUrl, - logs: logger.getLogs(), - }; + // Let the error propagate - the parent runner will handle cleanup + console.error(error); + throw error; } }; diff --git a/evals/tasks/agent/onlineMind2Web.ts b/evals/tasks/agent/onlineMind2Web.ts index 573f05214..f168b6bcd 100644 --- a/evals/tasks/agent/onlineMind2Web.ts +++ b/evals/tasks/agent/onlineMind2Web.ts @@ -6,14 +6,21 @@ import { loadApiKeyFromEnv } from "@/lib/utils"; import dotenv from "dotenv"; dotenv.config(); - +/** + * Data-driven OnlineMind2Web agent eval + * - Expects per-test params injected via eval runner: { task_id, confirmed_task, website, reference_length, level } + * - Starts at `website`, runs the agent with `confirmed_task` as instruction + * - Requires the agent to output a final answer in the form: "Final Answer: " + * - Marks success if such an answer string is present (exact matching against dataset can be layered later) + * - Uses the evaluator to determine if the agent successfully completed the task + */ export const onlineMind2Web: EvalFunction = async ({ stagehand, logger, debugUrl, sessionUrl, - modelName, input, + modelName, }) => { const startTime = Date.now(); @@ -66,10 +73,10 @@ export const onlineMind2Web: EvalFunction = async ({ screenshotCollector.start(); - const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 5; + const maxSteps = Number(process.env.AGENT_EVAL_MAX_STEPS) || 50; const agentResult = await agent.execute({ instruction: params.confirmed_task, - maxSteps: maxSteps, + maxSteps, }); logger.log(agentResult); diff --git a/evals/tasks/agent/osworld.ts b/evals/tasks/agent/osworld.ts index ca77404e0..7431882e4 100644 --- a/evals/tasks/agent/osworld.ts +++ b/evals/tasks/agent/osworld.ts @@ -101,28 +101,25 @@ export const osworld: EvalFunction = async ({ let screenshots: Buffer[] = []; let result; - try { - screenshotCollector.start(); + screenshotCollector.start(); - // Execute the task using the pre-initialized agent with timeout - const executionPromise = agent.execute({ - instruction: params.instruction, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); + // Execute the task using the pre-initialized agent with timeout + const executionPromise = agent.execute({ + instruction: params.instruction, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); - // Apply timeout wrapper - const timeoutPromise = new Promise((_, reject) => - setTimeout( - () => reject(new Error(`Task timed out after ${timeout}ms`)), - timeout, - ), - ); - - result = await Promise.race([executionPromise, timeoutPromise]); - } finally { - // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); - } + // Apply timeout wrapper + const timeoutPromise = new Promise((_, reject) => + setTimeout( + () => reject(new Error(`Task timed out after ${timeout}ms`)), + timeout, + ), + ); + + result = await Promise.race([executionPromise, timeoutPromise]); + // Always stop collecting and get all screenshots, even on error + screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation", @@ -130,22 +127,6 @@ export const osworld: EvalFunction = async ({ level: 1, }); - logger.log({ - category: "osworld", - message: `Task ${params.id} execution completed`, - level: 1, - auxiliary: { - task_id: { - value: params.id, - type: "string", - }, - has_result: { - value: (!!result).toString(), - type: "string", - }, - }, - }); - // Evaluate based on OSWorld evaluation type const success = await evaluateOSWorldTask(stagehand, params, logger); diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index d07d8849f..80f018741 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -10,6 +10,8 @@ export const webbench: EvalFunction = async ({ input, agent, }) => { + const startTime = Date.now(); + try { const params = ((input && input.params) || {}) as { id?: string; @@ -49,45 +51,15 @@ export const webbench: EvalFunction = async ({ agent.setScreenshotCollector(screenshotCollector); } - let screenshots: Buffer[] = []; - let result; - - try { - screenshotCollector.start(); - - logger.log({ - category: "webbench", - message: `Starting WebBench task ${params.id}`, - level: 1, - auxiliary: { - category: { - value: params.category || "unknown", - type: "string", - }, - difficulty: { - value: params.difficulty || "unknown", - type: "string", - }, - url: { - value: params.url, - type: "string", - }, - task_preview: { - value: params.task.substring(0, 100) + "...", - type: "string", - }, - }, - }); + screenshotCollector.start(); - // Execute the task using the pre-initialized agent - result = await agent.execute({ - instruction: params.task, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); - } finally { - // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); - } + // Execute the task using the pre-initialized agent + const agentResult = await agent.execute({ + instruction: params.task, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + // Always stop collecting and get all screenshots, even on error + const screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation", @@ -106,7 +78,7 @@ export const webbench: EvalFunction = async ({ type: "string", }, has_result: { - value: (!!result).toString(), + value: (!!agentResult).toString(), type: "string", }, }, @@ -136,7 +108,7 @@ export const webbench: EvalFunction = async ({ question: evalPrompt, screenshot: screenshots, agentReasoning: - result?.message || + agentResult.message || "no reasoning available, agent potentially hit step limit", }); @@ -146,6 +118,9 @@ export const webbench: EvalFunction = async ({ task_id: params.id, category: params.category, difficulty: params.difficulty || "unknown", + screenshotCount: screenshots.length, + final_answer: agentResult?.message, + execution_time: Date.now() - startTime, debugUrl, sessionUrl, logs: logger.getLogs(), diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index b1e40136a..94ba14cdb 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -59,6 +59,8 @@ export const webvoyager: EvalFunction = async ({ input, agent, }) => { + const startTime = Date.now(); + try { const params = ((input && input.params) || {}) as { id?: string; @@ -93,20 +95,14 @@ export const webvoyager: EvalFunction = async ({ agent.setScreenshotCollector(screenshotCollector); } - let screenshots: Buffer[] = []; - let agentResult; - - try { - screenshotCollector.start(); + screenshotCollector.start(); - agentResult = await agent.execute({ - instruction: params.ques, - maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, - }); - } finally { - // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); - } + const agentResult = await agent.execute({ + instruction: params.ques, + maxSteps: Number(process.env.AGENT_EVAL_MAX_STEPS) || 50, + }); + // Always stop collecting and get all screenshots, even on error + const screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation", @@ -205,6 +201,8 @@ Today's date is ${new Date().toLocaleDateString()}`; groundTruthUsed: false, agentAnswer, screenshotCount: screenshots.length, + final_answer: agentResult?.message, + execution_time: Date.now() - startTime, debugUrl, sessionUrl, logs: logger.getLogs(), From e1929bca58379ad451fb0cf1f9312f854f438d70 Mon Sep 17 00:00:00 2001 From: Miguel <36487034+miguelg719@users.noreply.github.com> Date: Mon, 22 Sep 2025 15:02:26 -0700 Subject: [PATCH 17/20] Apply suggestions from code review --- evals/tasks/agent/gaia.ts | 2 +- evals/tasks/agent/osworld.ts | 2 +- evals/tasks/agent/webbench.ts | 2 +- evals/tasks/agent/webvoyager.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/evals/tasks/agent/gaia.ts b/evals/tasks/agent/gaia.ts index 35aed40ec..c61ad9979 100644 --- a/evals/tasks/agent/gaia.ts +++ b/evals/tasks/agent/gaia.ts @@ -60,7 +60,7 @@ export const gaia: EvalFunction = async ({ }, }); - // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + // Start collecting screenshots with hybrid approach const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 8, // Keep last 8 screenshots }); diff --git a/evals/tasks/agent/osworld.ts b/evals/tasks/agent/osworld.ts index 7431882e4..07e36c29d 100644 --- a/evals/tasks/agent/osworld.ts +++ b/evals/tasks/agent/osworld.ts @@ -88,7 +88,7 @@ export const osworld: EvalFunction = async ({ // Set timeout for task execution const timeout = params.timeout || 60000; // Default 60 seconds - // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + // Start collecting screenshots const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 8, // Keep last 8 screenshots }); diff --git a/evals/tasks/agent/webbench.ts b/evals/tasks/agent/webbench.ts index 80f018741..6e8feb434 100644 --- a/evals/tasks/agent/webbench.ts +++ b/evals/tasks/agent/webbench.ts @@ -41,7 +41,7 @@ export const webbench: EvalFunction = async ({ await stagehand.page.goto(params.url, { waitUntil: "domcontentloaded" }); - // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + // Start collecting screenshots const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 8, // Keep last 8 screenshots }); diff --git a/evals/tasks/agent/webvoyager.ts b/evals/tasks/agent/webvoyager.ts index 94ba14cdb..1a9041839 100644 --- a/evals/tasks/agent/webvoyager.ts +++ b/evals/tasks/agent/webvoyager.ts @@ -85,7 +85,7 @@ export const webvoyager: EvalFunction = async ({ await stagehand.page.goto(params.web); - // Start collecting screenshots with hybrid approach (10s intervals + agent triggers) + // Start collecting screenshots const screenshotCollector = new ScreenshotCollector(stagehand.page, { maxScreenshots: 8, // Keep last 8 screenshots }); From 6aa1229f5d69e2f015693f313c1fc6e263be69ea Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 15:07:59 -0700 Subject: [PATCH 18/20] cleanup --- lib/agent/AgentClient.ts | 3 ++- lib/agent/AnthropicCUAClient.ts | 2 +- lib/agent/OpenAICUAClient.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/agent/AgentClient.ts b/lib/agent/AgentClient.ts index 6ae500ae8..028c4cdc5 100644 --- a/lib/agent/AgentClient.ts +++ b/lib/agent/AgentClient.ts @@ -4,6 +4,7 @@ import { AgentType, AgentExecutionOptions, } from "@/types/agent"; +import { ToolSet } from "ai/dist"; /** * Abstract base class for agent clients @@ -42,5 +43,5 @@ export abstract class AgentClient { handler: (action: AgentAction) => Promise, ): void; - abstract setTools(tools: unknown): void; + abstract setTools(tools: ToolSet): void; } diff --git a/lib/agent/AnthropicCUAClient.ts b/lib/agent/AnthropicCUAClient.ts index 35cadca8b..1af5c56c4 100644 --- a/lib/agent/AnthropicCUAClient.ts +++ b/lib/agent/AnthropicCUAClient.ts @@ -89,7 +89,7 @@ export class AnthropicCUAClient extends AgentClient { } setTools(tools: ToolSet): void { - this.tools = tools as ToolSet; + this.tools = tools; } /** diff --git a/lib/agent/OpenAICUAClient.ts b/lib/agent/OpenAICUAClient.ts index 827a4a8af..0cf4de240 100644 --- a/lib/agent/OpenAICUAClient.ts +++ b/lib/agent/OpenAICUAClient.ts @@ -87,8 +87,8 @@ export class OpenAICUAClient extends AgentClient { this.actionHandler = handler; } - setTools(tools: unknown): void { - this.tools = tools as ToolSet; + setTools(tools: ToolSet): void { + this.tools = tools; } /** From 4d9ecf2d88d5aabb00f473be459779c7ffea5e0c Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 15:58:41 -0700 Subject: [PATCH 19/20] zod v3 --- evals/evaluator.ts | 2 +- evals/tasks/agent/google_maps_2.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/evals/evaluator.ts b/evals/evaluator.ts index 0b32236cf..557f9ec1a 100644 --- a/evals/evaluator.ts +++ b/evals/evaluator.ts @@ -19,7 +19,7 @@ import { import { LLMParsedResponse } from "@/lib/inference"; import { LLMResponse } from "@/lib/llm/LLMClient"; import { LogLine } from "@/types/log"; -import { z } from "zod"; +import { z } from "zod/v3"; import { imageResize } from "./utils/imageUtils"; dotenv.config(); diff --git a/evals/tasks/agent/google_maps_2.ts b/evals/tasks/agent/google_maps_2.ts index 429bed4dc..051b9b7c0 100644 --- a/evals/tasks/agent/google_maps_2.ts +++ b/evals/tasks/agent/google_maps_2.ts @@ -1,6 +1,6 @@ import { EvalFunction } from "@/types/evals"; import { Evaluator } from "../../evaluator"; -import { z } from "zod"; +import { z } from "zod/v3"; export const google_maps_2: EvalFunction = async ({ debugUrl, From ac4cb0035bf59cd27e35bc55650985c0186794d9 Mon Sep 17 00:00:00 2001 From: miguel Date: Mon, 22 Sep 2025 17:06:11 -0700 Subject: [PATCH 20/20] patch osworld --- evals/tasks/agent/osworld.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/evals/tasks/agent/osworld.ts b/evals/tasks/agent/osworld.ts index 07e36c29d..96e88acf8 100644 --- a/evals/tasks/agent/osworld.ts +++ b/evals/tasks/agent/osworld.ts @@ -98,9 +98,6 @@ export const osworld: EvalFunction = async ({ agent.setScreenshotCollector(screenshotCollector); } - let screenshots: Buffer[] = []; - let result; - screenshotCollector.start(); // Execute the task using the pre-initialized agent with timeout @@ -117,9 +114,9 @@ export const osworld: EvalFunction = async ({ ), ); - result = await Promise.race([executionPromise, timeoutPromise]); + await Promise.race([executionPromise, timeoutPromise]); // Always stop collecting and get all screenshots, even on error - screenshots = screenshotCollector.stop(); + const screenshots = screenshotCollector.stop(); logger.log({ category: "evaluation",