diff --git a/apps/open-swe/eval.tsconfig.json b/apps/open-swe/eval.tsconfig.json new file mode 100644 index 00000000..6ebba49a --- /dev/null +++ b/apps/open-swe/eval.tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "isolatedModules": true + }, + "include": ["./evals/**/*.ts"] +} diff --git a/apps/open-swe/evals/evaluator.ts b/apps/open-swe/evals/evaluator.ts new file mode 100644 index 00000000..61e98565 --- /dev/null +++ b/apps/open-swe/evals/evaluator.ts @@ -0,0 +1,274 @@ +import "dotenv/config"; +import { OpenSWEInput, CodeTestDetails } from "./open-swe-types.js"; +import { Daytona, Sandbox } from "@daytonaio/sdk"; +import { createLogger, LogLevel } from "../src/utils/logger.js"; +import { TIMEOUT_SEC } from "@open-swe/shared/constants"; +import { DEFAULT_SANDBOX_CREATE_PARAMS } from "../src/constants.js"; +import { TargetRepository } from "@open-swe/shared/open-swe/types"; +import { cloneRepo } from "../src/utils/github/git.js"; +import { getRepoAbsolutePath } from "@open-swe/shared/git"; +import { SimpleEvaluationResult } from "langsmith/vitest"; +import { runRuffLint, runMyPyTypeCheck } from "./tests.js"; + +const logger = createLogger(LogLevel.INFO, "Evaluator "); + +const VENV_PATH = ".venv"; +const RUN_PYTHON_IN_VENV = `${VENV_PATH}/bin/python`; +const RUN_PIP_IN_VENV = `${VENV_PATH}/bin/pip`; + +/** + * Setup Python environment with requirements.txt + ruff + mypy + */ +async function setupEnv( + sandbox: Sandbox, + absoluteRepoDir: string, +): Promise { + logger.info("Setting up Python environment..."); + + const createVenvCommand = "python -m venv .venv"; + const createVenvRes = await sandbox.process.executeCommand( + createVenvCommand, + absoluteRepoDir, + undefined, + TIMEOUT_SEC, + ); + if (createVenvRes.exitCode !== 0) { + logger.error("Failed to create virtual environment", { + createVenvCommand, + createVenvRes, + }); + return false; + } + + const upgradePipRes = await sandbox.process.executeCommand( + `${RUN_PIP_IN_VENV} install --upgrade pip`, + absoluteRepoDir, + undefined, + TIMEOUT_SEC, + ); + if (upgradePipRes.exitCode !== 0) { + logger.warn("Failed to upgrade pip, continuing anyway", { upgradePipRes }); + } + + const requirementsExistRes = await sandbox.process.executeCommand( + "test -f requirements.txt", + absoluteRepoDir, + undefined, + TIMEOUT_SEC, + ); + + if (requirementsExistRes.exitCode === 0) { + logger.info("Found requirements.txt, installing..."); + const installReqRes = await sandbox.process.executeCommand( + `${RUN_PIP_IN_VENV} install -r requirements.txt`, + absoluteRepoDir, + undefined, + TIMEOUT_SEC * 3, + ); + if (installReqRes.exitCode !== 0) { + logger.warn("Failed to install requirements.txt, continuing anyway", { + installReqRes, + }); + } + } else { + logger.info("No requirements.txt found, skipping repository dependencies"); + } + + const installAnalysisToolsRes = await sandbox.process.executeCommand( + `${RUN_PIP_IN_VENV} install ruff mypy`, + absoluteRepoDir, + undefined, + TIMEOUT_SEC, + ); + if (installAnalysisToolsRes.exitCode !== 0) { + logger.error("Failed to install ruff and mypy", { + installAnalysisToolsRes, + }); + return false; + } + + logger.info("Environment setup completed successfully"); + return true; +} + +/** + * Runs ruff and mypy analysis on all Python files in the repository + */ +async function runCodeTests( + sandbox: Sandbox, + absoluteRepoDir: string, +): Promise<{ ruffScore: number; mypyScore: number; details: CodeTestDetails }> { + logger.info("Running code analysis on all Python files in repository"); + + const testResults: { + ruffScore: number; + mypyScore: number; + details: CodeTestDetails; + } = { + ruffScore: 0, + mypyScore: 0, + details: { + ruff: { + issues: [], + error: null, + }, + mypy: { + issues: [], + error: null, + }, + }, + }; + + const [ruffLint, mypyCheck] = await Promise.all([ + runRuffLint(sandbox, { + command: `${RUN_PYTHON_IN_VENV} -m ruff check . --output-format=json`, + workingDir: absoluteRepoDir, + env: undefined, + timeoutSec: TIMEOUT_SEC * 3, + }), + runMyPyTypeCheck(sandbox, { + command: `${RUN_PYTHON_IN_VENV} -m mypy . --no-error-summary --show-error-codes --no-color-output`, + workingDir: absoluteRepoDir, + env: undefined, + timeoutSec: TIMEOUT_SEC * 3, + }), + ]); + + Object.assign(testResults, { + ruffScore: ruffLint.ruffScore, + mypyScore: mypyCheck.mypyScore, + details: { + ruff: { + issues: ruffLint.issues, + error: ruffLint.error, + }, + mypy: { + issues: mypyCheck.issues, + error: mypyCheck.error, + }, + }, + }); + + logger.info("Code tests completed", { + ruffScore: testResults.ruffScore, + mypyScore: testResults.mypyScore, + ruffIssues: testResults.details.ruff.issues.length, + mypyIssues: testResults.details.mypy.issues.length, + }); + + return testResults; +} + +/** + * Main evaluator function for OpenSWE code analysis + */ +export async function evaluator(inputs: { + openSWEInputs: OpenSWEInput; + output: { + branchName: string; + targetRepository: TargetRepository; + }; +}): Promise { + const { openSWEInputs, output } = inputs; + + const githubToken = process.env.GITHUB_PAT; + if (!githubToken) { + throw new Error("GITHUB_PAT environment variable is not set"); + } + + const daytonaInstance = new Daytona(); + logger.info("Creating sandbox...", { + repo: openSWEInputs.repo, + originalBranch: openSWEInputs.branch, + solutionBranch: output.branchName, + user_input: openSWEInputs.user_input.substring(0, 100) + "...", + }); + + const sandbox = await daytonaInstance.create(DEFAULT_SANDBOX_CREATE_PARAMS); + + try { + const res = await cloneRepo(sandbox, output.targetRepository, { + githubInstallationToken: githubToken, + }); + if (res.exitCode !== 0) { + logger.error("Failed to clone repository", { + targetRepository: output.targetRepository, + cloneResult: res, + }); + throw new Error("Failed to clone repository"); + } + + const absoluteRepoDir = getRepoAbsolutePath(output.targetRepository); + + const solutionBranch = output.branchName; + logger.info(`Checking out agent's solution branch: ${solutionBranch}`); + + const checkoutBranchRes = await sandbox.process.executeCommand( + `git checkout ${solutionBranch}`, + absoluteRepoDir, + undefined, + TIMEOUT_SEC, + ); + if (checkoutBranchRes.exitCode !== 0) { + logger.error("Failed to checkout solution branch", { + solutionBranch, + checkoutResult: checkoutBranchRes, + }); + throw new Error(`Failed to checkout solution branch: ${solutionBranch}`); + } + + const envSetupSuccess = await setupEnv(sandbox, absoluteRepoDir); + if (!envSetupSuccess) { + logger.error("Failed to setup environment"); + return [ + { + key: "overall-score", + score: 0, + }, + ]; + } + + const analysisResult = await runCodeTests(sandbox, absoluteRepoDir); + + const overallScore = analysisResult.ruffScore + analysisResult.mypyScore; + + logger.info("Evaluation completed", { + overallScore, + ruffScore: analysisResult.ruffScore, + mypyScore: analysisResult.mypyScore, + repo: openSWEInputs.repo, + originalBranch: openSWEInputs.branch, + solutionBranch: output.branchName, + }); + + return [ + { + key: "overall-score", + score: overallScore, + }, + { + key: "ruff-score", + score: analysisResult.ruffScore, + }, + { + key: "mypy-score", + score: analysisResult.mypyScore, + }, + ]; + } catch (error) { + logger.error("Evaluation failed with error", { error }); + return [ + { + key: "overall-score", + score: 0, + }, + ]; + } finally { + try { + await sandbox.delete(); + logger.info("Sandbox cleaned up successfully"); + } catch (cleanupError) { + logger.error("Failed to cleanup sandbox", { cleanupError }); + } + } +} diff --git a/apps/open-swe/evals/langgraph.eval.ts b/apps/open-swe/evals/langgraph.eval.ts new file mode 100644 index 00000000..a002fea2 --- /dev/null +++ b/apps/open-swe/evals/langgraph.eval.ts @@ -0,0 +1,235 @@ +// Run evals over the development Open SWE dataset + +import { v4 as uuidv4 } from "uuid"; +import * as ls from "langsmith/vitest"; +import { formatInputs } from "./prompts.js"; +import { createLogger, LogLevel } from "../src/utils/logger.js"; +import { evaluator } from "./evaluator.js"; +import { MANAGER_GRAPH_ID, GITHUB_PAT } from "@open-swe/shared/constants"; +import { createLangGraphClient } from "../src/utils/langgraph-client.js"; +import { encryptSecret } from "@open-swe/shared/crypto"; +import { ManagerGraphState } from "@open-swe/shared/open-swe/manager/types"; +import { PlannerGraphState } from "@open-swe/shared/open-swe/planner/types"; +import { GraphState } from "@open-swe/shared/open-swe/types"; +import { withRetry } from "./utils/retry.js"; + +const logger = createLogger(LogLevel.DEBUG, "Evaluator"); + +const DATASET_NAME = process.env.DATASET_NAME || ""; +// const RUN_NAME = `${DATASET_NAME}-${new Date().toISOString().replace(/[:.]/g, '-')}`; + +// async function loadDataset(): Promise { +// const client = new LangSmithClient(); +// const datasetStream = client.listExamples({ datasetName: DATASET_NAME }); +// let examples: Example[] = []; +// for await (const example of datasetStream) { +// examples.push(example); +// } +// logger.info( +// `Loaded ${examples.length} examples from dataset "${DATASET_NAME}"`, +// ); +// return examples; +// } + +// const DATASET = await loadDataset().then((examples) => +// examples.map(example => ({ +// inputs: example.inputs as OpenSWEInput, +// })), +// ); + +const DATASET = [ + { + inputs: { + repo: "mai-sandbox/open-swe_content_team_eval", + branch: "main", + user_input: `I have implemented a multi-agent content creation system using LangGraph that orchestrates collaboration between specialized agents. The system is experiencing multiple runtime errors and workflow failures that prevent proper execution. + +System Architecture +The application implements a three-agent architecture: + +Research Agent: Utilizes web search tools to gather information on specified topics +Writer Agent: Creates content based on research findings with creative temperature settings +Reviewer Agent: Provides feedback using fact-checking tools and determines revision needs + +Expected Workflow +User Request → Research Agent → Writer Agent → Reviewer Agent → [Revision Loop if needed] → Final Content + +Current Issues + +Runtime Errors: Application fails to start with import and graph compilation errors +Agent Handoff Failures: Agents are not properly transferring control and context +Tool Integration Problems: Tool calling mechanisms are not functioning correctly +State Management Issues: Shared state is not being updated correctly across agent transitions +Routing Logic Failures: Conditional edges and workflow routing are broken`, + }, + }, +]; + +logger.info(`Starting evals over ${DATASET.length} examples...`); + +//const LANGGRAPH_URL = process.env.LANGGRAPH_URL || "http://localhost:2024"; + +ls.describe(DATASET_NAME, () => { + ls.test.each(DATASET)( + "Can resolve issue", + async ({ inputs }) => { + logger.info("Starting agent run", { + inputs, + }); + + const encryptionKey = process.env.SECRETS_ENCRYPTION_KEY; + const githubPat = process.env.GITHUB_PAT; + + if (!encryptionKey || !githubPat) { + throw new Error( + "SECRETS_ENCRYPTION_KEY and GITHUB_PAT environment variables are required", + ); + } + + const encryptedGitHubToken = encryptSecret(githubPat, encryptionKey); + + const lgClient = createLangGraphClient({ + includeApiKey: true, + defaultHeaders: { [GITHUB_PAT]: encryptedGitHubToken }, + }); + + const input = await formatInputs(inputs); + + const threadId = uuidv4(); + logger.info("Starting agent run", { + thread_id: threadId, + problem: inputs.user_input, + repo: inputs.repo, + }); + + // Run the agent with user input + let managerRun; + try { + managerRun = await withRetry(() => + lgClient.runs.wait(threadId, MANAGER_GRAPH_ID, { + input, + config: { + recursion_limit: 250, + }, + ifNotExists: "create", + }), + ); + } catch (error) { + logger.error("Error in manager run", { + thread_id: threadId, + error: + error instanceof Error + ? { + message: error.message, + stack: error.stack, + name: error.name, + cause: error.cause, + } + : error, + }); + return; // instead of skipping, we should award 0 points + } + + const managerState = managerRun as unknown as ManagerGraphState; + const plannerSession = managerState?.plannerSession; + + if (!plannerSession) { + logger.info("Agent did not create a planner session", { + thread_id: threadId, + }); + return; // instead of skipping, we should award 0 points + } + + let plannerRun; + try { + plannerRun = await withRetry(() => + lgClient.runs.join(plannerSession.threadId, plannerSession.runId), + ); + } catch (error) { + logger.error("Error joining planner run", { + thread_id: threadId, + plannerSession, + error: + error instanceof Error + ? { + message: error.message, + stack: error.stack, + name: error.name, + cause: error.cause, + } + : error, + }); + return; // instead of skipping, we should award 0 points + } + + // Type-safe access to planner run state + const plannerState = plannerRun as unknown as PlannerGraphState; + const programmerSession = plannerState?.programmerSession; + + if (!programmerSession) { + logger.info("Agent did not create a programmer session", { + thread_id: threadId, + }); + return; // instead of skipping, we should award 0 points + } + + let programmerRun; + try { + programmerRun = await withRetry(() => + lgClient.runs.join( + programmerSession.threadId, + programmerSession.runId, + ), + ); + } catch (error) { + logger.error("Error joining programmer run", { + thread_id: threadId, + programmerSession, + error: + error instanceof Error + ? { + message: error.message, + stack: error.stack, + name: error.name, + cause: error.cause, + } + : error, + }); + return; // instead of skipping, we should award 0 points + } + + const programmerState = programmerRun as unknown as GraphState; + const branchName = programmerState?.branchName; + + if (!branchName) { + logger.info("Agent did not create a branch", { + thread_id: threadId, + }); + return; // instead of skipping, we should award 0 points + } + + logger.info("Agent completed. Created branch:", { + branchName: branchName, + }); + + // Evaluation + const wrappedEvaluator = ls.wrapEvaluator(evaluator); + const evalResult = await wrappedEvaluator({ + openSWEInputs: inputs, + output: { + branchName, + targetRepository: { + owner: inputs.repo.split("/")[0], + repo: inputs.repo.split("/")[1], + }, + }, + }); + + logger.info("Evaluation completed.", { + thread_id: threadId, + evalResult, + }); + }, + 7200_000, + ); +}); diff --git a/apps/open-swe/evals/open-swe-types.ts b/apps/open-swe/evals/open-swe-types.ts new file mode 100644 index 00000000..01f27604 --- /dev/null +++ b/apps/open-swe/evals/open-swe-types.ts @@ -0,0 +1,104 @@ +/** + * Input structure for Open SWE evaluations + * This is much simpler than SWE-Bench since we only need + * problem statement + repo info for ruff/mypy analysis + */ +export interface OpenSWEInput { + /** + * The user request/problem statement that was given to Open SWE + * This is what gets passed to the agent to solve + */ + user_input: string; + + /** + * Repository information in "owner/repo" format + * e.g., "aliyanishfaq/my-project" + */ + repo: string; + + /** + * Optional: Branch name where the agent's solution is located + * If not provided, agent will create one (e.g., "open-swe/uuid") + */ + branch: string; +} + +/** + * Process execution options + */ +export interface ExecOptions { + command: string; + workingDir: string; + env: Record | undefined; + timeoutSec: number; +} + +/** + * Ruff issue location + */ +export interface RuffLocation { + column: number; + row: number; +} + +/** + * Ruff fix edit + */ +export interface RuffEdit { + content: string; + end_location: RuffLocation; + location: RuffLocation; +} + +/** + * Ruff fix suggestion + */ +export interface RuffFix { + applicability: "safe" | "unsafe" | "display"; + edits: RuffEdit[]; + message: string; +} + +/** + * Individual Ruff issue + */ +export interface RuffIssue { + cell: string | null; + code: string; + end_location: RuffLocation; + filename: string; + fix: RuffFix | null; + location: RuffLocation; + message: string; + noqa_row: number; + url: string; +} + +/** + * Return type for ruffPromise function + */ +export interface RuffResult { + ruffScore: number; + error: Error | null; + issues: RuffIssue[]; +} + +/** + * Return type for mypyPromise function + */ +export interface MyPyResult { + mypyScore: number; + error: Error | null; + issues: string[]; +} + +export interface CodeTestDetails { + ruff: { + issues: RuffIssue[]; + error: Error | null; + }; + mypy: { + issues: string[]; + error: Error | null; + }; +} diff --git a/apps/open-swe/evals/prompts.ts b/apps/open-swe/evals/prompts.ts new file mode 100644 index 00000000..8ce65f2d --- /dev/null +++ b/apps/open-swe/evals/prompts.ts @@ -0,0 +1,60 @@ +import { OpenSWEInput } from "./open-swe-types.js"; +import { TargetRepository } from "@open-swe/shared/open-swe/types"; +import { HumanMessage } from "@langchain/core/messages"; +import { Octokit } from "@octokit/rest"; +import { ManagerGraphUpdate } from "@open-swe/shared/open-swe/manager/types"; + +async function getRepoReadmeContents( + targetRepository: TargetRepository, +): Promise { + if (!process.env.GITHUB_PAT) { + throw new Error("GITHUB_PAT environment variable missing."); + } + const octokit = new Octokit({ + auth: process.env.GITHUB_PAT, + }); + + try { + const { data } = await octokit.repos.getReadme({ + owner: targetRepository.owner, + repo: targetRepository.repo, + }); + return Buffer.from(data.content, "base64").toString("utf-8"); + } catch (_) { + return ""; + } +} + +export async function formatInputs( + inputs: OpenSWEInput, +): Promise { + const targetRepository: TargetRepository = { + owner: inputs.repo.split("/")[0], + repo: inputs.repo.split("/")[1], + branch: inputs.branch, + }; + + const readmeContents = await getRepoReadmeContents(targetRepository); + + const SIMPLE_PROMPT_TEMPLATE = ` +{USER_REQUEST} + + + +{CODEBASE_README} +`; + + const userMessageContent = SIMPLE_PROMPT_TEMPLATE.replace( + "{REPO}", + inputs.repo, + ) + .replace("{USER_REQUEST}", inputs.user_input) + .replace("{CODEBASE_README}", readmeContents); + + const userMessage = new HumanMessage(userMessageContent); + return { + messages: [userMessage], + targetRepository, + autoAcceptPlan: true, + }; +} diff --git a/apps/open-swe/evals/tests.ts b/apps/open-swe/evals/tests.ts new file mode 100644 index 00000000..0bd14acd --- /dev/null +++ b/apps/open-swe/evals/tests.ts @@ -0,0 +1,132 @@ +// TODO: Add ruff promise and the mypy promise to the tests. +import { Sandbox } from "@daytonaio/sdk"; +import { createLogger, LogLevel } from "../src/utils/logger.js"; +import { + ExecOptions, + RuffResult, + RuffIssue, + MyPyResult, +} from "./open-swe-types.js"; + +const logger = createLogger(LogLevel.DEBUG, " Evaluation Tests"); + +/** + * Run ruff check and return score, error, and issues + */ +export const runRuffLint = async ( + sandbox: Sandbox, + args: ExecOptions, +): Promise => { + logger.info("Running ruff check..."); + + try { + const execution = await sandbox.process.executeCommand( + args.command, + args.workingDir, + args.env, + args.timeoutSec, + ); + + if (execution.exitCode === 0) { + logger.info("Ruff analysis passed. No issues found."); + return { + ruffScore: 1, + error: null, + issues: [], + }; + } + + try { + const issues: RuffIssue[] = JSON.parse(execution.result); + const issueCount = Array.isArray(issues) ? issues.length : 0; + const ruffScore = issueCount === 0 ? 1 : 0; + + logger.info(`Ruff found ${issueCount} issues`, { + score: ruffScore, + issues: issues.slice(0, 3), // Log first 3 issues + }); + + return { + ruffScore, + error: null, + issues, + }; + } catch (parseError) { + logger.warn( + "Could not parse ruff JSON output. Setting Ruff score to 0.", + { + parseError, + output: execution.result?.substring(0, 200) + "...", + }, + ); + + return { + ruffScore: 0, + error: parseError as Error, + issues: [], + }; + } + } catch (error) { + logger.error("Failed to run ruff check", { error }); + return { + ruffScore: 0, + error: error as Error, + issues: [], + }; + } +}; + +/** + * Run mypy check and return score, error, and issues + */ +export const runMyPyTypeCheck = async ( + sandbox: Sandbox, + args: ExecOptions, +): Promise => { + logger.info("Running mypy check..."); + try { + const execution = await sandbox.process.executeCommand( + args.command, + args.workingDir, + args.env, + args.timeoutSec, + ); + + if (execution.exitCode === 0) { + logger.info("Mypy analysis passed. No issues found."); + return { + mypyScore: 1, + error: null, + issues: [], + }; + } else { + // Filter for actual type problems: errors and warnings + const errorLines = execution.result + .split("\n") + .filter( + (line) => line.includes(": error:") || line.includes(": warning:"), + ); + + const issueCount = errorLines.length; + const mypyScore = issueCount === 0 ? 1 : 0; + + logger.info(`Mypy found ${issueCount} issues`, { + score: mypyScore, + issues: errorLines.slice(0, 3), + }); + + return { + mypyScore, + error: null, + issues: errorLines, + }; + } + } catch (error) { + logger.error("Failed to run mypy check", { error }); + return { + mypyScore: 0, + error: error as Error, + issues: [], + }; + } +}; diff --git a/apps/open-swe/evals/utils/retry.ts b/apps/open-swe/evals/utils/retry.ts new file mode 100644 index 00000000..bffe42f1 --- /dev/null +++ b/apps/open-swe/evals/utils/retry.ts @@ -0,0 +1,51 @@ +import { createLogger, LogLevel } from "../../src/utils/logger.js"; + +const logger = createLogger(LogLevel.DEBUG, "Retry"); + +const RETRY_CONFIG = { + maxRetries: 5, + baseDelay: 1000, + maxDelay: 30000, + backoffMultiplier: 2, + timeoutErrors: ["UND_ERR_HEADERS_TIMEOUT"], +}; + +/** + * Retry decorator with exponential backoff for LangGraph client + * operations. + */ +export async function withRetry(operation: () => Promise): Promise { + let lastError: any; + + for (let attempt = 0; attempt < RETRY_CONFIG.maxRetries; attempt++) { + try { + return await operation(); + } catch (error: any) { + lastError = error; + + const isRetryable = RETRY_CONFIG.timeoutErrors.includes( + error?.cause?.code, + ); + + if (isRetryable && attempt < RETRY_CONFIG.maxRetries - 1) { + const delay = Math.min( + RETRY_CONFIG.baseDelay * + Math.pow(RETRY_CONFIG.backoffMultiplier, attempt), + RETRY_CONFIG.maxDelay, + ); + logger.info( + `Retrying operation in ${delay}ms. Attempt ${attempt + 1} of ${RETRY_CONFIG.maxRetries}`, + { + attempt, + lastError, + }, + ); + await new Promise((resolve) => setTimeout(resolve, delay)); + } else { + throw lastError; + } + } + } + + throw lastError; +} diff --git a/apps/open-swe/ls.vitest.config.ts b/apps/open-swe/ls.vitest.config.ts new file mode 100644 index 00000000..e468b998 --- /dev/null +++ b/apps/open-swe/ls.vitest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + include: ["**/*.eval.?(c|m)[jt]s"], + reporters: ["langsmith/vitest/reporter"], + setupFiles: ["dotenv/config"], + typecheck: { + tsconfig: "./eval.tsconfig.json", + }, + testTimeout: 7200_000, // 120 minutes + }, +}); diff --git a/apps/open-swe/package.json b/apps/open-swe/package.json index 48965c39..ee323a00 100644 --- a/apps/open-swe/package.json +++ b/apps/open-swe/package.json @@ -19,6 +19,7 @@ "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPattern=\\.test\\.ts$ --testPathIgnorePatterns=\\.int\\.test\\.ts$", "test:int": "node --experimental-vm-modules node_modules/jest/bin/jest.js --testPathPattern=\\.int\\.test\\.ts$", "test:single": "NODE_OPTIONS=--experimental-vm-modules yarn run jest --config jest.config.js --testTimeout 100000", + "eval:single": "NODE_OPTIONS=--experimental-vm-modules yarn run vitest --config ls.vitest.config.ts --run", "postinstall": "turbo build" }, "dependencies": { @@ -63,7 +64,8 @@ "ts-jest": "^29.1.0", "turbo": "^2.5.0", "typescript": "~5.7.2", - "typescript-eslint": "^8.22.0" + "typescript-eslint": "^8.22.0", + "vitest": "^3.2.3" }, "packageManager": "yarn@3.5.1" } diff --git a/apps/open-swe/src/constants.ts b/apps/open-swe/src/constants.ts index 2ab44ac2..76e1ccbd 100644 --- a/apps/open-swe/src/constants.ts +++ b/apps/open-swe/src/constants.ts @@ -10,3 +10,20 @@ export const DEFAULT_SANDBOX_CREATE_PARAMS: CreateSandboxParams = { user: "daytona", image: SNAPSHOT_NAME, }; + +export const LANGGRAPH_USER_PERMISSIONS = [ + "threads:create", + "threads:create_run", + "threads:read", + "threads:delete", + "threads:update", + "threads:search", + "assistants:create", + "assistants:read", + "assistants:delete", + "assistants:update", + "assistants:search", + "deployments:read", + "deployments:search", + "store:access", +]; diff --git a/apps/open-swe/src/security/auth.ts b/apps/open-swe/src/security/auth.ts index 8da8782c..279dbbf3 100644 --- a/apps/open-swe/src/security/auth.ts +++ b/apps/open-swe/src/security/auth.ts @@ -14,6 +14,8 @@ import { import { decryptSecret } from "@open-swe/shared/crypto"; import { verifyGitHubWebhookOrThrow } from "./github.js"; import { createWithOwnerMetadata, createOwnerFilter } from "./utils.js"; +import { LANGGRAPH_USER_PERMISSIONS } from "../constants.js"; +import { getGitHubPatFromRequest } from "../utils/github-pat.js"; // TODO: Export from LangGraph SDK export interface BaseAuthReturn { @@ -43,6 +45,8 @@ export const auth = new Auth() }; } + const isProd = process.env.NODE_ENV === "production"; + const ghSecretHashHeader = request.headers.get("X-Hub-Signature-256"); if (ghSecretHashHeader) { // This will either return a valid user, or throw an error @@ -54,6 +58,28 @@ export const auth = new Auth() throw new Error("Missing SECRETS_ENCRYPTION_KEY environment variable."); } + // Check for GitHub PAT authentication (simpler mode for evals, etc.) + const githubPat = getGitHubPatFromRequest(request, encryptionKey); + if (githubPat && !isProd) { + const user = await verifyGithubUser(githubPat); + if (!user) { + throw new HTTPException(401, { + message: "Invalid GitHub PAT", + }); + } + + return { + identity: user.id.toString(), + is_authenticated: true, + display_name: user.login, + metadata: { + installation_name: "pat-auth", + }, + permissions: LANGGRAPH_USER_PERMISSIONS, + }; + } + + // GitHub App authentication mode (existing logic) const installationNameHeader = request.headers.get( GITHUB_INSTALLATION_NAME, ); @@ -112,22 +138,7 @@ export const auth = new Auth() metadata: { installation_name: installationNameHeader, }, - permissions: [ - "threads:create", - "threads:create_run", - "threads:read", - "threads:delete", - "threads:update", - "threads:search", - "assistants:create", - "assistants:read", - "assistants:delete", - "assistants:update", - "assistants:search", - "deployments:read", - "deployments:search", - "store:access", - ], + permissions: LANGGRAPH_USER_PERMISSIONS, }; }) diff --git a/apps/open-swe/src/security/github.ts b/apps/open-swe/src/security/github.ts index 28af7bdf..a410444b 100644 --- a/apps/open-swe/src/security/github.ts +++ b/apps/open-swe/src/security/github.ts @@ -1,6 +1,7 @@ import { HTTPException } from "@langchain/langgraph-sdk/auth"; import { Webhooks } from "@octokit/webhooks"; import { createLogger, LogLevel } from "../utils/logger.js"; +import { LANGGRAPH_USER_PERMISSIONS } from "../constants.js"; const logger = createLogger(LogLevel.INFO, "GitHubWebhookAuth"); @@ -41,21 +42,6 @@ export async function verifyGitHubWebhookOrThrow(request: Request) { metadata: { installation_name: "n/a", }, - permissions: [ - "threads:create", - "threads:create_run", - "threads:read", - "threads:delete", - "threads:update", - "threads:search", - "assistants:create", - "assistants:read", - "assistants:delete", - "assistants:update", - "assistants:search", - "deployments:read", - "deployments:search", - "store:access", - ], + permissions: LANGGRAPH_USER_PERMISSIONS, }; } diff --git a/apps/open-swe/src/utils/default-headers.ts b/apps/open-swe/src/utils/default-headers.ts index ebfe9cb9..3b809265 100644 --- a/apps/open-swe/src/utils/default-headers.ts +++ b/apps/open-swe/src/utils/default-headers.ts @@ -5,9 +5,19 @@ import { GITHUB_USER_ID_HEADER, GITHUB_USER_LOGIN_HEADER, GITHUB_INSTALLATION_NAME, + GITHUB_PAT, } from "@open-swe/shared/constants"; -export function getDefaultHeaders(config: GraphConfig) { +export function getDefaultHeaders(config: GraphConfig): Record { + const githubPat = config.configurable?.[GITHUB_PAT]; + const isProd = process.env.NODE_ENV === "production"; + if (githubPat && !isProd) { + // PAT-only + return { + [GITHUB_PAT]: githubPat, + }; + } + const githubInstallationTokenCookie = config.configurable?.[GITHUB_INSTALLATION_TOKEN_COOKIE]; const githubInstallationName = diff --git a/apps/open-swe/src/utils/github-pat.ts b/apps/open-swe/src/utils/github-pat.ts new file mode 100644 index 00000000..d26e2fbb --- /dev/null +++ b/apps/open-swe/src/utils/github-pat.ts @@ -0,0 +1,33 @@ +import { GITHUB_PAT } from "@open-swe/shared/constants"; +import { decryptSecret } from "@open-swe/shared/crypto"; + +/** + * Simple helper to check if request has GitHub PAT and return decrypted value + */ +export function getGitHubPatFromRequest( + request: Request, + encryptionKey: string, +): string | null { + const encryptedGitHubPat = request.headers.get(GITHUB_PAT); + if (!encryptedGitHubPat) { + return null; + } + return decryptSecret(encryptedGitHubPat, encryptionKey); +} + +/** + * Helper to check if configurable has GitHub PAT and return decrypted value + */ +export function getGitHubPatFromConfig( + configurable: Record | undefined, + encryptionKey: string, +): string | null { + if (!configurable) { + return null; + } + const encryptedGitHubPat = configurable[GITHUB_PAT]; + if (!encryptedGitHubPat) { + return null; + } + return decryptSecret(encryptedGitHubPat, encryptionKey); +} diff --git a/apps/open-swe/src/utils/github-tokens.ts b/apps/open-swe/src/utils/github-tokens.ts index df141ce6..50148d86 100644 --- a/apps/open-swe/src/utils/github-tokens.ts +++ b/apps/open-swe/src/utils/github-tokens.ts @@ -4,6 +4,7 @@ import { } from "@open-swe/shared/constants"; import { GraphConfig } from "@open-swe/shared/open-swe/types"; import { decryptSecret } from "@open-swe/shared/crypto"; +import { getGitHubPatFromConfig } from "./github-pat.js"; export function getGitHubTokensFromConfig(config: GraphConfig): { githubAccessToken: string; @@ -12,6 +13,24 @@ export function getGitHubTokensFromConfig(config: GraphConfig): { if (!config.configurable) { throw new Error("No configurable object found in graph config."); } + + // Get the encryption key from environment variables + const encryptionKey = process.env.SECRETS_ENCRYPTION_KEY; + if (!encryptionKey) { + throw new Error("Missing SECRETS_ENCRYPTION_KEY environment variable."); + } + + const isProd = process.env.NODE_ENV === "production"; + + const githubPat = getGitHubPatFromConfig(config.configurable, encryptionKey); + if (githubPat && !isProd) { + // check for PAT-only mode + return { + githubAccessToken: githubPat, + githubInstallationToken: githubPat, + }; + } + const encryptedGitHubToken = config.configurable[GITHUB_TOKEN_COOKIE]; const encryptedInstallationToken = config.configurable[GITHUB_INSTALLATION_TOKEN_COOKIE]; @@ -21,12 +40,6 @@ export function getGitHubTokensFromConfig(config: GraphConfig): { ); } - // Get the encryption key from environment variables - const encryptionKey = process.env.SECRETS_ENCRYPTION_KEY; - if (!encryptionKey) { - throw new Error("Missing SECRETS_ENCRYPTION_KEY environment variable."); - } - // Decrypt the GitHub token const githubAccessToken = encryptedGitHubToken ? decryptSecret(encryptedGitHubToken, encryptionKey) diff --git a/packages/shared/src/constants.ts b/packages/shared/src/constants.ts index d23563a3..7fb9f40f 100644 --- a/packages/shared/src/constants.ts +++ b/packages/shared/src/constants.ts @@ -8,6 +8,7 @@ export const PLAN_INTERRUPT_ACTION_TITLE = "Approve/Edit Plan"; export const GITHUB_TOKEN_COOKIE = "x-github-access-token"; export const GITHUB_INSTALLATION_TOKEN_COOKIE = "x-github-installation-token"; export const GITHUB_INSTALLATION_NAME = "x-github-installation-name"; +export const GITHUB_PAT = "x-github-pat"; export const DO_NOT_RENDER_ID_PREFIX = "do-not-render-"; export const GITHUB_AUTH_STATE_COOKIE = "github_auth_state"; diff --git a/packages/shared/src/open-swe/types.ts b/packages/shared/src/open-swe/types.ts index 94ec159d..c8c13ff0 100644 --- a/packages/shared/src/open-swe/types.ts +++ b/packages/shared/src/open-swe/types.ts @@ -19,6 +19,7 @@ import { GITHUB_TOKEN_COOKIE, GITHUB_USER_ID_HEADER, GITHUB_USER_LOGIN_HEADER, + GITHUB_PAT, DEFAULT_MCP_SERVERS, } from "../constants.js"; import { withLangGraph } from "@langchain/langgraph/zod"; @@ -414,6 +415,11 @@ export const GraphConfigurationMetadata: { type: "hidden", }, }, + [GITHUB_PAT]: { + x_open_swe_ui_config: { + type: "hidden", + }, + }, mcpServers: { x_open_swe_ui_config: { type: "json", @@ -598,6 +604,14 @@ export const GraphConfiguration = z.object({ .string() .optional() .langgraph.metadata(GraphConfigurationMetadata[GITHUB_INSTALLATION_NAME]), + /** + * GitHub Personal Access Token. Used for simpler authentication in environments like evals + * where GitHub App installation tokens are not available or needed. + */ + [GITHUB_PAT]: z + .string() + .optional() + .langgraph.metadata(GraphConfigurationMetadata[GITHUB_PAT]), /** * Custom MCP servers configuration as JSON string. Merges with default servers. * @default Default LangGraph docs MCP server diff --git a/yarn.lock b/yarn.lock index c170be6f..55525c32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -643,8 +643,8 @@ __metadata: linkType: hard "@dotenvx/dotenvx@npm:^1.25.1": - version: 1.46.0 - resolution: "@dotenvx/dotenvx@npm:1.46.0" + version: 1.47.5 + resolution: "@dotenvx/dotenvx@npm:1.47.5" dependencies: commander: ^11.1.0 dotenv: ^16.4.5 @@ -657,7 +657,7 @@ __metadata: which: ^4.0.0 bin: dotenvx: src/cli/dotenvx.js - checksum: 3c7321fc26fc2df0a81aaf4b4704dbbae101727f976732497182a61d1369a610286f95e5e32ad5ad3ec5271ff7ecf7d6fbb9b510967f87ff7e96b9ba19e9e917 + checksum: a5b5768e4be2ac48348ec5e462b95e785e3a70f02774e90514c9dc4192242b5b0a410b3a3ff21cfa4650c9b3ab4fbbb35d6df844278f13381349a413d3e77204 languageName: node linkType: hard @@ -680,7 +680,7 @@ __metadata: languageName: node linkType: hard -"@emnapi/runtime@npm:^1.2.0, @emnapi/runtime@npm:^1.4.3": +"@emnapi/runtime@npm:^1.2.0, @emnapi/runtime@npm:^1.4.3, @emnapi/runtime@npm:^1.4.4": version: 1.4.4 resolution: "@emnapi/runtime@npm:1.4.4" dependencies: @@ -916,16 +916,7 @@ __metadata: languageName: node linkType: hard -"@eslint/core@npm:^0.14.0": - version: 0.14.0 - resolution: "@eslint/core@npm:0.14.0" - dependencies: - "@types/json-schema": ^7.0.15 - checksum: d68b8282b6f38c5145234f812f18f491d12d716240875591bd54bf5ac32858d979bdf6d38e521997a6e01f2c4223a3e66049714151da7278d0a95ff15b5d46c8 - languageName: node - linkType: hard - -"@eslint/core@npm:^0.15.1": +"@eslint/core@npm:^0.15.0, @eslint/core@npm:^0.15.1": version: 0.15.1 resolution: "@eslint/core@npm:0.15.1" dependencies: @@ -951,10 +942,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.30.1, @eslint/js@npm:^9.19.0": - version: 9.30.1 - resolution: "@eslint/js@npm:9.30.1" - checksum: 596adcd4336f098121b4f3f336169dabe86ca8d34b9fb4e30c9c44ccbb10def931bdbbd92cd910776c4030a05ae614fbc89fc8d09f69f5bad2795cd7157678e8 +"@eslint/js@npm:9.31.0, @eslint/js@npm:^9.19.0": + version: 9.31.0 + resolution: "@eslint/js@npm:9.31.0" + checksum: 0160e59702bdbee82f5234a1663255300e8747581641f657e5da12496c4dd46d75dd789866c0fe112a5f898a2450359333151e607775165da6a8efbd689be57c languageName: node linkType: hard @@ -1122,11 +1113,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-darwin-arm64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-darwin-arm64@npm:0.34.2" +"@img/sharp-darwin-arm64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-darwin-arm64@npm:0.34.3" dependencies: - "@img/sharp-libvips-darwin-arm64": 1.1.0 + "@img/sharp-libvips-darwin-arm64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-darwin-arm64": optional: true @@ -1146,11 +1137,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-darwin-x64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-darwin-x64@npm:0.34.2" +"@img/sharp-darwin-x64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-darwin-x64@npm:0.34.3" dependencies: - "@img/sharp-libvips-darwin-x64": 1.1.0 + "@img/sharp-libvips-darwin-x64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-darwin-x64": optional: true @@ -1165,9 +1156,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-darwin-arm64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-darwin-arm64@npm:1.1.0" +"@img/sharp-libvips-darwin-arm64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-darwin-arm64@npm:1.2.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -1179,9 +1170,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-darwin-x64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-darwin-x64@npm:1.1.0" +"@img/sharp-libvips-darwin-x64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-darwin-x64@npm:1.2.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -1193,9 +1184,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linux-arm64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linux-arm64@npm:1.1.0" +"@img/sharp-libvips-linux-arm64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linux-arm64@npm:1.2.0" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard @@ -1207,16 +1198,16 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linux-arm@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linux-arm@npm:1.1.0" +"@img/sharp-libvips-linux-arm@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linux-arm@npm:1.2.0" conditions: os=linux & cpu=arm & libc=glibc languageName: node linkType: hard -"@img/sharp-libvips-linux-ppc64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linux-ppc64@npm:1.1.0" +"@img/sharp-libvips-linux-ppc64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linux-ppc64@npm:1.2.0" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard @@ -1228,9 +1219,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linux-s390x@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linux-s390x@npm:1.1.0" +"@img/sharp-libvips-linux-s390x@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linux-s390x@npm:1.2.0" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard @@ -1242,9 +1233,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linux-x64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linux-x64@npm:1.1.0" +"@img/sharp-libvips-linux-x64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linux-x64@npm:1.2.0" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard @@ -1256,9 +1247,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linuxmusl-arm64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.1.0" +"@img/sharp-libvips-linuxmusl-arm64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linuxmusl-arm64@npm:1.2.0" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard @@ -1270,9 +1261,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-libvips-linuxmusl-x64@npm:1.1.0": - version: 1.1.0 - resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.1.0" +"@img/sharp-libvips-linuxmusl-x64@npm:1.2.0": + version: 1.2.0 + resolution: "@img/sharp-libvips-linuxmusl-x64@npm:1.2.0" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard @@ -1289,11 +1280,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-arm64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linux-arm64@npm:0.34.2" +"@img/sharp-linux-arm64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linux-arm64@npm:0.34.3" dependencies: - "@img/sharp-libvips-linux-arm64": 1.1.0 + "@img/sharp-libvips-linux-arm64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linux-arm64": optional: true @@ -1313,11 +1304,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-arm@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linux-arm@npm:0.34.2" +"@img/sharp-linux-arm@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linux-arm@npm:0.34.3" dependencies: - "@img/sharp-libvips-linux-arm": 1.1.0 + "@img/sharp-libvips-linux-arm": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linux-arm": optional: true @@ -1325,6 +1316,18 @@ __metadata: languageName: node linkType: hard +"@img/sharp-linux-ppc64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linux-ppc64@npm:0.34.3" + dependencies: + "@img/sharp-libvips-linux-ppc64": 1.2.0 + dependenciesMeta: + "@img/sharp-libvips-linux-ppc64": + optional: true + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@img/sharp-linux-s390x@npm:0.33.5": version: 0.33.5 resolution: "@img/sharp-linux-s390x@npm:0.33.5" @@ -1337,11 +1340,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-s390x@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linux-s390x@npm:0.34.2" +"@img/sharp-linux-s390x@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linux-s390x@npm:0.34.3" dependencies: - "@img/sharp-libvips-linux-s390x": 1.1.0 + "@img/sharp-libvips-linux-s390x": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linux-s390x": optional: true @@ -1361,11 +1364,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linux-x64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linux-x64@npm:0.34.2" +"@img/sharp-linux-x64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linux-x64@npm:0.34.3" dependencies: - "@img/sharp-libvips-linux-x64": 1.1.0 + "@img/sharp-libvips-linux-x64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linux-x64": optional: true @@ -1385,11 +1388,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linuxmusl-arm64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linuxmusl-arm64@npm:0.34.2" +"@img/sharp-linuxmusl-arm64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linuxmusl-arm64@npm:0.34.3" dependencies: - "@img/sharp-libvips-linuxmusl-arm64": 1.1.0 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linuxmusl-arm64": optional: true @@ -1409,11 +1412,11 @@ __metadata: languageName: node linkType: hard -"@img/sharp-linuxmusl-x64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-linuxmusl-x64@npm:0.34.2" +"@img/sharp-linuxmusl-x64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-linuxmusl-x64@npm:0.34.3" dependencies: - "@img/sharp-libvips-linuxmusl-x64": 1.1.0 + "@img/sharp-libvips-linuxmusl-x64": 1.2.0 dependenciesMeta: "@img/sharp-libvips-linuxmusl-x64": optional: true @@ -1430,18 +1433,18 @@ __metadata: languageName: node linkType: hard -"@img/sharp-wasm32@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-wasm32@npm:0.34.2" +"@img/sharp-wasm32@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-wasm32@npm:0.34.3" dependencies: - "@emnapi/runtime": ^1.4.3 + "@emnapi/runtime": ^1.4.4 conditions: cpu=wasm32 languageName: node linkType: hard -"@img/sharp-win32-arm64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-win32-arm64@npm:0.34.2" +"@img/sharp-win32-arm64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-win32-arm64@npm:0.34.3" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -1453,9 +1456,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-win32-ia32@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-win32-ia32@npm:0.34.2" +"@img/sharp-win32-ia32@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-win32-ia32@npm:0.34.3" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -1467,9 +1470,9 @@ __metadata: languageName: node linkType: hard -"@img/sharp-win32-x64@npm:0.34.2": - version: 0.34.2 - resolution: "@img/sharp-win32-x64@npm:0.34.2" +"@img/sharp-win32-x64@npm:0.34.3": + version: 0.34.3 + resolution: "@img/sharp-win32-x64@npm:0.34.3" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2480,14 +2483,14 @@ __metadata: languageName: node linkType: hard -"@langchain/langgraph-api@npm:0.0.43": - version: 0.0.43 - resolution: "@langchain/langgraph-api@npm:0.0.43" +"@langchain/langgraph-api@npm:0.0.45": + version: 0.0.45 + resolution: "@langchain/langgraph-api@npm:0.0.45" dependencies: "@babel/code-frame": ^7.26.2 "@hono/node-server": ^1.12.0 "@hono/zod-validator": ^0.2.2 - "@langchain/langgraph-ui": 0.0.43 + "@langchain/langgraph-ui": 0.0.45 "@types/json-schema": ^7.0.15 "@typescript/vfs": ^1.6.0 dedent: ^1.5.3 @@ -2513,7 +2516,7 @@ __metadata: peerDependenciesMeta: "@langchain/langgraph-sdk": optional: true - checksum: 189324441b613bf2d3044a4cbb1a925ee802456e99cceba6bbde11fc037756d4a2e5f309c4439e9b5d60b6ce7a77d1cab10cad84a79991115773702c2016adfc + checksum: ceddae262fe3e9064820dfb0faf53af771c29eb9b7e0a1862e2982666dadcc5e329ce0c286af171315135c963c5c56c4bd49c519edb745c8a1c40ab1187081c5 languageName: node linkType: hard @@ -2529,12 +2532,12 @@ __metadata: linkType: hard "@langchain/langgraph-cli@npm:latest": - version: 0.0.43 - resolution: "@langchain/langgraph-cli@npm:0.0.43" + version: 0.0.45 + resolution: "@langchain/langgraph-cli@npm:0.0.45" dependencies: "@babel/code-frame": ^7.26.2 "@commander-js/extra-typings": ^13.0.0 - "@langchain/langgraph-api": 0.0.43 + "@langchain/langgraph-api": 0.0.45 chokidar: ^4.0.3 commander: ^13.0.0 dedent: ^1.5.3 @@ -2552,7 +2555,7 @@ __metadata: zod: ^3.23.8 bin: langgraphjs: dist/cli/cli.mjs - checksum: 5c5590add5ef018e463d004bd0222ccc8ff9055379db67a0dbe5dcb4ef0613579ea7ac491314ce716f2d77b28bdf2948842b7383668cb14f7f92c04c270bde40 + checksum: 5136009dbf8b2ba078be7dfe421f3a9d9b1c86ac52503e26d2d1b667ab8fea677f9596da5f5fced4191c1188861390ed11d2329c907cdb917fb86dc274d361ec languageName: node linkType: hard @@ -2579,9 +2582,9 @@ __metadata: languageName: node linkType: hard -"@langchain/langgraph-ui@npm:0.0.43": - version: 0.0.43 - resolution: "@langchain/langgraph-ui@npm:0.0.43" +"@langchain/langgraph-ui@npm:0.0.45": + version: 0.0.45 + resolution: "@langchain/langgraph-ui@npm:0.0.45" dependencies: "@commander-js/extra-typings": ^13.0.0 commander: ^13.0.0 @@ -2590,7 +2593,7 @@ __metadata: zod: ^3.23.8 bin: langgraphjs-ui: ./dist/cli.mjs - checksum: 88b1555f298bd64bc8e8ac03973ffb2a90472be09842e325b41b01e2f14eebe0e8f656c2bedd4c26767e6565e579716f00404b655b845aa7194ea10e2a0fb89a + checksum: e48c0aa52f898765a240f185318fe18668594a67eb0c059b99adf22e46c9f4a3a217c6696533df6c755863ff2c79925753bd17e5c98d73a865e84f933db81939 languageName: node linkType: hard @@ -2728,16 +2731,16 @@ __metadata: languageName: node linkType: hard -"@mintlify/cli@npm:4.0.616": - version: 4.0.616 - resolution: "@mintlify/cli@npm:4.0.616" +"@mintlify/cli@npm:4.0.619": + version: 4.0.619 + resolution: "@mintlify/cli@npm:4.0.619" dependencies: - "@mintlify/common": 1.0.444 - "@mintlify/link-rot": 3.0.566 - "@mintlify/models": 0.0.204 - "@mintlify/prebuild": 1.0.562 - "@mintlify/previewing": 4.0.605 - "@mintlify/validation": 0.1.408 + "@mintlify/common": 1.0.447 + "@mintlify/link-rot": 3.0.569 + "@mintlify/models": 0.0.206 + "@mintlify/prebuild": 1.0.565 + "@mintlify/previewing": 4.0.608 + "@mintlify/validation": 0.1.411 chalk: ^5.2.0 detect-port: ^1.5.1 fs-extra: ^11.2.0 @@ -2750,19 +2753,19 @@ __metadata: bin: mint: bin/index.js mintlify: bin/index.js - checksum: 9710b9f98dbf9f8a4d68b926ef7de6e7bb3b86b1810bac53515fab44af25434fe4d212afba9031047e96b653e3ab1f274e34d4c3953e9c3aa8a1ea1394842857 + checksum: 69bc3135d37d940fb09748c0e00d98e541965049ed452410ff61c8b37c28ea589d053a61275fdb0b1efc223de91c45cd6dcbb65e51499d828759e331a61c4f6b languageName: node linkType: hard -"@mintlify/common@npm:1.0.444": - version: 1.0.444 - resolution: "@mintlify/common@npm:1.0.444" +"@mintlify/common@npm:1.0.447": + version: 1.0.447 + resolution: "@mintlify/common@npm:1.0.447" dependencies: "@asyncapi/parser": ^3.4.0 "@mintlify/mdx": ^2.0.3 - "@mintlify/models": 0.0.204 + "@mintlify/models": 0.0.206 "@mintlify/openapi-parser": ^0.0.7 - "@mintlify/validation": 0.1.408 + "@mintlify/validation": 0.1.411 "@sindresorhus/slugify": ^2.1.1 acorn: ^8.11.2 acorn-jsx: ^5.3.2 @@ -2794,20 +2797,20 @@ __metadata: unist-util-visit: ^5.0.0 unist-util-visit-parents: ^6.0.1 vfile: ^6.0.3 - checksum: 565888fd3902c73653865fe2e5c85887b6cc265c06371206270a31248ce7174600d6f81f841854b909dc609ba07d996300a03d86a4683393d6b261c1ad8591ce + checksum: 2432646fec2897a4ebb3a79948a54f725ee68fb9056c430fffd2aa1fe6d9fb63f6d55c5a8d1cdf203e4c6f69d07d5435f3f4981a353c2fb5f5a189911faa5979 languageName: node linkType: hard -"@mintlify/link-rot@npm:3.0.566": - version: 3.0.566 - resolution: "@mintlify/link-rot@npm:3.0.566" +"@mintlify/link-rot@npm:3.0.569": + version: 3.0.569 + resolution: "@mintlify/link-rot@npm:3.0.569" dependencies: - "@mintlify/common": 1.0.444 - "@mintlify/prebuild": 1.0.562 - "@mintlify/previewing": 4.0.605 + "@mintlify/common": 1.0.447 + "@mintlify/prebuild": 1.0.565 + "@mintlify/previewing": 4.0.608 fs-extra: ^11.1.0 unist-util-visit: ^4.1.1 - checksum: cc818a3cac6bf2f2fe2e1fd25b5d7a3334174c816e51c0c45a7d44ae683a0f710c98984ce3e48eb6dca3d900d11716402c726154f631fd21dc41f7b55f96fafb + checksum: b672df1c4189d039dacef4a9112253cbe891ca043aaf4eea53674fcd1a2508ec4e6980d6ae9102d6b730313f8741475f3b94d2d09266951545278d91ef91086a languageName: node linkType: hard @@ -2833,13 +2836,13 @@ __metadata: languageName: node linkType: hard -"@mintlify/models@npm:0.0.204": - version: 0.0.204 - resolution: "@mintlify/models@npm:0.0.204" +"@mintlify/models@npm:0.0.206": + version: 0.0.206 + resolution: "@mintlify/models@npm:0.0.206" dependencies: axios: ^1.8.3 openapi-types: ^12.0.0 - checksum: e80c961a3776bd79a9be9a4fbfa30b072754d28b14bb0a0c21215175c52112b3b079c1e7adb692ff26b1f798fa9a03fe1a3bf6785f90654b8e5ba81612e3ba4f + checksum: e11ee75cc1d5f955922750414c0c7c0e1bd5a72913214a20d076e3172aaabfe9228a4bf554e4008416240f582a1d64d913bccdc386946f23ef3db27ac2f63982 languageName: node linkType: hard @@ -2857,14 +2860,14 @@ __metadata: languageName: node linkType: hard -"@mintlify/prebuild@npm:1.0.562": - version: 1.0.562 - resolution: "@mintlify/prebuild@npm:1.0.562" +"@mintlify/prebuild@npm:1.0.565": + version: 1.0.565 + resolution: "@mintlify/prebuild@npm:1.0.565" dependencies: - "@mintlify/common": 1.0.444 + "@mintlify/common": 1.0.447 "@mintlify/openapi-parser": ^0.0.7 - "@mintlify/scraping": 4.0.300 - "@mintlify/validation": 0.1.408 + "@mintlify/scraping": 4.0.303 + "@mintlify/validation": 0.1.411 chalk: ^5.3.0 favicons: ^7.2.0 fs-extra: ^11.1.0 @@ -2873,17 +2876,17 @@ __metadata: mdast: ^3.0.0 openapi-types: ^12.0.0 unist-util-visit: ^4.1.1 - checksum: f83c4c030d83205e0eda7522ff2d462dede6430973a1bc6ec81ba623db929c4dcdd3c566f71784180c1ac95bf5637dc776917506d6e5fb01548fe9213f23be8d + checksum: 0fe245d9091b7bc02271965bdfe2cfdc02688b13b04d11b2a49fda8b7d453478faee6da6d40d10726c56541c878cd2b622f2376bd8bd99a9129722217faf4da1 languageName: node linkType: hard -"@mintlify/previewing@npm:4.0.605": - version: 4.0.605 - resolution: "@mintlify/previewing@npm:4.0.605" +"@mintlify/previewing@npm:4.0.608": + version: 4.0.608 + resolution: "@mintlify/previewing@npm:4.0.608" dependencies: - "@mintlify/common": 1.0.444 - "@mintlify/prebuild": 1.0.562 - "@mintlify/validation": 0.1.408 + "@mintlify/common": 1.0.447 + "@mintlify/prebuild": 1.0.565 + "@mintlify/validation": 0.1.411 better-opn: ^3.0.2 chalk: ^5.1.0 chokidar: ^3.5.3 @@ -2902,15 +2905,15 @@ __metadata: tar: ^6.1.15 unist-util-visit: ^4.1.1 yargs: ^17.6.0 - checksum: edcbef8f52cfefaf91b7ce5932dcf1de473cef56bae864dcb79448f872db5b1cff04245b08b4d61d99f2fbb37d530f00ea5fddc200d85a2bc84773b56fc202a6 + checksum: 33d8b8a24ae1feacc0c29ae439c2d5b1c3439dba081f80e427b4daafd6c9e9e8d0d0d9dfb81fe98b75d26b20bc0b358f0cf5be85c0e90fcde56cabbbc46a0f0c languageName: node linkType: hard -"@mintlify/scraping@npm:4.0.300": - version: 4.0.300 - resolution: "@mintlify/scraping@npm:4.0.300" +"@mintlify/scraping@npm:4.0.303": + version: 4.0.303 + resolution: "@mintlify/scraping@npm:4.0.303" dependencies: - "@mintlify/common": 1.0.444 + "@mintlify/common": 1.0.447 "@mintlify/openapi-parser": ^0.0.7 fs-extra: ^11.1.1 hast-util-to-mdast: ^10.1.0 @@ -2929,27 +2932,27 @@ __metadata: zod: ^3.20.6 bin: mintlify-scrape: bin/cli.js - checksum: 7fcb51ff8c791e8e8c77aae55f09df9f29ecad4fbc2a8a84788ef94dac3835e03be5d6ace9e127c3353066316d0a94569ebc02c35cceda07bace88ee5e175b76 + checksum: ffd2d43e9dae8c0bca7fbe508d57ebbba521ab17c304ea879313a82351809f37f346d1e5c833e4825ceb155797896661b101e0fb2c0fcc15952d50602d32744a languageName: node linkType: hard -"@mintlify/validation@npm:0.1.408": - version: 0.1.408 - resolution: "@mintlify/validation@npm:0.1.408" +"@mintlify/validation@npm:0.1.411": + version: 0.1.411 + resolution: "@mintlify/validation@npm:0.1.411" dependencies: - "@mintlify/models": 0.0.204 + "@mintlify/models": 0.0.206 lcm: ^0.0.3 lodash: ^4.17.21 openapi-types: ^12.0.0 zod: ^3.20.6 zod-to-json-schema: ^3.20.3 - checksum: c13566d89d962178442320d903241609d05c20a673ce79340a3e94d694727da2b80689f150de9d11766e4831344bcbaaa6e45fecda12a3eaa701d9774744f266 + checksum: d3e42351392a5a51c4c8e951687b1ab57df531a7bde3a746aad09e650b4e684b6e7ab2a82852078854f6cdead484c5e95056f3f04038dc26b52b423033e050bc languageName: node linkType: hard "@modelcontextprotocol/sdk@npm:^1.10.2, @modelcontextprotocol/sdk@npm:^1.12.1": - version: 1.15.0 - resolution: "@modelcontextprotocol/sdk@npm:1.15.0" + version: 1.15.1 + resolution: "@modelcontextprotocol/sdk@npm:1.15.1" dependencies: ajv: ^6.12.6 content-type: ^1.0.5 @@ -2963,7 +2966,7 @@ __metadata: raw-body: ^3.0.0 zod: ^3.23.8 zod-to-json-schema: ^3.24.1 - checksum: 3404310feb41482abc28678fc36416332e31b91f01408da35ec152a12b9bfb3c2819ddf6b3d52085d072ad89f99404f8e930ac281ba13a25d3ac350d4a6202df + checksum: ac4bf4ae76389d8b6a9c8b5ec4edf564f79b1da390165a9e762058c1e7314f91b2d5cc62be507e41a65053840dd18b66979feae8c76960b46f3770fa9946f720 languageName: node linkType: hard @@ -2982,13 +2985,13 @@ __metadata: linkType: hard "@napi-rs/wasm-runtime@npm:^0.2.11": - version: 0.2.11 - resolution: "@napi-rs/wasm-runtime@npm:0.2.11" + version: 0.2.12 + resolution: "@napi-rs/wasm-runtime@npm:0.2.12" dependencies: "@emnapi/core": ^1.4.3 "@emnapi/runtime": ^1.4.3 - "@tybys/wasm-util": ^0.9.0 - checksum: 7c614625784ab467cc7b36b4d7384854891469d0ddce8ca831d28b2abdf8cb3f014d8e8a181c98000719effb46950ab9134b245ab9a8044ad7a7da725b40f858 + "@tybys/wasm-util": ^0.10.0 + checksum: 676271082b2e356623faa1fefd552a82abb8c00f8218e333091851456c52c81686b98f77fcd119b9b2f4f215d924e4b23acd6401d9934157c80da17be783ec3d languageName: node linkType: hard @@ -3159,8 +3162,8 @@ __metadata: linkType: hard "@octokit/auth-app@npm:^8.0.1": - version: 8.0.1 - resolution: "@octokit/auth-app@npm:8.0.1" + version: 8.0.2 + resolution: "@octokit/auth-app@npm:8.0.2" dependencies: "@octokit/auth-oauth-app": ^9.0.1 "@octokit/auth-oauth-user": ^6.0.0 @@ -3170,7 +3173,7 @@ __metadata: toad-cache: ^3.7.0 universal-github-app-jwt: ^2.2.0 universal-user-agent: ^7.0.0 - checksum: ca7ede162bfec0602f3578775f81a5c2f2b8c691ec51ae619fb0943b23952da4842495147333d8938faef01fa1dcc43885df9da320140f774a110ded0042ddec + checksum: 9d28db60e81431bebcb59abdc74844aba4923dc6ac8731f444a06fd64334802d7c0414550357bef4c831da96a3541ccffec6be2c77da4fbd967575afae35188c languageName: node linkType: hard @@ -3230,8 +3233,8 @@ __metadata: linkType: hard "@octokit/core@npm:^7.0.2": - version: 7.0.2 - resolution: "@octokit/core@npm:7.0.2" + version: 7.0.3 + resolution: "@octokit/core@npm:7.0.3" dependencies: "@octokit/auth-token": ^6.0.0 "@octokit/graphql": ^9.0.1 @@ -3240,7 +3243,7 @@ __metadata: "@octokit/types": ^14.0.0 before-after-hook: ^4.0.0 universal-user-agent: ^7.0.0 - checksum: 569e65c7fc23518c5e058aad280b669f33a82fa9f4c26afa4481ed0488147ec779907b3cd0a333eda850b0127ab46dc0caeeb27fb72eca0ed60db23c30d75bf0 + checksum: c7ce57b38b18175ffc09a642a4d52716eb2e9f2071312b1d4a968104eebdc38e7f89f3d2a02980df1eea04b263d3666cfb1d8ec2a2db6148ad43a20ee4e0d6b0 languageName: node linkType: hard @@ -3412,13 +3415,13 @@ __metadata: linkType: hard "@octokit/webhooks@npm:^14.0.0, @octokit/webhooks@npm:^14.0.2": - version: 14.1.0 - resolution: "@octokit/webhooks@npm:14.1.0" + version: 14.1.1 + resolution: "@octokit/webhooks@npm:14.1.1" dependencies: "@octokit/openapi-webhooks-types": 12.0.3 "@octokit/request-error": ^7.0.0 "@octokit/webhooks-methods": ^6.0.0 - checksum: 5ff07b7ffa698de253ddcfe49537c23ecfe4fecf54849ac261ffb1454a0c6f5eae4c0060e59bec68933e439e7e321def6e49213a33e6a7c7bb77ed6b926ce784 + checksum: 2dd4fa28821fcf74da8ab47cace3048bea58ae7b50f8411d2cdee424b78021f82e8deec771eeac5fb05d6d4c1fa981fa2792992bedf4c48a33d7a1fc8aabfcc2 languageName: node linkType: hard @@ -3489,6 +3492,7 @@ __metadata: typescript: ~5.7.2 typescript-eslint: ^8.22.0 uuid: ^11.0.5 + vitest: ^3.2.3 zod: ^3.25.32 languageName: unknown linkType: soft @@ -4603,6 +4607,146 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.44.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-android-arm64@npm:4.44.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-darwin-arm64@npm:4.44.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-darwin-x64@npm:4.44.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.44.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-freebsd-x64@npm:4.44.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.44.2" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.44.2" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.44.2" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.44.2" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loongarch64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.44.2" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.44.2" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.44.2" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.44.2" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.44.2" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.44.2" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.44.2" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.44.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.44.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.44.2": + version: 4.44.2 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.44.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -5215,6 +5359,15 @@ __metadata: languageName: node linkType: hard +"@tybys/wasm-util@npm:^0.10.0": + version: 0.10.0 + resolution: "@tybys/wasm-util@npm:0.10.0" + dependencies: + tslib: ^2.4.0 + checksum: c3034e0535b91f28dc74c72fc538f353cda0fa9107bb313e8b89f101402b7dc8e400442d07560775cdd7cb63d33549867ed776372fbaa41dc68bcd108e5cff8a + languageName: node + linkType: hard + "@tybys/wasm-util@npm:^0.9.0": version: 0.9.0 resolution: "@tybys/wasm-util@npm:0.9.0" @@ -5272,6 +5425,15 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^5.2.2": + version: 5.2.2 + resolution: "@types/chai@npm:5.2.2" + dependencies: + "@types/deep-eql": "*" + checksum: 386887bd55ba684572cececd833ed91aba6cce2edd8cc1d8cefa78800b3a74db6dbf5c5c41af041d1d1f3ce672ea30b45c9520f948cdc75431eb7df3fbba8405 + languageName: node + linkType: hard + "@types/cookie@npm:^0.6.0": version: 0.6.0 resolution: "@types/cookie@npm:0.6.0" @@ -5366,6 +5528,13 @@ __metadata: languageName: node linkType: hard +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 249a27b0bb22f6aa28461db56afa21ec044fa0e303221a62dff81831b20c8530502175f1a49060f7099e7be06181078548ac47c668de79ff9880241968d43d0c + languageName: node + linkType: hard + "@types/es-aggregate-error@npm:^1.0.2": version: 1.0.6 resolution: "@types/es-aggregate-error@npm:1.0.6" @@ -5384,7 +5553,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": +"@types/estree@npm:*, @types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 @@ -5530,30 +5699,21 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=13.7.0": - version: 24.0.11 - resolution: "@types/node@npm:24.0.11" +"@types/node@npm:*, @types/node@npm:>=10.0.0, @types/node@npm:>=13.7.0": + version: 24.0.13 + resolution: "@types/node@npm:24.0.13" dependencies: undici-types: ~7.8.0 - checksum: c674ca541b3e112595783fee52b48219b1442d3fbc5bb8c2d922148718b099a9cb19b0698ac48d0bcbfc0b98073d27226c11add1408f5eb459a5d9dea2803385 - languageName: node - linkType: hard - -"@types/node@npm:>=10.0.0": - version: 24.0.12 - resolution: "@types/node@npm:24.0.12" - dependencies: - undici-types: ~7.8.0 - checksum: fad1d824df644492f85fc1d29ae500672703145a1599ab59b48897a6fb868ed5065eb74c48027ac9ec68b2ad9557fe214a959884abc6e4cd82dbd85a7eb33b68 + checksum: a98c3c7979e3c17e2853af4b5c4adfb0cbeaf3747a85bc349048ec068cf16d2a96186e005b76ad05f8f533f9b067f499e45ff0296dab0111297af634f71c792c languageName: node linkType: hard "@types/node@npm:^22.13.5": - version: 22.16.1 - resolution: "@types/node@npm:22.16.1" + version: 22.16.3 + resolution: "@types/node@npm:22.16.3" dependencies: undici-types: ~6.21.0 - checksum: 85a487762b67ff6ec49bf74b2ec33f4f7e471a7446408c0923c697c69cf0416be1538e0bc6ec284d89b31353dbd0029de110dacdbe4de02b4c3cc6ab827a859d + checksum: f37674ff0141380e41bde4a44776185df69757b17d94a7b05ed4c0d003b86239a3d640f1b65c9dcca5f9ba289f14fa2f3ed7ab8298b5538747d07f11da7e1bdc languageName: node linkType: hard @@ -5833,141 +5993,224 @@ __metadata: languageName: node linkType: hard -"@unrs/resolver-binding-android-arm-eabi@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.0" +"@unrs/resolver-binding-android-arm-eabi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm-eabi@npm:1.11.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-android-arm64@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.0" +"@unrs/resolver-binding-android-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-android-arm64@npm:1.11.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-arm64@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.0" +"@unrs/resolver-binding-darwin-arm64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-arm64@npm:1.11.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-darwin-x64@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.0" +"@unrs/resolver-binding-darwin-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-darwin-x64@npm:1.11.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-freebsd-x64@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.0" +"@unrs/resolver-binding-freebsd-x64@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-freebsd-x64@npm:1.11.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.0" +"@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-gnueabihf@npm:1.11.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.0" +"@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm-musleabihf@npm:1.11.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.0" +"@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-gnu@npm:1.11.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.0" +"@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-arm64-musl@npm:1.11.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.0" +"@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-ppc64-gnu@npm:1.11.1" conditions: os=linux & cpu=ppc64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.0" +"@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-gnu@npm:1.11.1" conditions: os=linux & cpu=riscv64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.0" +"@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-riscv64-musl@npm:1.11.1" conditions: os=linux & cpu=riscv64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.0" +"@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-s390x-gnu@npm:1.11.1" conditions: os=linux & cpu=s390x & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.0" +"@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-gnu@npm:1.11.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@unrs/resolver-binding-linux-x64-musl@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.0" +"@unrs/resolver-binding-linux-x64-musl@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-linux-x64-musl@npm:1.11.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@unrs/resolver-binding-wasm32-wasi@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.0" +"@unrs/resolver-binding-wasm32-wasi@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-wasm32-wasi@npm:1.11.1" dependencies: "@napi-rs/wasm-runtime": ^0.2.11 conditions: cpu=wasm32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.0" +"@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-arm64-msvc@npm:1.11.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.0" +"@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-ia32-msvc@npm:1.11.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.0": - version: 1.11.0 - resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.0" +"@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1": + version: 1.11.1 + resolution: "@unrs/resolver-binding-win32-x64-msvc@npm:1.11.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" + dependencies: + "@types/chai": ^5.2.2 + "@vitest/spy": 3.2.4 + "@vitest/utils": 3.2.4 + chai: ^5.2.0 + tinyrainbow: ^2.0.0 + checksum: 57627ee2b47555f47a15843fda05267816e9767e5a769179acac224b8682844e662fa77fbeeb04adcb0874779f3aca861f54e9fc630c1d256d5ea8211c223120 + languageName: node + linkType: hard + +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" + dependencies: + "@vitest/spy": 3.2.4 + estree-walker: ^3.0.3 + magic-string: ^0.30.17 + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 2c8ba286fc714036b645a7a72bfbbd6b243baa65320dd71009f5ed1115f70f69c0209e2e213a05202c172e09a408821a33f9df5bc7979900e91cde5d302976e0 + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" + dependencies: + tinyrainbow: ^2.0.0 + checksum: 68a196e4bdfce6fd03c3958b76cddb71bec65a62ab5aff05ba743a44853b03a95c2809b4e5733d21abff25c4d070dd64f60c81ac973a9fd21a840ff8f8a8d184 + languageName: node + linkType: hard + +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" + dependencies: + "@vitest/utils": 3.2.4 + pathe: ^2.0.3 + strip-literal: ^3.0.0 + checksum: c8b08365818f408eec2fe3acbffa0cc7279939a43c02074cd03b853fa37bc68aa181c8f8c2175513a4c5aa4dd3e52a0573d5897a16846d55b2ff4f3577e6c7c8 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" + dependencies: + "@vitest/pretty-format": 3.2.4 + magic-string: ^0.30.17 + pathe: ^2.0.3 + checksum: 2f00fb83d5c9ed1f2a79323db3993403bd34265314846cb1bcf1cb9b68f56dfde5ee5a4a8dcb6d95317835bc203662e333da6841e50800c6707e0d22e48ebe6e + languageName: node + linkType: hard + +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" + dependencies: + tinyspy: ^4.0.3 + checksum: 0e3b591e0c67275b747c5aa67946d6496cd6759dd9b8e05c524426207ca9631fe2cae8ac85a8ba22acec4a593393cd97d825f88a42597fc65441f0b633986f49 + languageName: node + linkType: hard + +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" + dependencies: + "@vitest/pretty-format": 3.2.4 + loupe: ^3.1.4 + tinyrainbow: ^2.0.0 + checksum: 6b0fd0075c23b8e3f17ecf315adc1e565e5a9e7d1b8ad78bbccf2505e399855d176254d974587c00bc4396a0e348bae1380e780a1e7f6b97ea6399a9ab665ba7 + languageName: node + linkType: hard + "abbrev@npm:^3.0.0": version: 3.0.1 resolution: "abbrev@npm:3.0.1" @@ -6344,6 +6587,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: a0789dd882211b87116e81e2648ccb7f60340b34f19877dd020b39ebb4714e475eb943e14ba3e22201c221ef6645b7bfe10297e76b6ac95b48a9898c1211ce66 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.8": version: 0.0.8 resolution: "ast-types-flow@npm:0.0.8" @@ -6839,6 +7089,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^19.0.1": version: 19.0.1 resolution: "cacache@npm:19.0.1" @@ -6948,6 +7205,19 @@ __metadata: languageName: node linkType: hard +"chai@npm:^5.2.0": + version: 5.2.1 + resolution: "chai@npm:5.2.1" + dependencies: + assertion-error: ^2.0.1 + check-error: ^2.1.1 + deep-eql: ^5.0.1 + loupe: ^3.1.0 + pathval: ^2.0.0 + checksum: 15e2923de73bc4a361fa016b3322c8258c1ec7a33794f6dfa8000b4cd7fb64521363e59fcf08b90b9dd2d787b25ac9e2420535ce31c530501296d4bc03b48576 + languageName: node + linkType: hard + "chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -7028,6 +7298,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^2.1.1": + version: 2.1.1 + resolution: "check-error@npm:2.1.1" + checksum: d785ed17b1d4a4796b6e75c765a9a290098cf52ff9728ce0756e8ffd4293d2e419dd30c67200aee34202463b474306913f2fcfaf1890641026d9fc6966fea27a + languageName: node + linkType: hard + "chokidar@npm:^3.5.3": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -7721,7 +7998,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.4.0": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.4.0, debug@npm:^4.4.1": version: 4.4.1 resolution: "debug@npm:4.4.1" dependencies: @@ -7798,6 +8075,13 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^5.0.1": + version: 5.0.2 + resolution: "deep-eql@npm:5.0.2" + checksum: 6aaaadb4c19cbce42e26b2bbe5bd92875f599d2602635dc97f0294bae48da79e89470aedee05f449e0ca8c65e9fd7e7872624d1933a1db02713d99c2ca8d1f24 + languageName: node + linkType: hard + "deep-is@npm:^0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -8100,9 +8384,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.5.173": - version: 1.5.180 - resolution: "electron-to-chromium@npm:1.5.180" - checksum: 52f5a42dec005c56d6894f1570136bf5f163e5e61a7e4414631a010c81eb24ff8e5c3a7c335e03bd87587cd73a3ca751f66a1d125e4e648ded0cae9404dc019a + version: 1.5.182 + resolution: "electron-to-chromium@npm:1.5.182" + checksum: 7c698db2733aea35cc76b3914af73ee46e4fe47009100a58e18313fca0b1179ddda3c37166354895765a918a2984cec2e18d4652c2f7b51dd76268ca84b718d3 languageName: node linkType: hard @@ -8360,6 +8644,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 7858bb76ae387fdbf8a6fccc951bf18919768309850587553eca34698b9193fbc65fab03d3d9f69163d860321fbf66adf89d5821e7f4148c7cb7d7b997259211 + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -8820,16 +9111,16 @@ __metadata: linkType: hard "eslint@npm:^9.19.0": - version: 9.30.1 - resolution: "eslint@npm:9.30.1" + version: 9.31.0 + resolution: "eslint@npm:9.31.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.12.1 "@eslint/config-array": ^0.21.0 "@eslint/config-helpers": ^0.3.0 - "@eslint/core": ^0.14.0 + "@eslint/core": ^0.15.0 "@eslint/eslintrc": ^3.3.1 - "@eslint/js": 9.30.1 + "@eslint/js": 9.31.0 "@eslint/plugin-kit": ^0.3.1 "@humanfs/node": ^0.16.6 "@humanwhocodes/module-importer": ^1.0.1 @@ -8865,7 +9156,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: e6723b98ba19ff17cf0cacb29c3c0ea5c7c6b6fb648136b2d009e7e2da4980a2562c9523623b0faf449750e890f3b274b20bee11fa9c8f43362d235485ba2f91 + checksum: 7273c0b04d648f1e2e660f93c6b10a1e94020b056380cf2c756dbf07b0bce29ca10fb658f5124e90b16a2e9627b2d591063d5e4b02f3f939f782b880b4fd3cec languageName: node linkType: hard @@ -9095,6 +9386,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.1": + version: 1.2.2 + resolution: "expect-type@npm:1.2.2" + checksum: dc347e853b059f95f3c897db2a6f5eab37662e7a0c3c9fcf014f25afa90fca76e5235246fd37e08f2c0535901b52f66b8ace1e0ee236673c4f70c36724bd3f42 + languageName: node + linkType: hard + "expect@npm:^29.0.0, expect@npm:^29.7.0": version: 29.7.0 resolution: "expect@npm:29.7.0" @@ -9412,7 +9710,7 @@ __metadata: languageName: node linkType: hard -"fdir@npm:^6.2.0, fdir@npm:^6.4.4": +"fdir@npm:^6.2.0, fdir@npm:^6.4.4, fdir@npm:^6.4.6": version: 6.4.6 resolution: "fdir@npm:6.4.6" peerDependencies: @@ -9639,11 +9937,11 @@ __metadata: linkType: hard "framer-motion@npm:^12.4.9": - version: 12.23.0 - resolution: "framer-motion@npm:12.23.0" + version: 12.23.3 + resolution: "framer-motion@npm:12.23.3" dependencies: - motion-dom: ^12.22.0 - motion-utils: ^12.19.0 + motion-dom: ^12.23.2 + motion-utils: ^12.23.2 tslib: ^2.4.0 peerDependencies: "@emotion/is-prop-valid": "*" @@ -9656,7 +9954,7 @@ __metadata: optional: true react-dom: optional: true - checksum: 0f5f18bc66b11f6d9b7b294cf7723479f0a313d1afcbab54786ed25e40da49734f53b960a4abe95d08b138736f84c11cacd007113adf755217b6a6200d49ad78 + checksum: 26f9eba8df649dbc9091b7268c47ef2d368f2a7ffd57584181cb20f88090a3ce73533055d01bade4b08e981a09c9f64cdd1bebd63506e02ce08db4fd837a1743 languageName: node linkType: hard @@ -11870,6 +12168,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^9.0.1": + version: 9.0.1 + resolution: "js-tokens@npm:9.0.1" + checksum: 8b604020b1a550e575404bfdde4d12c11a7991ffe0c58a2cf3515b9a512992dc7010af788f0d8b7485e403d462d9e3d3b96c4ff03201550fdbb09e17c811e054 + languageName: node + linkType: hard + "js-yaml@npm:^3.13.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -12194,8 +12499,8 @@ __metadata: linkType: hard "langsmith@npm:^0.3.29, langsmith@npm:^0.3.33": - version: 0.3.40 - resolution: "langsmith@npm:0.3.40" + version: 0.3.43 + resolution: "langsmith@npm:0.3.43" dependencies: "@types/uuid": ^10.0.0 chalk: ^4.1.2 @@ -12218,7 +12523,7 @@ __metadata: optional: true openai: optional: true - checksum: 41b248a0ee1d9cb759b4ee3f5dfee2f1176aca71b1d91d6e4b2956684164b13b1c03e0e32029ec9474f32d8f454c3533486476630394a68465c501bd3a0dff0d + checksum: 23a1234f82b9100a2f23d9aebae3556f9b296653313e9efff25aa676f008c6712c4014d825dd85e03d50e4a60f2c03b1832e8b5c0053d3dc434d5d91963e1280 languageName: node linkType: hard @@ -12546,6 +12851,13 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^3.1.0, loupe@npm:^3.1.4": + version: 3.1.4 + resolution: "loupe@npm:3.1.4" + checksum: 42d109ed061579752bd1e659f98357132254147fdd8d8c95b81ba35d63e1844946b1bcf34cefa01c467da84522b546818996c71e89eb6a2177bc8aafba5b9c6d + languageName: node + linkType: hard + "lowercase-keys@npm:^3.0.0": version: 3.0.0 resolution: "lowercase-keys@npm:3.0.0" @@ -13657,14 +13969,14 @@ __metadata: linkType: hard "mint@npm:^4.2.12": - version: 4.2.12 - resolution: "mint@npm:4.2.12" + version: 4.2.15 + resolution: "mint@npm:4.2.15" dependencies: - "@mintlify/cli": 4.0.616 + "@mintlify/cli": 4.0.619 bin: mint: index.js mintlify: index.js - checksum: ef91e772be43c929515ff554b68ce58210537fce39356c38e1d1938edfe2e17ef1654b9b0279079797148ad31f029826206161b6a36938894653f67e2f0f0ba6 + checksum: ed429edccb2f1e540808309d3465a7526fa643d50d9e63e7fe384cd10f3a0a660b23b2870fc4f50fdf5c8b7476cb26a569897d386a78f502e82a0b10b7696269 languageName: node linkType: hard @@ -13702,19 +14014,19 @@ __metadata: languageName: node linkType: hard -"motion-dom@npm:^12.22.0": - version: 12.22.0 - resolution: "motion-dom@npm:12.22.0" +"motion-dom@npm:^12.23.2": + version: 12.23.2 + resolution: "motion-dom@npm:12.23.2" dependencies: - motion-utils: ^12.19.0 - checksum: c632fe2a1d75d57ac261a6d36c84c1bb7fd3ae34241256f9a84ee148420d60bd7919e1ec15fe7828ff7718400aa0b2be96a2bc230a621eb6777b2d28d74090be + motion-utils: ^12.23.2 + checksum: 27c85c5e7f7db44c74b2caebe2023e897ec98453b6add0d361df6139fbb01b8e4591f0098d652531ab2f42e4b767035321590e58e1c625375e903ce2b5933f2e languageName: node linkType: hard -"motion-utils@npm:^12.19.0": - version: 12.19.0 - resolution: "motion-utils@npm:12.19.0" - checksum: f0e6a10b0fbc65db10d537c91dd2dd2928fadedd9c45f69c24f2be9d5123e200e109467580d248fb6b4d983877377e0cec8aa8cc167a4c0416679ea6648f4db5 +"motion-utils@npm:^12.23.2": + version: 12.23.2 + resolution: "motion-utils@npm:12.23.2" + checksum: 3667e667f159ed6a7dc14d659c1269028d4ca3ead3d39811048dfe61992394aa1b2c3e10ab690d9d3b0b1aedb8dba1415958a9b53cda62bad509f286c7800117 languageName: node linkType: hard @@ -14330,8 +14642,8 @@ __metadata: linkType: hard "openai@npm:^5.3.0": - version: 5.8.3 - resolution: "openai@npm:5.8.3" + version: 5.9.0 + resolution: "openai@npm:5.9.0" peerDependencies: ws: ^8.18.0 zod: ^3.23.8 @@ -14342,7 +14654,7 @@ __metadata: optional: true bin: openai: bin/cli - checksum: df65f6ca6f48f6e5e6c64ddce60550f005265aa30862e29822a2edf0ea8c61b08ff33f87807b9be3fa4964b4065fcad87385b883cdae0779e54ef2484e4485f5 + checksum: 5693621548c1ecb0f9f6762bed50ed03dbdb18fdedc0d8b9b3c2a3278037895a677cd51069ebc33bb5723ca8ee708792ab14bac6a4b736d5379f7db9e09de4c0 languageName: node linkType: hard @@ -14772,6 +15084,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 0602bdd4acb54d91044e0c56f1fb63467ae7d44ab3afea1f797947b0eb2b4d1d91cf0d58d065fdb0a8ab0c4acbbd8d3a5b424983eaf10dd5285d37a16f6e3ee9 + languageName: node + linkType: hard + +"pathval@npm:^2.0.0": + version: 2.0.1 + resolution: "pathval@npm:2.0.1" + checksum: 280e71cfd86bb5d7ff371fe2752997e5fa82901fcb209abf19d4457b7814f1b4a17845dfb17bd28a596ccdb0ecea178720ce23dacfa9c841f37804b700647810 + languageName: node + linkType: hard + "pend@npm:~1.2.0": version: 1.2.0 resolution: "pend@npm:1.2.0" @@ -14927,7 +15253,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.4.24, postcss@npm:^8.4.41, postcss@npm:^8.5.1, postcss@npm:^8.5.3": +"postcss@npm:^8.4.24, postcss@npm:^8.4.41, postcss@npm:^8.5.1, postcss@npm:^8.5.3, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -14955,10 +15281,12 @@ __metadata: linkType: hard "prettier-plugin-tailwindcss@npm:^0.6.11": - version: 0.6.13 - resolution: "prettier-plugin-tailwindcss@npm:0.6.13" + version: 0.6.14 + resolution: "prettier-plugin-tailwindcss@npm:0.6.14" peerDependencies: "@ianvs/prettier-plugin-sort-imports": "*" + "@prettier/plugin-hermes": "*" + "@prettier/plugin-oxc": "*" "@prettier/plugin-pug": "*" "@shopify/prettier-plugin-liquid": "*" "@trivago/prettier-plugin-sort-imports": "*" @@ -14978,6 +15306,10 @@ __metadata: peerDependenciesMeta: "@ianvs/prettier-plugin-sort-imports": optional: true + "@prettier/plugin-hermes": + optional: true + "@prettier/plugin-oxc": + optional: true "@prettier/plugin-pug": optional: true "@shopify/prettier-plugin-liquid": @@ -15008,7 +15340,7 @@ __metadata: optional: true prettier-plugin-svelte: optional: true - checksum: 243ba6ca057c3e3a3a6be289151ada6adc8c35827a376efe702f724e9e41e5924200e31b8ee657fdb7841d4b46afcff001a329ca28403632856c7b51117b66d5 + checksum: 2196fbebe8a4192fa142aa4ff3d72e6b0c88b79bfce70e3416e67b22a4cbc2c9cf403f0fcc4b3e97a349ff82efa3b0c49547d5fe4ad9ade624fe506e02b51661 languageName: node linkType: hard @@ -16035,6 +16367,81 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.40.0": + version: 4.44.2 + resolution: "rollup@npm:4.44.2" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.44.2 + "@rollup/rollup-android-arm64": 4.44.2 + "@rollup/rollup-darwin-arm64": 4.44.2 + "@rollup/rollup-darwin-x64": 4.44.2 + "@rollup/rollup-freebsd-arm64": 4.44.2 + "@rollup/rollup-freebsd-x64": 4.44.2 + "@rollup/rollup-linux-arm-gnueabihf": 4.44.2 + "@rollup/rollup-linux-arm-musleabihf": 4.44.2 + "@rollup/rollup-linux-arm64-gnu": 4.44.2 + "@rollup/rollup-linux-arm64-musl": 4.44.2 + "@rollup/rollup-linux-loongarch64-gnu": 4.44.2 + "@rollup/rollup-linux-powerpc64le-gnu": 4.44.2 + "@rollup/rollup-linux-riscv64-gnu": 4.44.2 + "@rollup/rollup-linux-riscv64-musl": 4.44.2 + "@rollup/rollup-linux-s390x-gnu": 4.44.2 + "@rollup/rollup-linux-x64-gnu": 4.44.2 + "@rollup/rollup-linux-x64-musl": 4.44.2 + "@rollup/rollup-win32-arm64-msvc": 4.44.2 + "@rollup/rollup-win32-ia32-msvc": 4.44.2 + "@rollup/rollup-win32-x64-msvc": 4.44.2 + "@types/estree": 1.0.8 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loongarch64-gnu": + optional: true + "@rollup/rollup-linux-powerpc64le-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: f37e154b0cf803819ea8937f3f9ddf608438aa011891a4990bb7bcaac03587a3cd5a4657114f7b24ca71dcd2d96c4e00cf8f76ea56b8fb26a3b9d95e49e4f0bb + languageName: node + linkType: hard + "router@npm:^2.2.0": version: 2.2.0 resolution: "router@npm:2.2.0" @@ -16314,8 +16721,8 @@ __metadata: linkType: hard "shadcn@npm:^2.6.1": - version: 2.8.0 - resolution: "shadcn@npm:2.8.0" + version: 2.9.0 + resolution: "shadcn@npm:2.9.0" dependencies: "@antfu/ni": ^23.2.0 "@babel/core": ^7.22.1 @@ -16344,7 +16751,7 @@ __metadata: zod-to-json-schema: ^3.24.5 bin: shadcn: dist/index.js - checksum: 260c0eb464c7ae2820b61381507fb34eb4e514d324dfa1f8a8245db5cced2601f2f5e90540f009ee0869221194ac9d330eceded811a371a89d94196b8a15e6a3 + checksum: 26c14c1acf0391df022ac8163f48a1ff9ffdbbf13e0ae21676247cd5343e58f325f6558703b8a6433f93482c531a0008ed8d2e8562aa7f21b4521b3ea97778c2 languageName: node linkType: hard @@ -16418,30 +16825,31 @@ __metadata: linkType: hard "sharp@npm:^0.34.1": - version: 0.34.2 - resolution: "sharp@npm:0.34.2" + version: 0.34.3 + resolution: "sharp@npm:0.34.3" dependencies: - "@img/sharp-darwin-arm64": 0.34.2 - "@img/sharp-darwin-x64": 0.34.2 - "@img/sharp-libvips-darwin-arm64": 1.1.0 - "@img/sharp-libvips-darwin-x64": 1.1.0 - "@img/sharp-libvips-linux-arm": 1.1.0 - "@img/sharp-libvips-linux-arm64": 1.1.0 - "@img/sharp-libvips-linux-ppc64": 1.1.0 - "@img/sharp-libvips-linux-s390x": 1.1.0 - "@img/sharp-libvips-linux-x64": 1.1.0 - "@img/sharp-libvips-linuxmusl-arm64": 1.1.0 - "@img/sharp-libvips-linuxmusl-x64": 1.1.0 - "@img/sharp-linux-arm": 0.34.2 - "@img/sharp-linux-arm64": 0.34.2 - "@img/sharp-linux-s390x": 0.34.2 - "@img/sharp-linux-x64": 0.34.2 - "@img/sharp-linuxmusl-arm64": 0.34.2 - "@img/sharp-linuxmusl-x64": 0.34.2 - "@img/sharp-wasm32": 0.34.2 - "@img/sharp-win32-arm64": 0.34.2 - "@img/sharp-win32-ia32": 0.34.2 - "@img/sharp-win32-x64": 0.34.2 + "@img/sharp-darwin-arm64": 0.34.3 + "@img/sharp-darwin-x64": 0.34.3 + "@img/sharp-libvips-darwin-arm64": 1.2.0 + "@img/sharp-libvips-darwin-x64": 1.2.0 + "@img/sharp-libvips-linux-arm": 1.2.0 + "@img/sharp-libvips-linux-arm64": 1.2.0 + "@img/sharp-libvips-linux-ppc64": 1.2.0 + "@img/sharp-libvips-linux-s390x": 1.2.0 + "@img/sharp-libvips-linux-x64": 1.2.0 + "@img/sharp-libvips-linuxmusl-arm64": 1.2.0 + "@img/sharp-libvips-linuxmusl-x64": 1.2.0 + "@img/sharp-linux-arm": 0.34.3 + "@img/sharp-linux-arm64": 0.34.3 + "@img/sharp-linux-ppc64": 0.34.3 + "@img/sharp-linux-s390x": 0.34.3 + "@img/sharp-linux-x64": 0.34.3 + "@img/sharp-linuxmusl-arm64": 0.34.3 + "@img/sharp-linuxmusl-x64": 0.34.3 + "@img/sharp-wasm32": 0.34.3 + "@img/sharp-win32-arm64": 0.34.3 + "@img/sharp-win32-ia32": 0.34.3 + "@img/sharp-win32-x64": 0.34.3 color: ^4.2.3 detect-libc: ^2.0.4 semver: ^7.7.2 @@ -16472,6 +16880,8 @@ __metadata: optional: true "@img/sharp-linux-arm64": optional: true + "@img/sharp-linux-ppc64": + optional: true "@img/sharp-linux-s390x": optional: true "@img/sharp-linux-x64": @@ -16488,7 +16898,7 @@ __metadata: optional: true "@img/sharp-win32-x64": optional: true - checksum: beb34afe75cc6492fc7e6331efebfa11a0f92bf0f54ac850bf4c93ab48ab4152103cf096a892802bacca7c8102b721312b098bfdda16a4bf6c95716dabb28a16 + checksum: f1d70751ab15080957f1a5db5583d00b002e644878e3e9a6d00bdbb31255f6e9df218ef82d96d3588b83023681f35bcf03e265a44e214b11306ef3fb439ac04d languageName: node linkType: hard @@ -16572,6 +16982,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -16699,12 +17116,12 @@ __metadata: linkType: hard "socks@npm:^2.8.3": - version: 2.8.5 - resolution: "socks@npm:2.8.5" + version: 2.8.6 + resolution: "socks@npm:2.8.6" dependencies: ip-address: ^9.0.5 smart-buffer: ^4.2.0 - checksum: d39a77a8c91cfacafc75c67dba45925eccfd884a8a4a68dcda6fb9ab7f37de6e250bb6db3721e8a16a066a8e1ebe872d4affc26f3eb763f4befedcc7b733b7ed + checksum: 3d2a696d42d94b05b2a7e797b9291483d6768b23300b015353f34f8046cce35f23fe59300a38a77a9f0dee4274dd6c333afbdef628cf48f3df171bfb86c2d21c languageName: node linkType: hard @@ -16809,6 +17226,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + "stacktrace-parser@npm:^0.1.10": version: 0.1.11 resolution: "stacktrace-parser@npm:0.1.11" @@ -16832,6 +17256,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.9.0": + version: 3.9.0 + resolution: "std-env@npm:3.9.0" + checksum: d40126e4a650f6e5456711e6c297420352a376ef99a9599e8224d2d8f2ff2b91a954f3264fcef888d94fce5c9ae14992c5569761c95556fc87248ce4602ed212 + languageName: node + linkType: hard + "stdin-discarder@npm:^0.1.0": version: 0.1.0 resolution: "stdin-discarder@npm:0.1.0" @@ -17106,6 +17537,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-literal@npm:3.0.0" + dependencies: + js-tokens: ^9.0.1 + checksum: f697a31c4ad82ad259e0c57e715cde4585084af2260e38b3c916f34f0d462cec2af294a8b8cf062cc6f40d940ece7b79b0ec8316beabb2ed13c6e13e95ca70f0 + languageName: node + linkType: hard + "strnum@npm:^1.1.1": version: 1.1.2 resolution: "strnum@npm:1.1.2" @@ -17331,7 +17771,21 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13": +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 1ab00d7dfe0d1f127cbf00822bacd9024f7a50a3ecd1f354a8168e0b7d2b53a639a24414e707c27879d1adc0f5153141d51d76ebd7b4d37fe245e742e5d91fe8 + languageName: node + linkType: hard + +"tinyexec@npm:^0.3.2": + version: 0.3.2 + resolution: "tinyexec@npm:0.3.2" + checksum: bd491923020610bdeadb0d8cf5d70e7cbad5a3201620fd01048c9bf3b31ffaa75c33254e1540e13b993ce4e8187852b0b5a93057bb598e7a57afa2ca2048a35c + languageName: node + linkType: hard + +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13, tinyglobby@npm:^0.2.14": version: 0.2.14 resolution: "tinyglobby@npm:0.2.14" dependencies: @@ -17341,6 +17795,27 @@ __metadata: languageName: node linkType: hard +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 0258abe108df8be395a2cbdc8b4390c94908850250530f7bea83a129fa33d49a8c93246f76bf81cd458534abd81322f4d4cb3a40690254f8d9044ff449f328a8 + languageName: node + linkType: hard + +"tinyrainbow@npm:^2.0.0": + version: 2.0.0 + resolution: "tinyrainbow@npm:2.0.0" + checksum: 26360631d97e43955a07cfb70fe40a154ce4e2bcd14fa3d37ce8e2ed8f4fa9e5ba00783e4906bbfefe6dcabef5d3510f5bee207cb693bee4e4e7553f5454bef1 + languageName: node + linkType: hard + +"tinyspy@npm:^4.0.3": + version: 4.0.3 + resolution: "tinyspy@npm:4.0.3" + checksum: cd5e52d09e2a67946d3a96e6cd68377e1281eb6aaddc9d38129bcec8971a55337ab438ac672857b983f5c620a9f978e784679054322155329d483d00d9291ba9 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -18056,28 +18531,28 @@ __metadata: linkType: hard "unrs-resolver@npm:^1.6.2": - version: 1.11.0 - resolution: "unrs-resolver@npm:1.11.0" + version: 1.11.1 + resolution: "unrs-resolver@npm:1.11.1" dependencies: - "@unrs/resolver-binding-android-arm-eabi": 1.11.0 - "@unrs/resolver-binding-android-arm64": 1.11.0 - "@unrs/resolver-binding-darwin-arm64": 1.11.0 - "@unrs/resolver-binding-darwin-x64": 1.11.0 - "@unrs/resolver-binding-freebsd-x64": 1.11.0 - "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.0 - "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.0 - "@unrs/resolver-binding-linux-arm64-gnu": 1.11.0 - "@unrs/resolver-binding-linux-arm64-musl": 1.11.0 - "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.0 - "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.0 - "@unrs/resolver-binding-linux-riscv64-musl": 1.11.0 - "@unrs/resolver-binding-linux-s390x-gnu": 1.11.0 - "@unrs/resolver-binding-linux-x64-gnu": 1.11.0 - "@unrs/resolver-binding-linux-x64-musl": 1.11.0 - "@unrs/resolver-binding-wasm32-wasi": 1.11.0 - "@unrs/resolver-binding-win32-arm64-msvc": 1.11.0 - "@unrs/resolver-binding-win32-ia32-msvc": 1.11.0 - "@unrs/resolver-binding-win32-x64-msvc": 1.11.0 + "@unrs/resolver-binding-android-arm-eabi": 1.11.1 + "@unrs/resolver-binding-android-arm64": 1.11.1 + "@unrs/resolver-binding-darwin-arm64": 1.11.1 + "@unrs/resolver-binding-darwin-x64": 1.11.1 + "@unrs/resolver-binding-freebsd-x64": 1.11.1 + "@unrs/resolver-binding-linux-arm-gnueabihf": 1.11.1 + "@unrs/resolver-binding-linux-arm-musleabihf": 1.11.1 + "@unrs/resolver-binding-linux-arm64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-arm64-musl": 1.11.1 + "@unrs/resolver-binding-linux-ppc64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-riscv64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-riscv64-musl": 1.11.1 + "@unrs/resolver-binding-linux-s390x-gnu": 1.11.1 + "@unrs/resolver-binding-linux-x64-gnu": 1.11.1 + "@unrs/resolver-binding-linux-x64-musl": 1.11.1 + "@unrs/resolver-binding-wasm32-wasi": 1.11.1 + "@unrs/resolver-binding-win32-arm64-msvc": 1.11.1 + "@unrs/resolver-binding-win32-ia32-msvc": 1.11.1 + "@unrs/resolver-binding-win32-x64-msvc": 1.11.1 napi-postinstall: ^0.3.0 dependenciesMeta: "@unrs/resolver-binding-android-arm-eabi": @@ -18118,7 +18593,7 @@ __metadata: optional: true "@unrs/resolver-binding-win32-x64-msvc": optional: true - checksum: 368a5259761fa22a0c039f504fcaf3b4ee1810f7addcaf2ffd52bafb420e98cd8a0f904f006fa3887fb78f1cbf02a714490da33bc8901cbd5115d704fb7e9912 + checksum: 10f829c06c30d041eaf6a8a7fd59268f1cad5b723f1399f1ec64f0d79be2809f6218209d06eab32a3d0fcd7d56034874f3a3f95292fdb53fa1f8279de8fcb0c5 languageName: node linkType: hard @@ -18346,6 +18821,132 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" + dependencies: + cac: ^6.7.14 + debug: ^4.4.1 + es-module-lexer: ^1.7.0 + pathe: ^2.0.3 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + bin: + vite-node: vite-node.mjs + checksum: 2051394d48f5eefdee4afc9c5fd5dcbf7eb36d345043ba035c7782e10b33fbbd14318062c4e32e00d473a31a559fb628d67c023e82a4903016db3ac6bfdb3fe7 + languageName: node + linkType: hard + +"vite@npm:^5.0.0 || ^6.0.0 || ^7.0.0-0": + version: 7.0.4 + resolution: "vite@npm:7.0.4" + dependencies: + esbuild: ^0.25.0 + fdir: ^6.4.6 + fsevents: ~2.3.3 + picomatch: ^4.0.2 + postcss: ^8.5.6 + rollup: ^4.40.0 + tinyglobby: ^0.2.14 + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 2594edb5b0cc04ea202613d76606f4fd39fd1dee281ee2074fabb06319a7645225c40167f7957c4de9b2b436b36a1d7a43cd5dca242b699d5a1f0ab514be3e78 + languageName: node + linkType: hard + +"vitest@npm:^3.2.3": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" + dependencies: + "@types/chai": ^5.2.2 + "@vitest/expect": 3.2.4 + "@vitest/mocker": 3.2.4 + "@vitest/pretty-format": ^3.2.4 + "@vitest/runner": 3.2.4 + "@vitest/snapshot": 3.2.4 + "@vitest/spy": 3.2.4 + "@vitest/utils": 3.2.4 + chai: ^5.2.0 + debug: ^4.4.1 + expect-type: ^1.2.1 + magic-string: ^0.30.17 + pathe: ^2.0.3 + picomatch: ^4.0.2 + std-env: ^3.9.0 + tinybench: ^2.9.0 + tinyexec: ^0.3.2 + tinyglobby: ^0.2.14 + tinypool: ^1.1.1 + tinyrainbow: ^2.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0-0 + vite-node: 3.2.4 + why-is-node-running: ^2.3.0 + peerDependencies: + "@edge-runtime/vm": "*" + "@types/debug": ^4.1.12 + "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@types/debug": + optional: true + "@types/node": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: e9aa14a2c4471c2e0364d1d7032303db8754fac9e5e9ada92fca8ebf61ee78d2c5d4386bff25913940a22ea7d78ab435c8dd85785d681b23e2c489d6c17dd382 + languageName: node + linkType: hard + "walker@npm:^1.0.8": version: 1.0.8 resolution: "walker@npm:1.0.8" @@ -18505,6 +19106,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 58ebbf406e243ace97083027f0df7ff4c2108baf2595bb29317718ef207cc7a8104e41b711ff65d6fa354f25daa8756b67f2f04931a4fd6ba9d13ae8197496fb + languageName: node + linkType: hard + "widest-line@npm:^5.0.0": version: 5.0.0 resolution: "widest-line@npm:5.0.0"